Loading Documentation/ABI/testing/configfs-usb-gadget +4 −0 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,10 @@ Description: write UDC's name found in /sys/class/udc/* write UDC's name found in /sys/class/udc/* to bind a gadget, empty string "" to unbind. to bind a gadget, empty string "" to unbind. max_speed - maximum speed the driver supports. Valid names are super-speed-plus, super-speed, high-speed, full-speed, and low-speed. bDeviceClass - USB device class code bDeviceClass - USB device class code bDeviceSubClass - USB device subclass code bDeviceSubClass - USB device subclass code bDeviceProtocol - USB device protocol code bDeviceProtocol - USB device protocol code Loading drivers/usb/gadget/configfs.c +43 −0 Original line number Original line Diff line number Diff line Loading @@ -325,6 +325,47 @@ static ssize_t gadget_dev_desc_UDC_store(struct config_item *item, return ret; return ret; } } static ssize_t gadget_dev_desc_max_speed_show(struct config_item *item, char *page) { enum usb_device_speed speed = to_gadget_info(item)->composite.max_speed; return scnprintf(page, PAGE_SIZE, "%s\n", usb_speed_string(speed)); } static ssize_t gadget_dev_desc_max_speed_store(struct config_item *item, const char *page, size_t len) { struct gadget_info *gi = to_gadget_info(item); mutex_lock(&gi->lock); /* Prevent changing of max_speed after the driver is binded */ if (gi->composite.gadget_driver.udc_name) goto err; if (strncmp(page, "super-speed-plus", 16) == 0) gi->composite.max_speed = USB_SPEED_SUPER_PLUS; else if (strncmp(page, "super-speed", 11) == 0) gi->composite.max_speed = USB_SPEED_SUPER; else if (strncmp(page, "high-speed", 10) == 0) gi->composite.max_speed = USB_SPEED_HIGH; else if (strncmp(page, "full-speed", 10) == 0) gi->composite.max_speed = USB_SPEED_FULL; else if (strncmp(page, "low-speed", 9) == 0) gi->composite.max_speed = USB_SPEED_LOW; else goto err; gi->composite.gadget_driver.max_speed = gi->composite.max_speed; mutex_unlock(&gi->lock); return len; err: mutex_unlock(&gi->lock); return -EINVAL; } CONFIGFS_ATTR(gadget_dev_desc_, bDeviceClass); CONFIGFS_ATTR(gadget_dev_desc_, bDeviceClass); CONFIGFS_ATTR(gadget_dev_desc_, bDeviceSubClass); CONFIGFS_ATTR(gadget_dev_desc_, bDeviceSubClass); CONFIGFS_ATTR(gadget_dev_desc_, bDeviceProtocol); CONFIGFS_ATTR(gadget_dev_desc_, bDeviceProtocol); Loading @@ -334,6 +375,7 @@ CONFIGFS_ATTR(gadget_dev_desc_, idProduct); CONFIGFS_ATTR(gadget_dev_desc_, bcdDevice); CONFIGFS_ATTR(gadget_dev_desc_, bcdDevice); CONFIGFS_ATTR(gadget_dev_desc_, bcdUSB); CONFIGFS_ATTR(gadget_dev_desc_, bcdUSB); CONFIGFS_ATTR(gadget_dev_desc_, UDC); CONFIGFS_ATTR(gadget_dev_desc_, UDC); CONFIGFS_ATTR(gadget_dev_desc_, max_speed); static struct configfs_attribute *gadget_root_attrs[] = { static struct configfs_attribute *gadget_root_attrs[] = { &gadget_dev_desc_attr_bDeviceClass, &gadget_dev_desc_attr_bDeviceClass, Loading @@ -345,6 +387,7 @@ static struct configfs_attribute *gadget_root_attrs[] = { &gadget_dev_desc_attr_bcdDevice, &gadget_dev_desc_attr_bcdDevice, &gadget_dev_desc_attr_bcdUSB, &gadget_dev_desc_attr_bcdUSB, &gadget_dev_desc_attr_UDC, &gadget_dev_desc_attr_UDC, &gadget_dev_desc_attr_max_speed, NULL, NULL, }; }; Loading Loading
Documentation/ABI/testing/configfs-usb-gadget +4 −0 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,10 @@ Description: write UDC's name found in /sys/class/udc/* write UDC's name found in /sys/class/udc/* to bind a gadget, empty string "" to unbind. to bind a gadget, empty string "" to unbind. max_speed - maximum speed the driver supports. Valid names are super-speed-plus, super-speed, high-speed, full-speed, and low-speed. bDeviceClass - USB device class code bDeviceClass - USB device class code bDeviceSubClass - USB device subclass code bDeviceSubClass - USB device subclass code bDeviceProtocol - USB device protocol code bDeviceProtocol - USB device protocol code Loading
drivers/usb/gadget/configfs.c +43 −0 Original line number Original line Diff line number Diff line Loading @@ -325,6 +325,47 @@ static ssize_t gadget_dev_desc_UDC_store(struct config_item *item, return ret; return ret; } } static ssize_t gadget_dev_desc_max_speed_show(struct config_item *item, char *page) { enum usb_device_speed speed = to_gadget_info(item)->composite.max_speed; return scnprintf(page, PAGE_SIZE, "%s\n", usb_speed_string(speed)); } static ssize_t gadget_dev_desc_max_speed_store(struct config_item *item, const char *page, size_t len) { struct gadget_info *gi = to_gadget_info(item); mutex_lock(&gi->lock); /* Prevent changing of max_speed after the driver is binded */ if (gi->composite.gadget_driver.udc_name) goto err; if (strncmp(page, "super-speed-plus", 16) == 0) gi->composite.max_speed = USB_SPEED_SUPER_PLUS; else if (strncmp(page, "super-speed", 11) == 0) gi->composite.max_speed = USB_SPEED_SUPER; else if (strncmp(page, "high-speed", 10) == 0) gi->composite.max_speed = USB_SPEED_HIGH; else if (strncmp(page, "full-speed", 10) == 0) gi->composite.max_speed = USB_SPEED_FULL; else if (strncmp(page, "low-speed", 9) == 0) gi->composite.max_speed = USB_SPEED_LOW; else goto err; gi->composite.gadget_driver.max_speed = gi->composite.max_speed; mutex_unlock(&gi->lock); return len; err: mutex_unlock(&gi->lock); return -EINVAL; } CONFIGFS_ATTR(gadget_dev_desc_, bDeviceClass); CONFIGFS_ATTR(gadget_dev_desc_, bDeviceClass); CONFIGFS_ATTR(gadget_dev_desc_, bDeviceSubClass); CONFIGFS_ATTR(gadget_dev_desc_, bDeviceSubClass); CONFIGFS_ATTR(gadget_dev_desc_, bDeviceProtocol); CONFIGFS_ATTR(gadget_dev_desc_, bDeviceProtocol); Loading @@ -334,6 +375,7 @@ CONFIGFS_ATTR(gadget_dev_desc_, idProduct); CONFIGFS_ATTR(gadget_dev_desc_, bcdDevice); CONFIGFS_ATTR(gadget_dev_desc_, bcdDevice); CONFIGFS_ATTR(gadget_dev_desc_, bcdUSB); CONFIGFS_ATTR(gadget_dev_desc_, bcdUSB); CONFIGFS_ATTR(gadget_dev_desc_, UDC); CONFIGFS_ATTR(gadget_dev_desc_, UDC); CONFIGFS_ATTR(gadget_dev_desc_, max_speed); static struct configfs_attribute *gadget_root_attrs[] = { static struct configfs_attribute *gadget_root_attrs[] = { &gadget_dev_desc_attr_bDeviceClass, &gadget_dev_desc_attr_bDeviceClass, Loading @@ -345,6 +387,7 @@ static struct configfs_attribute *gadget_root_attrs[] = { &gadget_dev_desc_attr_bcdDevice, &gadget_dev_desc_attr_bcdDevice, &gadget_dev_desc_attr_bcdUSB, &gadget_dev_desc_attr_bcdUSB, &gadget_dev_desc_attr_UDC, &gadget_dev_desc_attr_UDC, &gadget_dev_desc_attr_max_speed, NULL, NULL, }; }; Loading