diff options
Diffstat (limited to 'drivers/usb/storage')
-rw-r--r-- | drivers/usb/storage/unusual_devs.h | 65 | ||||
-rw-r--r-- | drivers/usb/storage/usb.c | 13 |
2 files changed, 52 insertions, 26 deletions
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index a5ca449f6e64..b130e170b4a8 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h | |||
@@ -145,6 +145,13 @@ UNUSUAL_DEV( 0x0420, 0x0001, 0x0100, 0x0100, | |||
145 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 145 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
146 | US_FL_IGNORE_RESIDUE ), | 146 | US_FL_IGNORE_RESIDUE ), |
147 | 147 | ||
148 | /* Reported by Mario Rettig <mariorettig@web.de> */ | ||
149 | UNUSUAL_DEV( 0x0421, 0x042e, 0x0100, 0x0100, | ||
150 | "Nokia", | ||
151 | "Nokia 3250", | ||
152 | US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
153 | US_FL_IGNORE_RESIDUE | US_FL_FIX_CAPACITY ), | ||
154 | |||
148 | /* Reported by Sumedha Swamy <sumedhaswamy@gmail.com> and | 155 | /* Reported by Sumedha Swamy <sumedhaswamy@gmail.com> and |
149 | * Einar Th. Einarsson <einarthered@gmail.com> */ | 156 | * Einar Th. Einarsson <einarthered@gmail.com> */ |
150 | UNUSUAL_DEV( 0x0421, 0x0444, 0x0100, 0x0100, | 157 | UNUSUAL_DEV( 0x0421, 0x0444, 0x0100, 0x0100, |
@@ -234,16 +241,6 @@ UNUSUAL_DEV( 0x0482, 0x0103, 0x0100, 0x0100, | |||
234 | "Finecam S5", | 241 | "Finecam S5", |
235 | US_SC_DEVICE, US_PR_DEVICE, NULL, US_FL_FIX_INQUIRY), | 242 | US_SC_DEVICE, US_PR_DEVICE, NULL, US_FL_FIX_INQUIRY), |
236 | 243 | ||
237 | /* Patch for Kyocera Finecam L3 | ||
238 | * Submitted by Michael Krauth <michael.krauth@web.de> | ||
239 | * and Alessandro Fracchetti <al.fracchetti@tin.it> | ||
240 | */ | ||
241 | UNUSUAL_DEV( 0x0482, 0x0105, 0x0100, 0x0100, | ||
242 | "Kyocera", | ||
243 | "Finecam L3", | ||
244 | US_SC_SCSI, US_PR_BULK, NULL, | ||
245 | US_FL_FIX_INQUIRY), | ||
246 | |||
247 | /* Reported by Paul Stewart <stewart@wetlogic.net> | 244 | /* Reported by Paul Stewart <stewart@wetlogic.net> |
248 | * This entry is needed because the device reports Sub=ff */ | 245 | * This entry is needed because the device reports Sub=ff */ |
249 | UNUSUAL_DEV( 0x04a4, 0x0004, 0x0001, 0x0001, | 246 | UNUSUAL_DEV( 0x04a4, 0x0004, 0x0001, 0x0001, |
@@ -592,6 +589,13 @@ UNUSUAL_DEV( 0x054c, 0x0099, 0x0000, 0x9999, | |||
592 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 589 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
593 | US_FL_FIX_INQUIRY ), | 590 | US_FL_FIX_INQUIRY ), |
594 | 591 | ||
592 | /* floppy reports multiple luns */ | ||
593 | UNUSUAL_DEV( 0x055d, 0x2020, 0x0000, 0x0210, | ||
594 | "SAMSUNG", | ||
595 | "SFD-321U [FW 0C]", | ||
596 | US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
597 | US_FL_SINGLE_LUN ), | ||
598 | |||
595 | 599 | ||
596 | UNUSUAL_DEV( 0x057b, 0x0000, 0x0000, 0x0299, | 600 | UNUSUAL_DEV( 0x057b, 0x0000, 0x0000, 0x0299, |
597 | "Y-E Data", | 601 | "Y-E Data", |
@@ -627,18 +631,6 @@ UNUSUAL_DEV( 0x0595, 0x4343, 0x0000, 0x2210, | |||
627 | "Digital Camera EX-20 DSC", | 631 | "Digital Camera EX-20 DSC", |
628 | US_SC_8070, US_PR_DEVICE, NULL, 0 ), | 632 | US_SC_8070, US_PR_DEVICE, NULL, 0 ), |
629 | 633 | ||
630 | /* The entry was here before I took over, and had US_SC_RBC. It turns | ||
631 | * out that isn't needed. Additionally, Torsten Eriksson | ||
632 | * <Torsten.Eriksson@bergianska.se> is able to use his device fine | ||
633 | * without this entry at all - but I don't suspect that will be true | ||
634 | * for all users (the protocol is likely needed), so is staying at | ||
635 | * this time. - Phil Dibowitz <phil@ipom.com> | ||
636 | */ | ||
637 | UNUSUAL_DEV( 0x059f, 0xa601, 0x0200, 0x0200, | ||
638 | "LaCie", | ||
639 | "USB Hard Disk", | ||
640 | US_SC_DEVICE, US_PR_CB, NULL, 0 ), | ||
641 | |||
642 | /* Submitted by Joel Bourquard <numlock@freesurf.ch> | 634 | /* Submitted by Joel Bourquard <numlock@freesurf.ch> |
643 | * Some versions of this device need the SubClass and Protocol overrides | 635 | * Some versions of this device need the SubClass and Protocol overrides |
644 | * while others don't. | 636 | * while others don't. |
@@ -1106,7 +1098,15 @@ UNUSUAL_DEV( 0x0a17, 0x006, 0x0000, 0xffff, | |||
1106 | "Optio S/S4", | 1098 | "Optio S/S4", |
1107 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 1099 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
1108 | US_FL_FIX_INQUIRY ), | 1100 | US_FL_FIX_INQUIRY ), |
1109 | 1101 | ||
1102 | /* This is a virtual windows driver CD, which the zd1211rw driver automatically | ||
1103 | * converts into a WLAN device. */ | ||
1104 | UNUSUAL_DEV( 0x0ace, 0x2011, 0x0101, 0x0101, | ||
1105 | "ZyXEL", | ||
1106 | "G-220F USB-WLAN Install", | ||
1107 | US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
1108 | US_FL_IGNORE_DEVICE ), | ||
1109 | |||
1110 | #ifdef CONFIG_USB_STORAGE_ISD200 | 1110 | #ifdef CONFIG_USB_STORAGE_ISD200 |
1111 | UNUSUAL_DEV( 0x0bf6, 0xa001, 0x0100, 0x0110, | 1111 | UNUSUAL_DEV( 0x0bf6, 0xa001, 0x0100, 0x0110, |
1112 | "ATI", | 1112 | "ATI", |
@@ -1237,6 +1237,16 @@ UNUSUAL_DEV( 0x0ed1, 0x7636, 0x0103, 0x0103, | |||
1237 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 1237 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
1238 | US_FL_IGNORE_RESIDUE | US_FL_GO_SLOW | US_FL_MAX_SECTORS_64), | 1238 | US_FL_IGNORE_RESIDUE | US_FL_GO_SLOW | US_FL_MAX_SECTORS_64), |
1239 | 1239 | ||
1240 | /* David Kuehling <dvdkhlng@gmx.de>: | ||
1241 | * for MP3-Player AVOX WSX-300ER (bought in Japan). Reports lots of SCSI | ||
1242 | * errors when trying to write. | ||
1243 | */ | ||
1244 | UNUSUAL_DEV( 0x0f19, 0x0105, 0x0100, 0x0100, | ||
1245 | "C-MEX", | ||
1246 | "A-VOX", | ||
1247 | US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
1248 | US_FL_IGNORE_RESIDUE ), | ||
1249 | |||
1240 | /* Reported by Michael Stattmann <michael@stattmann.com> */ | 1250 | /* Reported by Michael Stattmann <michael@stattmann.com> */ |
1241 | UNUSUAL_DEV( 0x0fce, 0xd008, 0x0000, 0x0000, | 1251 | UNUSUAL_DEV( 0x0fce, 0xd008, 0x0000, 0x0000, |
1242 | "Sony Ericsson", | 1252 | "Sony Ericsson", |
@@ -1244,11 +1254,18 @@ UNUSUAL_DEV( 0x0fce, 0xd008, 0x0000, 0x0000, | |||
1244 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 1254 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
1245 | US_FL_NO_WP_DETECT ), | 1255 | US_FL_NO_WP_DETECT ), |
1246 | 1256 | ||
1257 | /* Reported by Emmanuel Vasilakis <evas@forthnet.gr> */ | ||
1258 | UNUSUAL_DEV( 0x0fce, 0xe031, 0x0000, 0x0000, | ||
1259 | "Sony Ericsson", | ||
1260 | "M600i", | ||
1261 | US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
1262 | US_FL_FIX_CAPACITY ), | ||
1263 | |||
1247 | /* Reported by Kevin Cernekee <kpc-usbdev@gelato.uiuc.edu> | 1264 | /* Reported by Kevin Cernekee <kpc-usbdev@gelato.uiuc.edu> |
1248 | * Tested on hardware version 1.10. | 1265 | * Tested on hardware version 1.10. |
1249 | * Entry is needed only for the initializer function override. | 1266 | * Entry is needed only for the initializer function override. |
1250 | */ | 1267 | */ |
1251 | UNUSUAL_DEV( 0x1019, 0x0c55, 0x0000, 0x9999, | 1268 | UNUSUAL_DEV( 0x1019, 0x0c55, 0x0110, 0x0110, |
1252 | "Desknote", | 1269 | "Desknote", |
1253 | "UCR-61S2B", | 1270 | "UCR-61S2B", |
1254 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_ucr61s2b_init, | 1271 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_ucr61s2b_init, |
diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c index 5ee19be52f65..8d7bdcb5924d 100644 --- a/drivers/usb/storage/usb.c +++ b/drivers/usb/storage/usb.c | |||
@@ -483,7 +483,7 @@ static struct us_unusual_dev *find_unusual(const struct usb_device_id *id) | |||
483 | } | 483 | } |
484 | 484 | ||
485 | /* Get the unusual_devs entries and the string descriptors */ | 485 | /* Get the unusual_devs entries and the string descriptors */ |
486 | static void get_device_info(struct us_data *us, const struct usb_device_id *id) | 486 | static int get_device_info(struct us_data *us, const struct usb_device_id *id) |
487 | { | 487 | { |
488 | struct usb_device *dev = us->pusb_dev; | 488 | struct usb_device *dev = us->pusb_dev; |
489 | struct usb_interface_descriptor *idesc = | 489 | struct usb_interface_descriptor *idesc = |
@@ -500,6 +500,11 @@ static void get_device_info(struct us_data *us, const struct usb_device_id *id) | |||
500 | unusual_dev->useTransport; | 500 | unusual_dev->useTransport; |
501 | us->flags = USB_US_ORIG_FLAGS(id->driver_info); | 501 | us->flags = USB_US_ORIG_FLAGS(id->driver_info); |
502 | 502 | ||
503 | if (us->flags & US_FL_IGNORE_DEVICE) { | ||
504 | printk(KERN_INFO USB_STORAGE "device ignored\n"); | ||
505 | return -ENODEV; | ||
506 | } | ||
507 | |||
503 | /* | 508 | /* |
504 | * This flag is only needed when we're in high-speed, so let's | 509 | * This flag is only needed when we're in high-speed, so let's |
505 | * disable it if we're in full-speed | 510 | * disable it if we're in full-speed |
@@ -541,6 +546,8 @@ static void get_device_info(struct us_data *us, const struct usb_device_id *id) | |||
541 | msgs[msg], | 546 | msgs[msg], |
542 | UTS_RELEASE); | 547 | UTS_RELEASE); |
543 | } | 548 | } |
549 | |||
550 | return 0; | ||
544 | } | 551 | } |
545 | 552 | ||
546 | /* Get the transport settings */ | 553 | /* Get the transport settings */ |
@@ -969,7 +976,9 @@ static int storage_probe(struct usb_interface *intf, | |||
969 | * of the match from the usb_device_id table, so we can find the | 976 | * of the match from the usb_device_id table, so we can find the |
970 | * corresponding entry in the private table. | 977 | * corresponding entry in the private table. |
971 | */ | 978 | */ |
972 | get_device_info(us, id); | 979 | result = get_device_info(us, id); |
980 | if (result) | ||
981 | goto BadDevice; | ||
973 | 982 | ||
974 | /* Get the transport, protocol, and pipe settings */ | 983 | /* Get the transport, protocol, and pipe settings */ |
975 | result = get_transport(us); | 984 | result = get_transport(us); |