diff options
Diffstat (limited to 'drivers/usb/gadget/function/u_ether_configfs.h')
-rw-r--r-- | drivers/usb/gadget/function/u_ether_configfs.h | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/drivers/usb/gadget/function/u_ether_configfs.h b/drivers/usb/gadget/function/u_ether_configfs.h index c71133de17e7..e4c3f84af4c3 100644 --- a/drivers/usb/gadget/function/u_ether_configfs.h +++ b/drivers/usb/gadget/function/u_ether_configfs.h | |||
@@ -153,4 +153,39 @@ out: \ | |||
153 | \ | 153 | \ |
154 | CONFIGFS_ATTR_RO(_f_##_opts_, ifname) | 154 | CONFIGFS_ATTR_RO(_f_##_opts_, ifname) |
155 | 155 | ||
156 | #define USB_ETHER_CONFIGFS_ITEM_ATTR_U8_RW(_f_, _n_) \ | ||
157 | static ssize_t _f_##_opts_##_n_##_show(struct config_item *item,\ | ||
158 | char *page) \ | ||
159 | { \ | ||
160 | struct f_##_f_##_opts *opts = to_f_##_f_##_opts(item); \ | ||
161 | int ret; \ | ||
162 | \ | ||
163 | mutex_lock(&opts->lock); \ | ||
164 | ret = sprintf(page, "%02x\n", opts->_n_); \ | ||
165 | mutex_unlock(&opts->lock); \ | ||
166 | \ | ||
167 | return ret; \ | ||
168 | } \ | ||
169 | \ | ||
170 | static ssize_t _f_##_opts_##_n_##_store(struct config_item *item,\ | ||
171 | const char *page, \ | ||
172 | size_t len) \ | ||
173 | { \ | ||
174 | struct f_##_f_##_opts *opts = to_f_##_f_##_opts(item); \ | ||
175 | int ret; \ | ||
176 | u8 val; \ | ||
177 | \ | ||
178 | mutex_lock(&opts->lock); \ | ||
179 | ret = sscanf(page, "%02hhx", &val); \ | ||
180 | if (ret > 0) { \ | ||
181 | opts->_n_ = val; \ | ||
182 | ret = len; \ | ||
183 | } \ | ||
184 | mutex_unlock(&opts->lock); \ | ||
185 | \ | ||
186 | return ret; \ | ||
187 | } \ | ||
188 | \ | ||
189 | CONFIGFS_ATTR(_f_##_opts_, _n_) | ||
190 | |||
156 | #endif /* __U_ETHER_CONFIGFS_H */ | 191 | #endif /* __U_ETHER_CONFIGFS_H */ |