diff -ruN linux-2.4.21/drivers/usb/storage/initializers.c
linux-2.4.21.patched/drivers/usb/storage/initializers.c
--- linux-2.4.21/drivers/usb/storage/initializers.c 2000-09-08 18:39:12.000000000
-0500
+++ linux-2.4.21.patched/drivers/usb/storage/initializers.c 2003-06-19
16:49:24.000000000 -0500
@@ -39,6 +39,7 @@
#include "initializers.h"
#include "debug.h"
+#include "transport.h"
/* This places the Shuttle/SCM USB<->SCSI bridge devices in multi-target
* mode */
@@ -57,4 +58,51 @@
return 0;
}
+/* This function is required to enable all four slots on the UCR-61S2B
+ * flash reader */
+int usb_stor_ucr61s2b_init(struct us_data *us)
+{
+ int pipe;
+ struct bulk_cb_wrap *bcb;
+ struct bulk_cs_wrap *bcs;
+ int res, partial;
+
+ bcb = kmalloc(sizeof *bcb, in_interrupt() ? GFP_ATOMIC : GFP_NOIO);
+ if (!bcb) {
+ return(-1);
+ }
+ bcs = kmalloc(sizeof *bcs, in_interrupt() ? GFP_ATOMIC : GFP_NOIO);
+ if (!bcs) {
+ kfree(bcb);
+ return(-1);
+ }
+
+ US_DEBUGP("Sending UCR-61S2B initialization packet...\n");
+
+ bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN);
+ bcb->Tag = ++(us->tag);
+ bcb->DataTransferLength = cpu_to_le32(0);
+ bcb->Flags = bcb->Lun = 0;
+ bcb->Length = sizeof(UCR61S2B_INIT);
+ memset(bcb->CDB, 0, sizeof(bcb->CDB));
+ memcpy(bcb->CDB, UCR61S2B_INIT, sizeof(UCR61S2B_INIT));
+
+ pipe = usb_sndbulkpipe(us->pusb_dev, us->ep_out);
+ res = usb_stor_bulk_msg(us, bcb, pipe, US_BULK_CB_WRAP_LEN, &partial);
+ US_DEBUGP("-- result is %d\n", res);
+ kfree(bcb);
+
+ if(res) {
+ kfree(bcs);
+ return(res);
+ }
+
+ pipe = usb_rcvbulkpipe(us->pusb_dev, us->ep_in);
+ res = usb_stor_bulk_msg(us, bcs, pipe, US_BULK_CS_WRAP_LEN, &partial);
+ US_DEBUGP("-- result of status read is %d\n", res);
+
+ kfree(bcs);
+
+ return(res ? -1 : 0);
+}
diff -ruN linux-2.4.21/drivers/usb/storage/initializers.h
linux-2.4.21.patched/drivers/usb/storage/initializers.h
--- linux-2.4.21/drivers/usb/storage/initializers.h 2001-11-22 13:49:34.000000000
-0600
+++ linux-2.4.21.patched/drivers/usb/storage/initializers.h 2003-06-19
16:49:25.000000000 -0500
@@ -39,6 +39,12 @@
#include "usb.h"
+#define UCR61S2B_INIT "\xec\x0a\x06\x00$PCCHIPS"
+
/* This places the Shuttle/SCM USB<->SCSI bridge devices in multi-target
* mode */
int usb_stor_euscsi_init(struct us_data *us);
+
+/* This function is required to enable all four slots on the UCR-61S2B
+ * flash reader */
+int usb_stor_ucr61s2b_init(struct us_data *us);
diff -ruN linux-2.4.21/drivers/usb/storage/unusual_devs.h
linux-2.4.21.patched/drivers/usb/storage/unusual_devs.h
--- linux-2.4.21/drivers/usb/storage/unusual_devs.h 2003-06-13 09:51:37.000000000
-0500
+++ linux-2.4.21.patched/drivers/usb/storage/unusual_devs.h 2003-06-19
16:52:57.000000000 -0500
@@ -576,6 +576,16 @@
US_SC_SCSI, US_PR_BULK, NULL,
US_FL_START_STOP ),
+/* Reported by Kevin Cernekee <[EMAIL PROTECTED]>
+ * Tested on hardware version 1.10.
+ * Entry is needed only for the initializer function override.
+ */
+UNUSUAL_DEV( 0x1019, 0x0c55, 0x0000, 0x9999,
+ "Desknote",
+ "UCR-61S2B",
+ US_SC_SCSI, US_PR_BULK, usb_stor_ucr61s2b_init,
+ 0 ),
+
/* Reported by Dan Pilone <[EMAIL PROTECTED]>
* The device needs the flags only.
* Also reported by Brian Hall <[EMAIL PROTECTED]>, again for flags.
-------------------------------------------------------
This SF.Net email is sponsored by: INetU
Attention Web Developers & Consultants: Become An INetU Hosting Partner.
Refer Dedicated Servers. We Manage Them. You Get 10% Monthly Commission!
INetU Dedicated Managed Hosting http://www.inetu.net/partner/index.php
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel