usb-storage: add new no_read_disc_info quirk
authorHans de Goede <hdegoede@redhat.com>
Fri, 1 Oct 2010 21:20:10 +0000 (14:20 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 22 Oct 2010 17:22:04 +0000 (10:22 -0700)
Appotech ax3003 (the larger brother of the ax203) based devices are even
more buggy then the ax203.  They will go of into lala land when ever they
see a READ_DISC_INFO scsi command.  So add a new US_FL which tells the
scsi sr driver to not issue any READ_DISC_INFO scsi commands.

[akpm@linux-foundation.org: fix build]
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Cc: James Bottomley <James.Bottomley@HansenPartnership.com>
Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: Matthew Dharm <mdharm-usb@one-eyed-alien.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/storage/scsiglue.c
drivers/usb/storage/unusual_devs.h
include/linux/usb_usual.h

index e80362d148f31bcf5d8a32b343afea4cc56437a0..a1128ff5cc2cac03a1f0c094fdd48e01d63b167a 100644 (file)
@@ -253,6 +253,10 @@ static int slave_configure(struct scsi_device *sdev)
                 * or to force 192-byte transfer lengths for MODE SENSE.
                 * But they do need to use MODE SENSE(10). */
                sdev->use_10_for_ms = 1;
+
+               /* Some (fake) usb cdrom devices don't like READ_DISC_INFO */
+               if (us->fflags & US_FL_NO_READ_DISC_INFO)
+                       sdev->no_read_disc_info = 1;
        }
 
        /* The CB and CBI transports have no way to pass LUN values
index f43314a22ba4fee6aefae5f596b27ace52b08422..c8264ff5457ea733e6c5c971261ed4761024d3cf 100644 (file)
@@ -1858,6 +1858,11 @@ UNUSUAL_DEV( 0x1908, 0x1320, 0x0000, 0x0000,
                "Photo Frame",
                USB_SC_DEVICE, USB_PR_DEVICE, NULL,
                US_FL_BAD_SENSE ),
+UNUSUAL_DEV( 0x1908, 0x3335, 0x0200, 0x0200,
+               "BUILDWIN",
+               "Photo Frame",
+               USB_SC_DEVICE, USB_PR_DEVICE, NULL,
+               US_FL_NO_READ_DISC_INFO ),
 
 UNUSUAL_DEV( 0x2116, 0x0320, 0x0001, 0x0001,
                "ST",
index f091dc6e5a007b4559e677208125b14dd7abf07f..e62e9fe088832e4d4970ffcfc11d2d3f15eec496 100644 (file)
@@ -58,7 +58,9 @@
        US_FLAG(CAPACITY_OK,    0x00010000)                     \
                /* READ CAPACITY response is correct */         \
        US_FLAG(BAD_SENSE,      0x00020000)                     \
-               /* Bad Sense (never more than 18 bytes) */
+               /* Bad Sense (never more than 18 bytes) */      \
+       US_FLAG(NO_READ_DISC_INFO,      0x00040000)             \
+               /* cannot handle READ_DISC_INFO */
 
 #define US_FLAG(name, value)   US_FL_##name = value ,
 enum { US_DO_ALL_FLAGS };