diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2007-05-04 11:55:54 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-07-12 19:29:47 -0400 |
commit | dd4dd19e8d13e1e9bf8295bf71f132b511b130bf (patch) | |
tree | d2202761f84ab4d04ca21c28d7dbefd689e2acc2 /drivers | |
parent | 3c519b846c4d5edf7c94d1eede42445a815bf65c (diff) |
USB: Make device reset stop retrying after disconnect
This patch (as898) changes the port reset code in the hub driver. If
a connect change occurs, it is reported the same way as a disconnect
(which of course is what it really is).
It also changes usb_reset_device(), to prevent the routine from futilely
retrying the reset after a disconnect has occurred.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/usb/core/hub.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index d37ad083d5ef..f4ef7c25096e 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c | |||
@@ -1539,9 +1539,9 @@ static int hub_port_wait_reset(struct usb_hub *hub, int port1, | |||
1539 | if (!(portstatus & USB_PORT_STAT_CONNECTION)) | 1539 | if (!(portstatus & USB_PORT_STAT_CONNECTION)) |
1540 | return -ENOTCONN; | 1540 | return -ENOTCONN; |
1541 | 1541 | ||
1542 | /* bomb out completely if something weird happened */ | 1542 | /* bomb out completely if the connection bounced */ |
1543 | if ((portchange & USB_PORT_STAT_C_CONNECTION)) | 1543 | if ((portchange & USB_PORT_STAT_C_CONNECTION)) |
1544 | return -EINVAL; | 1544 | return -ENOTCONN; |
1545 | 1545 | ||
1546 | /* if we`ve finished resetting, then break out of the loop */ | 1546 | /* if we`ve finished resetting, then break out of the loop */ |
1547 | if (!(portstatus & USB_PORT_STAT_RESET) && | 1547 | if (!(portstatus & USB_PORT_STAT_RESET) && |
@@ -2974,7 +2974,7 @@ int usb_reset_device(struct usb_device *udev) | |||
2974 | * Other endpoints will be handled by re-enumeration. */ | 2974 | * Other endpoints will be handled by re-enumeration. */ |
2975 | ep0_reinit(udev); | 2975 | ep0_reinit(udev); |
2976 | ret = hub_port_init(parent_hub, udev, port1, i); | 2976 | ret = hub_port_init(parent_hub, udev, port1, i); |
2977 | if (ret >= 0) | 2977 | if (ret >= 0 || ret == -ENOTCONN || ret == -ENODEV) |
2978 | break; | 2978 | break; |
2979 | } | 2979 | } |
2980 | clear_bit(port1, parent_hub->busy_bits); | 2980 | clear_bit(port1, parent_hub->busy_bits); |