diff options
Diffstat (limited to 'drivers/usb/serial')
-rw-r--r-- | drivers/usb/serial/aircable.c | 4 | ||||
-rw-r--r-- | drivers/usb/serial/cp2101.c | 2 | ||||
-rw-r--r-- | drivers/usb/serial/ftdi_sio.c | 9 | ||||
-rw-r--r-- | drivers/usb/serial/ftdi_sio.h | 12 | ||||
-rw-r--r-- | drivers/usb/serial/option.c | 116 | ||||
-rw-r--r-- | drivers/usb/serial/ti_usb_3410_5052.c | 82 | ||||
-rw-r--r-- | drivers/usb/serial/ti_usb_3410_5052.h | 12 | ||||
-rw-r--r-- | drivers/usb/serial/usb-serial.c | 3 |
8 files changed, 178 insertions, 62 deletions
diff --git a/drivers/usb/serial/aircable.c b/drivers/usb/serial/aircable.c index 537f953bd7f8..6d106e74265e 100644 --- a/drivers/usb/serial/aircable.c +++ b/drivers/usb/serial/aircable.c | |||
@@ -621,9 +621,9 @@ static int __init aircable_init(void) | |||
621 | goto failed_usb_register; | 621 | goto failed_usb_register; |
622 | return 0; | 622 | return 0; |
623 | 623 | ||
624 | failed_serial_register: | ||
625 | usb_serial_deregister(&aircable_device); | ||
626 | failed_usb_register: | 624 | failed_usb_register: |
625 | usb_serial_deregister(&aircable_device); | ||
626 | failed_serial_register: | ||
627 | return retval; | 627 | return retval; |
628 | } | 628 | } |
629 | 629 | ||
diff --git a/drivers/usb/serial/cp2101.c b/drivers/usb/serial/cp2101.c index cfaf1f085535..027f4b7dde86 100644 --- a/drivers/usb/serial/cp2101.c +++ b/drivers/usb/serial/cp2101.c | |||
@@ -85,6 +85,8 @@ static struct usb_device_id id_table [] = { | |||
85 | { USB_DEVICE(0x10C4, 0x81E2) }, /* Lipowsky Industrie Elektronik GmbH, Baby-LIN */ | 85 | { USB_DEVICE(0x10C4, 0x81E2) }, /* Lipowsky Industrie Elektronik GmbH, Baby-LIN */ |
86 | { USB_DEVICE(0x10C4, 0x81E7) }, /* Aerocomm Radio */ | 86 | { USB_DEVICE(0x10C4, 0x81E7) }, /* Aerocomm Radio */ |
87 | { USB_DEVICE(0x10C4, 0x8218) }, /* Lipowsky Industrie Elektronik GmbH, HARP-1 */ | 87 | { USB_DEVICE(0x10C4, 0x8218) }, /* Lipowsky Industrie Elektronik GmbH, HARP-1 */ |
88 | { USB_DEVICE(0x10C4, 0x822B) }, /* Modem EDGE(GSM) Comander 2 */ | ||
89 | { USB_DEVICE(0x10C4, 0x826B) }, /* Cygnal Integrated Products, Inc., Fasttrax GPS demostration module */ | ||
88 | { USB_DEVICE(0x10c4, 0x8293) }, /* Telegesys ETRX2USB */ | 90 | { USB_DEVICE(0x10c4, 0x8293) }, /* Telegesys ETRX2USB */ |
89 | { USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */ | 91 | { USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */ |
90 | { USB_DEVICE(0x10C4, 0x83A8) }, /* Amber Wireless AMB2560 */ | 92 | { USB_DEVICE(0x10C4, 0x83A8) }, /* Amber Wireless AMB2560 */ |
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index ef6cfa5a447f..f92f4d773374 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c | |||
@@ -660,6 +660,9 @@ static struct usb_device_id id_table_combined [] = { | |||
660 | { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO4x4_PID) }, | 660 | { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO4x4_PID) }, |
661 | { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DGQG_PID) }, | 661 | { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DGQG_PID) }, |
662 | { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DUSB_PID) }, | 662 | { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DUSB_PID) }, |
663 | { USB_DEVICE(ALTI2_VID, ALTI2_N3_PID) }, | ||
664 | { USB_DEVICE(FTDI_VID, DIEBOLD_BCS_SE923_PID) }, | ||
665 | { USB_DEVICE(FTDI_VID, FTDI_NDI_HUC_PID) }, | ||
663 | { }, /* Optional parameter entry */ | 666 | { }, /* Optional parameter entry */ |
664 | { } /* Terminating entry */ | 667 | { } /* Terminating entry */ |
665 | }; | 668 | }; |
@@ -1062,8 +1065,10 @@ static int set_serial_info(struct tty_struct *tty, | |||
1062 | 1065 | ||
1063 | if (!capable(CAP_SYS_ADMIN)) { | 1066 | if (!capable(CAP_SYS_ADMIN)) { |
1064 | if (((new_serial.flags & ~ASYNC_USR_MASK) != | 1067 | if (((new_serial.flags & ~ASYNC_USR_MASK) != |
1065 | (priv->flags & ~ASYNC_USR_MASK))) | 1068 | (priv->flags & ~ASYNC_USR_MASK))) { |
1069 | unlock_kernel(); | ||
1066 | return -EPERM; | 1070 | return -EPERM; |
1071 | } | ||
1067 | priv->flags = ((priv->flags & ~ASYNC_USR_MASK) | | 1072 | priv->flags = ((priv->flags & ~ASYNC_USR_MASK) | |
1068 | (new_serial.flags & ASYNC_USR_MASK)); | 1073 | (new_serial.flags & ASYNC_USR_MASK)); |
1069 | priv->custom_divisor = new_serial.custom_divisor; | 1074 | priv->custom_divisor = new_serial.custom_divisor; |
@@ -2030,7 +2035,7 @@ static void ftdi_process_read(struct work_struct *work) | |||
2030 | spin_unlock_irqrestore(&priv->rx_lock, flags); | 2035 | spin_unlock_irqrestore(&priv->rx_lock, flags); |
2031 | dbg("%s - deferring remainder until unthrottled", | 2036 | dbg("%s - deferring remainder until unthrottled", |
2032 | __func__); | 2037 | __func__); |
2033 | return; | 2038 | goto out; |
2034 | } | 2039 | } |
2035 | spin_unlock_irqrestore(&priv->rx_lock, flags); | 2040 | spin_unlock_irqrestore(&priv->rx_lock, flags); |
2036 | /* if the port is closed stop trying to read */ | 2041 | /* if the port is closed stop trying to read */ |
diff --git a/drivers/usb/serial/ftdi_sio.h b/drivers/usb/serial/ftdi_sio.h index 373ee09975bb..e300c840f8ca 100644 --- a/drivers/usb/serial/ftdi_sio.h +++ b/drivers/usb/serial/ftdi_sio.h | |||
@@ -844,6 +844,9 @@ | |||
844 | #define TML_VID 0x1B91 /* Vendor ID */ | 844 | #define TML_VID 0x1B91 /* Vendor ID */ |
845 | #define TML_USB_SERIAL_PID 0x0064 /* USB - Serial Converter */ | 845 | #define TML_USB_SERIAL_PID 0x0064 /* USB - Serial Converter */ |
846 | 846 | ||
847 | /* NDI Polaris System */ | ||
848 | #define FTDI_NDI_HUC_PID 0xDA70 | ||
849 | |||
847 | /* Propox devices */ | 850 | /* Propox devices */ |
848 | #define FTDI_PROPOX_JTAGCABLEII_PID 0xD738 | 851 | #define FTDI_PROPOX_JTAGCABLEII_PID 0xD738 |
849 | 852 | ||
@@ -854,6 +857,10 @@ | |||
854 | #define FTDI_DOMINTELL_DGQG_PID 0xEF50 /* Master */ | 857 | #define FTDI_DOMINTELL_DGQG_PID 0xEF50 /* Master */ |
855 | #define FTDI_DOMINTELL_DUSB_PID 0xEF51 /* DUSB01 module */ | 858 | #define FTDI_DOMINTELL_DUSB_PID 0xEF51 /* DUSB01 module */ |
856 | 859 | ||
860 | /* Alti-2 products http://www.alti-2.com */ | ||
861 | #define ALTI2_VID 0x1BC9 | ||
862 | #define ALTI2_N3_PID 0x6001 /* Neptune 3 */ | ||
863 | |||
857 | /* Commands */ | 864 | /* Commands */ |
858 | #define FTDI_SIO_RESET 0 /* Reset the port */ | 865 | #define FTDI_SIO_RESET 0 /* Reset the port */ |
859 | #define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */ | 866 | #define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */ |
@@ -881,6 +888,11 @@ | |||
881 | #define RATOC_PRODUCT_ID_USB60F 0xb020 | 888 | #define RATOC_PRODUCT_ID_USB60F 0xb020 |
882 | 889 | ||
883 | /* | 890 | /* |
891 | * DIEBOLD BCS SE923 | ||
892 | */ | ||
893 | #define DIEBOLD_BCS_SE923_PID 0xfb99 | ||
894 | |||
895 | /* | ||
884 | * BmRequestType: 1100 0000b | 896 | * BmRequestType: 1100 0000b |
885 | * bRequest: FTDI_E2_READ | 897 | * bRequest: FTDI_E2_READ |
886 | * wValue: 0 | 898 | * wValue: 0 |
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index 5ed183477aaf..b7c132bded7f 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c | |||
@@ -158,6 +158,13 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po | |||
158 | #define HUAWEI_PRODUCT_E143E 0x143E | 158 | #define HUAWEI_PRODUCT_E143E 0x143E |
159 | #define HUAWEI_PRODUCT_E143F 0x143F | 159 | #define HUAWEI_PRODUCT_E143F 0x143F |
160 | 160 | ||
161 | #define QUANTA_VENDOR_ID 0x0408 | ||
162 | #define QUANTA_PRODUCT_Q101 0xEA02 | ||
163 | #define QUANTA_PRODUCT_Q111 0xEA03 | ||
164 | #define QUANTA_PRODUCT_GLX 0xEA04 | ||
165 | #define QUANTA_PRODUCT_GKE 0xEA05 | ||
166 | #define QUANTA_PRODUCT_GLE 0xEA06 | ||
167 | |||
161 | #define NOVATELWIRELESS_VENDOR_ID 0x1410 | 168 | #define NOVATELWIRELESS_VENDOR_ID 0x1410 |
162 | 169 | ||
163 | /* YISO PRODUCTS */ | 170 | /* YISO PRODUCTS */ |
@@ -192,14 +199,15 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po | |||
192 | #define NOVATELWIRELESS_PRODUCT_MC950D 0x4400 | 199 | #define NOVATELWIRELESS_PRODUCT_MC950D 0x4400 |
193 | 200 | ||
194 | /* FUTURE NOVATEL PRODUCTS */ | 201 | /* FUTURE NOVATEL PRODUCTS */ |
195 | #define NOVATELWIRELESS_PRODUCT_EVDO_1 0x6000 | 202 | #define NOVATELWIRELESS_PRODUCT_EVDO_FULLSPEED 0X6000 |
196 | #define NOVATELWIRELESS_PRODUCT_HSPA_1 0x7000 | 203 | #define NOVATELWIRELESS_PRODUCT_EVDO_HIGHSPEED 0X6001 |
197 | #define NOVATELWIRELESS_PRODUCT_EMBEDDED_1 0x8000 | 204 | #define NOVATELWIRELESS_PRODUCT_HSPA_FULLSPEED 0X7000 |
198 | #define NOVATELWIRELESS_PRODUCT_GLOBAL_1 0x9000 | 205 | #define NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED 0X7001 |
199 | #define NOVATELWIRELESS_PRODUCT_EVDO_2 0x6001 | 206 | #define NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_FULLSPEED 0X8000 |
200 | #define NOVATELWIRELESS_PRODUCT_HSPA_2 0x7001 | 207 | #define NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_HIGHSPEED 0X8001 |
201 | #define NOVATELWIRELESS_PRODUCT_EMBEDDED_2 0x8001 | 208 | #define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_FULLSPEED 0X9000 |
202 | #define NOVATELWIRELESS_PRODUCT_GLOBAL_2 0x9001 | 209 | #define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_HIGHSPEED 0X9001 |
210 | #define NOVATELWIRELESS_PRODUCT_GLOBAL 0XA001 | ||
203 | 211 | ||
204 | /* AMOI PRODUCTS */ | 212 | /* AMOI PRODUCTS */ |
205 | #define AMOI_VENDOR_ID 0x1614 | 213 | #define AMOI_VENDOR_ID 0x1614 |
@@ -209,6 +217,27 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po | |||
209 | 217 | ||
210 | #define DELL_VENDOR_ID 0x413C | 218 | #define DELL_VENDOR_ID 0x413C |
211 | 219 | ||
220 | /* Dell modems */ | ||
221 | #define DELL_PRODUCT_5700_MINICARD 0x8114 | ||
222 | #define DELL_PRODUCT_5500_MINICARD 0x8115 | ||
223 | #define DELL_PRODUCT_5505_MINICARD 0x8116 | ||
224 | #define DELL_PRODUCT_5700_EXPRESSCARD 0x8117 | ||
225 | #define DELL_PRODUCT_5510_EXPRESSCARD 0x8118 | ||
226 | |||
227 | #define DELL_PRODUCT_5700_MINICARD_SPRINT 0x8128 | ||
228 | #define DELL_PRODUCT_5700_MINICARD_TELUS 0x8129 | ||
229 | |||
230 | #define DELL_PRODUCT_5720_MINICARD_VZW 0x8133 | ||
231 | #define DELL_PRODUCT_5720_MINICARD_SPRINT 0x8134 | ||
232 | #define DELL_PRODUCT_5720_MINICARD_TELUS 0x8135 | ||
233 | #define DELL_PRODUCT_5520_MINICARD_CINGULAR 0x8136 | ||
234 | #define DELL_PRODUCT_5520_MINICARD_GENERIC_L 0x8137 | ||
235 | #define DELL_PRODUCT_5520_MINICARD_GENERIC_I 0x8138 | ||
236 | |||
237 | #define DELL_PRODUCT_5730_MINICARD_SPRINT 0x8180 | ||
238 | #define DELL_PRODUCT_5730_MINICARD_TELUS 0x8181 | ||
239 | #define DELL_PRODUCT_5730_MINICARD_VZW 0x8182 | ||
240 | |||
212 | #define KYOCERA_VENDOR_ID 0x0c88 | 241 | #define KYOCERA_VENDOR_ID 0x0c88 |
213 | #define KYOCERA_PRODUCT_KPC650 0x17da | 242 | #define KYOCERA_PRODUCT_KPC650 0x17da |
214 | #define KYOCERA_PRODUCT_KPC680 0x180a | 243 | #define KYOCERA_PRODUCT_KPC680 0x180a |
@@ -224,7 +253,7 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po | |||
224 | #define ONDA_VENDOR_ID 0x19d2 | 253 | #define ONDA_VENDOR_ID 0x19d2 |
225 | #define ONDA_PRODUCT_MSA501HS 0x0001 | 254 | #define ONDA_PRODUCT_MSA501HS 0x0001 |
226 | #define ONDA_PRODUCT_ET502HS 0x0002 | 255 | #define ONDA_PRODUCT_ET502HS 0x0002 |
227 | #define ONDA_PRODUCT_MT503HS 0x0200 | 256 | #define ONDA_PRODUCT_MT503HS 0x2000 |
228 | 257 | ||
229 | #define BANDRICH_VENDOR_ID 0x1A8D | 258 | #define BANDRICH_VENDOR_ID 0x1A8D |
230 | #define BANDRICH_PRODUCT_C100_1 0x1002 | 259 | #define BANDRICH_PRODUCT_C100_1 0x1002 |
@@ -265,13 +294,11 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po | |||
265 | 294 | ||
266 | /* Ericsson products */ | 295 | /* Ericsson products */ |
267 | #define ERICSSON_VENDOR_ID 0x0bdb | 296 | #define ERICSSON_VENDOR_ID 0x0bdb |
268 | #define ERICSSON_PRODUCT_F3507G 0x1900 | 297 | #define ERICSSON_PRODUCT_F3507G_1 0x1900 |
298 | #define ERICSSON_PRODUCT_F3507G_2 0x1902 | ||
269 | 299 | ||
270 | /* Pantech products */ | 300 | #define BENQ_VENDOR_ID 0x04a5 |
271 | #define PANTECH_VENDOR_ID 0x106c | 301 | #define BENQ_PRODUCT_H10 0x4068 |
272 | #define PANTECH_PRODUCT_PC5740 0x3701 | ||
273 | #define PANTECH_PRODUCT_PC5750 0x3702 /* PX-500 */ | ||
274 | #define PANTECH_PRODUCT_UM150 0x3711 | ||
275 | 302 | ||
276 | static struct usb_device_id option_ids[] = { | 303 | static struct usb_device_id option_ids[] = { |
277 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) }, | 304 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) }, |
@@ -298,6 +325,11 @@ static struct usb_device_id option_ids[] = { | |||
298 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_GT) }, | 325 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_GT) }, |
299 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_EX) }, | 326 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_EX) }, |
300 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_MODEM) }, | 327 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_MODEM) }, |
328 | { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_Q101) }, | ||
329 | { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_Q111) }, | ||
330 | { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLX) }, | ||
331 | { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GKE) }, | ||
332 | { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLE) }, | ||
301 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600, 0xff, 0xff, 0xff) }, | 333 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600, 0xff, 0xff, 0xff) }, |
302 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220, 0xff, 0xff, 0xff) }, | 334 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220, 0xff, 0xff, 0xff) }, |
303 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS, 0xff, 0xff, 0xff) }, | 335 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS, 0xff, 0xff, 0xff) }, |
@@ -383,31 +415,37 @@ static struct usb_device_id option_ids[] = { | |||
383 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU870D) }, /* Novatel EU850D/EU860D/EU870D */ | 415 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU870D) }, /* Novatel EU850D/EU860D/EU870D */ |
384 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC950D) }, /* Novatel MC930D/MC950D */ | 416 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC950D) }, /* Novatel MC930D/MC950D */ |
385 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC727) }, /* Novatel MC727/U727/USB727 */ | 417 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC727) }, /* Novatel MC727/U727/USB727 */ |
386 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_1) }, /* Novatel EVDO product */ | 418 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_FULLSPEED) }, /* Novatel EVDO product */ |
387 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_1) }, /* Novatel HSPA product */ | 419 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_FULLSPEED) }, /* Novatel HSPA product */ |
388 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EMBEDDED_1) }, /* Novatel Embedded product */ | 420 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_FULLSPEED) }, /* Novatel EVDO Embedded product */ |
389 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_GLOBAL_1) }, /* Novatel Global product */ | 421 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_FULLSPEED) }, /* Novatel HSPA Embedded product */ |
390 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_2) }, /* Novatel EVDO product */ | 422 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_HIGHSPEED) }, /* Novatel EVDO product */ |
391 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_2) }, /* Novatel HSPA product */ | 423 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED) }, /* Novatel HSPA product */ |
392 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EMBEDDED_2) }, /* Novatel Embedded product */ | 424 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_HIGHSPEED) }, /* Novatel EVDO Embedded product */ |
393 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_GLOBAL_2) }, /* Novatel Global product */ | 425 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_HIGHSPEED) }, /* Novatel HSPA Embedded product */ |
426 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_GLOBAL) }, /* Novatel Global product */ | ||
394 | 427 | ||
395 | { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01) }, | 428 | { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01) }, |
396 | { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01A) }, | 429 | { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01A) }, |
397 | { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H02) }, | 430 | { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H02) }, |
398 | 431 | ||
399 | { USB_DEVICE(DELL_VENDOR_ID, 0x8114) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite EV620 CDMA/EV-DO */ | 432 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5700_MINICARD) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite EV620 CDMA/EV-DO */ |
400 | { USB_DEVICE(DELL_VENDOR_ID, 0x8115) }, /* Dell Wireless 5500 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */ | 433 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5500_MINICARD) }, /* Dell Wireless 5500 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */ |
401 | { USB_DEVICE(DELL_VENDOR_ID, 0x8116) }, /* Dell Wireless 5505 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */ | 434 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5505_MINICARD) }, /* Dell Wireless 5505 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */ |
402 | { USB_DEVICE(DELL_VENDOR_ID, 0x8117) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO ExpressCard == Novatel Merlin XV620 CDMA/EV-DO */ | 435 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5700_EXPRESSCARD) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO ExpressCard == Novatel Merlin XV620 CDMA/EV-DO */ |
403 | { USB_DEVICE(DELL_VENDOR_ID, 0x8118) }, /* Dell Wireless 5510 Mobile Broadband HSDPA ExpressCard == Novatel Merlin XU870 HSDPA/3G */ | 436 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5510_EXPRESSCARD) }, /* Dell Wireless 5510 Mobile Broadband HSDPA ExpressCard == Novatel Merlin XU870 HSDPA/3G */ |
404 | { USB_DEVICE(DELL_VENDOR_ID, 0x8128) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite E720 CDMA/EV-DO */ | 437 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5700_MINICARD_SPRINT) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite E720 CDMA/EV-DO */ |
405 | { USB_DEVICE(DELL_VENDOR_ID, 0x8129) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite ET620 CDMA/EV-DO */ | 438 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5700_MINICARD_TELUS) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite ET620 CDMA/EV-DO */ |
406 | { USB_DEVICE(DELL_VENDOR_ID, 0x8133) }, /* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */ | 439 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5720_MINICARD_VZW) }, /* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */ |
407 | { USB_DEVICE(DELL_VENDOR_ID, 0x8136) }, /* Dell Wireless HSDPA 5520 == Novatel Expedite EU860D */ | 440 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5720_MINICARD_SPRINT) }, /* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */ |
408 | { USB_DEVICE(DELL_VENDOR_ID, 0x8137) }, /* Dell Wireless HSDPA 5520 */ | 441 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5720_MINICARD_TELUS) }, /* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */ |
409 | { USB_DEVICE(DELL_VENDOR_ID, 0x8138) }, /* Dell Wireless 5520 Voda I Mobile Broadband (3G HSDPA) Minicard */ | 442 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_CINGULAR) }, /* Dell Wireless HSDPA 5520 == Novatel Expedite EU860D */ |
410 | { USB_DEVICE(DELL_VENDOR_ID, 0x8147) }, /* Dell Wireless 5530 Mobile Broadband (3G HSPA) Mini-Card */ | 443 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_GENERIC_L) }, /* Dell Wireless HSDPA 5520 */ |
444 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_GENERIC_I) }, /* Dell Wireless 5520 Voda I Mobile Broadband (3G HSDPA) Minicard */ | ||
445 | { USB_DEVICE(DELL_VENDOR_ID, 0x8147) }, /* Dell Wireless 5530 Mobile Broadband (3G HSPA) Mini-Card */ | ||
446 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_SPRINT) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */ | ||
447 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_TELUS) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */ | ||
448 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_VZW) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */ | ||
411 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) }, /* ADU-E100, ADU-310 */ | 449 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) }, /* ADU-E100, ADU-310 */ |
412 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) }, | 450 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) }, |
413 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_620UW) }, | 451 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_620UW) }, |
@@ -475,10 +513,10 @@ static struct usb_device_id option_ids[] = { | |||
475 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF626) }, | 513 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF626) }, |
476 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) }, | 514 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) }, |
477 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH) }, | 515 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH) }, |
478 | { USB_DEVICE(ERICSSON_VENDOR_ID, ERICSSON_PRODUCT_F3507G) }, | 516 | { USB_DEVICE(ERICSSON_VENDOR_ID, ERICSSON_PRODUCT_F3507G_1) }, |
479 | { USB_DEVICE(PANTECH_VENDOR_ID, PANTECH_PRODUCT_PC5740) }, | 517 | { USB_DEVICE(ERICSSON_VENDOR_ID, ERICSSON_PRODUCT_F3507G_2) }, |
480 | { USB_DEVICE(PANTECH_VENDOR_ID, PANTECH_PRODUCT_PC5750) }, | 518 | { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) }, |
481 | { USB_DEVICE(PANTECH_VENDOR_ID, PANTECH_PRODUCT_UM150) }, | 519 | { USB_DEVICE(0x1da5, 0x4515) }, /* BenQ H20 */ |
482 | { } /* Terminating entry */ | 520 | { } /* Terminating entry */ |
483 | }; | 521 | }; |
484 | MODULE_DEVICE_TABLE(usb, option_ids); | 522 | MODULE_DEVICE_TABLE(usb, option_ids); |
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c index 01d0c70d60e9..2620bf6fe5e1 100644 --- a/drivers/usb/serial/ti_usb_3410_5052.c +++ b/drivers/usb/serial/ti_usb_3410_5052.c | |||
@@ -145,7 +145,7 @@ static int ti_command_in_sync(struct ti_device *tdev, __u8 command, | |||
145 | static int ti_write_byte(struct ti_device *tdev, unsigned long addr, | 145 | static int ti_write_byte(struct ti_device *tdev, unsigned long addr, |
146 | __u8 mask, __u8 byte); | 146 | __u8 mask, __u8 byte); |
147 | 147 | ||
148 | static int ti_download_firmware(struct ti_device *tdev, int type); | 148 | static int ti_download_firmware(struct ti_device *tdev); |
149 | 149 | ||
150 | /* circular buffer */ | 150 | /* circular buffer */ |
151 | static struct circ_buf *ti_buf_alloc(void); | 151 | static struct circ_buf *ti_buf_alloc(void); |
@@ -176,25 +176,42 @@ static unsigned int product_5052_count; | |||
176 | /* the array dimension is the number of default entries plus */ | 176 | /* the array dimension is the number of default entries plus */ |
177 | /* TI_EXTRA_VID_PID_COUNT user defined entries plus 1 terminating */ | 177 | /* TI_EXTRA_VID_PID_COUNT user defined entries plus 1 terminating */ |
178 | /* null entry */ | 178 | /* null entry */ |
179 | static struct usb_device_id ti_id_table_3410[1+TI_EXTRA_VID_PID_COUNT+1] = { | 179 | static struct usb_device_id ti_id_table_3410[10+TI_EXTRA_VID_PID_COUNT+1] = { |
180 | { USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) }, | 180 | { USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) }, |
181 | { USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) }, | 181 | { USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) }, |
182 | { USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) }, | ||
183 | { USB_DEVICE(MTS_VENDOR_ID, MTS_CDMA_NO_FW_PRODUCT_ID) }, | ||
184 | { USB_DEVICE(MTS_VENDOR_ID, MTS_CDMA_PRODUCT_ID) }, | ||
185 | { USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_PRODUCT_ID) }, | ||
186 | { USB_DEVICE(MTS_VENDOR_ID, MTS_EDGE_PRODUCT_ID) }, | ||
187 | { USB_DEVICE(IBM_VENDOR_ID, IBM_4543_PRODUCT_ID) }, | ||
188 | { USB_DEVICE(IBM_VENDOR_ID, IBM_454B_PRODUCT_ID) }, | ||
189 | { USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) }, | ||
182 | }; | 190 | }; |
183 | 191 | ||
184 | static struct usb_device_id ti_id_table_5052[4+TI_EXTRA_VID_PID_COUNT+1] = { | 192 | static struct usb_device_id ti_id_table_5052[5+TI_EXTRA_VID_PID_COUNT+1] = { |
185 | { USB_DEVICE(TI_VENDOR_ID, TI_5052_BOOT_PRODUCT_ID) }, | 193 | { USB_DEVICE(TI_VENDOR_ID, TI_5052_BOOT_PRODUCT_ID) }, |
186 | { USB_DEVICE(TI_VENDOR_ID, TI_5152_BOOT_PRODUCT_ID) }, | 194 | { USB_DEVICE(TI_VENDOR_ID, TI_5152_BOOT_PRODUCT_ID) }, |
187 | { USB_DEVICE(TI_VENDOR_ID, TI_5052_EEPROM_PRODUCT_ID) }, | 195 | { USB_DEVICE(TI_VENDOR_ID, TI_5052_EEPROM_PRODUCT_ID) }, |
188 | { USB_DEVICE(TI_VENDOR_ID, TI_5052_FIRMWARE_PRODUCT_ID) }, | 196 | { USB_DEVICE(TI_VENDOR_ID, TI_5052_FIRMWARE_PRODUCT_ID) }, |
197 | { USB_DEVICE(IBM_VENDOR_ID, IBM_4543_PRODUCT_ID) }, | ||
189 | }; | 198 | }; |
190 | 199 | ||
191 | static struct usb_device_id ti_id_table_combined[] = { | 200 | static struct usb_device_id ti_id_table_combined[14+2*TI_EXTRA_VID_PID_COUNT+1] = { |
192 | { USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) }, | 201 | { USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) }, |
193 | { USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) }, | 202 | { USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) }, |
203 | { USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) }, | ||
204 | { USB_DEVICE(MTS_VENDOR_ID, MTS_CDMA_NO_FW_PRODUCT_ID) }, | ||
205 | { USB_DEVICE(MTS_VENDOR_ID, MTS_CDMA_PRODUCT_ID) }, | ||
206 | { USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_PRODUCT_ID) }, | ||
207 | { USB_DEVICE(MTS_VENDOR_ID, MTS_EDGE_PRODUCT_ID) }, | ||
194 | { USB_DEVICE(TI_VENDOR_ID, TI_5052_BOOT_PRODUCT_ID) }, | 208 | { USB_DEVICE(TI_VENDOR_ID, TI_5052_BOOT_PRODUCT_ID) }, |
195 | { USB_DEVICE(TI_VENDOR_ID, TI_5152_BOOT_PRODUCT_ID) }, | 209 | { USB_DEVICE(TI_VENDOR_ID, TI_5152_BOOT_PRODUCT_ID) }, |
196 | { USB_DEVICE(TI_VENDOR_ID, TI_5052_EEPROM_PRODUCT_ID) }, | 210 | { USB_DEVICE(TI_VENDOR_ID, TI_5052_EEPROM_PRODUCT_ID) }, |
197 | { USB_DEVICE(TI_VENDOR_ID, TI_5052_FIRMWARE_PRODUCT_ID) }, | 211 | { USB_DEVICE(TI_VENDOR_ID, TI_5052_FIRMWARE_PRODUCT_ID) }, |
212 | { USB_DEVICE(IBM_VENDOR_ID, IBM_4543_PRODUCT_ID) }, | ||
213 | { USB_DEVICE(IBM_VENDOR_ID, IBM_454B_PRODUCT_ID) }, | ||
214 | { USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) }, | ||
198 | { } | 215 | { } |
199 | }; | 216 | }; |
200 | 217 | ||
@@ -272,6 +289,9 @@ MODULE_LICENSE("GPL"); | |||
272 | 289 | ||
273 | MODULE_FIRMWARE("ti_3410.fw"); | 290 | MODULE_FIRMWARE("ti_3410.fw"); |
274 | MODULE_FIRMWARE("ti_5052.fw"); | 291 | MODULE_FIRMWARE("ti_5052.fw"); |
292 | MODULE_FIRMWARE("mts_cdma.fw"); | ||
293 | MODULE_FIRMWARE("mts_gsm.fw"); | ||
294 | MODULE_FIRMWARE("mts_edge.fw"); | ||
275 | 295 | ||
276 | module_param(debug, bool, S_IRUGO | S_IWUSR); | 296 | module_param(debug, bool, S_IRUGO | S_IWUSR); |
277 | MODULE_PARM_DESC(debug, "Enable debugging, 0=no, 1=yes"); | 297 | MODULE_PARM_DESC(debug, "Enable debugging, 0=no, 1=yes"); |
@@ -304,21 +324,28 @@ MODULE_DEVICE_TABLE(usb, ti_id_table_combined); | |||
304 | 324 | ||
305 | static int __init ti_init(void) | 325 | static int __init ti_init(void) |
306 | { | 326 | { |
307 | int i, j; | 327 | int i, j, c; |
308 | int ret; | 328 | int ret; |
309 | 329 | ||
310 | /* insert extra vendor and product ids */ | 330 | /* insert extra vendor and product ids */ |
331 | c = ARRAY_SIZE(ti_id_table_combined) - 2 * TI_EXTRA_VID_PID_COUNT - 1; | ||
311 | j = ARRAY_SIZE(ti_id_table_3410) - TI_EXTRA_VID_PID_COUNT - 1; | 332 | j = ARRAY_SIZE(ti_id_table_3410) - TI_EXTRA_VID_PID_COUNT - 1; |
312 | for (i = 0; i < min(vendor_3410_count, product_3410_count); i++, j++) { | 333 | for (i = 0; i < min(vendor_3410_count, product_3410_count); i++, j++, c++) { |
313 | ti_id_table_3410[j].idVendor = vendor_3410[i]; | 334 | ti_id_table_3410[j].idVendor = vendor_3410[i]; |
314 | ti_id_table_3410[j].idProduct = product_3410[i]; | 335 | ti_id_table_3410[j].idProduct = product_3410[i]; |
315 | ti_id_table_3410[j].match_flags = USB_DEVICE_ID_MATCH_DEVICE; | 336 | ti_id_table_3410[j].match_flags = USB_DEVICE_ID_MATCH_DEVICE; |
337 | ti_id_table_combined[c].idVendor = vendor_3410[i]; | ||
338 | ti_id_table_combined[c].idProduct = product_3410[i]; | ||
339 | ti_id_table_combined[c].match_flags = USB_DEVICE_ID_MATCH_DEVICE; | ||
316 | } | 340 | } |
317 | j = ARRAY_SIZE(ti_id_table_5052) - TI_EXTRA_VID_PID_COUNT - 1; | 341 | j = ARRAY_SIZE(ti_id_table_5052) - TI_EXTRA_VID_PID_COUNT - 1; |
318 | for (i = 0; i < min(vendor_5052_count, product_5052_count); i++, j++) { | 342 | for (i = 0; i < min(vendor_5052_count, product_5052_count); i++, j++, c++) { |
319 | ti_id_table_5052[j].idVendor = vendor_5052[i]; | 343 | ti_id_table_5052[j].idVendor = vendor_5052[i]; |
320 | ti_id_table_5052[j].idProduct = product_5052[i]; | 344 | ti_id_table_5052[j].idProduct = product_5052[i]; |
321 | ti_id_table_5052[j].match_flags = USB_DEVICE_ID_MATCH_DEVICE; | 345 | ti_id_table_5052[j].match_flags = USB_DEVICE_ID_MATCH_DEVICE; |
346 | ti_id_table_combined[c].idVendor = vendor_5052[i]; | ||
347 | ti_id_table_combined[c].idProduct = product_5052[i]; | ||
348 | ti_id_table_combined[c].match_flags = USB_DEVICE_ID_MATCH_DEVICE; | ||
322 | } | 349 | } |
323 | 350 | ||
324 | ret = usb_serial_register(&ti_1port_device); | 351 | ret = usb_serial_register(&ti_1port_device); |
@@ -390,11 +417,7 @@ static int ti_startup(struct usb_serial *serial) | |||
390 | 417 | ||
391 | /* if we have only 1 configuration, download firmware */ | 418 | /* if we have only 1 configuration, download firmware */ |
392 | if (dev->descriptor.bNumConfigurations == 1) { | 419 | if (dev->descriptor.bNumConfigurations == 1) { |
393 | if (tdev->td_is_3410) | 420 | if ((status = ti_download_firmware(tdev)) != 0) |
394 | status = ti_download_firmware(tdev, 3410); | ||
395 | else | ||
396 | status = ti_download_firmware(tdev, 5052); | ||
397 | if (status) | ||
398 | goto free_tdev; | 421 | goto free_tdev; |
399 | 422 | ||
400 | /* 3410 must be reset, 5052 resets itself */ | 423 | /* 3410 must be reset, 5052 resets itself */ |
@@ -1671,9 +1694,9 @@ static int ti_do_download(struct usb_device *dev, int pipe, | |||
1671 | return status; | 1694 | return status; |
1672 | } | 1695 | } |
1673 | 1696 | ||
1674 | static int ti_download_firmware(struct ti_device *tdev, int type) | 1697 | static int ti_download_firmware(struct ti_device *tdev) |
1675 | { | 1698 | { |
1676 | int status = -ENOMEM; | 1699 | int status; |
1677 | int buffer_size; | 1700 | int buffer_size; |
1678 | __u8 *buffer; | 1701 | __u8 *buffer; |
1679 | struct usb_device *dev = tdev->td_serial->dev; | 1702 | struct usb_device *dev = tdev->td_serial->dev; |
@@ -1681,9 +1704,34 @@ static int ti_download_firmware(struct ti_device *tdev, int type) | |||
1681 | tdev->td_serial->port[0]->bulk_out_endpointAddress); | 1704 | tdev->td_serial->port[0]->bulk_out_endpointAddress); |
1682 | const struct firmware *fw_p; | 1705 | const struct firmware *fw_p; |
1683 | char buf[32]; | 1706 | char buf[32]; |
1684 | sprintf(buf, "ti_usb-%d.bin", type); | ||
1685 | 1707 | ||
1686 | if (request_firmware(&fw_p, buf, &dev->dev)) { | 1708 | /* try ID specific firmware first, then try generic firmware */ |
1709 | sprintf(buf, "ti_usb-v%04x-p%04x.fw", dev->descriptor.idVendor, | ||
1710 | dev->descriptor.idProduct); | ||
1711 | if ((status = request_firmware(&fw_p, buf, &dev->dev)) != 0) { | ||
1712 | buf[0] = '\0'; | ||
1713 | if (dev->descriptor.idVendor == MTS_VENDOR_ID) { | ||
1714 | switch (dev->descriptor.idProduct) { | ||
1715 | case MTS_CDMA_PRODUCT_ID: | ||
1716 | strcpy(buf, "mts_cdma.fw"); | ||
1717 | break; | ||
1718 | case MTS_GSM_PRODUCT_ID: | ||
1719 | strcpy(buf, "mts_gsm.fw"); | ||
1720 | break; | ||
1721 | case MTS_EDGE_PRODUCT_ID: | ||
1722 | strcpy(buf, "mts_edge.fw"); | ||
1723 | break; | ||
1724 | } | ||
1725 | } | ||
1726 | if (buf[0] == '\0') { | ||
1727 | if (tdev->td_is_3410) | ||
1728 | strcpy(buf, "ti_3410.fw"); | ||
1729 | else | ||
1730 | strcpy(buf, "ti_5052.fw"); | ||
1731 | } | ||
1732 | status = request_firmware(&fw_p, buf, &dev->dev); | ||
1733 | } | ||
1734 | if (status) { | ||
1687 | dev_err(&dev->dev, "%s - firmware not found\n", __func__); | 1735 | dev_err(&dev->dev, "%s - firmware not found\n", __func__); |
1688 | return -ENOENT; | 1736 | return -ENOENT; |
1689 | } | 1737 | } |
@@ -1699,6 +1747,8 @@ static int ti_download_firmware(struct ti_device *tdev, int type) | |||
1699 | memset(buffer + fw_p->size, 0xff, buffer_size - fw_p->size); | 1747 | memset(buffer + fw_p->size, 0xff, buffer_size - fw_p->size); |
1700 | status = ti_do_download(dev, pipe, buffer, fw_p->size); | 1748 | status = ti_do_download(dev, pipe, buffer, fw_p->size); |
1701 | kfree(buffer); | 1749 | kfree(buffer); |
1750 | } else { | ||
1751 | status = -ENOMEM; | ||
1702 | } | 1752 | } |
1703 | release_firmware(fw_p); | 1753 | release_firmware(fw_p); |
1704 | if (status) { | 1754 | if (status) { |
diff --git a/drivers/usb/serial/ti_usb_3410_5052.h b/drivers/usb/serial/ti_usb_3410_5052.h index b5541bf991ba..f323c6025858 100644 --- a/drivers/usb/serial/ti_usb_3410_5052.h +++ b/drivers/usb/serial/ti_usb_3410_5052.h | |||
@@ -27,13 +27,25 @@ | |||
27 | 27 | ||
28 | /* Vendor and product ids */ | 28 | /* Vendor and product ids */ |
29 | #define TI_VENDOR_ID 0x0451 | 29 | #define TI_VENDOR_ID 0x0451 |
30 | #define IBM_VENDOR_ID 0x04b3 | ||
30 | #define TI_3410_PRODUCT_ID 0x3410 | 31 | #define TI_3410_PRODUCT_ID 0x3410 |
32 | #define IBM_4543_PRODUCT_ID 0x4543 | ||
33 | #define IBM_454B_PRODUCT_ID 0x454b | ||
34 | #define IBM_454C_PRODUCT_ID 0x454c | ||
31 | #define TI_3410_EZ430_ID 0xF430 /* TI ez430 development tool */ | 35 | #define TI_3410_EZ430_ID 0xF430 /* TI ez430 development tool */ |
32 | #define TI_5052_BOOT_PRODUCT_ID 0x5052 /* no EEPROM, no firmware */ | 36 | #define TI_5052_BOOT_PRODUCT_ID 0x5052 /* no EEPROM, no firmware */ |
33 | #define TI_5152_BOOT_PRODUCT_ID 0x5152 /* no EEPROM, no firmware */ | 37 | #define TI_5152_BOOT_PRODUCT_ID 0x5152 /* no EEPROM, no firmware */ |
34 | #define TI_5052_EEPROM_PRODUCT_ID 0x505A /* EEPROM, no firmware */ | 38 | #define TI_5052_EEPROM_PRODUCT_ID 0x505A /* EEPROM, no firmware */ |
35 | #define TI_5052_FIRMWARE_PRODUCT_ID 0x505F /* firmware is running */ | 39 | #define TI_5052_FIRMWARE_PRODUCT_ID 0x505F /* firmware is running */ |
36 | 40 | ||
41 | /* Multi-Tech vendor and product ids */ | ||
42 | #define MTS_VENDOR_ID 0x06E0 | ||
43 | #define MTS_GSM_NO_FW_PRODUCT_ID 0xF108 | ||
44 | #define MTS_CDMA_NO_FW_PRODUCT_ID 0xF109 | ||
45 | #define MTS_CDMA_PRODUCT_ID 0xF110 | ||
46 | #define MTS_GSM_PRODUCT_ID 0xF111 | ||
47 | #define MTS_EDGE_PRODUCT_ID 0xF112 | ||
48 | |||
37 | /* Commands */ | 49 | /* Commands */ |
38 | #define TI_GET_VERSION 0x01 | 50 | #define TI_GET_VERSION 0x01 |
39 | #define TI_GET_PORT_STATUS 0x02 | 51 | #define TI_GET_PORT_STATUS 0x02 |
diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c index 080ade223d53..cfcfd5ab06ce 100644 --- a/drivers/usb/serial/usb-serial.c +++ b/drivers/usb/serial/usb-serial.c | |||
@@ -511,9 +511,6 @@ static void usb_serial_port_work(struct work_struct *work) | |||
511 | 511 | ||
512 | dbg("%s - port %d", __func__, port->number); | 512 | dbg("%s - port %d", __func__, port->number); |
513 | 513 | ||
514 | if (!port) | ||
515 | return; | ||
516 | |||
517 | tty = tty_port_tty_get(&port->port); | 514 | tty = tty_port_tty_get(&port->port); |
518 | if (!tty) | 515 | if (!tty) |
519 | return; | 516 | return; |