aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/host/ohci-pci.c
diff options
context:
space:
mode:
authorMichael Hanselmann <linux-kernel@hansmi.ch>2007-05-31 17:34:27 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2007-07-12 19:34:29 -0400
commitd576bb9f2769b315a795f77f0c33322a976add7a (patch)
tree56d59afa4d1e96b519e81434bd09598f76bf1fee /drivers/usb/host/ohci-pci.c
parent020363384adfb02f26c1c038a127ed3da3d5cf37 (diff)
USB: Fix NEC OHCI chip silicon bug
This patch fixes a silicon bug in some NEC OHCI chips. The bug appears at random times and is very, very difficult to reproduce. Without the following patch, Linux would shut the chip and its associated devices down. In Apple PowerBooks this leads to an unusable keyboard and mouse (SSH still working). The idea of restarting the chip is taken from public Darwin code. Signed-off-by: Michael Hanselmann <linux-kernel@hansmi.ch> Cc: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/host/ohci-pci.c')
-rw-r--r--drivers/usb/host/ohci-pci.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/usb/host/ohci-pci.c b/drivers/usb/host/ohci-pci.c
index 15013f4519ad..a5e2eb85d073 100644
--- a/drivers/usb/host/ohci-pci.c
+++ b/drivers/usb/host/ohci-pci.c
@@ -111,6 +111,18 @@ static int ohci_quirk_toshiba_scc(struct usb_hcd *hcd)
111#endif 111#endif
112} 112}
113 113
114/* Check for NEC chip and apply quirk for allegedly lost interrupts.
115 */
116static int ohci_quirk_nec(struct usb_hcd *hcd)
117{
118 struct ohci_hcd *ohci = hcd_to_ohci (hcd);
119
120 ohci->flags |= OHCI_QUIRK_NEC;
121 ohci_dbg (ohci, "enabled NEC chipset lost interrupt quirk\n");
122
123 return 0;
124}
125
114/* List of quirks for OHCI */ 126/* List of quirks for OHCI */
115static const struct pci_device_id ohci_pci_quirks[] = { 127static const struct pci_device_id ohci_pci_quirks[] = {
116 { 128 {
@@ -134,6 +146,10 @@ static const struct pci_device_id ohci_pci_quirks[] = {
134 .driver_data = (unsigned long)ohci_quirk_toshiba_scc, 146 .driver_data = (unsigned long)ohci_quirk_toshiba_scc,
135 }, 147 },
136 { 148 {
149 PCI_DEVICE(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_USB),
150 .driver_data = (unsigned long)ohci_quirk_nec,
151 },
152 {
137 /* Toshiba portege 4000 */ 153 /* Toshiba portege 4000 */
138 .vendor = PCI_VENDOR_ID_AL, 154 .vendor = PCI_VENDOR_ID_AL,
139 .device = 0x5237, 155 .device = 0x5237,