summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorLi Jun <jun.li@nxp.com>2018-12-17 09:37:33 +0800
committerLi Jun <jun.li@nxp.com>2018-12-18 14:38:49 +0800
commit86247b0c88380cc5982b57f094f9b74fec01de31 (patch)
treebe10162a4d9cbd3a0cabcf152b3c9e1b09789142 /drivers
parent1ea5ab027eba20d2f13760cdb21c51c04e8d2eb4 (diff)
MLK-20493-7 usb: composite: force gadget to be USB2 for HS only function
If one of functions is not super speed capable, we need force the udc to be high speed, this is an equivalent implementation of usb_gadget_udc_set_speed() in kernel but simple, which set the gadget max_speed to be high speed, so afterwards when start gadget duc can set the HW to be USB 2.0 mode. Reviewed-by: Ye Li <ye.li@nxp.com> Reviewed-by: Peter Chen <peter.chen@nxp.com> Tested-by: faqiang.zhu <faqiang.zhu@nxp.com> Signed-off-by: Li Jun <jun.li@nxp.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/usb/gadget/composite.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index 5a6d98c65b..5efb15bd9d 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -594,6 +594,19 @@ int usb_add_config(struct usb_composite_dev *cdev,
}
}
+ /*
+ * If one function of config is not super speed capable,
+ * force the gadget to be high speed so controller driver
+ * can init HW to be USB 2.0
+ */
+ if (gadget_is_superspeed(cdev->gadget)) {
+ list_for_each_entry(f, &config->functions, list) {
+ if (!f->ss_descriptors)
+ cdev->gadget->max_speed =
+ USB_SPEED_HIGH;
+ }
+ }
+
usb_ep_autoconfig_reset(cdev->gadget);
os_desc_config = config;