diff options
Diffstat (limited to 'drivers/usb/core/hub.c')
-rw-r--r-- | drivers/usb/core/hub.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 512d2d57d41e..4cfe32a16c37 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c | |||
@@ -2073,6 +2073,8 @@ int usb_port_resume(struct usb_device *udev) | |||
2073 | } | 2073 | } |
2074 | 2074 | ||
2075 | clear_bit(port1, hub->busy_bits); | 2075 | clear_bit(port1, hub->busy_bits); |
2076 | if (!hub->hdev->parent && !hub->busy_bits[0]) | ||
2077 | usb_enable_root_hub_irq(hub->hdev->bus); | ||
2076 | 2078 | ||
2077 | if (status == 0) | 2079 | if (status == 0) |
2078 | status = finish_port_resume(udev); | 2080 | status = finish_port_resume(udev); |
@@ -3002,6 +3004,11 @@ static void hub_events(void) | |||
3002 | 3004 | ||
3003 | hub->activating = 0; | 3005 | hub->activating = 0; |
3004 | 3006 | ||
3007 | /* If this is a root hub, tell the HCD it's okay to | ||
3008 | * re-enable port-change interrupts now. */ | ||
3009 | if (!hdev->parent && !hub->busy_bits[0]) | ||
3010 | usb_enable_root_hub_irq(hdev->bus); | ||
3011 | |||
3005 | loop_autopm: | 3012 | loop_autopm: |
3006 | /* Allow autosuspend if we're not going to run again */ | 3013 | /* Allow autosuspend if we're not going to run again */ |
3007 | if (list_empty(&hub->event_list)) | 3014 | if (list_empty(&hub->event_list)) |
@@ -3227,6 +3234,8 @@ int usb_reset_device(struct usb_device *udev) | |||
3227 | break; | 3234 | break; |
3228 | } | 3235 | } |
3229 | clear_bit(port1, parent_hub->busy_bits); | 3236 | clear_bit(port1, parent_hub->busy_bits); |
3237 | if (!parent_hdev->parent && !parent_hub->busy_bits[0]) | ||
3238 | usb_enable_root_hub_irq(parent_hdev->bus); | ||
3230 | 3239 | ||
3231 | if (ret < 0) | 3240 | if (ret < 0) |
3232 | goto re_enumerate; | 3241 | goto re_enumerate; |