ChangeSet 1.1673.8.52, 2004/03/30 14:11:00-08:00, Andries.Brouwer@cwi.nl [PATCH] USB Storage: datafab fix and unusual devices datafab.c has an often-seen bug: the SCSI READ_CAPACITY command does not need the number of sectors but the last sector. I just tried the CF and SM parts of a 5-in-1 card reader. The CF part works with US_PR_DATAFAB when the bug mentioned is fixed. The SM part works with US_PR_SDDR55. (Revision Number is 17.08 - that in case the 0000-ffff should prove to be too optimistic.) We still must discuss what setup to use for readers like this - I have several of them - that require different drivers for different LUNs. As it is now one has to compile usb-storage twice, once with CONFIG_USB_STORAGE_DATAFAB defined and once without, and remove one usb-storage.ko and insert the other to go from CF to SM. (And that hangs with 2.6.4 so a reboot is required..) drivers/usb/storage/datafab.c | 4 ++-- drivers/usb/storage/unusual_devs.h | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff -Nru a/drivers/usb/storage/datafab.c b/drivers/usb/storage/datafab.c --- a/drivers/usb/storage/datafab.c Wed Apr 14 14:35:46 2004 +++ b/drivers/usb/storage/datafab.c Wed Apr 14 14:35:46 2004 @@ -539,8 +539,8 @@ info->sectors, info->ssize); // build the reply - // - ((u32 *) ptr)[0] = cpu_to_be32(info->sectors); + // we need the last sector, not the number of sectors + ((u32 *) ptr)[0] = cpu_to_be32(info->sectors - 1); ((u32 *) ptr)[1] = cpu_to_be32(info->ssize); usb_stor_set_xfer_buf(ptr, 8, srb); diff -Nru a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h --- a/drivers/usb/storage/unusual_devs.h Wed Apr 14 14:35:46 2004 +++ b/drivers/usb/storage/unusual_devs.h Wed Apr 14 14:35:46 2004 @@ -720,6 +720,21 @@ 0 ), #endif +#ifdef CONFIG_USB_STORAGE_DATAFAB +UNUSUAL_DEV( 0x0c0b, 0xa109, 0x0000, 0xffff, + "Acomdata", + "CF", + US_SC_SCSI, US_PR_DATAFAB, NULL, + US_FL_SINGLE_LUN ), +#endif +#ifdef CONFIG_USB_STORAGE_SDDR55 +UNUSUAL_DEV( 0x0c0b, 0xa109, 0x0000, 0xffff, + "Acomdata", + "SM", + US_SC_SCSI, US_PR_SDDR55, NULL, + US_FL_SINGLE_LUN ), +#endif + /* Submitted by Joris Struyve */ UNUSUAL_DEV( 0x0d96, 0x410a, 0x0001, 0xffff, "Medion",