--- /home/n202042/src/kernel2612/linux-2.6.12/drivers/scsi/sd.c	2005-06-18 07:48:29.000000000 +1200
+++ /usr/src/linux/drivers/scsi/sd.c	2005-07-11 15:40:45.000000000 +1200
@@ -89,6 +89,10 @@
 #define SD_MAX_RETRIES		5
 #define SD_PASSTHROUGH_RETRIES	1
 
+static unsigned int firmware_delay = 0;
+module_param(firmware_delay, uint, S_IRUGO | S_IWUSR);
+MODULE_PARM_DESC(firmware_delay, "Optional number of seconds delay for dodgy USB keys to settle");
+
 static void scsi_disk_release(struct kref *kref);
 
 struct scsi_disk {
@@ -1080,6 +1084,12 @@ sd_spinup_disk(struct scsi_disk *sdkp, c
 			/* Wait 1 second for next try */
 			msleep(1000);
 			printk(".");
+		} else if (sense_valid && sshdr.sense_key == UNIT_ATTENTION && firmware_delay > 0 ) {
+				/* Some USB flash drives need a small delay (perhaps to allow internal firmware
+				 * time to initialise
+				 */
+				printk(KERN_NOTICE "%s: Allowing time for firmware initialisation\n", diskname);
+				msleep(firmware_delay * HZ);
 		} else {
 			/* we don't understand the sense code, so it's
 			 * probably pointless to loop */
