From: Vojtech Pavlik <vojtech@suse.cz>

Here is a patch from the SuSE kernel CVS. It's been in SuSE's kernels
since 9.1 I believe, and that's a long time.

Cc: <linux-usb-devel@lists.sourceforge.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 Documentation/kernel-parameters.txt |    1 +
 drivers/pci/quirks.c                |   11 +++++++++++
 2 files changed, 12 insertions(+)

diff -puN Documentation/kernel-parameters.txt~make-usb-handoff-the-default-usb-no-handoff-turns-it-off Documentation/kernel-parameters.txt
--- devel/Documentation/kernel-parameters.txt~make-usb-handoff-the-default-usb-no-handoff-turns-it-off	2005-08-05 01:04:41.000000000 -0700
+++ devel-akpm/Documentation/kernel-parameters.txt	2005-08-05 01:04:41.000000000 -0700
@@ -1479,6 +1479,7 @@ running once the system is up.
 			Format: <io>,<irq>
 
 	usb-handoff	[HW] Enable early USB BIOS -> OS handoff
+	usb-no-handoff	[HW] Disable early USB BIOS -> OS handoff
 
 	usbhid.mousepoll=
 			[USBHID] The interval which mice are to be polled at.
diff -puN drivers/pci/quirks.c~make-usb-handoff-the-default-usb-no-handoff-turns-it-off drivers/pci/quirks.c
--- devel/drivers/pci/quirks.c~make-usb-handoff-the-default-usb-no-handoff-turns-it-off	2005-08-05 01:04:41.000000000 -0700
+++ devel-akpm/drivers/pci/quirks.c	2005-08-05 01:05:19.000000000 -0700
@@ -908,7 +908,11 @@ static void __init quirk_sis_96x_smbus(s
 #define EHCI_USBLEGCTLSTS	4		/* legacy control/status */
 #define EHCI_USBLEGCTLSTS_SOOE	(1 << 13)	/* SMI on ownership change */
 
+#ifdef CONFIG_X86				/* x86 && x86_64 */
+int usb_early_handoff __devinitdata = 1;	/* Do handoff by default */
+#else
 int usb_early_handoff __devinitdata = 0;
+#endif
 static int __init usb_handoff_early(char *str)
 {
 	usb_early_handoff = 1;
@@ -916,6 +920,13 @@ static int __init usb_handoff_early(char
 }
 __setup("usb-handoff", usb_handoff_early);
 
+static int __init usb_no_handoff_early(char *str)
+{
+	usb_early_handoff = 0;
+	return 0;
+}
+__setup("usb-no-handoff", usb_no_handoff_early);
+
 static void __devinit quirk_usb_handoff_uhci(struct pci_dev *pdev)
 {
 	unsigned long base = 0;
_