diff options
Diffstat (limited to 'drivers/usb/host/pci-quirks.c')
-rw-r--r-- | drivers/usb/host/pci-quirks.c | 46 |
1 files changed, 3 insertions, 43 deletions
diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c index f7411ca48835..b7fd3f644e1e 100644 --- a/drivers/usb/host/pci-quirks.c +++ b/drivers/usb/host/pci-quirks.c | |||
@@ -23,33 +23,6 @@ | |||
23 | #include <linux/acpi.h> | 23 | #include <linux/acpi.h> |
24 | 24 | ||
25 | 25 | ||
26 | /* | ||
27 | * PIIX3 USB: We have to disable USB interrupts that are | ||
28 | * hardwired to PIRQD# and may be shared with an | ||
29 | * external device. | ||
30 | * | ||
31 | * Legacy Support Register (LEGSUP): | ||
32 | * bit13: USB PIRQ Enable (USBPIRQDEN), | ||
33 | * bit4: Trap/SMI On IRQ Enable (USBSMIEN). | ||
34 | * | ||
35 | * We mask out all r/wc bits, too. | ||
36 | */ | ||
37 | static void __devinit quirk_piix3_usb(struct pci_dev *dev) | ||
38 | { | ||
39 | u16 legsup; | ||
40 | |||
41 | pci_read_config_word(dev, 0xc0, &legsup); | ||
42 | legsup &= 0x50ef; | ||
43 | pci_write_config_word(dev, 0xc0, legsup); | ||
44 | } | ||
45 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371SB_2, quirk_piix3_usb ); | ||
46 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_2, quirk_piix3_usb ); | ||
47 | |||
48 | |||
49 | /* FIXME these should be the guts of hcd->reset() methods; resolve all | ||
50 | * the differences between this version and the HCD's version. | ||
51 | */ | ||
52 | |||
53 | #define UHCI_USBLEGSUP 0xc0 /* legacy support */ | 26 | #define UHCI_USBLEGSUP 0xc0 /* legacy support */ |
54 | #define UHCI_USBCMD 0 /* command register */ | 27 | #define UHCI_USBCMD 0 /* command register */ |
55 | #define UHCI_USBINTR 4 /* interrupt register */ | 28 | #define UHCI_USBINTR 4 /* interrupt register */ |
@@ -83,13 +56,6 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_2, qui | |||
83 | #define EHCI_USBLEGCTLSTS 4 /* legacy control/status */ | 56 | #define EHCI_USBLEGCTLSTS 4 /* legacy control/status */ |
84 | #define EHCI_USBLEGCTLSTS_SOOE (1 << 13) /* SMI on ownership change */ | 57 | #define EHCI_USBLEGCTLSTS_SOOE (1 << 13) /* SMI on ownership change */ |
85 | 58 | ||
86 | int usb_early_handoff __devinitdata = 0; | ||
87 | static int __init usb_handoff_early(char *str) | ||
88 | { | ||
89 | usb_early_handoff = 1; | ||
90 | return 0; | ||
91 | } | ||
92 | __setup("usb-handoff", usb_handoff_early); | ||
93 | 59 | ||
94 | /* | 60 | /* |
95 | * Make sure the controller is completely inactive, unable to | 61 | * Make sure the controller is completely inactive, unable to |
@@ -320,17 +286,11 @@ static void __devinit quirk_usb_disable_ehci(struct pci_dev *pdev) | |||
320 | 286 | ||
321 | static void __devinit quirk_usb_early_handoff(struct pci_dev *pdev) | 287 | static void __devinit quirk_usb_early_handoff(struct pci_dev *pdev) |
322 | { | 288 | { |
323 | if (!usb_early_handoff) | 289 | if (pdev->class == PCI_CLASS_SERIAL_USB_UHCI) |
324 | return; | ||
325 | |||
326 | if (pdev->class == ((PCI_CLASS_SERIAL_USB << 8) | 0x00)) { /* UHCI */ | ||
327 | quirk_usb_handoff_uhci(pdev); | 290 | quirk_usb_handoff_uhci(pdev); |
328 | } else if (pdev->class == ((PCI_CLASS_SERIAL_USB << 8) | 0x10)) { /* OHCI */ | 291 | else if (pdev->class == PCI_CLASS_SERIAL_USB_OHCI) |
329 | quirk_usb_handoff_ohci(pdev); | 292 | quirk_usb_handoff_ohci(pdev); |
330 | } else if (pdev->class == ((PCI_CLASS_SERIAL_USB << 8) | 0x20)) { /* EHCI */ | 293 | else if (pdev->class == PCI_CLASS_SERIAL_USB_EHCI) |
331 | quirk_usb_disable_ehci(pdev); | 294 | quirk_usb_disable_ehci(pdev); |
332 | } | ||
333 | |||
334 | return; | ||
335 | } | 295 | } |
336 | DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, quirk_usb_early_handoff); | 296 | DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, quirk_usb_early_handoff); |