--- drivers/usb/storage/usb.c.orig	2004-05-07 09:24:10.000000000 +0100
+++ drivers/usb/storage/usb.c	2004-05-13 22:28:07.475217576 +0100
@@ -92,10 +92,19 @@
 #include <linux/init.h>
 #include <linux/slab.h>
 
+static __u16 init_skip_vendor = 0xffff;
+static __u16 init_skip_product = 0xffff;
+
 /* Some informational data */
 MODULE_AUTHOR("Matthew Dharm <mdharm-usb@one-eyed-alien.net>");
 MODULE_DESCRIPTION("USB Mass Storage driver for Linux");
 MODULE_LICENSE("GPL");
+MODULE_PARM(init_skip_vendor, "h");
+MODULE_PARM_DESC(init_skip_vendor, 
+	"Skip extra initialization for unusual device with this Vendor ID");
+MODULE_PARM(init_skip_product, "h");
+MODULE_PARM_DESC(init_skip_product, 
+	"Skip extra initialization for unusual device with this Product ID");
 
 static int storage_probe(struct usb_interface *iface,
 			 const struct usb_device_id *id);
@@ -771,11 +780,19 @@
 	if (us->protocol == US_PR_BULK)
 		us->max_lun = usb_stor_Bulk_max_lun(us);
 
-	/* Just before we start our control thread, initialize
-	 * the device if it needs initialization */
-	if (us->unusual_dev->initFunction)
-		us->unusual_dev->initFunction(us);
-
+	/* For the ucr61s3 (which has the same identifiers as the ucr612b
+	 * but does not need the extra initialization) allow the user to 
+	 * specify that the extra initialization won't run */
+	if ( us->pusb_dev->descriptor.idVendor == (__u16)init_skip_vendor && 
+	     us->pusb_dev->descriptor.idProduct == (__u16)init_skip_product) {
+		printk(KERN_INFO USB_STORAGE "Skipping unusual device initialization\n");
+	} else {
+		/* Just before we start our control thread, initialize
+		 * the device if it needs initialization */
+		if (us->unusual_dev->initFunction)
+			us->unusual_dev->initFunction(us);
+	}
+	
 	up(&us->dev_semaphore);
 
 	/* Start up our control thread */
