diff options
Diffstat (limited to 'drivers/usb/host/ohci-hub.c')
-rw-r--r-- | drivers/usb/host/ohci-hub.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/usb/host/ohci-hub.c b/drivers/usb/host/ohci-hub.c index b56739221d11..439beb784f3e 100644 --- a/drivers/usb/host/ohci-hub.c +++ b/drivers/usb/host/ohci-hub.c | |||
@@ -483,6 +483,13 @@ ohci_hub_status_data (struct usb_hcd *hcd, char *buf) | |||
483 | length++; | 483 | length++; |
484 | } | 484 | } |
485 | 485 | ||
486 | /* Some broken controllers never turn off RHCS in the interrupt | ||
487 | * status register. For their sake we won't re-enable RHSC | ||
488 | * interrupts if the flag is already set. | ||
489 | */ | ||
490 | if (ohci_readl(ohci, &ohci->regs->intrstatus) & OHCI_INTR_RHSC) | ||
491 | changed = 1; | ||
492 | |||
486 | /* look at each port */ | 493 | /* look at each port */ |
487 | for (i = 0; i < ohci->num_ports; i++) { | 494 | for (i = 0; i < ohci->num_ports; i++) { |
488 | u32 status = roothub_portstatus (ohci, i); | 495 | u32 status = roothub_portstatus (ohci, i); |
@@ -572,8 +579,6 @@ static int ohci_start_port_reset (struct usb_hcd *hcd, unsigned port) | |||
572 | return 0; | 579 | return 0; |
573 | } | 580 | } |
574 | 581 | ||
575 | static void start_hnp(struct ohci_hcd *ohci); | ||
576 | |||
577 | #else | 582 | #else |
578 | 583 | ||
579 | #define ohci_start_port_reset NULL | 584 | #define ohci_start_port_reset NULL |
@@ -760,7 +765,7 @@ static int ohci_hub_control ( | |||
760 | #ifdef CONFIG_USB_OTG | 765 | #ifdef CONFIG_USB_OTG |
761 | if (hcd->self.otg_port == (wIndex + 1) | 766 | if (hcd->self.otg_port == (wIndex + 1) |
762 | && hcd->self.b_hnp_enable) | 767 | && hcd->self.b_hnp_enable) |
763 | start_hnp(ohci); | 768 | ohci->start_hnp(ohci); |
764 | else | 769 | else |
765 | #endif | 770 | #endif |
766 | ohci_writel (ohci, RH_PS_PSS, | 771 | ohci_writel (ohci, RH_PS_PSS, |