diff options
author | Bin Meng <bmeng.cn@gmail.com> | 2017-09-18 06:40:45 -0700 |
---|---|---|
committer | Philipp Tomsich <philipp.tomsich@theobroma-systems.com> | 2017-10-02 11:20:56 +0200 |
commit | d6400804ef5e846e0692587987fe387777ef8f9d (patch) | |
tree | 3d602972331ddaa52cc70e6dde356e2f42d45afb | |
parent | a77d7635c1c167c9c5f8cb6675f32f9761247481 (diff) |
usb: hub: Clear port reset before usb_hub_port_connect_change()
During usb_hub_port_connect_change(), a port reset set feature
request is issued to the port, and later a port reset clear feature
is done to the same port before the function returns. However at
the end of usb_scan_port(), we attempt to clear port reset again
on a cached port status change variable, which should not be done.
Adjust the call to clear port reset to right before the call to
usb_hub_port_connect_change().
Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Stefan Roese <sr@denx.de>
Tested-by: Stefan Roese <sr@denx.de>
-rw-r--r-- | common/usb_hub.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/common/usb_hub.c b/common/usb_hub.c index 86a3477664..a9d21bca5e 100644 --- a/common/usb_hub.c +++ b/common/usb_hub.c @@ -489,6 +489,11 @@ static int usb_scan_port(struct usb_device_scan *usb_scan) return 0; } + if (portchange & USB_PORT_STAT_C_RESET) { + debug("port %d reset change\n", i + 1); + usb_clear_port_feature(dev, i + 1, USB_PORT_FEAT_C_RESET); + } + /* A new USB device is ready at this point */ debug("devnum=%d port=%d: USB dev found\n", dev->devnum, i + 1); @@ -543,11 +548,6 @@ static int usb_scan_port(struct usb_device_scan *usb_scan) hub->overcurrent_count[i]); } - if (portchange & USB_PORT_STAT_C_RESET) { - debug("port %d reset change\n", i + 1); - usb_clear_port_feature(dev, i + 1, USB_PORT_FEAT_C_RESET); - } - /* * We're done with this device, so let's remove this device from * scanning list |