|
|
@ -209,9 +209,22 @@ int hub_port_reset(struct usb_device *dev, int port, |
|
|
|
(portstatus & USB_PORT_STAT_CONNECTION) ? 1 : 0, |
|
|
|
(portstatus & USB_PORT_STAT_CONNECTION) ? 1 : 0, |
|
|
|
(portstatus & USB_PORT_STAT_ENABLE) ? 1 : 0); |
|
|
|
(portstatus & USB_PORT_STAT_ENABLE) ? 1 : 0); |
|
|
|
|
|
|
|
|
|
|
|
if ((portchange & USB_PORT_STAT_C_CONNECTION) || |
|
|
|
/*
|
|
|
|
!(portstatus & USB_PORT_STAT_CONNECTION)) |
|
|
|
* Perhaps we should check for the following here: |
|
|
|
return -1; |
|
|
|
* - C_CONNECTION hasn't been set. |
|
|
|
|
|
|
|
* - CONNECTION is still set. |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* Doing so would ensure that the device is still connected |
|
|
|
|
|
|
|
* to the bus, and hasn't been unplugged or replaced while the |
|
|
|
|
|
|
|
* USB bus reset was going on. |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* However, if we do that, then (at least) a San Disk Ultra |
|
|
|
|
|
|
|
* USB 3.0 16GB device fails to reset on (at least) an NVIDIA |
|
|
|
|
|
|
|
* Tegra Jetson TK1 board. For some reason, the device appears |
|
|
|
|
|
|
|
* to briefly drop off the bus when this second bus reset is |
|
|
|
|
|
|
|
* executed, yet if we retry this loop, it'll eventually come |
|
|
|
|
|
|
|
* back after another reset or two. |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
if (portstatus & USB_PORT_STAT_ENABLE) |
|
|
|
if (portstatus & USB_PORT_STAT_ENABLE) |
|
|
|
break; |
|
|
|
break; |
|
|
|