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>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
This commit is contained in:
Li Jun 2021-01-25 21:43:57 +08:00 committed by Marek Vasut
parent 429e2f299f
commit 4df50f89f5
1 changed files with 13 additions and 0 deletions

View File

@ -532,6 +532,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;