This field is used by the Gadget drivers to specify the maximum speed they support, meaning: the maximum speed they can provide descriptors for. The driver speed will be set in consideration of this value. Signed-off-by: Tatyana Brokhman <tlinder@xxxxxxxxxxxxxx> --- drivers/usb/gadget/audio.c | 5 +++++ drivers/usb/gadget/cdc2.c | 5 +++++ drivers/usb/gadget/composite.c | 2 ++ drivers/usb/gadget/ether.c | 5 +++++ drivers/usb/gadget/g_ffs.c | 5 +++++ drivers/usb/gadget/hid.c | 5 +++++ drivers/usb/gadget/mass_storage.c | 5 +++++ drivers/usb/gadget/multi.c | 5 +++++ drivers/usb/gadget/ncm.c | 5 +++++ drivers/usb/gadget/nokia.c | 5 +++++ drivers/usb/gadget/serial.c | 5 +++++ drivers/usb/gadget/webcam.c | 5 +++++ drivers/usb/gadget/zero.c | 5 +++++ include/linux/usb/composite.h | 2 ++ 14 files changed, 64 insertions(+), 0 deletions(-) diff --git a/drivers/usb/gadget/audio.c b/drivers/usb/gadget/audio.c index 93b999e..0d7f0ae 100644 --- a/drivers/usb/gadget/audio.c +++ b/drivers/usb/gadget/audio.c @@ -165,6 +165,11 @@ static struct usb_composite_driver audio_driver = { .name = "g_audio", .dev = &device_desc, .strings = audio_strings, +#ifdef CONFIG_USB_GADGET_DUALSPEED + .max_speed = USB_SPEED_HIGH, +#else + .max_speed = USB_SPEED_FULL, +#endif /* CONFIG_USB_GADGET_DUALSPEED */ .unbind = __exit_p(audio_unbind), }; diff --git a/drivers/usb/gadget/cdc2.c b/drivers/usb/gadget/cdc2.c index 2720ab0..6dda4ee 100644 --- a/drivers/usb/gadget/cdc2.c +++ b/drivers/usb/gadget/cdc2.c @@ -244,6 +244,11 @@ static struct usb_composite_driver cdc_driver = { .name = "g_cdc", .dev = &device_desc, .strings = dev_strings, +#ifdef CONFIG_USB_GADGET_DUALSPEED + .max_speed = USB_SPEED_HIGH, +#else + .max_speed = USB_SPEED_FULL, +#endif /* CONFIG_USB_GADGET_DUALSPEED */ .unbind = __exit_p(cdc_unbind), }; diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c index 1c6bd66..15e9bc9 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c @@ -1378,6 +1378,8 @@ int usb_composite_probe(struct usb_composite_driver *driver, driver->iProduct = driver->name; composite_driver.function = (char *) driver->name; composite_driver.driver.name = driver->name; + composite_driver.speed = min((u8)composite_driver.speed, + (u8)driver->max_speed); composite = driver; composite_gadget_bind = bind; diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c index 1690c9d..fa7c5ab 100644 --- a/drivers/usb/gadget/ether.c +++ b/drivers/usb/gadget/ether.c @@ -401,6 +401,11 @@ static struct usb_composite_driver eth_driver = { .name = "g_ether", .dev = &device_desc, .strings = dev_strings, +#ifdef CONFIG_USB_GADGET_DUALSPEED + .max_speed = USB_SPEED_HIGH, +#else + .max_speed = USB_SPEED_FULL, +#endif /* CONFIG_USB_GADGET_DUALSPEED */ .unbind = __exit_p(eth_unbind), }; diff --git a/drivers/usb/gadget/g_ffs.c b/drivers/usb/gadget/g_ffs.c index ebf6970..7b272c6 100644 --- a/drivers/usb/gadget/g_ffs.c +++ b/drivers/usb/gadget/g_ffs.c @@ -162,6 +162,11 @@ static struct usb_composite_driver gfs_driver = { .name = DRIVER_NAME, .dev = &gfs_dev_desc, .strings = gfs_dev_strings, +#ifdef CONFIG_USB_GADGET_DUALSPEED + .max_speed = USB_SPEED_HIGH, +#else + .max_speed = USB_SPEED_FULL, +#endif /* CONFIG_USB_GADGET_DUALSPEED */ .unbind = gfs_unbind, .iProduct = DRIVER_DESC, }; diff --git a/drivers/usb/gadget/hid.c b/drivers/usb/gadget/hid.c index 2523e54..c6e133f 100644 --- a/drivers/usb/gadget/hid.c +++ b/drivers/usb/gadget/hid.c @@ -255,6 +255,11 @@ static struct usb_composite_driver hidg_driver = { .name = "g_hid", .dev = &device_desc, .strings = dev_strings, +#ifdef CONFIG_USB_GADGET_DUALSPEED + .max_speed = USB_SPEED_HIGH, +#else + .max_speed = USB_SPEED_FULL, +#endif /* CONFIG_USB_GADGET_DUALSPEED */ .unbind = __exit_p(hid_unbind), }; diff --git a/drivers/usb/gadget/mass_storage.c b/drivers/usb/gadget/mass_storage.c index 0182242..b399195 100644 --- a/drivers/usb/gadget/mass_storage.c +++ b/drivers/usb/gadget/mass_storage.c @@ -169,6 +169,11 @@ static struct usb_composite_driver msg_driver = { .name = "g_mass_storage", .dev = &msg_device_desc, .iProduct = DRIVER_DESC, +#ifdef CONFIG_USB_GADGET_DUALSPEED + .max_speed = USB_SPEED_HIGH, +#else + .max_speed = USB_SPEED_FULL, +#endif /* CONFIG_USB_GADGET_DUALSPEED */ .needs_serial = 1, }; diff --git a/drivers/usb/gadget/multi.c b/drivers/usb/gadget/multi.c index d9feced..b4a000e 100644 --- a/drivers/usb/gadget/multi.c +++ b/drivers/usb/gadget/multi.c @@ -351,6 +351,11 @@ static struct usb_composite_driver multi_driver = { .name = "g_multi", .dev = &device_desc, .strings = dev_strings, +#ifdef CONFIG_USB_GADGET_DUALSPEED + .max_speed = USB_SPEED_HIGH, +#else + .max_speed = USB_SPEED_FULL, +#endif /* CONFIG_USB_GADGET_DUALSPEED */ .unbind = __exit_p(multi_unbind), .iProduct = DRIVER_DESC, .needs_serial = 1, diff --git a/drivers/usb/gadget/ncm.c b/drivers/usb/gadget/ncm.c index 99c179a..8665a0e 100644 --- a/drivers/usb/gadget/ncm.c +++ b/drivers/usb/gadget/ncm.c @@ -228,6 +228,11 @@ static struct usb_composite_driver ncm_driver = { .name = "g_ncm", .dev = &device_desc, .strings = dev_strings, +#ifdef CONFIG_USB_GADGET_DUALSPEED + .max_speed = USB_SPEED_HIGH, +#else + .max_speed = USB_SPEED_FULL, +#endif /* CONFIG_USB_GADGET_DUALSPEED */ .unbind = __exit_p(gncm_unbind), }; diff --git a/drivers/usb/gadget/nokia.c b/drivers/usb/gadget/nokia.c index 55ca63a..192d6dd 100644 --- a/drivers/usb/gadget/nokia.c +++ b/drivers/usb/gadget/nokia.c @@ -241,6 +241,11 @@ static struct usb_composite_driver nokia_driver = { .name = "g_nokia", .dev = &device_desc, .strings = dev_strings, +#ifdef CONFIG_USB_GADGET_DUALSPEED + .max_speed = USB_SPEED_HIGH, +#else + .max_speed = USB_SPEED_FULL, +#endif /* CONFIG_USB_GADGET_DUALSPEED */ .unbind = __exit_p(nokia_unbind), }; diff --git a/drivers/usb/gadget/serial.c b/drivers/usb/gadget/serial.c index 1ac57a9..645b4f5 100644 --- a/drivers/usb/gadget/serial.c +++ b/drivers/usb/gadget/serial.c @@ -242,6 +242,11 @@ static struct usb_composite_driver gserial_driver = { .name = "g_serial", .dev = &device_desc, .strings = dev_strings, +#ifdef CONFIG_USB_GADGET_DUALSPEED + .max_speed = USB_SPEED_HIGH, +#else + .max_speed = USB_SPEED_FULL, +#endif /* CONFIG_USB_GADGET_DUALSPEED */ }; static int __init init(void) diff --git a/drivers/usb/gadget/webcam.c b/drivers/usb/gadget/webcam.c index a5a0fdb..4533704 100644 --- a/drivers/usb/gadget/webcam.c +++ b/drivers/usb/gadget/webcam.c @@ -373,6 +373,11 @@ static struct usb_composite_driver webcam_driver = { .name = "g_webcam", .dev = &webcam_device_descriptor, .strings = webcam_device_strings, +#ifdef CONFIG_USB_GADGET_DUALSPEED + .max_speed = USB_SPEED_HIGH, +#else + .max_speed = USB_SPEED_FULL, +#endif /* CONFIG_USB_GADGET_DUALSPEED */ .unbind = webcam_unbind, }; diff --git a/drivers/usb/gadget/zero.c b/drivers/usb/gadget/zero.c index 6d16db9..30abd95 100644 --- a/drivers/usb/gadget/zero.c +++ b/drivers/usb/gadget/zero.c @@ -340,6 +340,11 @@ static struct usb_composite_driver zero_driver = { .name = "zero", .dev = &device_desc, .strings = dev_strings, +#ifdef CONFIG_USB_GADGET_DUALSPEED + .max_speed = USB_SPEED_HIGH, +#else + .max_speed = USB_SPEED_FULL, +#endif /* CONFIG_USB_GADGET_DUALSPEED */ .unbind = zero_unbind, .suspend = zero_suspend, .resume = zero_resume, diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h index 99830d6..a3e72df 100644 --- a/include/linux/usb/composite.h +++ b/include/linux/usb/composite.h @@ -240,6 +240,7 @@ int usb_add_config(struct usb_composite_dev *, * identifiers. * @strings: tables of strings, keyed by identifiers assigned during bind() * and language IDs provided in control requests + * @max_speed: Highest speed the driver supports. * @needs_serial: set to 1 if the gadget needs userspace to provide * a serial number. If one is not provided, warning will be printed. * @unbind: Reverses bind; called as a side effect of unregistering @@ -267,6 +268,7 @@ struct usb_composite_driver { const char *iManufacturer; const struct usb_device_descriptor *dev; struct usb_gadget_strings **strings; + enum usb_device_speed max_speed; unsigned needs_serial:1; int (*unbind)(struct usb_composite_dev *); -- 1.7.3.3 -- Sent by an employee of the Qualcomm Innovation Center, Inc. The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum. -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html