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, ®_addr)) { return -EFAULT; } err = drci_wr_reg(dci_obj->usb_device, reg_addr, val); if (err < 0) return err; return count; }
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, ®_addr)) err = drci_wr_reg(usb_dev, reg_addr, val); else return -EFAULT; if (err < 0) return err; return count; }
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, ®_addr) && get_static_reg_addr(rw_regs, name, ®_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); }