diff options
| -rw-r--r-- | drivers/usb/storage/scsiglue.c | 5 | ||||
| -rw-r--r-- | drivers/usb/storage/unusual_devs.h | 7 | ||||
| -rw-r--r-- | include/linux/usb_usual.h | 4 | 
3 files changed, 14 insertions, 2 deletions
| diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c index 94d75edef77f..18509e6c21ab 100644 --- a/drivers/usb/storage/scsiglue.c +++ b/drivers/usb/storage/scsiglue.c @@ -211,8 +211,11 @@ static int slave_configure(struct scsi_device *sdev)  		/*  		 * Many devices do not respond properly to READ_CAPACITY_16.  		 * Tell the SCSI layer to try READ_CAPACITY_10 first. +		 * However some USB 3.0 drive enclosures return capacity +		 * modulo 2TB. Those must use READ_CAPACITY_16  		 */ -		sdev->try_rc_10_first = 1; +		if (!(us->fflags & US_FL_NEEDS_CAP16)) +			sdev->try_rc_10_first = 1;  		/* assume SPC3 or latter devices support sense size > 18 */  		if (sdev->scsi_level > SCSI_SPC_2) diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index c015f2c16729..de32cfa5bfa6 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h @@ -1925,6 +1925,13 @@ UNUSUAL_DEV(  0x1652, 0x6600, 0x0201, 0x0201,  		USB_SC_DEVICE, USB_PR_DEVICE, NULL,  		US_FL_IGNORE_RESIDUE ), +/* Reported by Oliver Neukum <oneukum@suse.com> */ +UNUSUAL_DEV(  0x174c, 0x55aa, 0x0100, 0x0100, +		"ASMedia", +		"AS2105", +		USB_SC_DEVICE, USB_PR_DEVICE, NULL, +		US_FL_NEEDS_CAP16), +  /* Reported by Jesse Feddema <jdfeddema@gmail.com> */  UNUSUAL_DEV(  0x177f, 0x0400, 0x0000, 0x0000,  		"Yarvik", diff --git a/include/linux/usb_usual.h b/include/linux/usb_usual.h index bf99cd01be20..630356866030 100644 --- a/include/linux/usb_usual.h +++ b/include/linux/usb_usual.h @@ -66,7 +66,9 @@  	US_FLAG(INITIAL_READ10,	0x00100000)			\  		/* Initial READ(10) (and others) must be retried */	\  	US_FLAG(WRITE_CACHE,	0x00200000)			\ -		/* Write Cache status is not available */ +		/* Write Cache status is not available */	\ +	US_FLAG(NEEDS_CAP16,	0x00400000) +		/* cannot handle READ_CAPACITY_10 */  #define US_FLAG(name, value)	US_FL_##name = value ,  enum { US_DO_ALL_FLAGS }; | 
