diff options
-rw-r--r-- | drivers/usb/host/ohci-pci.c | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/drivers/usb/host/ohci-pci.c b/drivers/usb/host/ohci-pci.c index b331ac4d0d62..321f35150b81 100644 --- a/drivers/usb/host/ohci-pci.c +++ b/drivers/usb/host/ohci-pci.c | |||
@@ -20,10 +20,16 @@ | |||
20 | 20 | ||
21 | /*-------------------------------------------------------------------------*/ | 21 | /*-------------------------------------------------------------------------*/ |
22 | 22 | ||
23 | static int broken_suspend(struct usb_hcd *hcd) | ||
24 | { | ||
25 | device_init_wakeup(&hcd->self.root_hub->dev, 0); | ||
26 | return 0; | ||
27 | } | ||
28 | |||
23 | /* AMD 756, for most chips (early revs), corrupts register | 29 | /* AMD 756, for most chips (early revs), corrupts register |
24 | * values on read ... so enable the vendor workaround. | 30 | * values on read ... so enable the vendor workaround. |
25 | */ | 31 | */ |
26 | static int __devinit ohci_quirk_amd756(struct usb_hcd *hcd) | 32 | static int ohci_quirk_amd756(struct usb_hcd *hcd) |
27 | { | 33 | { |
28 | struct ohci_hcd *ohci = hcd_to_ohci (hcd); | 34 | struct ohci_hcd *ohci = hcd_to_ohci (hcd); |
29 | 35 | ||
@@ -31,16 +37,14 @@ static int __devinit ohci_quirk_amd756(struct usb_hcd *hcd) | |||
31 | ohci_dbg (ohci, "AMD756 erratum 4 workaround\n"); | 37 | ohci_dbg (ohci, "AMD756 erratum 4 workaround\n"); |
32 | 38 | ||
33 | /* also erratum 10 (suspend/resume issues) */ | 39 | /* also erratum 10 (suspend/resume issues) */ |
34 | device_init_wakeup(&hcd->self.root_hub->dev, 0); | 40 | return broken_suspend(hcd); |
35 | |||
36 | return 0; | ||
37 | } | 41 | } |
38 | 42 | ||
39 | /* Apple's OHCI driver has a lot of bizarre workarounds | 43 | /* Apple's OHCI driver has a lot of bizarre workarounds |
40 | * for this chip. Evidently control and bulk lists | 44 | * for this chip. Evidently control and bulk lists |
41 | * can get confused. (B&W G3 models, and ...) | 45 | * can get confused. (B&W G3 models, and ...) |
42 | */ | 46 | */ |
43 | static int __devinit ohci_quirk_opti(struct usb_hcd *hcd) | 47 | static int ohci_quirk_opti(struct usb_hcd *hcd) |
44 | { | 48 | { |
45 | struct ohci_hcd *ohci = hcd_to_ohci (hcd); | 49 | struct ohci_hcd *ohci = hcd_to_ohci (hcd); |
46 | 50 | ||
@@ -53,7 +57,7 @@ static int __devinit ohci_quirk_opti(struct usb_hcd *hcd) | |||
53 | * identify the USB (fn2). This quirk might apply to more or | 57 | * identify the USB (fn2). This quirk might apply to more or |
54 | * even all NSC stuff. | 58 | * even all NSC stuff. |
55 | */ | 59 | */ |
56 | static int __devinit ohci_quirk_ns(struct usb_hcd *hcd) | 60 | static int ohci_quirk_ns(struct usb_hcd *hcd) |
57 | { | 61 | { |
58 | struct pci_dev *pdev = to_pci_dev(hcd->self.controller); | 62 | struct pci_dev *pdev = to_pci_dev(hcd->self.controller); |
59 | struct pci_dev *b; | 63 | struct pci_dev *b; |
@@ -75,7 +79,7 @@ static int __devinit ohci_quirk_ns(struct usb_hcd *hcd) | |||
75 | * delays before control or bulk queues get re-activated | 79 | * delays before control or bulk queues get re-activated |
76 | * in finish_unlinks() | 80 | * in finish_unlinks() |
77 | */ | 81 | */ |
78 | static int __devinit ohci_quirk_zfmicro(struct usb_hcd *hcd) | 82 | static int ohci_quirk_zfmicro(struct usb_hcd *hcd) |
79 | { | 83 | { |
80 | struct ohci_hcd *ohci = hcd_to_ohci (hcd); | 84 | struct ohci_hcd *ohci = hcd_to_ohci (hcd); |
81 | 85 | ||
@@ -88,7 +92,7 @@ static int __devinit ohci_quirk_zfmicro(struct usb_hcd *hcd) | |||
88 | /* Check for Toshiba SCC OHCI which has big endian registers | 92 | /* Check for Toshiba SCC OHCI which has big endian registers |
89 | * and little endian in memory data structures | 93 | * and little endian in memory data structures |
90 | */ | 94 | */ |
91 | static int __devinit ohci_quirk_toshiba_scc(struct usb_hcd *hcd) | 95 | static int ohci_quirk_toshiba_scc(struct usb_hcd *hcd) |
92 | { | 96 | { |
93 | struct ohci_hcd *ohci = hcd_to_ohci (hcd); | 97 | struct ohci_hcd *ohci = hcd_to_ohci (hcd); |
94 | 98 | ||
@@ -129,6 +133,14 @@ static const struct pci_device_id ohci_pci_quirks[] = { | |||
129 | PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA_2, 0x01b6), | 133 | PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA_2, 0x01b6), |
130 | .driver_data = (unsigned long)ohci_quirk_toshiba_scc, | 134 | .driver_data = (unsigned long)ohci_quirk_toshiba_scc, |
131 | }, | 135 | }, |
136 | { | ||
137 | /* Toshiba portege 4000 */ | ||
138 | .vendor = PCI_VENDOR_ID_AL, | ||
139 | .device = 0x5237, | ||
140 | .subvendor = PCI_VENDOR_ID_TOSHIBA_2, | ||
141 | .subdevice = 0x0004, | ||
142 | .driver_data = (unsigned long) broken_suspend, | ||
143 | }, | ||
132 | /* FIXME for some of the early AMD 760 southbridges, OHCI | 144 | /* FIXME for some of the early AMD 760 southbridges, OHCI |
133 | * won't work at all. blacklist them. | 145 | * won't work at all. blacklist them. |
134 | */ | 146 | */ |