Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

usb-storage: add new no_read_capacity_16 quirk

Some Rockbox based mp4 players will crash when ever they see a
read_capacity_16 scsi command. So add a new US_FL which tells the scsi sd
driver to not issue any read_capacity_16 scsi commands.

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>

authored by

Hans de Goede and committed by
Greg Kroah-Hartman
00914025 5ce524bd

+9 -2
+4
drivers/usb/storage/scsiglue.c
··· 209 209 if (us->fflags & US_FL_CAPACITY_HEURISTICS) 210 210 sdev->guess_capacity = 1; 211 211 212 + /* Some devices cannot handle READ_CAPACITY_16 */ 213 + if (us->fflags & US_FL_NO_READ_CAPACITY_16) 214 + sdev->no_read_capacity_16 = 1; 215 + 212 216 /* assume SPC3 or latter devices support sense size > 18 */ 213 217 if (sdev->scsi_level > SCSI_SPC_2) 214 218 us->fflags |= US_FL_SANE_SENSE;
+2 -1
drivers/usb/storage/unusual_devs.h
··· 877 877 "RockChip", 878 878 "MP3", 879 879 USB_SC_DEVICE, USB_PR_DEVICE, NULL, 880 - US_FL_NO_WP_DETECT | US_FL_MAX_SECTORS_64), 880 + US_FL_NO_WP_DETECT | US_FL_MAX_SECTORS_64 | 881 + US_FL_NO_READ_CAPACITY_16), 881 882 882 883 /* Reported by Jean-Baptiste Onofre <jb@nanthrax.net> 883 884 * Support the following product :
+3 -1
include/linux/usb_usual.h
··· 60 60 US_FLAG(BAD_SENSE, 0x00020000) \ 61 61 /* Bad Sense (never more than 18 bytes) */ \ 62 62 US_FLAG(NO_READ_DISC_INFO, 0x00040000) \ 63 - /* cannot handle READ_DISC_INFO */ 63 + /* cannot handle READ_DISC_INFO */ \ 64 + US_FLAG(NO_READ_CAPACITY_16, 0x00080000) \ 65 + /* cannot handle READ_CAPACITY_16 */ 64 66 65 67 #define US_FLAG(name, value) US_FL_##name = value , 66 68 enum { US_DO_ALL_FLAGS };