Greg, Alan,
It looks like we can't win WRT USB handoff. There are some boxes that
need it and there are some that can't live with it but latter seems to
be a minority. Unfortunately there were box kinds of reports for both
UHCI and OHCI so we can't rely on controller type to decide whether
we should perform early handoff or not. So I think sensible way is to
have DMI table of boxes that can't stomach early handoff. What do you
think?
--
Dmitry
USB: disable early handoff on Dell Precision WorkStation 380
Early handoff makes keyboard controller dead on this box.
See bugzilla #6130 (reports form Mirza Pasovic).
Signed-off-by: Dmitry Torokhov <[EMAIL PROTECTED]>
---
drivers/usb/host/pci-quirks.c | 41 ++++++++++++++++++++++++++++++++++-------
1 files changed, 34 insertions(+), 7 deletions(-)
Index: work/drivers/usb/host/pci-quirks.c
===================================================================
--- work.orig/drivers/usb/host/pci-quirks.c
+++ work/drivers/usb/host/pci-quirks.c
@@ -334,19 +334,46 @@ static void __devinit quirk_usb_disable_
writel(0x3f, op_reg_base + EHCI_USBSTS);
iounmap(base);
+}
+
+#if defined(__i386__)
+
+#include <linux/dmi.h>
+
+static struct dmi_system_id no_usb_handoff_table[] __devinitdata = {
+ {
+ .ident = "Dell Precision 380",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_MATCH(DMI_PRODUCT_NAME , "Precision WorkStation
380"),
+ },
+ },
+ { }
+};
- return;
+static inline int usb_early_handoff_enabled(void)
+{
+ return !dmi_check_system(no_usb_handoff_table);
}
+#else
+
+static inline int usb_early_handoff_enabled(void)
+{
+ return 1;
+}
+#endif /* defined(__i386__) */
static void __devinit quirk_usb_early_handoff(struct pci_dev *pdev)
{
- if (pdev->class == PCI_CLASS_SERIAL_USB_UHCI)
- quirk_usb_handoff_uhci(pdev);
- else if (pdev->class == PCI_CLASS_SERIAL_USB_OHCI)
- quirk_usb_handoff_ohci(pdev);
- else if (pdev->class == PCI_CLASS_SERIAL_USB_EHCI)
- quirk_usb_disable_ehci(pdev);
+ if (usb_early_handoff_enabled()) {
+ if (pdev->class == PCI_CLASS_SERIAL_USB_UHCI)
+ quirk_usb_handoff_uhci(pdev);
+ else if (pdev->class == PCI_CLASS_SERIAL_USB_OHCI)
+ quirk_usb_handoff_ohci(pdev);
+ else if (pdev->class == PCI_CLASS_SERIAL_USB_EHCI)
+ quirk_usb_disable_ehci(pdev);
+ }
}
DECLARE_PCI_FIXUP_FINAL(PCI_ANY_ID, PCI_ANY_ID, quirk_usb_early_handoff);
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel