diff options
Diffstat (limited to 'drivers/usb/serial')
-rw-r--r-- | drivers/usb/serial/cp210x.c | 1 | ||||
-rw-r--r-- | drivers/usb/serial/ftdi_sio.c | 33 | ||||
-rw-r--r-- | drivers/usb/serial/ftdi_sio_ids.h | 37 | ||||
-rw-r--r-- | drivers/usb/serial/io_ti.c | 50 | ||||
-rw-r--r-- | drivers/usb/serial/option.c | 83 | ||||
-rw-r--r-- | drivers/usb/serial/pl2303.c | 3 | ||||
-rw-r--r-- | drivers/usb/serial/pl2303.h | 5 | ||||
-rw-r--r-- | drivers/usb/serial/qcserial.c | 24 | ||||
-rw-r--r-- | drivers/usb/serial/sierra.c | 1 | ||||
-rw-r--r-- | drivers/usb/serial/usb-serial.c | 4 | ||||
-rw-r--r-- | drivers/usb/serial/usb_wwan.c | 9 |
11 files changed, 220 insertions, 30 deletions
diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c index 95fa1217afdd..762e4a5f5ae9 100644 --- a/drivers/usb/serial/cp210x.c +++ b/drivers/usb/serial/cp210x.c | |||
@@ -104,6 +104,7 @@ static const struct usb_device_id id_table[] = { | |||
104 | { USB_DEVICE(0x10C4, 0x8218) }, /* Lipowsky Industrie Elektronik GmbH, HARP-1 */ | 104 | { USB_DEVICE(0x10C4, 0x8218) }, /* Lipowsky Industrie Elektronik GmbH, HARP-1 */ |
105 | { USB_DEVICE(0x10C4, 0x822B) }, /* Modem EDGE(GSM) Comander 2 */ | 105 | { USB_DEVICE(0x10C4, 0x822B) }, /* Modem EDGE(GSM) Comander 2 */ |
106 | { USB_DEVICE(0x10C4, 0x826B) }, /* Cygnal Integrated Products, Inc., Fasttrax GPS demonstration module */ | 106 | { USB_DEVICE(0x10C4, 0x826B) }, /* Cygnal Integrated Products, Inc., Fasttrax GPS demonstration module */ |
107 | { USB_DEVICE(0x10C4, 0x8281) }, /* Nanotec Plug & Drive */ | ||
107 | { USB_DEVICE(0x10C4, 0x8293) }, /* Telegesis ETRX2USB */ | 108 | { USB_DEVICE(0x10C4, 0x8293) }, /* Telegesis ETRX2USB */ |
108 | { USB_DEVICE(0x10C4, 0x82F9) }, /* Procyon AVS */ | 109 | { USB_DEVICE(0x10C4, 0x82F9) }, /* Procyon AVS */ |
109 | { USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */ | 110 | { USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */ |
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index 44ab12986805..7c6e1dedeb06 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c | |||
@@ -909,6 +909,39 @@ static const struct usb_device_id id_table_combined[] = { | |||
909 | { USB_DEVICE(FTDI_VID, FTDI_Z3X_PID) }, | 909 | { USB_DEVICE(FTDI_VID, FTDI_Z3X_PID) }, |
910 | /* Cressi Devices */ | 910 | /* Cressi Devices */ |
911 | { USB_DEVICE(FTDI_VID, FTDI_CRESSI_PID) }, | 911 | { USB_DEVICE(FTDI_VID, FTDI_CRESSI_PID) }, |
912 | /* Brainboxes Devices */ | ||
913 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_VX_001_PID) }, | ||
914 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_VX_012_PID) }, | ||
915 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_VX_023_PID) }, | ||
916 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_VX_034_PID) }, | ||
917 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_101_PID) }, | ||
918 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_1_PID) }, | ||
919 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_2_PID) }, | ||
920 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_3_PID) }, | ||
921 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_4_PID) }, | ||
922 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_5_PID) }, | ||
923 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_6_PID) }, | ||
924 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_7_PID) }, | ||
925 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_8_PID) }, | ||
926 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_257_PID) }, | ||
927 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_1_PID) }, | ||
928 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_2_PID) }, | ||
929 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_3_PID) }, | ||
930 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_4_PID) }, | ||
931 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_313_PID) }, | ||
932 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_324_PID) }, | ||
933 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_346_1_PID) }, | ||
934 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_346_2_PID) }, | ||
935 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_357_PID) }, | ||
936 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_606_1_PID) }, | ||
937 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_606_2_PID) }, | ||
938 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_606_3_PID) }, | ||
939 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_701_1_PID) }, | ||
940 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_701_2_PID) }, | ||
941 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_1_PID) }, | ||
942 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_2_PID) }, | ||
943 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_3_PID) }, | ||
944 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_4_PID) }, | ||
912 | { } /* Terminating entry */ | 945 | { } /* Terminating entry */ |
913 | }; | 946 | }; |
914 | 947 | ||
diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h index e599fbfcde5f..993c93df6874 100644 --- a/drivers/usb/serial/ftdi_sio_ids.h +++ b/drivers/usb/serial/ftdi_sio_ids.h | |||
@@ -1326,3 +1326,40 @@ | |||
1326 | * Manufacturer: Cressi | 1326 | * Manufacturer: Cressi |
1327 | */ | 1327 | */ |
1328 | #define FTDI_CRESSI_PID 0x87d0 | 1328 | #define FTDI_CRESSI_PID 0x87d0 |
1329 | |||
1330 | /* | ||
1331 | * Brainboxes devices | ||
1332 | */ | ||
1333 | #define BRAINBOXES_VID 0x05d1 | ||
1334 | #define BRAINBOXES_VX_001_PID 0x1001 /* VX-001 ExpressCard 1 Port RS232 */ | ||
1335 | #define BRAINBOXES_VX_012_PID 0x1002 /* VX-012 ExpressCard 2 Port RS232 */ | ||
1336 | #define BRAINBOXES_VX_023_PID 0x1003 /* VX-023 ExpressCard 1 Port RS422/485 */ | ||
1337 | #define BRAINBOXES_VX_034_PID 0x1004 /* VX-034 ExpressCard 2 Port RS422/485 */ | ||
1338 | #define BRAINBOXES_US_101_PID 0x1011 /* US-101 1xRS232 */ | ||
1339 | #define BRAINBOXES_US_324_PID 0x1013 /* US-324 1xRS422/485 1Mbaud */ | ||
1340 | #define BRAINBOXES_US_606_1_PID 0x2001 /* US-606 6 Port RS232 Serial Port 1 and 2 */ | ||
1341 | #define BRAINBOXES_US_606_2_PID 0x2002 /* US-606 6 Port RS232 Serial Port 3 and 4 */ | ||
1342 | #define BRAINBOXES_US_606_3_PID 0x2003 /* US-606 6 Port RS232 Serial Port 4 and 6 */ | ||
1343 | #define BRAINBOXES_US_701_1_PID 0x2011 /* US-701 4xRS232 1Mbaud Port 1 and 2 */ | ||
1344 | #define BRAINBOXES_US_701_2_PID 0x2012 /* US-701 4xRS422 1Mbaud Port 3 and 4 */ | ||
1345 | #define BRAINBOXES_US_279_1_PID 0x2021 /* US-279 8xRS422 1Mbaud Port 1 and 2 */ | ||
1346 | #define BRAINBOXES_US_279_2_PID 0x2022 /* US-279 8xRS422 1Mbaud Port 3 and 4 */ | ||
1347 | #define BRAINBOXES_US_279_3_PID 0x2023 /* US-279 8xRS422 1Mbaud Port 5 and 6 */ | ||
1348 | #define BRAINBOXES_US_279_4_PID 0x2024 /* US-279 8xRS422 1Mbaud Port 7 and 8 */ | ||
1349 | #define BRAINBOXES_US_346_1_PID 0x3011 /* US-346 4xRS422/485 1Mbaud Port 1 and 2 */ | ||
1350 | #define BRAINBOXES_US_346_2_PID 0x3012 /* US-346 4xRS422/485 1Mbaud Port 3 and 4 */ | ||
1351 | #define BRAINBOXES_US_257_PID 0x5001 /* US-257 2xRS232 1Mbaud */ | ||
1352 | #define BRAINBOXES_US_313_PID 0x6001 /* US-313 2xRS422/485 1Mbaud */ | ||
1353 | #define BRAINBOXES_US_357_PID 0x7001 /* US_357 1xRS232/422/485 */ | ||
1354 | #define BRAINBOXES_US_842_1_PID 0x8001 /* US-842 8xRS422/485 1Mbaud Port 1 and 2 */ | ||
1355 | #define BRAINBOXES_US_842_2_PID 0x8002 /* US-842 8xRS422/485 1Mbaud Port 3 and 4 */ | ||
1356 | #define BRAINBOXES_US_842_3_PID 0x8003 /* US-842 8xRS422/485 1Mbaud Port 5 and 6 */ | ||
1357 | #define BRAINBOXES_US_842_4_PID 0x8004 /* US-842 8xRS422/485 1Mbaud Port 7 and 8 */ | ||
1358 | #define BRAINBOXES_US_160_1_PID 0x9001 /* US-160 16xRS232 1Mbaud Port 1 and 2 */ | ||
1359 | #define BRAINBOXES_US_160_2_PID 0x9002 /* US-160 16xRS232 1Mbaud Port 3 and 4 */ | ||
1360 | #define BRAINBOXES_US_160_3_PID 0x9003 /* US-160 16xRS232 1Mbaud Port 5 and 6 */ | ||
1361 | #define BRAINBOXES_US_160_4_PID 0x9004 /* US-160 16xRS232 1Mbaud Port 7 and 8 */ | ||
1362 | #define BRAINBOXES_US_160_5_PID 0x9005 /* US-160 16xRS232 1Mbaud Port 9 and 10 */ | ||
1363 | #define BRAINBOXES_US_160_6_PID 0x9006 /* US-160 16xRS232 1Mbaud Port 11 and 12 */ | ||
1364 | #define BRAINBOXES_US_160_7_PID 0x9007 /* US-160 16xRS232 1Mbaud Port 13 and 14 */ | ||
1365 | #define BRAINBOXES_US_160_8_PID 0x9008 /* US-160 16xRS232 1Mbaud Port 15 and 16 */ | ||
diff --git a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c index a2db5be9c305..df90dae53eb9 100644 --- a/drivers/usb/serial/io_ti.c +++ b/drivers/usb/serial/io_ti.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <linux/spinlock.h> | 28 | #include <linux/spinlock.h> |
29 | #include <linux/mutex.h> | 29 | #include <linux/mutex.h> |
30 | #include <linux/serial.h> | 30 | #include <linux/serial.h> |
31 | #include <linux/swab.h> | ||
31 | #include <linux/kfifo.h> | 32 | #include <linux/kfifo.h> |
32 | #include <linux/ioctl.h> | 33 | #include <linux/ioctl.h> |
33 | #include <linux/firmware.h> | 34 | #include <linux/firmware.h> |
@@ -280,7 +281,7 @@ static int read_download_mem(struct usb_device *dev, int start_address, | |||
280 | { | 281 | { |
281 | int status = 0; | 282 | int status = 0; |
282 | __u8 read_length; | 283 | __u8 read_length; |
283 | __be16 be_start_address; | 284 | u16 be_start_address; |
284 | 285 | ||
285 | dev_dbg(&dev->dev, "%s - @ %x for %d\n", __func__, start_address, length); | 286 | dev_dbg(&dev->dev, "%s - @ %x for %d\n", __func__, start_address, length); |
286 | 287 | ||
@@ -296,10 +297,14 @@ static int read_download_mem(struct usb_device *dev, int start_address, | |||
296 | if (read_length > 1) { | 297 | if (read_length > 1) { |
297 | dev_dbg(&dev->dev, "%s - @ %x for %d\n", __func__, start_address, read_length); | 298 | dev_dbg(&dev->dev, "%s - @ %x for %d\n", __func__, start_address, read_length); |
298 | } | 299 | } |
299 | be_start_address = cpu_to_be16(start_address); | 300 | /* |
301 | * NOTE: Must use swab as wIndex is sent in little-endian | ||
302 | * byte order regardless of host byte order. | ||
303 | */ | ||
304 | be_start_address = swab16((u16)start_address); | ||
300 | status = ti_vread_sync(dev, UMPC_MEMORY_READ, | 305 | status = ti_vread_sync(dev, UMPC_MEMORY_READ, |
301 | (__u16)address_type, | 306 | (__u16)address_type, |
302 | (__force __u16)be_start_address, | 307 | be_start_address, |
303 | buffer, read_length); | 308 | buffer, read_length); |
304 | 309 | ||
305 | if (status) { | 310 | if (status) { |
@@ -394,7 +399,7 @@ static int write_i2c_mem(struct edgeport_serial *serial, | |||
394 | struct device *dev = &serial->serial->dev->dev; | 399 | struct device *dev = &serial->serial->dev->dev; |
395 | int status = 0; | 400 | int status = 0; |
396 | int write_length; | 401 | int write_length; |
397 | __be16 be_start_address; | 402 | u16 be_start_address; |
398 | 403 | ||
399 | /* We can only send a maximum of 1 aligned byte page at a time */ | 404 | /* We can only send a maximum of 1 aligned byte page at a time */ |
400 | 405 | ||
@@ -409,11 +414,16 @@ static int write_i2c_mem(struct edgeport_serial *serial, | |||
409 | __func__, start_address, write_length); | 414 | __func__, start_address, write_length); |
410 | usb_serial_debug_data(dev, __func__, write_length, buffer); | 415 | usb_serial_debug_data(dev, __func__, write_length, buffer); |
411 | 416 | ||
412 | /* Write first page */ | 417 | /* |
413 | be_start_address = cpu_to_be16(start_address); | 418 | * Write first page. |
419 | * | ||
420 | * NOTE: Must use swab as wIndex is sent in little-endian byte order | ||
421 | * regardless of host byte order. | ||
422 | */ | ||
423 | be_start_address = swab16((u16)start_address); | ||
414 | status = ti_vsend_sync(serial->serial->dev, | 424 | status = ti_vsend_sync(serial->serial->dev, |
415 | UMPC_MEMORY_WRITE, (__u16)address_type, | 425 | UMPC_MEMORY_WRITE, (__u16)address_type, |
416 | (__force __u16)be_start_address, | 426 | be_start_address, |
417 | buffer, write_length); | 427 | buffer, write_length); |
418 | if (status) { | 428 | if (status) { |
419 | dev_dbg(dev, "%s - ERROR %d\n", __func__, status); | 429 | dev_dbg(dev, "%s - ERROR %d\n", __func__, status); |
@@ -436,11 +446,16 @@ static int write_i2c_mem(struct edgeport_serial *serial, | |||
436 | __func__, start_address, write_length); | 446 | __func__, start_address, write_length); |
437 | usb_serial_debug_data(dev, __func__, write_length, buffer); | 447 | usb_serial_debug_data(dev, __func__, write_length, buffer); |
438 | 448 | ||
439 | /* Write next page */ | 449 | /* |
440 | be_start_address = cpu_to_be16(start_address); | 450 | * Write next page. |
451 | * | ||
452 | * NOTE: Must use swab as wIndex is sent in little-endian byte | ||
453 | * order regardless of host byte order. | ||
454 | */ | ||
455 | be_start_address = swab16((u16)start_address); | ||
441 | status = ti_vsend_sync(serial->serial->dev, UMPC_MEMORY_WRITE, | 456 | status = ti_vsend_sync(serial->serial->dev, UMPC_MEMORY_WRITE, |
442 | (__u16)address_type, | 457 | (__u16)address_type, |
443 | (__force __u16)be_start_address, | 458 | be_start_address, |
444 | buffer, write_length); | 459 | buffer, write_length); |
445 | if (status) { | 460 | if (status) { |
446 | dev_err(dev, "%s - ERROR %d\n", __func__, status); | 461 | dev_err(dev, "%s - ERROR %d\n", __func__, status); |
@@ -585,8 +600,8 @@ static int get_descriptor_addr(struct edgeport_serial *serial, | |||
585 | if (rom_desc->Type == desc_type) | 600 | if (rom_desc->Type == desc_type) |
586 | return start_address; | 601 | return start_address; |
587 | 602 | ||
588 | start_address = start_address + sizeof(struct ti_i2c_desc) | 603 | start_address = start_address + sizeof(struct ti_i2c_desc) + |
589 | + rom_desc->Size; | 604 | le16_to_cpu(rom_desc->Size); |
590 | 605 | ||
591 | } while ((start_address < TI_MAX_I2C_SIZE) && rom_desc->Type); | 606 | } while ((start_address < TI_MAX_I2C_SIZE) && rom_desc->Type); |
592 | 607 | ||
@@ -599,7 +614,7 @@ static int valid_csum(struct ti_i2c_desc *rom_desc, __u8 *buffer) | |||
599 | __u16 i; | 614 | __u16 i; |
600 | __u8 cs = 0; | 615 | __u8 cs = 0; |
601 | 616 | ||
602 | for (i = 0; i < rom_desc->Size; i++) | 617 | for (i = 0; i < le16_to_cpu(rom_desc->Size); i++) |
603 | cs = (__u8)(cs + buffer[i]); | 618 | cs = (__u8)(cs + buffer[i]); |
604 | 619 | ||
605 | if (cs != rom_desc->CheckSum) { | 620 | if (cs != rom_desc->CheckSum) { |
@@ -650,7 +665,7 @@ static int check_i2c_image(struct edgeport_serial *serial) | |||
650 | break; | 665 | break; |
651 | 666 | ||
652 | if ((start_address + sizeof(struct ti_i2c_desc) + | 667 | if ((start_address + sizeof(struct ti_i2c_desc) + |
653 | rom_desc->Size) > TI_MAX_I2C_SIZE) { | 668 | le16_to_cpu(rom_desc->Size)) > TI_MAX_I2C_SIZE) { |
654 | status = -ENODEV; | 669 | status = -ENODEV; |
655 | dev_dbg(dev, "%s - structure too big, erroring out.\n", __func__); | 670 | dev_dbg(dev, "%s - structure too big, erroring out.\n", __func__); |
656 | break; | 671 | break; |
@@ -665,7 +680,8 @@ static int check_i2c_image(struct edgeport_serial *serial) | |||
665 | /* Read the descriptor data */ | 680 | /* Read the descriptor data */ |
666 | status = read_rom(serial, start_address + | 681 | status = read_rom(serial, start_address + |
667 | sizeof(struct ti_i2c_desc), | 682 | sizeof(struct ti_i2c_desc), |
668 | rom_desc->Size, buffer); | 683 | le16_to_cpu(rom_desc->Size), |
684 | buffer); | ||
669 | if (status) | 685 | if (status) |
670 | break; | 686 | break; |
671 | 687 | ||
@@ -674,7 +690,7 @@ static int check_i2c_image(struct edgeport_serial *serial) | |||
674 | break; | 690 | break; |
675 | } | 691 | } |
676 | start_address = start_address + sizeof(struct ti_i2c_desc) + | 692 | start_address = start_address + sizeof(struct ti_i2c_desc) + |
677 | rom_desc->Size; | 693 | le16_to_cpu(rom_desc->Size); |
678 | 694 | ||
679 | } while ((rom_desc->Type != I2C_DESC_TYPE_ION) && | 695 | } while ((rom_desc->Type != I2C_DESC_TYPE_ION) && |
680 | (start_address < TI_MAX_I2C_SIZE)); | 696 | (start_address < TI_MAX_I2C_SIZE)); |
@@ -712,7 +728,7 @@ static int get_manuf_info(struct edgeport_serial *serial, __u8 *buffer) | |||
712 | 728 | ||
713 | /* Read the descriptor data */ | 729 | /* Read the descriptor data */ |
714 | status = read_rom(serial, start_address+sizeof(struct ti_i2c_desc), | 730 | status = read_rom(serial, start_address+sizeof(struct ti_i2c_desc), |
715 | rom_desc->Size, buffer); | 731 | le16_to_cpu(rom_desc->Size), buffer); |
716 | if (status) | 732 | if (status) |
717 | goto exit; | 733 | goto exit; |
718 | 734 | ||
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index 68fc9fe65936..f213ee978516 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c | |||
@@ -234,8 +234,31 @@ static void option_instat_callback(struct urb *urb); | |||
234 | #define QUALCOMM_VENDOR_ID 0x05C6 | 234 | #define QUALCOMM_VENDOR_ID 0x05C6 |
235 | 235 | ||
236 | #define CMOTECH_VENDOR_ID 0x16d8 | 236 | #define CMOTECH_VENDOR_ID 0x16d8 |
237 | #define CMOTECH_PRODUCT_6008 0x6008 | 237 | #define CMOTECH_PRODUCT_6001 0x6001 |
238 | #define CMOTECH_PRODUCT_6280 0x6280 | 238 | #define CMOTECH_PRODUCT_CMU_300 0x6002 |
239 | #define CMOTECH_PRODUCT_6003 0x6003 | ||
240 | #define CMOTECH_PRODUCT_6004 0x6004 | ||
241 | #define CMOTECH_PRODUCT_6005 0x6005 | ||
242 | #define CMOTECH_PRODUCT_CGU_628A 0x6006 | ||
243 | #define CMOTECH_PRODUCT_CHE_628S 0x6007 | ||
244 | #define CMOTECH_PRODUCT_CMU_301 0x6008 | ||
245 | #define CMOTECH_PRODUCT_CHU_628 0x6280 | ||
246 | #define CMOTECH_PRODUCT_CHU_628S 0x6281 | ||
247 | #define CMOTECH_PRODUCT_CDU_680 0x6803 | ||
248 | #define CMOTECH_PRODUCT_CDU_685A 0x6804 | ||
249 | #define CMOTECH_PRODUCT_CHU_720S 0x7001 | ||
250 | #define CMOTECH_PRODUCT_7002 0x7002 | ||
251 | #define CMOTECH_PRODUCT_CHU_629K 0x7003 | ||
252 | #define CMOTECH_PRODUCT_7004 0x7004 | ||
253 | #define CMOTECH_PRODUCT_7005 0x7005 | ||
254 | #define CMOTECH_PRODUCT_CGU_629 0x7006 | ||
255 | #define CMOTECH_PRODUCT_CHU_629S 0x700a | ||
256 | #define CMOTECH_PRODUCT_CHU_720I 0x7211 | ||
257 | #define CMOTECH_PRODUCT_7212 0x7212 | ||
258 | #define CMOTECH_PRODUCT_7213 0x7213 | ||
259 | #define CMOTECH_PRODUCT_7251 0x7251 | ||
260 | #define CMOTECH_PRODUCT_7252 0x7252 | ||
261 | #define CMOTECH_PRODUCT_7253 0x7253 | ||
239 | 262 | ||
240 | #define TELIT_VENDOR_ID 0x1bc7 | 263 | #define TELIT_VENDOR_ID 0x1bc7 |
241 | #define TELIT_PRODUCT_UC864E 0x1003 | 264 | #define TELIT_PRODUCT_UC864E 0x1003 |
@@ -243,6 +266,7 @@ static void option_instat_callback(struct urb *urb); | |||
243 | #define TELIT_PRODUCT_CC864_DUAL 0x1005 | 266 | #define TELIT_PRODUCT_CC864_DUAL 0x1005 |
244 | #define TELIT_PRODUCT_CC864_SINGLE 0x1006 | 267 | #define TELIT_PRODUCT_CC864_SINGLE 0x1006 |
245 | #define TELIT_PRODUCT_DE910_DUAL 0x1010 | 268 | #define TELIT_PRODUCT_DE910_DUAL 0x1010 |
269 | #define TELIT_PRODUCT_UE910_V2 0x1012 | ||
246 | #define TELIT_PRODUCT_LE920 0x1200 | 270 | #define TELIT_PRODUCT_LE920 0x1200 |
247 | 271 | ||
248 | /* ZTE PRODUCTS */ | 272 | /* ZTE PRODUCTS */ |
@@ -286,6 +310,7 @@ static void option_instat_callback(struct urb *urb); | |||
286 | #define ALCATEL_PRODUCT_X060S_X200 0x0000 | 310 | #define ALCATEL_PRODUCT_X060S_X200 0x0000 |
287 | #define ALCATEL_PRODUCT_X220_X500D 0x0017 | 311 | #define ALCATEL_PRODUCT_X220_X500D 0x0017 |
288 | #define ALCATEL_PRODUCT_L100V 0x011e | 312 | #define ALCATEL_PRODUCT_L100V 0x011e |
313 | #define ALCATEL_PRODUCT_L800MA 0x0203 | ||
289 | 314 | ||
290 | #define PIRELLI_VENDOR_ID 0x1266 | 315 | #define PIRELLI_VENDOR_ID 0x1266 |
291 | #define PIRELLI_PRODUCT_C100_1 0x1002 | 316 | #define PIRELLI_PRODUCT_C100_1 0x1002 |
@@ -348,6 +373,7 @@ static void option_instat_callback(struct urb *urb); | |||
348 | #define OLIVETTI_PRODUCT_OLICARD100 0xc000 | 373 | #define OLIVETTI_PRODUCT_OLICARD100 0xc000 |
349 | #define OLIVETTI_PRODUCT_OLICARD145 0xc003 | 374 | #define OLIVETTI_PRODUCT_OLICARD145 0xc003 |
350 | #define OLIVETTI_PRODUCT_OLICARD200 0xc005 | 375 | #define OLIVETTI_PRODUCT_OLICARD200 0xc005 |
376 | #define OLIVETTI_PRODUCT_OLICARD500 0xc00b | ||
351 | 377 | ||
352 | /* Celot products */ | 378 | /* Celot products */ |
353 | #define CELOT_VENDOR_ID 0x211f | 379 | #define CELOT_VENDOR_ID 0x211f |
@@ -501,6 +527,10 @@ static const struct option_blacklist_info huawei_cdc12_blacklist = { | |||
501 | .reserved = BIT(1) | BIT(2), | 527 | .reserved = BIT(1) | BIT(2), |
502 | }; | 528 | }; |
503 | 529 | ||
530 | static const struct option_blacklist_info net_intf0_blacklist = { | ||
531 | .reserved = BIT(0), | ||
532 | }; | ||
533 | |||
504 | static const struct option_blacklist_info net_intf1_blacklist = { | 534 | static const struct option_blacklist_info net_intf1_blacklist = { |
505 | .reserved = BIT(1), | 535 | .reserved = BIT(1), |
506 | }; | 536 | }; |
@@ -1034,13 +1064,53 @@ static const struct usb_device_id option_ids[] = { | |||
1034 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */ | 1064 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */ |
1035 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x0023)}, /* ONYX 3G device */ | 1065 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x0023)}, /* ONYX 3G device */ |
1036 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */ | 1066 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */ |
1037 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6280) }, /* BP3-USB & BP3-EXT HSDPA */ | 1067 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) }, |
1038 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6008) }, | 1068 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) }, |
1069 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6003), | ||
1070 | .driver_info = (kernel_ulong_t)&net_intf0_blacklist }, | ||
1071 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6004) }, | ||
1072 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6005) }, | ||
1073 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CGU_628A) }, | ||
1074 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CHE_628S), | ||
1075 | .driver_info = (kernel_ulong_t)&net_intf0_blacklist }, | ||
1076 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_301), | ||
1077 | .driver_info = (kernel_ulong_t)&net_intf0_blacklist }, | ||
1078 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CHU_628), | ||
1079 | .driver_info = (kernel_ulong_t)&net_intf0_blacklist }, | ||
1080 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CHU_628S) }, | ||
1081 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CDU_680) }, | ||
1082 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CDU_685A) }, | ||
1083 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CHU_720S), | ||
1084 | .driver_info = (kernel_ulong_t)&net_intf0_blacklist }, | ||
1085 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_7002), | ||
1086 | .driver_info = (kernel_ulong_t)&net_intf0_blacklist }, | ||
1087 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CHU_629K), | ||
1088 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | ||
1089 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_7004), | ||
1090 | .driver_info = (kernel_ulong_t)&net_intf3_blacklist }, | ||
1091 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_7005) }, | ||
1092 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CGU_629), | ||
1093 | .driver_info = (kernel_ulong_t)&net_intf5_blacklist }, | ||
1094 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CHU_629S), | ||
1095 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | ||
1096 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CHU_720I), | ||
1097 | .driver_info = (kernel_ulong_t)&net_intf0_blacklist }, | ||
1098 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_7212), | ||
1099 | .driver_info = (kernel_ulong_t)&net_intf0_blacklist }, | ||
1100 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_7213), | ||
1101 | .driver_info = (kernel_ulong_t)&net_intf0_blacklist }, | ||
1102 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_7251), | ||
1103 | .driver_info = (kernel_ulong_t)&net_intf1_blacklist }, | ||
1104 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_7252), | ||
1105 | .driver_info = (kernel_ulong_t)&net_intf1_blacklist }, | ||
1106 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_7253), | ||
1107 | .driver_info = (kernel_ulong_t)&net_intf1_blacklist }, | ||
1039 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) }, | 1108 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) }, |
1040 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864G) }, | 1109 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864G) }, |
1041 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_DUAL) }, | 1110 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_DUAL) }, |
1042 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_SINGLE) }, | 1111 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_SINGLE) }, |
1043 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_DE910_DUAL) }, | 1112 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_DE910_DUAL) }, |
1113 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UE910_V2) }, | ||
1044 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920), | 1114 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920), |
1045 | .driver_info = (kernel_ulong_t)&telit_le920_blacklist }, | 1115 | .driver_info = (kernel_ulong_t)&telit_le920_blacklist }, |
1046 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */ | 1116 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */ |
@@ -1498,6 +1568,8 @@ static const struct usb_device_id option_ids[] = { | |||
1498 | .driver_info = (kernel_ulong_t)&net_intf5_blacklist }, | 1568 | .driver_info = (kernel_ulong_t)&net_intf5_blacklist }, |
1499 | { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_L100V), | 1569 | { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_L100V), |
1500 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | 1570 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, |
1571 | { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_L800MA), | ||
1572 | .driver_info = (kernel_ulong_t)&net_intf2_blacklist }, | ||
1501 | { USB_DEVICE(AIRPLUS_VENDOR_ID, AIRPLUS_PRODUCT_MCD650) }, | 1573 | { USB_DEVICE(AIRPLUS_VENDOR_ID, AIRPLUS_PRODUCT_MCD650) }, |
1502 | { USB_DEVICE(TLAYTECH_VENDOR_ID, TLAYTECH_PRODUCT_TEU800) }, | 1574 | { USB_DEVICE(TLAYTECH_VENDOR_ID, TLAYTECH_PRODUCT_TEU800) }, |
1503 | { USB_DEVICE(LONGCHEER_VENDOR_ID, FOUR_G_SYSTEMS_PRODUCT_W14), | 1575 | { USB_DEVICE(LONGCHEER_VENDOR_ID, FOUR_G_SYSTEMS_PRODUCT_W14), |
@@ -1543,6 +1615,9 @@ static const struct usb_device_id option_ids[] = { | |||
1543 | { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD200), | 1615 | { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD200), |
1544 | .driver_info = (kernel_ulong_t)&net_intf6_blacklist | 1616 | .driver_info = (kernel_ulong_t)&net_intf6_blacklist |
1545 | }, | 1617 | }, |
1618 | { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD500), | ||
1619 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist | ||
1620 | }, | ||
1546 | { USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */ | 1621 | { USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */ |
1547 | { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_GT_B3730, USB_CLASS_CDC_DATA, 0x00, 0x00) }, /* Samsung GT-B3730 LTE USB modem.*/ | 1622 | { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_GT_B3730, USB_CLASS_CDC_DATA, 0x00, 0x00) }, /* Samsung GT-B3730 LTE USB modem.*/ |
1548 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM600) }, | 1623 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM600) }, |
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c index 2e22fc22c382..b3d5a35c0d4b 100644 --- a/drivers/usb/serial/pl2303.c +++ b/drivers/usb/serial/pl2303.c | |||
@@ -83,6 +83,9 @@ static const struct usb_device_id id_table[] = { | |||
83 | { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) }, | 83 | { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) }, |
84 | { USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) }, | 84 | { USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) }, |
85 | { USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) }, | 85 | { USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) }, |
86 | { USB_DEVICE(HP_VENDOR_ID, HP_LD960_PRODUCT_ID) }, | ||
87 | { USB_DEVICE(HP_VENDOR_ID, HP_LCM220_PRODUCT_ID) }, | ||
88 | { USB_DEVICE(HP_VENDOR_ID, HP_LCM960_PRODUCT_ID) }, | ||
86 | { USB_DEVICE(CRESSI_VENDOR_ID, CRESSI_EDY_PRODUCT_ID) }, | 89 | { USB_DEVICE(CRESSI_VENDOR_ID, CRESSI_EDY_PRODUCT_ID) }, |
87 | { USB_DEVICE(ZEAGLE_VENDOR_ID, ZEAGLE_N2ITION3_PRODUCT_ID) }, | 90 | { USB_DEVICE(ZEAGLE_VENDOR_ID, ZEAGLE_N2ITION3_PRODUCT_ID) }, |
88 | { USB_DEVICE(SONY_VENDOR_ID, SONY_QN3USB_PRODUCT_ID) }, | 91 | { USB_DEVICE(SONY_VENDOR_ID, SONY_QN3USB_PRODUCT_ID) }, |
diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h index c38b8c00c06f..42bc082896ac 100644 --- a/drivers/usb/serial/pl2303.h +++ b/drivers/usb/serial/pl2303.h | |||
@@ -121,8 +121,11 @@ | |||
121 | #define SUPERIAL_VENDOR_ID 0x5372 | 121 | #define SUPERIAL_VENDOR_ID 0x5372 |
122 | #define SUPERIAL_PRODUCT_ID 0x2303 | 122 | #define SUPERIAL_PRODUCT_ID 0x2303 |
123 | 123 | ||
124 | /* Hewlett-Packard LD220-HP POS Pole Display */ | 124 | /* Hewlett-Packard POS Pole Displays */ |
125 | #define HP_VENDOR_ID 0x03f0 | 125 | #define HP_VENDOR_ID 0x03f0 |
126 | #define HP_LD960_PRODUCT_ID 0x0b39 | ||
127 | #define HP_LCM220_PRODUCT_ID 0x3139 | ||
128 | #define HP_LCM960_PRODUCT_ID 0x3239 | ||
126 | #define HP_LD220_PRODUCT_ID 0x3524 | 129 | #define HP_LD220_PRODUCT_ID 0x3524 |
127 | 130 | ||
128 | /* Cressi Edy (diving computer) PC interface */ | 131 | /* Cressi Edy (diving computer) PC interface */ |
diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c index 968a40201e5f..6c0a542e8ec1 100644 --- a/drivers/usb/serial/qcserial.c +++ b/drivers/usb/serial/qcserial.c | |||
@@ -136,12 +136,36 @@ static const struct usb_device_id id_table[] = { | |||
136 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68a2, 0)}, /* Sierra Wireless MC7710 Device Management */ | 136 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68a2, 0)}, /* Sierra Wireless MC7710 Device Management */ |
137 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68a2, 2)}, /* Sierra Wireless MC7710 NMEA */ | 137 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68a2, 2)}, /* Sierra Wireless MC7710 NMEA */ |
138 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68a2, 3)}, /* Sierra Wireless MC7710 Modem */ | 138 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68a2, 3)}, /* Sierra Wireless MC7710 Modem */ |
139 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68c0, 0)}, /* Sierra Wireless MC73xx Device Management */ | ||
140 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68c0, 2)}, /* Sierra Wireless MC73xx NMEA */ | ||
141 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68c0, 3)}, /* Sierra Wireless MC73xx Modem */ | ||
139 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901c, 0)}, /* Sierra Wireless EM7700 Device Management */ | 142 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901c, 0)}, /* Sierra Wireless EM7700 Device Management */ |
140 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901c, 2)}, /* Sierra Wireless EM7700 NMEA */ | 143 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901c, 2)}, /* Sierra Wireless EM7700 NMEA */ |
141 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901c, 3)}, /* Sierra Wireless EM7700 Modem */ | 144 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901c, 3)}, /* Sierra Wireless EM7700 Modem */ |
145 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901f, 0)}, /* Sierra Wireless EM7355 Device Management */ | ||
146 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901f, 2)}, /* Sierra Wireless EM7355 NMEA */ | ||
147 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901f, 3)}, /* Sierra Wireless EM7355 Modem */ | ||
148 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9041, 0)}, /* Sierra Wireless MC7305/MC7355 Device Management */ | ||
149 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9041, 2)}, /* Sierra Wireless MC7305/MC7355 NMEA */ | ||
150 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9041, 3)}, /* Sierra Wireless MC7305/MC7355 Modem */ | ||
142 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9051, 0)}, /* Netgear AirCard 340U Device Management */ | 151 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9051, 0)}, /* Netgear AirCard 340U Device Management */ |
143 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9051, 2)}, /* Netgear AirCard 340U NMEA */ | 152 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9051, 2)}, /* Netgear AirCard 340U NMEA */ |
144 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9051, 3)}, /* Netgear AirCard 340U Modem */ | 153 | {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9051, 3)}, /* Netgear AirCard 340U Modem */ |
154 | {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a2, 0)}, /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card Device Management */ | ||
155 | {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a2, 2)}, /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card NMEA */ | ||
156 | {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a2, 3)}, /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card Modem */ | ||
157 | {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a3, 0)}, /* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card Device Management */ | ||
158 | {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a3, 2)}, /* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card NMEA */ | ||
159 | {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a3, 3)}, /* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card Modem */ | ||
160 | {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a4, 0)}, /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card Device Management */ | ||
161 | {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a4, 2)}, /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card NMEA */ | ||
162 | {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a4, 3)}, /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card Modem */ | ||
163 | {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a8, 0)}, /* Dell Wireless 5808 Gobi(TM) 4G LTE Mobile Broadband Card Device Management */ | ||
164 | {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a8, 2)}, /* Dell Wireless 5808 Gobi(TM) 4G LTE Mobile Broadband Card NMEA */ | ||
165 | {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a8, 3)}, /* Dell Wireless 5808 Gobi(TM) 4G LTE Mobile Broadband Card Modem */ | ||
166 | {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a9, 0)}, /* Dell Wireless 5808e Gobi(TM) 4G LTE Mobile Broadband Card Device Management */ | ||
167 | {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a9, 2)}, /* Dell Wireless 5808e Gobi(TM) 4G LTE Mobile Broadband Card NMEA */ | ||
168 | {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a9, 3)}, /* Dell Wireless 5808e Gobi(TM) 4G LTE Mobile Broadband Card Modem */ | ||
145 | 169 | ||
146 | { } /* Terminating entry */ | 170 | { } /* Terminating entry */ |
147 | }; | 171 | }; |
diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c index a9eb6221a815..6b192e602ce0 100644 --- a/drivers/usb/serial/sierra.c +++ b/drivers/usb/serial/sierra.c | |||
@@ -291,7 +291,6 @@ static const struct usb_device_id id_table[] = { | |||
291 | { USB_DEVICE(0x0f3d, 0x68A3), /* Airprime/Sierra Wireless Direct IP modems */ | 291 | { USB_DEVICE(0x0f3d, 0x68A3), /* Airprime/Sierra Wireless Direct IP modems */ |
292 | .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist | 292 | .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist |
293 | }, | 293 | }, |
294 | { USB_DEVICE(0x413C, 0x08133) }, /* Dell Computer Corp. Wireless 5720 VZW Mobile Broadband (EVDO Rev-A) Minicard GPS Port */ | ||
295 | 294 | ||
296 | { } | 295 | { } |
297 | }; | 296 | }; |
diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c index 81fc0dfcfdcf..6d40d56378d7 100644 --- a/drivers/usb/serial/usb-serial.c +++ b/drivers/usb/serial/usb-serial.c | |||
@@ -1347,10 +1347,12 @@ static int usb_serial_register(struct usb_serial_driver *driver) | |||
1347 | static void usb_serial_deregister(struct usb_serial_driver *device) | 1347 | static void usb_serial_deregister(struct usb_serial_driver *device) |
1348 | { | 1348 | { |
1349 | pr_info("USB Serial deregistering driver %s\n", device->description); | 1349 | pr_info("USB Serial deregistering driver %s\n", device->description); |
1350 | |||
1350 | mutex_lock(&table_lock); | 1351 | mutex_lock(&table_lock); |
1351 | list_del(&device->driver_list); | 1352 | list_del(&device->driver_list); |
1352 | usb_serial_bus_deregister(device); | ||
1353 | mutex_unlock(&table_lock); | 1353 | mutex_unlock(&table_lock); |
1354 | |||
1355 | usb_serial_bus_deregister(device); | ||
1354 | } | 1356 | } |
1355 | 1357 | ||
1356 | /** | 1358 | /** |
diff --git a/drivers/usb/serial/usb_wwan.c b/drivers/usb/serial/usb_wwan.c index 640fe0173236..b078440e822f 100644 --- a/drivers/usb/serial/usb_wwan.c +++ b/drivers/usb/serial/usb_wwan.c | |||
@@ -466,6 +466,9 @@ int usb_wwan_port_probe(struct usb_serial_port *port) | |||
466 | int err; | 466 | int err; |
467 | int i; | 467 | int i; |
468 | 468 | ||
469 | if (!port->bulk_in_size || !port->bulk_out_size) | ||
470 | return -ENODEV; | ||
471 | |||
469 | portdata = kzalloc(sizeof(*portdata), GFP_KERNEL); | 472 | portdata = kzalloc(sizeof(*portdata), GFP_KERNEL); |
470 | if (!portdata) | 473 | if (!portdata) |
471 | return -ENOMEM; | 474 | return -ENOMEM; |
@@ -473,9 +476,6 @@ int usb_wwan_port_probe(struct usb_serial_port *port) | |||
473 | init_usb_anchor(&portdata->delayed); | 476 | init_usb_anchor(&portdata->delayed); |
474 | 477 | ||
475 | for (i = 0; i < N_IN_URB; i++) { | 478 | for (i = 0; i < N_IN_URB; i++) { |
476 | if (!port->bulk_in_size) | ||
477 | break; | ||
478 | |||
479 | buffer = (u8 *)__get_free_page(GFP_KERNEL); | 479 | buffer = (u8 *)__get_free_page(GFP_KERNEL); |
480 | if (!buffer) | 480 | if (!buffer) |
481 | goto bail_out_error; | 481 | goto bail_out_error; |
@@ -489,9 +489,6 @@ int usb_wwan_port_probe(struct usb_serial_port *port) | |||
489 | } | 489 | } |
490 | 490 | ||
491 | for (i = 0; i < N_OUT_URB; i++) { | 491 | for (i = 0; i < N_OUT_URB; i++) { |
492 | if (!port->bulk_out_size) | ||
493 | break; | ||
494 | |||
495 | buffer = kmalloc(OUT_BUFLEN, GFP_KERNEL); | 492 | buffer = kmalloc(OUT_BUFLEN, GFP_KERNEL); |
496 | if (!buffer) | 493 | if (!buffer) |
497 | goto bail_out_error2; | 494 | goto bail_out_error2; |