Beispiel #1
0
static ssize_t store_value(struct most_dci_obj *dci_obj,
			   struct most_dci_attribute *attr,
			   const char *buf, size_t count)
{
	u16 val;
	u16 reg_addr;
	const char *name = attr->attr.name;
	int err = kstrtou16(buf, 16, &val);

	if (err)
		return err;

	if (!strcmp(name, "arb_address")) {
		dci_obj->reg_addr = val;
		return count;
	}

	if (!strcmp(name, "arb_value")) {
		reg_addr = dci_obj->reg_addr;
	} else if (!strcmp(name, "sync_ep")) {
		u16 ep = val;

		reg_addr = DRCI_REG_BASE + DRCI_COMMAND + ep * 16;
		val = 1;
	} else if (get_static_reg_addr(ro_regs, name, &reg_addr)) {
		return -EFAULT;
	}

	err = drci_wr_reg(dci_obj->usb_device, reg_addr, val);
	if (err < 0)
		return err;

	return count;
}
Beispiel #2
0
static ssize_t value_store(struct device *dev, struct device_attribute *attr,
			   const char *buf, size_t count)
{
	u16 val;
	u16 reg_addr;
	const char *name = attr->attr.name;
	struct most_dci_obj *dci_obj = to_dci_obj(dev);
	struct usb_device *usb_dev = dci_obj->usb_device;
	int err = kstrtou16(buf, 16, &val);

	if (err)
		return err;

	if (!strcmp(name, "arb_address")) {
		dci_obj->reg_addr = val;
		return count;
	}

	if (!strcmp(name, "arb_value"))
		err = drci_wr_reg(usb_dev, dci_obj->reg_addr, val);
	else if (!strcmp(name, "sync_ep"))
		err = start_sync_ep(usb_dev, val);
	else if (!get_static_reg_addr(rw_regs, name, &reg_addr))
		err = drci_wr_reg(usb_dev, reg_addr, val);
	else
		return -EFAULT;

	if (err < 0)
		return err;

	return count;
}
Beispiel #3
0
static ssize_t show_value(struct most_dci_obj *dci_obj,
			  struct most_dci_attribute *attr, char *buf)
{
	const char *name = attr->attr.name;
	u16 val;
	u16 reg_addr;
	int err;

	if (!strcmp(name, "arb_address"))
		return snprintf(buf, PAGE_SIZE, "%04x\n", dci_obj->reg_addr);

	if (!strcmp(name, "arb_value"))
		reg_addr = dci_obj->reg_addr;
	else if (get_static_reg_addr(ro_regs, name, &reg_addr) &&
		 get_static_reg_addr(rw_regs, name, &reg_addr))
		return -EFAULT;

	err = drci_rd_reg(dci_obj->usb_device, reg_addr, &val);
	if (err < 0)
		return err;

	return snprintf(buf, PAGE_SIZE, "%04x\n", val);
}