diff options
Diffstat (limited to 'drivers/usb/storage/cypress_atacb.c')
-rw-r--r-- | drivers/usb/storage/cypress_atacb.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/drivers/usb/storage/cypress_atacb.c b/drivers/usb/storage/cypress_atacb.c index e4efc7bb833f..8514a2d82b72 100644 --- a/drivers/usb/storage/cypress_atacb.c +++ b/drivers/usb/storage/cypress_atacb.c | |||
@@ -248,14 +248,26 @@ static int cypress_probe(struct usb_interface *intf, | |||
248 | { | 248 | { |
249 | struct us_data *us; | 249 | struct us_data *us; |
250 | int result; | 250 | int result; |
251 | struct usb_device *device; | ||
251 | 252 | ||
252 | result = usb_stor_probe1(&us, intf, id, | 253 | result = usb_stor_probe1(&us, intf, id, |
253 | (id - cypress_usb_ids) + cypress_unusual_dev_list); | 254 | (id - cypress_usb_ids) + cypress_unusual_dev_list); |
254 | if (result) | 255 | if (result) |
255 | return result; | 256 | return result; |
256 | 257 | ||
257 | us->protocol_name = "Transparent SCSI with Cypress ATACB"; | 258 | /* Among CY7C68300 chips, the A revision does not support Cypress ATACB |
258 | us->proto_handler = cypress_atacb_passthrough; | 259 | * Filter out this revision from EEPROM default descriptor values |
260 | */ | ||
261 | device = interface_to_usbdev(intf); | ||
262 | if (device->descriptor.iManufacturer != 0x38 || | ||
263 | device->descriptor.iProduct != 0x4e || | ||
264 | device->descriptor.iSerialNumber != 0x64) { | ||
265 | us->protocol_name = "Transparent SCSI with Cypress ATACB"; | ||
266 | us->proto_handler = cypress_atacb_passthrough; | ||
267 | } else { | ||
268 | us->protocol_name = "Transparent SCSI"; | ||
269 | us->proto_handler = usb_stor_transparent_scsi_command; | ||
270 | } | ||
259 | 271 | ||
260 | result = usb_stor_probe2(us); | 272 | result = usb_stor_probe2(us); |
261 | return result; | 273 | return result; |