diff options
Diffstat (limited to 'drivers/usb/host/oxu210hp-hcd.c')
-rw-r--r-- | drivers/usb/host/oxu210hp-hcd.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/usb/host/oxu210hp-hcd.c b/drivers/usb/host/oxu210hp-hcd.c index 4a771f6cc822..5fbe997dc6df 100644 --- a/drivers/usb/host/oxu210hp-hcd.c +++ b/drivers/usb/host/oxu210hp-hcd.c | |||
@@ -1884,6 +1884,7 @@ static int enable_periodic(struct oxu_hcd *oxu) | |||
1884 | status = handshake(oxu, &oxu->regs->status, STS_PSS, 0, 9 * 125); | 1884 | status = handshake(oxu, &oxu->regs->status, STS_PSS, 0, 9 * 125); |
1885 | if (status != 0) { | 1885 | if (status != 0) { |
1886 | oxu_to_hcd(oxu)->state = HC_STATE_HALT; | 1886 | oxu_to_hcd(oxu)->state = HC_STATE_HALT; |
1887 | usb_hc_died(oxu_to_hcd(oxu)); | ||
1887 | return status; | 1888 | return status; |
1888 | } | 1889 | } |
1889 | 1890 | ||
@@ -1909,6 +1910,7 @@ static int disable_periodic(struct oxu_hcd *oxu) | |||
1909 | status = handshake(oxu, &oxu->regs->status, STS_PSS, STS_PSS, 9 * 125); | 1910 | status = handshake(oxu, &oxu->regs->status, STS_PSS, STS_PSS, 9 * 125); |
1910 | if (status != 0) { | 1911 | if (status != 0) { |
1911 | oxu_to_hcd(oxu)->state = HC_STATE_HALT; | 1912 | oxu_to_hcd(oxu)->state = HC_STATE_HALT; |
1913 | usb_hc_died(oxu_to_hcd(oxu)); | ||
1912 | return status; | 1914 | return status; |
1913 | } | 1915 | } |
1914 | 1916 | ||
@@ -2449,8 +2451,9 @@ static irqreturn_t oxu210_hcd_irq(struct usb_hcd *hcd) | |||
2449 | goto dead; | 2451 | goto dead; |
2450 | } | 2452 | } |
2451 | 2453 | ||
2454 | /* Shared IRQ? */ | ||
2452 | status &= INTR_MASK; | 2455 | status &= INTR_MASK; |
2453 | if (!status) { /* irq sharing? */ | 2456 | if (!status || unlikely(hcd->state == HC_STATE_HALT)) { |
2454 | spin_unlock(&oxu->lock); | 2457 | spin_unlock(&oxu->lock); |
2455 | return IRQ_NONE; | 2458 | return IRQ_NONE; |
2456 | } | 2459 | } |
@@ -2516,6 +2519,7 @@ static irqreturn_t oxu210_hcd_irq(struct usb_hcd *hcd) | |||
2516 | dead: | 2519 | dead: |
2517 | ehci_reset(oxu); | 2520 | ehci_reset(oxu); |
2518 | writel(0, &oxu->regs->configured_flag); | 2521 | writel(0, &oxu->regs->configured_flag); |
2522 | usb_hc_died(hcd); | ||
2519 | /* generic layer kills/unlinks all urbs, then | 2523 | /* generic layer kills/unlinks all urbs, then |
2520 | * uses oxu_stop to clean up the rest | 2524 | * uses oxu_stop to clean up the rest |
2521 | */ | 2525 | */ |