diff options
author | David Brownell <david-b@pacbell.net> | 2005-04-18 17:39:30 -0700 |
---|---|---|
committer | Greg K-H <gregkh@suse.de> | 2005-04-18 17:39:30 -0700 |
commit | 0e4987639a774d08b69c1c58774f3430f6083d4f (patch) | |
tree | d9d9eb475b11c05b069c715df50f9e6d89c32ecf /drivers/usb | |
parent | a2fe20129e2d87dc5c4e5c850b41b5b0b47cfd08 (diff) | |
download | linux-0e4987639a774d08b69c1c58774f3430f6083d4f.tar.bz2 |
[PATCH] USB: OHCI on Compaq Aramada 7400
This adds a quirk to the OHCI driver that lets it work with an old
Compaq implementation. It also removes some needless strings from
the non-debug version of the driver.
Signed-off-by: Chris Clayton <chris_clayton@f1internet.com>
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/host/ohci-pci.c | 17 | ||||
-rw-r--r-- | drivers/usb/host/ohci-q.c | 13 | ||||
-rw-r--r-- | drivers/usb/host/ohci.h | 1 |
3 files changed, 26 insertions, 5 deletions
diff --git a/drivers/usb/host/ohci-pci.c b/drivers/usb/host/ohci-pci.c index f30118b5f9aa..57fd07d00549 100644 --- a/drivers/usb/host/ohci-pci.c +++ b/drivers/usb/host/ohci-pci.c @@ -54,7 +54,7 @@ ohci_pci_start (struct usb_hcd *hcd) if (pdev->vendor == PCI_VENDOR_ID_AMD && pdev->device == 0x740c) { ohci->flags = OHCI_QUIRK_AMD756; - ohci_info (ohci, "AMD756 erratum 4 workaround\n"); + ohci_dbg (ohci, "AMD756 erratum 4 workaround\n"); // also somewhat erratum 10 (suspend/resume issues) } @@ -68,7 +68,7 @@ ohci_pci_start (struct usb_hcd *hcd) */ else if (pdev->vendor == PCI_VENDOR_ID_OPTI && pdev->device == 0xc861) { - ohci_info (ohci, + ohci_dbg (ohci, "WARNING: OPTi workarounds unavailable\n"); } @@ -84,9 +84,20 @@ ohci_pci_start (struct usb_hcd *hcd) if (b && b->device == PCI_DEVICE_ID_NS_87560_LIO && b->vendor == PCI_VENDOR_ID_NS) { ohci->flags |= OHCI_QUIRK_SUPERIO; - ohci_info (ohci, "Using NSC SuperIO setup\n"); + ohci_dbg (ohci, "Using NSC SuperIO setup\n"); } } + + /* Check for Compaq's ZFMicro chipset, which needs short + * delays before control or bulk queues get re-activated + * in finish_unlinks() + */ + else if (pdev->vendor == PCI_VENDOR_ID_COMPAQ + && pdev->device == 0xa0f8) { + ohci->flags |= OHCI_QUIRK_ZFMICRO; + ohci_dbg (ohci, + "enabled Compaq ZFMicro chipset quirk\n"); + } } /* NOTE: there may have already been a first reset, to diff --git a/drivers/usb/host/ohci-q.c b/drivers/usb/host/ohci-q.c index c90114a77277..e372306ed0da 100644 --- a/drivers/usb/host/ohci-q.c +++ b/drivers/usb/host/ohci-q.c @@ -1021,6 +1021,8 @@ rescan_this: if (ohci->ed_controltail) { command |= OHCI_CLF; + if (ohci->flags & OHCI_QUIRK_ZFMICRO) + mdelay(1); if (!(ohci->hc_control & OHCI_CTRL_CLE)) { control |= OHCI_CTRL_CLE; ohci_writel (ohci, 0, @@ -1029,6 +1031,8 @@ rescan_this: } if (ohci->ed_bulktail) { command |= OHCI_BLF; + if (ohci->flags & OHCI_QUIRK_ZFMICRO) + mdelay(1); if (!(ohci->hc_control & OHCI_CTRL_BLE)) { control |= OHCI_CTRL_BLE; ohci_writel (ohci, 0, @@ -1039,12 +1043,17 @@ rescan_this: /* CLE/BLE to enable, CLF/BLF to (maybe) kickstart */ if (control) { ohci->hc_control |= control; + if (ohci->flags & OHCI_QUIRK_ZFMICRO) + mdelay(1); ohci_writel (ohci, ohci->hc_control, &ohci->regs->control); } - if (command) + if (command) { + if (ohci->flags & OHCI_QUIRK_ZFMICRO) + mdelay(1); ohci_writel (ohci, command, &ohci->regs->cmdstatus); - } + } + } } diff --git a/drivers/usb/host/ohci.h b/drivers/usb/host/ohci.h index 2ba6e2b0210c..22e1ac138ac0 100644 --- a/drivers/usb/host/ohci.h +++ b/drivers/usb/host/ohci.h @@ -396,6 +396,7 @@ struct ohci_hcd { #define OHCI_QUIRK_SUPERIO 0x02 /* natsemi */ #define OHCI_QUIRK_INITRESET 0x04 /* SiS, OPTi, ... */ #define OHCI_BIG_ENDIAN 0x08 /* big endian HC */ +#define OHCI_QUIRK_ZFMICRO 0x10 /* Compaq ZFMicro chipset*/ // there are also chip quirks/bugs in init logic }; |