Merge "usb: hub: Update handling connect status/change in usb_scan_port()"

This commit is contained in:
Linux Build Service Account 2022-04-12 08:37:47 -07:00 committed by Gerrit - the friendly Code Review server
commit edda8cb4fc

View file

@ -469,8 +469,15 @@ static int usb_scan_port(struct usb_device_scan *usb_scan)
portchange = le16_to_cpu(portsts->wPortChange);
debug("Port %d Status %X Change %X\n", i + 1, portstatus, portchange);
/* No connection change happened, wait a bit more. */
if (!(portchange & USB_PORT_STAT_C_CONNECTION)) {
/*
* No connection change happened, wait a bit more.
*
* For some situation, the hub reports no connection change but a
* device is connected to the port (eg: CCS bit is set but CSC is not
* in the PORTSC register of a root hub), ignore such case.
*/
if (!(portchange & USB_PORT_STAT_C_CONNECTION) &&
!(portstatus & USB_PORT_STAT_CONNECTION)) {
if (get_timer(0) >= hub->connect_timeout) {
debug("devnum=%d port=%d: timeout\n",
dev->devnum, i + 1);
@ -482,10 +489,6 @@ static int usb_scan_port(struct usb_device_scan *usb_scan)
return 0;
}
/* Test if the connection came up, and if not exit */
if (!(portstatus & USB_PORT_STAT_CONNECTION))
return 0;
/* A new USB device is ready at this point */
debug("devnum=%d port=%d: USB dev found\n", dev->devnum, i + 1);