Hi,
This is status and patch of Panasonic compact USB CDROMs on 2.4.21pre4.
* KXL-840(CD-ROM11): usb_stor_Bulk_max_lun() is danger, need US_FL_SINGLE_LUN
* KXL-RW11(CDRRW02): usb_stor_Bulk_max_lun() is danger, need US_FL_SINGLE_LUN
* KXL-RW20(CDRRW03): original IClass is 0xFF, use US_PR_CB and need init reset
* KXL-RW21(CDRRW06): original IClass is 0xFF, use US_PR_CB and need init reset
* KXL-RW31(CDRRW05): work fine with current code
* KXL-RW32(CDRRW09): work fine with current code
-- GO!
diff -urN linux/drivers/usb/storage.orig/unusual_devs.h
linux/drivers/usb/storage/unusual_devs.h
--- linux/drivers/usb/storage.orig/unusual_devs.h 2003-02-07 10:16:07.000000000
+0900
+++ linux/drivers/usb/storage/unusual_devs.h 2003-02-09 11:28:46.000000000 +0900
@@ -579,3 +579,31 @@
US_SC_SCSI, US_PR_SDDR55, NULL,
US_FL_SINGLE_LUN),
#endif
+
+/*
+ * Panasonic/OEMs compact USB CDROMs status
+ * KXL-840(CD-ROM11): usb_stor_Bulk_max_lun() is danger, need US_FL_SINGLE_LUN
+ * KXL-RW11(CDRRW02): usb_stor_Bulk_max_lun() is danger, need US_FL_SINGLE_LUN
+ * KXL-RW20(CDRRW03): original IClass is 0xFF, use US_PR_CB and need init reset
+ * KXL-RW21(CDRRW06): original IClass is 0xFF, use US_PR_CB and need init reset
+ * KXL-RW31(CDRRW05): work fine with current code
+ * KXL-RW32(CDRRW09): work fine with current code
+ * Checked: Sun Feb 9 JST 2003 Go Taniguchi <[EMAIL PROTECTED]>
+ */
+UNUSUAL_DEV( 0x04da, 0x0d01, 0x0000, 0xffff,
+ "MATSHITA",
+ "CD-ROM11",
+ US_SC_8020, US_PR_BULK, NULL, US_FL_SINGLE_LUN),
+UNUSUAL_DEV( 0x04da, 0x0d02, 0x0000, 0xffff,
+ "MATSHITA",
+ "CDRRW02",
+ US_SC_8020, US_PR_BULK, NULL, US_FL_SINGLE_LUN),
+UNUSUAL_DEV( 0x04da, 0x0d03, 0x0000, 0xffff,
+ "MATSHITA",
+ "CDRRW03",
+ US_SC_8020, US_PR_CB, NULL, US_FL_INIT_RESET),
+UNUSUAL_DEV( 0x04da, 0x0d06, 0x0000, 0xffff,
+ "MATSHITA",
+ "CDRRW06",
+ US_SC_8020, US_PR_CB, NULL, US_FL_INIT_RESET),
+
diff -urN linux/drivers/usb/storage.orig/usb.c linux/drivers/usb/storage/usb.c
--- linux/drivers/usb/storage.orig/usb.c 2002-11-29 08:53:15.000000000 +0900
+++ linux/drivers/usb/storage/usb.c 2003-02-09 11:31:21.000000000 +0900
@@ -846,7 +846,8 @@
ss->transport_name = "Bulk";
ss->transport = usb_stor_Bulk_transport;
ss->transport_reset = usb_stor_Bulk_reset;
- ss->max_lun = usb_stor_Bulk_max_lun(ss);
+ if (!(ss->flags & US_FL_SINGLE_LUN))
+ ss->max_lun = usb_stor_Bulk_max_lun(ss);
break;
#ifdef CONFIG_USB_STORAGE_HP8200e
@@ -1025,6 +1026,11 @@
/* now register - our detect function will be called */
ss->htmplt.module = THIS_MODULE;
+
+ /* some device need reset process */
+ if (ss->flags & US_FL_INIT_RESET)
+ ss->transport_reset(ss);
+
scsi_register_module(MODULE_SCSI_HA, &(ss->htmplt));
/* lock access to the data structures */
diff -urN linux/drivers/usb/storage.orig/usb.h linux/drivers/usb/storage/usb.h
--- linux/drivers/usb/storage.orig/usb.h 2003-02-07 10:16:07.000000000 +0900
+++ linux/drivers/usb/storage/usb.h 2003-02-09 11:29:08.000000000 +0900
@@ -101,6 +101,7 @@
#define US_FL_IGNORE_SER 0x00000010 /* Ignore the serial number given */
#define US_FL_SCM_MULT_TARG 0x00000020 /* supports multiple targets */
#define US_FL_FIX_INQUIRY 0x00000040 /* INQUIRY response needs fixing */
+#define US_FL_INIT_RESET 0x00000080 /* reset process when initialize */
#define USB_STOR_STRING_LEN 32