>>>>> "Daniel" == Daniel Drake <[EMAIL PROTECTED]> writes:

Daniel> I'd accept a patch to hardcode the detection of HP8200 for the
Daniel> HP-id's, but leave the probe in place for the shared ID.

So here is the patch.


Use USB vendor and product IDs to determine whether the attached
device is a CDROM or a Flash device.  Daniel Drake says that the
*same* vendor and product IDs for non-HP vendor ID could be either
flash or cdrom, so try to probe for them (I think that the probe may
not work; it doesn't work properly now, which is why I'm writing this
patch). 

Signed-off-by: Peter Chubb <[EMAIL PROTECTED]>

 drivers/usb/storage/shuttle_usbat.c |   51 +++++++++++++++++++++++++-----------
 drivers/usb/storage/shuttle_usbat.h |    4 ++
 drivers/usb/storage/unusual_devs.h  |    8 ++---
 3 files changed, 43 insertions(+), 20 deletions(-)

Index: linux-2.6/drivers/usb/storage/shuttle_usbat.c
===================================================================
--- linux-2.6.orig/drivers/usb/storage/shuttle_usbat.c  2006-05-02 
11:26:44.000000000 +1000
+++ linux-2.6/drivers/usb/storage/shuttle_usbat.c       2006-05-02 
11:26:49.000000000 +1000
@@ -893,22 +893,28 @@
  * Set the transport function based on the device type
  */
 static int usbat_set_transport(struct us_data *us,
-                              struct usbat_info *info)
+                              struct usbat_info *info,
+                              int devicetype)
 {
-       int rc;
 
-       if (!info->devicetype) {
-               rc = usbat_identify_device(us, info);
-               if (rc != USB_STOR_TRANSPORT_GOOD) {
-                       US_DEBUGP("usbat_set_transport: Could not identify 
device\n");
-                       return 1;
-               }
-       }
+       if (!info->devicetype)
+               info->devicetype = devicetype;
+
+       if (!info->devicetype)
+               usbat_identify_device(us, info);
+
+       switch (info->devicetype) {
+       default:
+               return USB_STOR_TRANSPORT_ERROR;
 
-       if (usbat_get_device_type(us) == USBAT_DEV_HP8200)
+       case  USBAT_DEV_HP8200:
                us->transport = usbat_hp8200e_transport;
-       else if (usbat_get_device_type(us) == USBAT_DEV_FLASH)
+               break;
+
+       case USBAT_DEV_FLASH:
                us->transport = usbat_flash_transport;
+               break;
+       }
 
        return 0;
 }
@@ -1316,7 +1322,7 @@
 /*
  * Initialize the USBAT processor and the storage device
  */
-int init_usbat(struct us_data *us)
+static int init_usbat(struct us_data *us, int devicetype)
 {
        int rc;
        struct usbat_info *info;
@@ -1398,7 +1404,7 @@
        US_DEBUGP("INIT 9\n");
 
        /* At this point, we need to detect which device we are using */
-       if (usbat_set_transport(us, info))
+       if (usbat_set_transport(us, info, devicetype))
                return USB_STOR_TRANSPORT_ERROR;
 
        US_DEBUGP("INIT 10\n");
@@ -1701,6 +1707,22 @@
        return USB_STOR_TRANSPORT_FAILED;
 }
 
+int init_usbat_cd(struct us_data *us)
+{
+       return init_usbat(us, USBAT_DEV_HP8200);
+}
+
+
+int init_usbat_flash(struct us_data *us)
+{
+       return init_usbat(us, USBAT_DEV_FLASH);
+}
+
+int init_usbat_probe(struct us_data *us)
+{
+       return init_usbat(us, 0);
+}
+
 /*
  * Default transport function. Attempts to detect which transport function
  * should be called, makes it the new default, and calls it.
@@ -1714,9 +1736,8 @@
 {
        struct usbat_info *info = (struct usbat_info*) (us->extra);
 
-       if (usbat_set_transport(us, info))
+       if (usbat_set_transport(us, info, 0))
                return USB_STOR_TRANSPORT_ERROR;
 
        return us->transport(srb, us);  
 }
-
Index: linux-2.6/drivers/usb/storage/shuttle_usbat.h
===================================================================
--- linux-2.6.orig/drivers/usb/storage/shuttle_usbat.h  2006-05-02 
11:24:37.000000000 +1000
+++ linux-2.6/drivers/usb/storage/shuttle_usbat.h       2006-05-02 
12:27:20.000000000 +1000
@@ -106,7 +106,9 @@
 #define USBAT_FEAT_ET2 0x01
 
 extern int usbat_transport(struct scsi_cmnd *srb, struct us_data *us);
-extern int init_usbat(struct us_data *us);
+extern int init_usbat_cd(struct us_data *us);
+extern int init_usbat_flash(struct us_data *us);
+extern int init_usbat_probe(struct us_data *us);
 
 struct usbat_info {
        int devicetype;
Index: linux-2.6/drivers/usb/storage/unusual_devs.h
===================================================================
--- linux-2.6.orig/drivers/usb/storage/unusual_devs.h   2006-05-02 
11:26:38.000000000 +1000
+++ linux-2.6/drivers/usb/storage/unusual_devs.h        2006-05-02 
11:28:33.000000000 +1000
@@ -78,12 +78,12 @@
 UNUSUAL_DEV(  0x03f0, 0x0207, 0x0001, 0x0001, 
                "HP",
                "CD-Writer+ 8200e",
-               US_SC_8070, US_PR_USBAT, init_usbat, 0),
+               US_SC_8070, US_PR_USBAT, init_usbat_cd, 0),
 
 UNUSUAL_DEV(  0x03f0, 0x0307, 0x0001, 0x0001, 
                "HP",
                "CD-Writer+ CD-4e",
-               US_SC_8070, US_PR_USBAT, init_usbat, 0),
+               US_SC_8070, US_PR_USBAT, init_usbat_cd, 0),
 #endif
 
 /* Reported by Sebastian Kapfer <[EMAIL PROTECTED]>
@@ -393,7 +393,7 @@
 UNUSUAL_DEV(  0x04e6, 0x1010, 0x0000, 0x9999,
                "Shuttle/SCM",
                "USBAT-02",
-               US_SC_SCSI, US_PR_USBAT, init_usbat,
+               US_SC_SCSI, US_PR_USBAT, init_usbat_probe,
                US_FL_SINGLE_LUN),
 #endif
 
@@ -797,7 +797,7 @@
 UNUSUAL_DEV(  0x0781, 0x0005, 0x0005, 0x0005,
                "Sandisk",
                "ImageMate SDDR-05b",
-               US_SC_SCSI, US_PR_USBAT, init_usbat,
+               US_SC_SCSI, US_PR_USBAT, init_usbat_flash,
                US_FL_SINGLE_LUN ),
 #endif
 


-- 
Dr Peter Chubb  http://www.gelato.unsw.edu.au  peterc AT gelato.unsw.edu.au
http://www.ertos.nicta.com.au           ERTOS within National ICT Australia


-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to