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 _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel