diff options
Diffstat (limited to 'drivers/usb/host/uhci-hub.c')
-rw-r--r-- | drivers/usb/host/uhci-hub.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/usb/host/uhci-hub.c b/drivers/usb/host/uhci-hub.c index f8347f1a10b6..bacc25c53ba3 100644 --- a/drivers/usb/host/uhci-hub.c +++ b/drivers/usb/host/uhci-hub.c | |||
@@ -52,10 +52,20 @@ static int any_ports_active(struct uhci_hcd *uhci) | |||
52 | static inline int get_hub_status_data(struct uhci_hcd *uhci, char *buf) | 52 | static inline int get_hub_status_data(struct uhci_hcd *uhci, char *buf) |
53 | { | 53 | { |
54 | int port; | 54 | int port; |
55 | int mask = RWC_BITS; | ||
56 | |||
57 | /* Some boards (both VIA and Intel apparently) report bogus | ||
58 | * overcurrent indications, causing massive log spam unless | ||
59 | * we completely ignore them. This doesn't seem to be a problem | ||
60 | * with the chipset so much as with the way it is connected on | ||
61 | * the motherboard; if the overcurrent input is left to float | ||
62 | * then it may constantly register false positives. */ | ||
63 | if (ignore_oc) | ||
64 | mask &= ~USBPORTSC_OCC; | ||
55 | 65 | ||
56 | *buf = 0; | 66 | *buf = 0; |
57 | for (port = 0; port < uhci->rh_numports; ++port) { | 67 | for (port = 0; port < uhci->rh_numports; ++port) { |
58 | if ((inw(uhci->io_addr + USBPORTSC1 + port * 2) & RWC_BITS) || | 68 | if ((inw(uhci->io_addr + USBPORTSC1 + port * 2) & mask) || |
59 | test_bit(port, &uhci->port_c_suspend)) | 69 | test_bit(port, &uhci->port_c_suspend)) |
60 | *buf |= (1 << (port + 1)); | 70 | *buf |= (1 << (port + 1)); |
61 | } | 71 | } |
@@ -263,7 +273,7 @@ static int uhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, | |||
263 | wPortChange |= USB_PORT_STAT_C_CONNECTION; | 273 | wPortChange |= USB_PORT_STAT_C_CONNECTION; |
264 | if (status & USBPORTSC_PEC) | 274 | if (status & USBPORTSC_PEC) |
265 | wPortChange |= USB_PORT_STAT_C_ENABLE; | 275 | wPortChange |= USB_PORT_STAT_C_ENABLE; |
266 | if (status & USBPORTSC_OCC) | 276 | if ((status & USBPORTSC_OCC) && !ignore_oc) |
267 | wPortChange |= USB_PORT_STAT_C_OVERCURRENT; | 277 | wPortChange |= USB_PORT_STAT_C_OVERCURRENT; |
268 | 278 | ||
269 | if (test_bit(port, &uhci->port_c_suspend)) { | 279 | if (test_bit(port, &uhci->port_c_suspend)) { |