# This is for 2.4.21 with the US_PR_DEVICE / US_SC_DEVICE patch in place. # Tested and working. diff -ru linux-2.4.21/drivers/usb/storage/initializers.c linux-2.4.21-test/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-test/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 activate 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 -ru linux-2.4.21/drivers/usb/storage/initializers.h linux-2.4.21-test/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-test/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 activate all four slots on the UCR-61S2B + * flash reader */ +int usb_stor_ucr61s2b_init(struct us_data *us); diff -ru linux-2.4.21/drivers/usb/storage/unusual_devs.h linux-2.4.21-test/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-test/drivers/usb/storage/unusual_devs.h 2003-06-19 22:02:34.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_DEVICE, US_PR_DEVICE, 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