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); |
