diff options
author | Jiri Kosina <jkosina@suse.cz> | 2010-04-22 20:08:44 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2010-04-22 20:08:44 -0400 |
commit | 6c9468e9eb1252eaefd94ce7f06e1be9b0b641b1 (patch) | |
tree | 797676a336b050bfa1ef879377c07e541b9075d6 /drivers/usb/serial/option.c | |
parent | 4cb3ca7cd7e2cae8d1daf5345ec99a1e8502cf3f (diff) | |
parent | c81eddb0e3728661d1585fbc564449c94165cc36 (diff) |
Merge branch 'master' into for-next
Diffstat (limited to 'drivers/usb/serial/option.c')
-rw-r--r-- | drivers/usb/serial/option.c | 54 |
1 files changed, 51 insertions, 3 deletions
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index 847b805d63a3..ca9d866672aa 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c | |||
@@ -37,6 +37,7 @@ | |||
37 | #include <linux/errno.h> | 37 | #include <linux/errno.h> |
38 | #include <linux/tty.h> | 38 | #include <linux/tty.h> |
39 | #include <linux/tty_flip.h> | 39 | #include <linux/tty_flip.h> |
40 | #include <linux/slab.h> | ||
40 | #include <linux/module.h> | 41 | #include <linux/module.h> |
41 | #include <linux/bitops.h> | 42 | #include <linux/bitops.h> |
42 | #include <linux/usb.h> | 43 | #include <linux/usb.h> |
@@ -288,7 +289,9 @@ static int option_resume(struct usb_serial *serial); | |||
288 | 289 | ||
289 | #define QUALCOMM_VENDOR_ID 0x05C6 | 290 | #define QUALCOMM_VENDOR_ID 0x05C6 |
290 | 291 | ||
291 | #define MAXON_VENDOR_ID 0x16d8 | 292 | #define CMOTECH_VENDOR_ID 0x16d8 |
293 | #define CMOTECH_PRODUCT_6008 0x6008 | ||
294 | #define CMOTECH_PRODUCT_6280 0x6280 | ||
292 | 295 | ||
293 | #define TELIT_VENDOR_ID 0x1bc7 | 296 | #define TELIT_VENDOR_ID 0x1bc7 |
294 | #define TELIT_PRODUCT_UC864E 0x1003 | 297 | #define TELIT_PRODUCT_UC864E 0x1003 |
@@ -309,6 +312,7 @@ static int option_resume(struct usb_serial *serial); | |||
309 | #define DLINK_VENDOR_ID 0x1186 | 312 | #define DLINK_VENDOR_ID 0x1186 |
310 | #define DLINK_PRODUCT_DWM_652 0x3e04 | 313 | #define DLINK_PRODUCT_DWM_652 0x3e04 |
311 | #define DLINK_PRODUCT_DWM_652_U5 0xce16 | 314 | #define DLINK_PRODUCT_DWM_652_U5 0xce16 |
315 | #define DLINK_PRODUCT_DWM_652_U5A 0xce1e | ||
312 | 316 | ||
313 | #define QISDA_VENDOR_ID 0x1da5 | 317 | #define QISDA_VENDOR_ID 0x1da5 |
314 | #define QISDA_PRODUCT_H21_4512 0x4512 | 318 | #define QISDA_PRODUCT_H21_4512 0x4512 |
@@ -332,6 +336,24 @@ static int option_resume(struct usb_serial *serial); | |||
332 | #define ALCATEL_VENDOR_ID 0x1bbb | 336 | #define ALCATEL_VENDOR_ID 0x1bbb |
333 | #define ALCATEL_PRODUCT_X060S 0x0000 | 337 | #define ALCATEL_PRODUCT_X060S 0x0000 |
334 | 338 | ||
339 | #define PIRELLI_VENDOR_ID 0x1266 | ||
340 | #define PIRELLI_PRODUCT_C100_1 0x1002 | ||
341 | #define PIRELLI_PRODUCT_C100_2 0x1003 | ||
342 | #define PIRELLI_PRODUCT_1004 0x1004 | ||
343 | #define PIRELLI_PRODUCT_1005 0x1005 | ||
344 | #define PIRELLI_PRODUCT_1006 0x1006 | ||
345 | #define PIRELLI_PRODUCT_1007 0x1007 | ||
346 | #define PIRELLI_PRODUCT_1008 0x1008 | ||
347 | #define PIRELLI_PRODUCT_1009 0x1009 | ||
348 | #define PIRELLI_PRODUCT_100A 0x100a | ||
349 | #define PIRELLI_PRODUCT_100B 0x100b | ||
350 | #define PIRELLI_PRODUCT_100C 0x100c | ||
351 | #define PIRELLI_PRODUCT_100D 0x100d | ||
352 | #define PIRELLI_PRODUCT_100E 0x100e | ||
353 | #define PIRELLI_PRODUCT_100F 0x100f | ||
354 | #define PIRELLI_PRODUCT_1011 0x1011 | ||
355 | #define PIRELLI_PRODUCT_1012 0x1012 | ||
356 | |||
335 | /* Airplus products */ | 357 | /* Airplus products */ |
336 | #define AIRPLUS_VENDOR_ID 0x1011 | 358 | #define AIRPLUS_VENDOR_ID 0x1011 |
337 | #define AIRPLUS_PRODUCT_MCD650 0x3198 | 359 | #define AIRPLUS_PRODUCT_MCD650 0x3198 |
@@ -547,7 +569,8 @@ static const struct usb_device_id option_ids[] = { | |||
547 | { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) }, | 569 | { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) }, |
548 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6000)}, /* ZTE AC8700 */ | 570 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6000)}, /* ZTE AC8700 */ |
549 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */ | 571 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */ |
550 | { USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */ | 572 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6280) }, /* BP3-USB & BP3-EXT HSDPA */ |
573 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6008) }, | ||
551 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) }, | 574 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) }, |
552 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864G) }, | 575 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864G) }, |
553 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */ | 576 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */ |
@@ -659,6 +682,7 @@ static const struct usb_device_id option_ids[] = { | |||
659 | { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) }, | 682 | { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) }, |
660 | { USB_DEVICE(DLINK_VENDOR_ID, DLINK_PRODUCT_DWM_652) }, | 683 | { USB_DEVICE(DLINK_VENDOR_ID, DLINK_PRODUCT_DWM_652) }, |
661 | { USB_DEVICE(ALINK_VENDOR_ID, DLINK_PRODUCT_DWM_652_U5) }, /* Yes, ALINK_VENDOR_ID */ | 684 | { USB_DEVICE(ALINK_VENDOR_ID, DLINK_PRODUCT_DWM_652_U5) }, /* Yes, ALINK_VENDOR_ID */ |
685 | { USB_DEVICE(ALINK_VENDOR_ID, DLINK_PRODUCT_DWM_652_U5A) }, | ||
662 | { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H21_4512) }, | 686 | { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H21_4512) }, |
663 | { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H21_4523) }, | 687 | { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H21_4523) }, |
664 | { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H20_4515) }, | 688 | { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H20_4515) }, |
@@ -666,7 +690,6 @@ static const struct usb_device_id option_ids[] = { | |||
666 | { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_PRODUCT_G450) }, | 690 | { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_PRODUCT_G450) }, |
667 | { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_PRODUCT_HSDPA_MINICARD ) }, /* Toshiba 3G HSDPA == Novatel Expedite EU870D MiniCard */ | 691 | { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_PRODUCT_HSDPA_MINICARD ) }, /* Toshiba 3G HSDPA == Novatel Expedite EU870D MiniCard */ |
668 | { USB_DEVICE(ALINK_VENDOR_ID, 0x9000) }, | 692 | { USB_DEVICE(ALINK_VENDOR_ID, 0x9000) }, |
669 | { USB_DEVICE(ALINK_VENDOR_ID, 0xce16) }, | ||
670 | { USB_DEVICE_AND_INTERFACE_INFO(ALINK_VENDOR_ID, ALINK_PRODUCT_3GU, 0xff, 0xff, 0xff) }, | 693 | { USB_DEVICE_AND_INTERFACE_INFO(ALINK_VENDOR_ID, ALINK_PRODUCT_3GU, 0xff, 0xff, 0xff) }, |
671 | { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S) }, | 694 | { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S) }, |
672 | { USB_DEVICE(AIRPLUS_VENDOR_ID, AIRPLUS_PRODUCT_MCD650) }, | 695 | { USB_DEVICE(AIRPLUS_VENDOR_ID, AIRPLUS_PRODUCT_MCD650) }, |
@@ -675,6 +698,24 @@ static const struct usb_device_id option_ids[] = { | |||
675 | .driver_info = (kernel_ulong_t)&four_g_w14_blacklist | 698 | .driver_info = (kernel_ulong_t)&four_g_w14_blacklist |
676 | }, | 699 | }, |
677 | { USB_DEVICE(HAIER_VENDOR_ID, HAIER_PRODUCT_CE100) }, | 700 | { USB_DEVICE(HAIER_VENDOR_ID, HAIER_PRODUCT_CE100) }, |
701 | /* Pirelli */ | ||
702 | { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_C100_1)}, | ||
703 | { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_C100_2)}, | ||
704 | { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1004)}, | ||
705 | { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1005)}, | ||
706 | { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1006)}, | ||
707 | { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1007)}, | ||
708 | { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1008)}, | ||
709 | { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1009)}, | ||
710 | { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_100A)}, | ||
711 | { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_100B) }, | ||
712 | { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_100C) }, | ||
713 | { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_100D) }, | ||
714 | { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_100E) }, | ||
715 | { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_100F) }, | ||
716 | { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1011)}, | ||
717 | { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1012)}, | ||
718 | |||
678 | { } /* Terminating entry */ | 719 | { } /* Terminating entry */ |
679 | }; | 720 | }; |
680 | MODULE_DEVICE_TABLE(usb, option_ids); | 721 | MODULE_DEVICE_TABLE(usb, option_ids); |
@@ -798,12 +839,19 @@ static int option_probe(struct usb_serial *serial, | |||
798 | const struct usb_device_id *id) | 839 | const struct usb_device_id *id) |
799 | { | 840 | { |
800 | struct option_intf_private *data; | 841 | struct option_intf_private *data; |
842 | |||
801 | /* D-Link DWM 652 still exposes CD-Rom emulation interface in modem mode */ | 843 | /* D-Link DWM 652 still exposes CD-Rom emulation interface in modem mode */ |
802 | if (serial->dev->descriptor.idVendor == DLINK_VENDOR_ID && | 844 | if (serial->dev->descriptor.idVendor == DLINK_VENDOR_ID && |
803 | serial->dev->descriptor.idProduct == DLINK_PRODUCT_DWM_652 && | 845 | serial->dev->descriptor.idProduct == DLINK_PRODUCT_DWM_652 && |
804 | serial->interface->cur_altsetting->desc.bInterfaceClass == 0x8) | 846 | serial->interface->cur_altsetting->desc.bInterfaceClass == 0x8) |
805 | return -ENODEV; | 847 | return -ENODEV; |
806 | 848 | ||
849 | /* Bandrich modem and AT command interface is 0xff */ | ||
850 | if ((serial->dev->descriptor.idVendor == BANDRICH_VENDOR_ID || | ||
851 | serial->dev->descriptor.idVendor == PIRELLI_VENDOR_ID) && | ||
852 | serial->interface->cur_altsetting->desc.bInterfaceClass != 0xff) | ||
853 | return -ENODEV; | ||
854 | |||
807 | data = serial->private = kzalloc(sizeof(struct option_intf_private), GFP_KERNEL); | 855 | data = serial->private = kzalloc(sizeof(struct option_intf_private), GFP_KERNEL); |
808 | if (!data) | 856 | if (!data) |
809 | return -ENOMEM; | 857 | return -ENOMEM; |