option.c revision 646d90e2b925578abef5c45853e0b166b6a450bf
158cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs/*
214f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs  USB Driver for GSM modems
358cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
458cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs  Copyright (C) 2005  Matthias Urlichs <smurf@smurf.noris.de>
558cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
658cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs  This driver is free software; you can redistribute it and/or modify
758cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs  it under the terms of Version 2 of the GNU General Public License as
858cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs  published by the Free Software Foundation.
958cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
1058cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs  Portions copied from the Keyspan driver by Hugh Blemings <hugh@blemings.org>
1158cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
12b3fdab59b8f5d8e42fa339be74cd015dc1a3192fMatthias Urlichs  History: see the git log.
13ba460e48064edeb57e3398eb8972c58de33f11eaMatthias Urlichs
14ba460e48064edeb57e3398eb8972c58de33f11eaMatthias Urlichs  Work sponsored by: Sigos GmbH, Germany <info@sigos.de>
15ba460e48064edeb57e3398eb8972c58de33f11eaMatthias Urlichs
1614f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs  This driver exists because the "normal" serial driver doesn't work too well
1714f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs  with GSM modems. Issues:
1814f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs  - data loss -- one single Receive URB is not nearly enough
197c1c2f73e00b5d0413399a14b7ab9e80db94926fMatthias Urlichs  - nonstandard flow (Option devices) control
2014f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs  - controlling the baud rate doesn't make sense
2114f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs
2214f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs  This driver is named "option" because the most common device it's
2314f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs  used for is a PC-Card (with an internal OHCI-USB interface, behind
2414f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs  which the GSM interface sits), made by Option Inc.
2514f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs
2614f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs  Some of the "one port" devices actually exhibit multiple USB instances
2714f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs  on the USB bus. This is not a bug, these ports are used for different
2814f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs  device features.
2958cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs*/
30ba460e48064edeb57e3398eb8972c58de33f11eaMatthias Urlichs
315f760040bcb4cc0498d4c662c4ea305290198ef3Chris Collins#define DRIVER_VERSION "v0.7.2"
3258cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs#define DRIVER_AUTHOR "Matthias Urlichs <smurf@smurf.noris.de>"
3314f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs#define DRIVER_DESC "USB Driver for GSM modems"
3458cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
3558cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs#include <linux/kernel.h>
3658cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs#include <linux/jiffies.h>
3758cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs#include <linux/errno.h>
3858cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs#include <linux/tty.h>
3958cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs#include <linux/tty_flip.h>
405a0e3ad6af8660be21ca98a971cd00f331318c05Tejun Heo#include <linux/slab.h>
4158cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs#include <linux/module.h>
4259c2afa072506aae10ef93126aab651142e0c908Alan Stern#include <linux/bitops.h>
4358cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs#include <linux/usb.h>
44a969888ce91673c7f4b86520d851a6f0d5a5fa7dGreg Kroah-Hartman#include <linux/usb/serial.h>
458b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett#include "usb-wwan.h"
4658cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
4758cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs/* Function prototypes */
48c5be1b52d9ea6ede4931691bf9f0bd454515aa52Pascal Terjanstatic int  option_probe(struct usb_serial *serial,
49c5be1b52d9ea6ede4931691bf9f0bd454515aa52Pascal Terjan			const struct usb_device_id *id);
508b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrettstatic int option_send_setup(struct usb_serial_port *port);
517d12e780e003f93433d49ce78cfedf4b4c52adc5David Howellsstatic void option_instat_callback(struct urb *urb);
5258cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
5358cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs/* Vendor and product IDs */
54fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_VENDOR_ID			0x0AF0
55fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_PRODUCT_COLT			0x5000
56fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_PRODUCT_RICOLA			0x6000
57fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_PRODUCT_RICOLA_LIGHT		0x6100
58fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_PRODUCT_RICOLA_QUAD		0x6200
59fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_PRODUCT_RICOLA_QUAD_LIGHT	0x6300
60fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_PRODUCT_RICOLA_NDIS		0x6050
61fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_PRODUCT_RICOLA_NDIS_LIGHT	0x6150
62fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_PRODUCT_RICOLA_NDIS_QUAD		0x6250
63fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_PRODUCT_RICOLA_NDIS_QUAD_LIGHT	0x6350
64fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_PRODUCT_COBRA			0x6500
65fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_PRODUCT_COBRA_BUS		0x6501
66fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_PRODUCT_VIPER			0x6600
67fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_PRODUCT_VIPER_BUS		0x6601
68fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_PRODUCT_GT_MAX_READY		0x6701
69fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_PRODUCT_FUJI_MODEM_LIGHT		0x6721
70fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_PRODUCT_FUJI_MODEM_GT		0x6741
71fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_PRODUCT_FUJI_MODEM_EX		0x6761
72fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_PRODUCT_KOI_MODEM		0x6800
73fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_PRODUCT_SCORPION_MODEM		0x6901
74fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_PRODUCT_ETNA_MODEM		0x7001
75fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_PRODUCT_ETNA_MODEM_LITE		0x7021
76fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_PRODUCT_ETNA_MODEM_GT		0x7041
77fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_PRODUCT_ETNA_MODEM_EX		0x7061
78fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define OPTION_PRODUCT_ETNA_KOI_MODEM		0x7100
79e7f2f0d77a7b483a26054f29ba8393831b25a8a4Achilleas Kotsis#define OPTION_PRODUCT_GTM380_MODEM		0x7201
80fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman
81fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define HUAWEI_VENDOR_ID			0x12D1
82fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define HUAWEI_PRODUCT_E600			0x1001
83fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define HUAWEI_PRODUCT_E220			0x1003
84a3209a0efc404cc4190b496bae247e7706371032Jaime Velasco Juan#define HUAWEI_PRODUCT_E220BIS			0x1004
85aad8a278f37e748bfe310a1366f2aa7e0dbaf365fangxiaozhi#define HUAWEI_PRODUCT_E1401			0x1401
861460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E1402			0x1402
87aad8a278f37e748bfe310a1366f2aa7e0dbaf365fangxiaozhi#define HUAWEI_PRODUCT_E1403			0x1403
881460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E1404			0x1404
89aad8a278f37e748bfe310a1366f2aa7e0dbaf365fangxiaozhi#define HUAWEI_PRODUCT_E1405			0x1405
90aad8a278f37e748bfe310a1366f2aa7e0dbaf365fangxiaozhi#define HUAWEI_PRODUCT_E1406			0x1406
911460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E1407			0x1407
92aad8a278f37e748bfe310a1366f2aa7e0dbaf365fangxiaozhi#define HUAWEI_PRODUCT_E1408			0x1408
93aad8a278f37e748bfe310a1366f2aa7e0dbaf365fangxiaozhi#define HUAWEI_PRODUCT_E1409			0x1409
941460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E140A			0x140A
951460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E140B			0x140B
961460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E140C			0x140C
971460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E140D			0x140D
981460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E140E			0x140E
991460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E140F			0x140F
100aad8a278f37e748bfe310a1366f2aa7e0dbaf365fangxiaozhi#define HUAWEI_PRODUCT_E1410			0x1410
101aad8a278f37e748bfe310a1366f2aa7e0dbaf365fangxiaozhi#define HUAWEI_PRODUCT_E1411			0x1411
102aad8a278f37e748bfe310a1366f2aa7e0dbaf365fangxiaozhi#define HUAWEI_PRODUCT_E1412			0x1412
103aad8a278f37e748bfe310a1366f2aa7e0dbaf365fangxiaozhi#define HUAWEI_PRODUCT_E1413			0x1413
104aad8a278f37e748bfe310a1366f2aa7e0dbaf365fangxiaozhi#define HUAWEI_PRODUCT_E1414			0x1414
105aad8a278f37e748bfe310a1366f2aa7e0dbaf365fangxiaozhi#define HUAWEI_PRODUCT_E1415			0x1415
106aad8a278f37e748bfe310a1366f2aa7e0dbaf365fangxiaozhi#define HUAWEI_PRODUCT_E1416			0x1416
107aad8a278f37e748bfe310a1366f2aa7e0dbaf365fangxiaozhi#define HUAWEI_PRODUCT_E1417			0x1417
108aad8a278f37e748bfe310a1366f2aa7e0dbaf365fangxiaozhi#define HUAWEI_PRODUCT_E1418			0x1418
109aad8a278f37e748bfe310a1366f2aa7e0dbaf365fangxiaozhi#define HUAWEI_PRODUCT_E1419			0x1419
1101460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E141A			0x141A
1111460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E141B			0x141B
1121460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E141C			0x141C
1131460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E141D			0x141D
1141460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E141E			0x141E
1151460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E141F			0x141F
1161460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E1420			0x1420
1171460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E1421			0x1421
1181460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E1422			0x1422
1191460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E1423			0x1423
1201460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E1424			0x1424
1211460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E1425			0x1425
1221460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E1426			0x1426
1231460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E1427			0x1427
1241460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E1428			0x1428
1251460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E1429			0x1429
1261460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E142A			0x142A
1271460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E142B			0x142B
1281460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E142C			0x142C
1291460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E142D			0x142D
1301460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E142E			0x142E
1311460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E142F			0x142F
1321460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E1430			0x1430
1331460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E1431			0x1431
1341460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E1432			0x1432
1351460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E1433			0x1433
1361460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E1434			0x1434
1371460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E1435			0x1435
1381460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E1436			0x1436
1391460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E1437			0x1437
1401460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E1438			0x1438
1411460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E1439			0x1439
1421460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E143A			0x143A
1431460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E143B			0x143B
1441460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E143C			0x143C
1451460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E143D			0x143D
1461460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E143E			0x143E
1471460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi#define HUAWEI_PRODUCT_E143F			0x143F
1480ee3a33a0481c8f5c9edb7a5a02f3c76496d9551Ronnie Furuskog#define HUAWEI_PRODUCT_E14AC			0x14AC
149fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman
150fc91be2ad03e0d243418414a854665274d560ca2Alex.Cheng@quantatw.com#define QUANTA_VENDOR_ID			0x0408
151fc91be2ad03e0d243418414a854665274d560ca2Alex.Cheng@quantatw.com#define QUANTA_PRODUCT_Q101			0xEA02
152fc91be2ad03e0d243418414a854665274d560ca2Alex.Cheng@quantatw.com#define QUANTA_PRODUCT_Q111			0xEA03
153fc91be2ad03e0d243418414a854665274d560ca2Alex.Cheng@quantatw.com#define QUANTA_PRODUCT_GLX			0xEA04
154fc91be2ad03e0d243418414a854665274d560ca2Alex.Cheng@quantatw.com#define QUANTA_PRODUCT_GKE			0xEA05
155fc91be2ad03e0d243418414a854665274d560ca2Alex.Cheng@quantatw.com#define QUANTA_PRODUCT_GLE			0xEA06
156fc91be2ad03e0d243418414a854665274d560ca2Alex.Cheng@quantatw.com
157fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define NOVATELWIRELESS_VENDOR_ID		0x1410
15872ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper
159c6206faa4f18bcc837a12552b8c184ab1668fdeaLeslie Watter/* YISO PRODUCTS */
160c6206faa4f18bcc837a12552b8c184ab1668fdeaLeslie Watter
161c6206faa4f18bcc837a12552b8c184ab1668fdeaLeslie Watter#define YISO_VENDOR_ID				0x0EAB
162c6206faa4f18bcc837a12552b8c184ab1668fdeaLeslie Watter#define YISO_PRODUCT_U893			0xC893
163c6206faa4f18bcc837a12552b8c184ab1668fdeaLeslie Watter
16472ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper/* MERLIN EVDO PRODUCTS */
16572ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper#define NOVATELWIRELESS_PRODUCT_V640		0x1100
16672ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper#define NOVATELWIRELESS_PRODUCT_V620		0x1110
16772ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper#define NOVATELWIRELESS_PRODUCT_V740		0x1120
16872ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper#define NOVATELWIRELESS_PRODUCT_V720		0x1130
16972ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper
17072ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper/* MERLIN HSDPA/HSPA PRODUCTS */
17172ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper#define NOVATELWIRELESS_PRODUCT_U730		0x1400
17272ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper#define NOVATELWIRELESS_PRODUCT_U740		0x1410
17372ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper#define NOVATELWIRELESS_PRODUCT_U870		0x1420
17472ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper#define NOVATELWIRELESS_PRODUCT_XU870		0x1430
17572ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper#define NOVATELWIRELESS_PRODUCT_X950D		0x1450
17672ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper
17772ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper/* EXPEDITE PRODUCTS */
17872ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper#define NOVATELWIRELESS_PRODUCT_EV620		0x2100
17972ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper#define NOVATELWIRELESS_PRODUCT_ES720		0x2110
18072ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper#define NOVATELWIRELESS_PRODUCT_E725		0x2120
181a1d9bc12e06a71b01f626040dc5149b357e8f1ebMatthias Urlichs#define NOVATELWIRELESS_PRODUCT_ES620		0x2130
18272ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper#define NOVATELWIRELESS_PRODUCT_EU730		0x2400
18372ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper#define NOVATELWIRELESS_PRODUCT_EU740		0x2410
18472ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper#define NOVATELWIRELESS_PRODUCT_EU870D		0x2420
18572ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper
18672ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper/* OVATION PRODUCTS */
18772ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper#define NOVATELWIRELESS_PRODUCT_MC727		0x4100
18872ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper#define NOVATELWIRELESS_PRODUCT_MC950D		0x4400
18956a21827439a4d715b510bfaf488534e6f4ad2f8Dirk Hohndel#define NOVATELWIRELESS_PRODUCT_U727		0x5010
190f1469fc3ef1d5a8a67146c1c72021f012a59dea6Tim Gardner#define NOVATELWIRELESS_PRODUCT_MC727_NEW	0x5100
1919685a59a2bc0e1e85d1848c744214dbe74e9ce7dRichard Laager#define NOVATELWIRELESS_PRODUCT_MC760		0x6000
19271f9f6cc9eef47fddc05f34b3d32677ab2e0f1faDan Williams#define NOVATELWIRELESS_PRODUCT_OVMC760		0x6002
19372ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper
19472ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper/* FUTURE NOVATEL PRODUCTS */
195c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper#define NOVATELWIRELESS_PRODUCT_EVDO_HIGHSPEED	0X6001
196c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper#define NOVATELWIRELESS_PRODUCT_HSPA_FULLSPEED	0X7000
197c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper#define NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED	0X7001
198c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper#define NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_FULLSPEED	0X8000
199c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper#define NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_HIGHSPEED	0X8001
200c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper#define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_FULLSPEED	0X9000
201c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper#define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_HIGHSPEED	0X9001
202c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper#define NOVATELWIRELESS_PRODUCT_GLOBAL		0XA001
20372ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper
20432147be4cc50e5e4445a8760125cacc258c61638tang kai/* AMOI PRODUCTS */
20532147be4cc50e5e4445a8760125cacc258c61638tang kai#define AMOI_VENDOR_ID				0x1614
20632147be4cc50e5e4445a8760125cacc258c61638tang kai#define AMOI_PRODUCT_H01			0x0800
20732147be4cc50e5e4445a8760125cacc258c61638tang kai#define AMOI_PRODUCT_H01A			0x7002
20832147be4cc50e5e4445a8760125cacc258c61638tang kai#define AMOI_PRODUCT_H02			0x0802
20932147be4cc50e5e4445a8760125cacc258c61638tang kai
21096443218be7f61027c23772d048a1bf549dfb2d7Faidon Liambotis#define DELL_VENDOR_ID				0x413C
211fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman
212c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper/* Dell modems */
213c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper#define DELL_PRODUCT_5700_MINICARD		0x8114
214c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper#define DELL_PRODUCT_5500_MINICARD		0x8115
215c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper#define DELL_PRODUCT_5505_MINICARD		0x8116
216c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper#define DELL_PRODUCT_5700_EXPRESSCARD		0x8117
217c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper#define DELL_PRODUCT_5510_EXPRESSCARD		0x8118
218c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper
219c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper#define DELL_PRODUCT_5700_MINICARD_SPRINT	0x8128
220c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper#define DELL_PRODUCT_5700_MINICARD_TELUS	0x8129
221c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper
222c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper#define DELL_PRODUCT_5720_MINICARD_VZW		0x8133
223c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper#define DELL_PRODUCT_5720_MINICARD_SPRINT	0x8134
224c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper#define DELL_PRODUCT_5720_MINICARD_TELUS	0x8135
225c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper#define DELL_PRODUCT_5520_MINICARD_CINGULAR	0x8136
226c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper#define DELL_PRODUCT_5520_MINICARD_GENERIC_L	0x8137
227c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper#define DELL_PRODUCT_5520_MINICARD_GENERIC_I	0x8138
228c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper
229c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper#define DELL_PRODUCT_5730_MINICARD_SPRINT	0x8180
230c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper#define DELL_PRODUCT_5730_MINICARD_TELUS	0x8181
231c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper#define DELL_PRODUCT_5730_MINICARD_VZW		0x8182
232c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper
233564d61d30effcc727f9519538143a6c6aeb92e46Dan Williams#define KYOCERA_VENDOR_ID			0x0c88
234640c1bce86d1e11ee6a1263fdf6170d3210b1684Greg Kroah-Hartman#define KYOCERA_PRODUCT_KPC650			0x17da
235564d61d30effcc727f9519538143a6c6aeb92e46Dan Williams#define KYOCERA_PRODUCT_KPC680			0x180a
236564d61d30effcc727f9519538143a6c6aeb92e46Dan Williams
237fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman#define ANYDATA_VENDOR_ID			0x16d5
238f8033827d8e92db6159d34ed45c608522674ecd8Hiroshi Miura#define ANYDATA_PRODUCT_ADU_620UW		0x6202
23946269db99cc1a618d707deb370d821d1f8d75945Alexander Gattin#define ANYDATA_PRODUCT_ADU_E100A		0x6501
24046269db99cc1a618d707deb370d821d1f8d75945Alexander Gattin#define ANYDATA_PRODUCT_ADU_500A		0x6502
24158cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
24285fb62a001278270f9fffbdc3508ef23d5f3693dDaniel Kozák#define AXESSTEL_VENDOR_ID			0x1726
24385fb62a001278270f9fffbdc3508ef23d5f3693dDaniel Kozák#define AXESSTEL_PRODUCT_MV110H			0x1000
24485fb62a001278270f9fffbdc3508ef23d5f3693dDaniel Kozák
2453f6e58467c635ebbb4a139cbe5e0c1f46792e18cLeon Leong#define BANDRICH_VENDOR_ID			0x1A8D
2463f6e58467c635ebbb4a139cbe5e0c1f46792e18cLeon Leong#define BANDRICH_PRODUCT_C100_1			0x1002
2473f6e58467c635ebbb4a139cbe5e0c1f46792e18cLeon Leong#define BANDRICH_PRODUCT_C100_2			0x1003
248bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong#define BANDRICH_PRODUCT_1004			0x1004
249bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong#define BANDRICH_PRODUCT_1005			0x1005
250bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong#define BANDRICH_PRODUCT_1006			0x1006
251bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong#define BANDRICH_PRODUCT_1007			0x1007
252bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong#define BANDRICH_PRODUCT_1008			0x1008
253bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong#define BANDRICH_PRODUCT_1009			0x1009
254bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong#define BANDRICH_PRODUCT_100A			0x100a
255bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong
256bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong#define BANDRICH_PRODUCT_100B			0x100b
257bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong#define BANDRICH_PRODUCT_100C			0x100c
258bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong#define BANDRICH_PRODUCT_100D			0x100d
259bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong#define BANDRICH_PRODUCT_100E			0x100e
260bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong
261bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong#define BANDRICH_PRODUCT_100F			0x100f
262bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong#define BANDRICH_PRODUCT_1010			0x1010
263bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong#define BANDRICH_PRODUCT_1011			0x1011
264bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong#define BANDRICH_PRODUCT_1012			0x1012
2653f6e58467c635ebbb4a139cbe5e0c1f46792e18cLeon Leong
266a1d9bc12e06a71b01f626040dc5149b357e8f1ebMatthias Urlichs#define AMOI_VENDOR_ID			0x1614
267a1d9bc12e06a71b01f626040dc5149b357e8f1ebMatthias Urlichs#define AMOI_PRODUCT_9508			0x0800
268a1d9bc12e06a71b01f626040dc5149b357e8f1ebMatthias Urlichs
269d726fb757722a3907356830a0b8d976267596d5cKevin Lloyd#define QUALCOMM_VENDOR_ID			0x05C6
270d726fb757722a3907356830a0b8d976267596d5cKevin Lloyd
271eaff4cdc978f414cf7b5441a333de3070d80e9c7Nathaniel McCallum#define CMOTECH_VENDOR_ID			0x16d8
2723b04872aa75006e2a4adaaec21e9c9ede8b8ad9dNathaniel McCallum#define CMOTECH_PRODUCT_6008			0x6008
273bb73ed2a268a29ab1b7d8cc50b5f248578e7e188Nathaniel McCallum#define CMOTECH_PRODUCT_6280			0x6280
27480d9709832390fa7e721bbf4a017da474fdc6c29James Cameron
275ee53b0ca0153b4f944cb142b5e65c96a1860d765Greg Kroah-Hartman#define TELIT_VENDOR_ID				0x1bc7
276ee53b0ca0153b4f944cb142b5e65c96a1860d765Greg Kroah-Hartman#define TELIT_PRODUCT_UC864E			0x1003
277ce60c48871d2b3a15ab3fa2450e783bebb4ae407Manuel Lauss#define TELIT_PRODUCT_UC864G			0x1004
278ee53b0ca0153b4f944cb142b5e65c96a1860d765Greg Kroah-Hartman
2796188a83f7264edebe9b8ee10ad7b2136d3531ea6Oliver Martin/* ZTE PRODUCTS */
2806188a83f7264edebe9b8ee10ad7b2136d3531ea6Oliver Martin#define ZTE_VENDOR_ID				0x19d2
2819ea19b82f3126da4e47d6b94563a3c2cd586f6e2Albert Pauw#define ZTE_PRODUCT_MF622			0x0001
2826188a83f7264edebe9b8ee10ad7b2136d3531ea6Oliver Martin#define ZTE_PRODUCT_MF628			0x0015
283bfd8408d68975759aba1b466af6f5388d7adb836Mikhail Gusarov#define ZTE_PRODUCT_MF626			0x0031
284884579d03a3e1e9ac8b7f32a1c36387cac3eb80bOtavio Salvador#define ZTE_PRODUCT_CDMA_TECH			0xfffe
285183791588efd416fc35a71819683b32dee92615bPeng Huang#define ZTE_PRODUCT_AC8710			0xfff1
286a67d8e6c1e49dc919c9d5480583fad8a46fc00aaHuzaifa Sidhpurwala#define ZTE_PRODUCT_AC2726			0xfff5
287fe30bc1b16dcfbbadf3f77bbad1c9014b23704cdMahesh Kuruganti#define ZTE_PRODUCT_AC8710T			0xffff
2886188a83f7264edebe9b8ee10ad7b2136d3531ea6Oliver Martin
289a559d2c8c1bf652ea2d0ecd6ab4a250fcdb37db8Dominik Brodowski/* ZTE PRODUCTS -- alternate vendor ID */
290a559d2c8c1bf652ea2d0ecd6ab4a250fcdb37db8Dominik Brodowski#define ZTE_VENDOR_ID2				0x1d6b
291a559d2c8c1bf652ea2d0ecd6ab4a250fcdb37db8Dominik Brodowski#define ZTE_PRODUCT_MF_330			0x0002
292a559d2c8c1bf652ea2d0ecd6ab4a250fcdb37db8Dominik Brodowski
29328fb66821f884870987a0b5ab064ef651d9f7c16Jesse Sung#define BENQ_VENDOR_ID				0x04a5
29428fb66821f884870987a0b5ab064ef651d9f7c16Jesse Sung#define BENQ_PRODUCT_H10			0x4068
29528fb66821f884870987a0b5ab064ef651d9f7c16Jesse Sung
296c00deaa542100a697acb5be200b9f54317c1cf69Pascal Terjan#define DLINK_VENDOR_ID				0x1186
297c00deaa542100a697acb5be200b9f54317c1cf69Pascal Terjan#define DLINK_PRODUCT_DWM_652			0x3e04
298ff854ce0b17161a86b5ae444c6cb0aa221720fabZhang Le#define DLINK_PRODUCT_DWM_652_U5		0xce16
299bf162019b7f5bda9eb3241ae22de831df2126132Huang Ying#define DLINK_PRODUCT_DWM_652_U5A		0xce1e
300c00deaa542100a697acb5be200b9f54317c1cf69Pascal Terjan
301e3a3174519bae99fe3a3d3b9dfda68d820527b44Brad Lu#define QISDA_VENDOR_ID				0x1da5
302e3a3174519bae99fe3a3d3b9dfda68d820527b44Brad Lu#define QISDA_PRODUCT_H21_4512			0x4512
303e3a3174519bae99fe3a3d3b9dfda68d820527b44Brad Lu#define QISDA_PRODUCT_H21_4523			0x4523
304e3a3174519bae99fe3a3d3b9dfda68d820527b44Brad Lu#define QISDA_PRODUCT_H20_4515			0x4515
305646d90e2b925578abef5c45853e0b166b6a450bfÖmer Sezgin Ugurlu#define QISDA_PRODUCT_H20_4518			0x4518
306e3a3174519bae99fe3a3d3b9dfda68d820527b44Brad Lu#define QISDA_PRODUCT_H20_4519			0x4519
307e3a3174519bae99fe3a3d3b9dfda68d820527b44Brad Lu
308fead2ab6cf9ad3a84a06e68ccc20d1e460fad13eBryan Wu/* TLAYTECH PRODUCTS */
309fead2ab6cf9ad3a84a06e68ccc20d1e460fad13eBryan Wu#define TLAYTECH_VENDOR_ID			0x20B9
310fead2ab6cf9ad3a84a06e68ccc20d1e460fad13eBryan Wu#define TLAYTECH_PRODUCT_TEU800			0x1682
311c00deaa542100a697acb5be200b9f54317c1cf69Pascal Terjan
312334f9b0f23c9bb90589213279c9cfe19ebe4c0c6Michele Valzelli/* TOSHIBA PRODUCTS */
313334f9b0f23c9bb90589213279c9cfe19ebe4c0c6Michele Valzelli#define TOSHIBA_VENDOR_ID			0x0930
314334f9b0f23c9bb90589213279c9cfe19ebe4c0c6Michele Valzelli#define TOSHIBA_PRODUCT_HSDPA_MINICARD		0x1302
31575f47214f90e996eb184eb6e6b0e8b817999c8f7Peter Magdina#define TOSHIBA_PRODUCT_G450			0x0d45
316334f9b0f23c9bb90589213279c9cfe19ebe4c0c6Michele Valzelli
317c3325eb16d36a49f9a5ae09241c418cfd1d3f4f5Anssi Hannula#define ALINK_VENDOR_ID				0x1e0e
318c3325eb16d36a49f9a5ae09241c418cfd1d3f4f5Anssi Hannula#define ALINK_PRODUCT_3GU			0x9200
319c3325eb16d36a49f9a5ae09241c418cfd1d3f4f5Anssi Hannula
32048c348cc939aaa3a07d4938669f2f315152e895eJavier Martin/* ALCATEL PRODUCTS */
32148c348cc939aaa3a07d4938669f2f315152e895eJavier Martin#define ALCATEL_VENDOR_ID			0x1bbb
32248c348cc939aaa3a07d4938669f2f315152e895eJavier Martin#define ALCATEL_PRODUCT_X060S			0x0000
32348c348cc939aaa3a07d4938669f2f315152e895eJavier Martin
32433c387529b7931248c6637bf9720ac7504a0b28bspark#define PIRELLI_VENDOR_ID			0x1266
32533c387529b7931248c6637bf9720ac7504a0b28bspark#define PIRELLI_PRODUCT_C100_1			0x1002
32633c387529b7931248c6637bf9720ac7504a0b28bspark#define PIRELLI_PRODUCT_C100_2			0x1003
32733c387529b7931248c6637bf9720ac7504a0b28bspark#define PIRELLI_PRODUCT_1004			0x1004
32833c387529b7931248c6637bf9720ac7504a0b28bspark#define PIRELLI_PRODUCT_1005			0x1005
32933c387529b7931248c6637bf9720ac7504a0b28bspark#define PIRELLI_PRODUCT_1006			0x1006
33033c387529b7931248c6637bf9720ac7504a0b28bspark#define PIRELLI_PRODUCT_1007			0x1007
33133c387529b7931248c6637bf9720ac7504a0b28bspark#define PIRELLI_PRODUCT_1008			0x1008
33233c387529b7931248c6637bf9720ac7504a0b28bspark#define PIRELLI_PRODUCT_1009			0x1009
33333c387529b7931248c6637bf9720ac7504a0b28bspark#define PIRELLI_PRODUCT_100A			0x100a
33433c387529b7931248c6637bf9720ac7504a0b28bspark#define PIRELLI_PRODUCT_100B			0x100b
33533c387529b7931248c6637bf9720ac7504a0b28bspark#define PIRELLI_PRODUCT_100C			0x100c
33633c387529b7931248c6637bf9720ac7504a0b28bspark#define PIRELLI_PRODUCT_100D			0x100d
33733c387529b7931248c6637bf9720ac7504a0b28bspark#define PIRELLI_PRODUCT_100E			0x100e
33833c387529b7931248c6637bf9720ac7504a0b28bspark#define PIRELLI_PRODUCT_100F			0x100f
33933c387529b7931248c6637bf9720ac7504a0b28bspark#define PIRELLI_PRODUCT_1011			0x1011
34033c387529b7931248c6637bf9720ac7504a0b28bspark#define PIRELLI_PRODUCT_1012			0x1012
34133c387529b7931248c6637bf9720ac7504a0b28bspark
34212148da6722be3b44c2220206b6ccb80d2d9d8f8Huzaifa Sidhpurwala/* Airplus products */
34312148da6722be3b44c2220206b6ccb80d2d9d8f8Huzaifa Sidhpurwala#define AIRPLUS_VENDOR_ID			0x1011
34412148da6722be3b44c2220206b6ccb80d2d9d8f8Huzaifa Sidhpurwala#define AIRPLUS_PRODUCT_MCD650			0x3198
34548c348cc939aaa3a07d4938669f2f315152e895eJavier Martin
346ac7d4ca9e0b27d7705d273f17afd29828db35ee6Dan Williams/* Longcheer/Longsung vendor ID; makes whitelabel devices that
347ac7d4ca9e0b27d7705d273f17afd29828db35ee6Dan Williams * many other vendors like 4G Systems, Alcatel, ChinaBird,
348ac7d4ca9e0b27d7705d273f17afd29828db35ee6Dan Williams * Mobidata, etc sell under their own brand names.
349ac7d4ca9e0b27d7705d273f17afd29828db35ee6Dan Williams */
350ac7d4ca9e0b27d7705d273f17afd29828db35ee6Dan Williams#define LONGCHEER_VENDOR_ID			0x1c9e
351ac7d4ca9e0b27d7705d273f17afd29828db35ee6Dan Williams
3520ec8648379334f1e127ebd5e57a625890f116824Gernot Hillier/* 4G Systems products */
35379da01d79e0f2c8d2d6f1b823fce429877c423a7Gernot Hillier/* This is the 4G XS Stick W14 a.k.a. Mobilcom Debitel Surf-Stick *
35479da01d79e0f2c8d2d6f1b823fce429877c423a7Gernot Hillier * It seems to contain a Qualcomm QSC6240/6290 chipset            */
3550ec8648379334f1e127ebd5e57a625890f116824Gernot Hillier#define FOUR_G_SYSTEMS_PRODUCT_W14		0x9603
3560ec8648379334f1e127ebd5e57a625890f116824Gernot Hillier
357c983202bd03eb82394ef1dce5906702fcbc7bb80Donny Kurnia/* Haier products */
358c983202bd03eb82394ef1dce5906702fcbc7bb80Donny Kurnia#define HAIER_VENDOR_ID				0x201e
359c983202bd03eb82394ef1dce5906702fcbc7bb80Donny Kurnia#define HAIER_PRODUCT_CE100			0x2009
360c983202bd03eb82394ef1dce5906702fcbc7bb80Donny Kurnia
3616f44bcb60bfa58590142545096b64f44144f0bc1Greg Kroah-Hartman#define CINTERION_VENDOR_ID			0x0681
3626f44bcb60bfa58590142545096b64f44144f0bc1Greg Kroah-Hartman
36386234d4975ce084d14711283a3bfc69305f97602Nils Radtke/* Olivetti products */
36486234d4975ce084d14711283a3bfc69305f97602Nils Radtke#define OLIVETTI_VENDOR_ID			0x0b3c
36586234d4975ce084d14711283a3bfc69305f97602Nils Radtke#define OLIVETTI_PRODUCT_OLICARD100		0xc000
36686234d4975ce084d14711283a3bfc69305f97602Nils Radtke
367cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier/* some devices interfaces need special handling due to a number of reasons */
368cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillierenum option_blacklist_reason {
369cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier		OPTION_BLACKLIST_NONE = 0,
370cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier		OPTION_BLACKLIST_SENDSETUP = 1,
371cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier		OPTION_BLACKLIST_RESERVED_IF = 2
372cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier};
373cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier
374cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillierstruct option_blacklist_info {
375cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier	const u32 infolen;	/* number of interface numbers on blacklist */
376cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier	const u8  *ifaceinfo;	/* pointer to the array holding the numbers */
377cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier	enum option_blacklist_reason reason;
378cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier};
379cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier
380a74171005f2f6474e05bdfccb05c9f0d68224a49Gernot Hillierstatic const u8 four_g_w14_no_sendsetup[] = { 0, 1 };
381a74171005f2f6474e05bdfccb05c9f0d68224a49Gernot Hillierstatic const struct option_blacklist_info four_g_w14_blacklist = {
382a74171005f2f6474e05bdfccb05c9f0d68224a49Gernot Hillier	.infolen = ARRAY_SIZE(four_g_w14_no_sendsetup),
383a74171005f2f6474e05bdfccb05c9f0d68224a49Gernot Hillier	.ifaceinfo = four_g_w14_no_sendsetup,
384a74171005f2f6474e05bdfccb05c9f0d68224a49Gernot Hillier	.reason = OPTION_BLACKLIST_SENDSETUP
385a74171005f2f6474e05bdfccb05c9f0d68224a49Gernot Hillier};
386a74171005f2f6474e05bdfccb05c9f0d68224a49Gernot Hillier
3877d40d7e85a25e01948bcb4dc3eda1355af318337Németh Mártonstatic const struct usb_device_id option_ids[] = {
388fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
389fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
390fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_LIGHT) },
391fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_QUAD) },
392fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_QUAD_LIGHT) },
393fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_NDIS) },
394fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_NDIS_LIGHT) },
395fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_NDIS_QUAD) },
396fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_NDIS_QUAD_LIGHT) },
39714f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COBRA) },
398fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COBRA_BUS) },
399fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_VIPER) },
400fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_VIPER_BUS) },
401fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_GT_MAX_READY) },
402fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUJI_MODEM_LIGHT) },
403fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUJI_MODEM_GT) },
404fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUJI_MODEM_EX) },
405fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_KOI_MODEM) },
406fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_SCORPION_MODEM) },
407fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM) },
408fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_LITE) },
409fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_GT) },
410fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_EX) },
411fd978bfa127a0b8c0bdbbbc9d64f3c73bf080f61Greg Kroah-Hartman	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_MODEM) },
412e7f2f0d77a7b483a26054f29ba8393831b25a8a4Achilleas Kotsis	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_GTM380_MODEM) },
413fc91be2ad03e0d243418414a854665274d560ca2Alex.Cheng@quantatw.com	{ USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_Q101) },
414fc91be2ad03e0d243418414a854665274d560ca2Alex.Cheng@quantatw.com	{ USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_Q111) },
415fc91be2ad03e0d243418414a854665274d560ca2Alex.Cheng@quantatw.com	{ USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLX) },
416fc91be2ad03e0d243418414a854665274d560ca2Alex.Cheng@quantatw.com	{ USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GKE) },
417fc91be2ad03e0d243418414a854665274d560ca2Alex.Cheng@quantatw.com	{ USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLE) },
418a7f3872c43b8001f01000f79583d422c6995f98dMichael Karcher	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600, 0xff, 0xff, 0xff) },
419b5ce18afecda8ce1a9ed5fb8ec6362df6f6f85b8Jaime Velasco Juan	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220, 0xff, 0xff, 0xff) },
420b5ce18afecda8ce1a9ed5fb8ec6362df6f6f85b8Jaime Velasco Juan	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS, 0xff, 0xff, 0xff) },
421a7f3872c43b8001f01000f79583d422c6995f98dMichael Karcher	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1401, 0xff, 0xff, 0xff) },
4221460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1402, 0xff, 0xff, 0xff) },
423a7f3872c43b8001f01000f79583d422c6995f98dMichael Karcher	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1403, 0xff, 0xff, 0xff) },
4241460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1404, 0xff, 0xff, 0xff) },
425a7f3872c43b8001f01000f79583d422c6995f98dMichael Karcher	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1405, 0xff, 0xff, 0xff) },
426a7f3872c43b8001f01000f79583d422c6995f98dMichael Karcher	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1406, 0xff, 0xff, 0xff) },
4271460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1407, 0xff, 0xff, 0xff) },
428a7f3872c43b8001f01000f79583d422c6995f98dMichael Karcher	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1408, 0xff, 0xff, 0xff) },
429a7f3872c43b8001f01000f79583d422c6995f98dMichael Karcher	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1409, 0xff, 0xff, 0xff) },
4301460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140A, 0xff, 0xff, 0xff) },
4311460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140B, 0xff, 0xff, 0xff) },
4321460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140C, 0xff, 0xff, 0xff) },
4331460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140D, 0xff, 0xff, 0xff) },
4341460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140E, 0xff, 0xff, 0xff) },
4351460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140F, 0xff, 0xff, 0xff) },
436a7f3872c43b8001f01000f79583d422c6995f98dMichael Karcher	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1410, 0xff, 0xff, 0xff) },
437a7f3872c43b8001f01000f79583d422c6995f98dMichael Karcher	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1411, 0xff, 0xff, 0xff) },
438a7f3872c43b8001f01000f79583d422c6995f98dMichael Karcher	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1412, 0xff, 0xff, 0xff) },
439a7f3872c43b8001f01000f79583d422c6995f98dMichael Karcher	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1413, 0xff, 0xff, 0xff) },
440a7f3872c43b8001f01000f79583d422c6995f98dMichael Karcher	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1414, 0xff, 0xff, 0xff) },
441a7f3872c43b8001f01000f79583d422c6995f98dMichael Karcher	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1415, 0xff, 0xff, 0xff) },
442a7f3872c43b8001f01000f79583d422c6995f98dMichael Karcher	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1416, 0xff, 0xff, 0xff) },
443a7f3872c43b8001f01000f79583d422c6995f98dMichael Karcher	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1417, 0xff, 0xff, 0xff) },
444a7f3872c43b8001f01000f79583d422c6995f98dMichael Karcher	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1418, 0xff, 0xff, 0xff) },
445a7f3872c43b8001f01000f79583d422c6995f98dMichael Karcher	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1419, 0xff, 0xff, 0xff) },
4461460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141A, 0xff, 0xff, 0xff) },
4471460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141B, 0xff, 0xff, 0xff) },
4481460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141C, 0xff, 0xff, 0xff) },
4491460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141D, 0xff, 0xff, 0xff) },
4501460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141E, 0xff, 0xff, 0xff) },
4511460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141F, 0xff, 0xff, 0xff) },
4521460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1420, 0xff, 0xff, 0xff) },
4531460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1421, 0xff, 0xff, 0xff) },
4541460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1422, 0xff, 0xff, 0xff) },
4551460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1423, 0xff, 0xff, 0xff) },
4561460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1424, 0xff, 0xff, 0xff) },
4571460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1425, 0xff, 0xff, 0xff) },
4581460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1426, 0xff, 0xff, 0xff) },
4591460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1427, 0xff, 0xff, 0xff) },
4601460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1428, 0xff, 0xff, 0xff) },
4611460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1429, 0xff, 0xff, 0xff) },
4621460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142A, 0xff, 0xff, 0xff) },
4631460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142B, 0xff, 0xff, 0xff) },
4641460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142C, 0xff, 0xff, 0xff) },
4651460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142D, 0xff, 0xff, 0xff) },
4661460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142E, 0xff, 0xff, 0xff) },
4671460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142F, 0xff, 0xff, 0xff) },
4681460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1430, 0xff, 0xff, 0xff) },
4691460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1431, 0xff, 0xff, 0xff) },
4701460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1432, 0xff, 0xff, 0xff) },
4711460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1433, 0xff, 0xff, 0xff) },
4721460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1434, 0xff, 0xff, 0xff) },
4731460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1435, 0xff, 0xff, 0xff) },
4741460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1436, 0xff, 0xff, 0xff) },
4751460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1437, 0xff, 0xff, 0xff) },
4761460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1438, 0xff, 0xff, 0xff) },
4771460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1439, 0xff, 0xff, 0xff) },
4781460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143A, 0xff, 0xff, 0xff) },
4791460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143B, 0xff, 0xff, 0xff) },
4801460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143C, 0xff, 0xff, 0xff) },
4811460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143D, 0xff, 0xff, 0xff) },
4821460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143E, 0xff, 0xff, 0xff) },
4831460e5e44cc5ecad7704f63b10dcb3a59d0e008bfangxiaozhi	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143F, 0xff, 0xff, 0xff) },
4840ee3a33a0481c8f5c9edb7a5a02f3c76496d9551Ronnie Furuskog	{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E14AC) },
485a1d9bc12e06a71b01f626040dc5149b357e8f1ebMatthias Urlichs	{ USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_9508) },
48672ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, /* Novatel Merlin V640/XV620 */
48772ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, /* Novatel Merlin V620/S620 */
48872ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V740) }, /* Novatel Merlin EX720/V740/X720 */
48972ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V720) }, /* Novatel Merlin V720/S720/PC720 */
49072ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U730) }, /* Novatel U730/U740 (VF version) */
49172ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U740) }, /* Novatel U740 */
49272ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U870) }, /* Novatel U870 */
49372ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_XU870) }, /* Novatel Merlin XU870 HSDPA/3G */
49472ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_X950D) }, /* Novatel X950D */
49572ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EV620) }, /* Novatel EV620/ES620 CDMA/EV-DO */
49672ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_ES720) }, /* Novatel ES620/ES720/U720/USB720 */
49772ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_E725) }, /* Novatel E725/E726 */
498a1d9bc12e06a71b01f626040dc5149b357e8f1ebMatthias Urlichs	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_ES620) }, /* Novatel Merlin ES620 SM Bus */
49972ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU730) }, /* Novatel EU730 and Vodafone EU740 */
50072ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU740) }, /* Novatel non-Vodafone EU740 */
50172ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU870D) }, /* Novatel EU850D/EU860D/EU870D */
50272ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC950D) }, /* Novatel MC930D/MC950D */
50372ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC727) }, /* Novatel MC727/U727/USB727 */
504f1469fc3ef1d5a8a67146c1c72021f012a59dea6Tim Gardner	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC727_NEW) }, /* Novatel MC727/U727/USB727 refresh */
50556a21827439a4d715b510bfaf488534e6f4ad2f8Dirk Hohndel	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U727) }, /* Novatel MC727/U727/USB727 */
5069685a59a2bc0e1e85d1848c744214dbe74e9ce7dRichard Laager	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC760) }, /* Novatel MC760/U760/USB760 */
50771f9f6cc9eef47fddc05f34b3d32677ab2e0f1faDan Williams	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_OVMC760) }, /* Novatel Ovation MC760 */
508c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_FULLSPEED) }, /* Novatel HSPA product */
509c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_FULLSPEED) }, /* Novatel EVDO Embedded product */
510c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_FULLSPEED) }, /* Novatel HSPA Embedded product */
511c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_HIGHSPEED) }, /* Novatel EVDO product */
512c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED) }, /* Novatel HSPA product */
513c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_HIGHSPEED) }, /* Novatel EVDO Embedded product */
514c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_HIGHSPEED) }, /* Novatel HSPA Embedded product */
515c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_GLOBAL) }, /* Novatel Global product */
51672ab6414cf1eaeae8cece64290123d82357fda7eDirk DeSchepper
51732147be4cc50e5e4445a8760125cacc258c61638tang kai	{ USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01) },
51832147be4cc50e5e4445a8760125cacc258c61638tang kai	{ USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01A) },
51932147be4cc50e5e4445a8760125cacc258c61638tang kai	{ USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H02) },
52032147be4cc50e5e4445a8760125cacc258c61638tang kai
521c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper	{ USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5700_MINICARD) },		/* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite EV620 CDMA/EV-DO */
522c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper	{ USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5500_MINICARD) },		/* Dell Wireless 5500 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */
523c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper	{ USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5505_MINICARD) },		/* Dell Wireless 5505 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */
524c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper	{ USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5700_EXPRESSCARD) },		/* Dell Wireless 5700 Mobile Broadband CDMA/EVDO ExpressCard == Novatel Merlin XV620 CDMA/EV-DO */
525c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper	{ USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5510_EXPRESSCARD) },		/* Dell Wireless 5510 Mobile Broadband HSDPA ExpressCard == Novatel Merlin XU870 HSDPA/3G */
526c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper	{ 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 */
527c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper	{ 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 */
528c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper	{ USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5720_MINICARD_VZW) }, 	/* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */
529c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper	{ USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5720_MINICARD_SPRINT) }, 	/* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */
530c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper	{ USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5720_MINICARD_TELUS) }, 	/* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */
531c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper	{ USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_CINGULAR) },	/* Dell Wireless HSDPA 5520 == Novatel Expedite EU860D */
532c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper	{ USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_GENERIC_L) },	/* Dell Wireless HSDPA 5520 */
533c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper	{ USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_GENERIC_I) },	/* Dell Wireless 5520 Voda I Mobile Broadband (3G HSDPA) Minicard */
534c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper	{ USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_SPRINT) },	/* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
535c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper	{ USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_TELUS) },	/* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
536c200b9c9e8ec93cdd262cfa1699ad92e883d4876Dirk De Schepper	{ USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_VZW) }, 	/* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
537bb78a825fa91621e52b9a5409fd9ef07895275bfJon K Hellan	{ USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) },	/* ADU-E100, ADU-310 */
53846269db99cc1a618d707deb370d821d1f8d75945Alexander Gattin	{ USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) },
539f8033827d8e92db6159d34ed45c608522674ecd8Hiroshi Miura	{ USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_620UW) },
54085fb62a001278270f9fffbdc3508ef23d5f3693dDaniel Kozák	{ USB_DEVICE(AXESSTEL_VENDOR_ID, AXESSTEL_PRODUCT_MV110H) },
541c6206faa4f18bcc837a12552b8c184ab1668fdeaLeslie Watter	{ USB_DEVICE(YISO_VENDOR_ID, YISO_PRODUCT_U893) },
5423f6e58467c635ebbb4a139cbe5e0c1f46792e18cLeon Leong	{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_1) },
5433f6e58467c635ebbb4a139cbe5e0c1f46792e18cLeon Leong	{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_2) },
544bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong	{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1004) },
545bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong	{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1005) },
546bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong	{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1006) },
547bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong	{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1007) },
548bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong	{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1008) },
549bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong	{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1009) },
550bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong	{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_100A) },
551bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong	{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_100B) },
552bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong	{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_100C) },
553bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong	{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_100D) },
554bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong	{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_100E) },
555bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong	{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_100F) },
556bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong	{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1010) },
557bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong	{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1011) },
558bf3fc82895f4f501da9daef44d057749fe900c3eLeon Leong	{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1012) },
559640c1bce86d1e11ee6a1263fdf6170d3210b1684Greg Kroah-Hartman	{ USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC650) },
560564d61d30effcc727f9519538143a6c6aeb92e46Dan Williams	{ USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) },
561d2e2affba4a3619df203d3be8d655ec48d00e3ecGreg Kroah-Hartman	{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6000)}, /* ZTE AC8700 */
562d726fb757722a3907356830a0b8d976267596d5cKevin Lloyd	{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */
563bb73ed2a268a29ab1b7d8cc50b5f248578e7e188Nathaniel McCallum	{ USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6280) }, /* BP3-USB & BP3-EXT HSDPA */
5643b04872aa75006e2a4adaaec21e9c9ede8b8ad9dNathaniel McCallum	{ USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6008) },
565ee53b0ca0153b4f944cb142b5e65c96a1860d765Greg Kroah-Hartman	{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) },
566ce60c48871d2b3a15ab3fa2450e783bebb4ae407Manuel Lauss	{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864G) },
567c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */
568c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0002, 0xff, 0xff, 0xff) },
569c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0003, 0xff, 0xff, 0xff) },
570c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0004, 0xff, 0xff, 0xff) },
571c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0005, 0xff, 0xff, 0xff) },
572c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0006, 0xff, 0xff, 0xff) },
573c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0007, 0xff, 0xff, 0xff) },
574c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0008, 0xff, 0xff, 0xff) },
575c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0009, 0xff, 0xff, 0xff) },
576c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x000a, 0xff, 0xff, 0xff) },
577c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x000b, 0xff, 0xff, 0xff) },
578c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x000c, 0xff, 0xff, 0xff) },
579c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x000d, 0xff, 0xff, 0xff) },
580c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x000e, 0xff, 0xff, 0xff) },
581c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x000f, 0xff, 0xff, 0xff) },
582c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0010, 0xff, 0xff, 0xff) },
583c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0011, 0xff, 0xff, 0xff) },
584c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0012, 0xff, 0xff, 0xff) },
585c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0013, 0xff, 0xff, 0xff) },
586c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628, 0xff, 0xff, 0xff) },
587c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0016, 0xff, 0xff, 0xff) },
588c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0017, 0xff, 0xff, 0xff) },
589c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0018, 0xff, 0xff, 0xff) },
590c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0019, 0xff, 0xff, 0xff) },
591c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0020, 0xff, 0xff, 0xff) },
592c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0021, 0xff, 0xff, 0xff) },
593c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0022, 0xff, 0xff, 0xff) },
594c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0023, 0xff, 0xff, 0xff) },
595c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0024, 0xff, 0xff, 0xff) },
596c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0025, 0xff, 0xff, 0xff) },
597c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0026, 0xff, 0xff, 0xff) },
598c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0028, 0xff, 0xff, 0xff) },
599c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0029, 0xff, 0xff, 0xff) },
600c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0030, 0xff, 0xff, 0xff) },
601c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF626, 0xff, 0xff, 0xff) },
602c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0032, 0xff, 0xff, 0xff) },
603c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0033, 0xff, 0xff, 0xff) },
604c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0037, 0xff, 0xff, 0xff) },
605c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0039, 0xff, 0xff, 0xff) },
606c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0042, 0xff, 0xff, 0xff) },
607c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0043, 0xff, 0xff, 0xff) },
608c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0048, 0xff, 0xff, 0xff) },
609c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0049, 0xff, 0xff, 0xff) },
610c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0051, 0xff, 0xff, 0xff) },
611c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0052, 0xff, 0xff, 0xff) },
612c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0054, 0xff, 0xff, 0xff) },
613c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0055, 0xff, 0xff, 0xff) },
614c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0057, 0xff, 0xff, 0xff) },
615c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0058, 0xff, 0xff, 0xff) },
616c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0061, 0xff, 0xff, 0xff) },
617c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0062, 0xff, 0xff, 0xff) },
618c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0063, 0xff, 0xff, 0xff) },
619c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0064, 0xff, 0xff, 0xff) },
620c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0066, 0xff, 0xff, 0xff) },
621c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0069, 0xff, 0xff, 0xff) },
622c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0076, 0xff, 0xff, 0xff) },
623c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0078, 0xff, 0xff, 0xff) },
624c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0082, 0xff, 0xff, 0xff) },
625c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0086, 0xff, 0xff, 0xff) },
626c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x2002, 0xff, 0xff, 0xff) },
627c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x2003, 0xff, 0xff, 0xff) },
6288d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0104, 0xff, 0xff, 0xff) },
6298d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0106, 0xff, 0xff, 0xff) },
6308d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0108, 0xff, 0xff, 0xff) },
6318d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0113, 0xff, 0xff, 0xff) },
6328d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0117, 0xff, 0xff, 0xff) },
6338d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0118, 0xff, 0xff, 0xff) },
6348d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0121, 0xff, 0xff, 0xff) },
6358d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0122, 0xff, 0xff, 0xff) },
6368d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0123, 0xff, 0xff, 0xff) },
6378d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0124, 0xff, 0xff, 0xff) },
6388d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0125, 0xff, 0xff, 0xff) },
6398d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0126, 0xff, 0xff, 0xff) },
6408d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0128, 0xff, 0xff, 0xff) },
6418d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0142, 0xff, 0xff, 0xff) },
6428d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0143, 0xff, 0xff, 0xff) },
6438d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0144, 0xff, 0xff, 0xff) },
6448d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0145, 0xff, 0xff, 0xff) },
6458d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0146, 0xff, 0xff, 0xff) },
6468d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0147, 0xff, 0xff, 0xff) },
6478d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0148, 0xff, 0xff, 0xff) },
6488d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0149, 0xff, 0xff, 0xff) },
6498d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0150, 0xff, 0xff, 0xff) },
6508d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0151, 0xff, 0xff, 0xff) },
6518d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0152, 0xff, 0xff, 0xff) },
6528d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0153, 0xff, 0xff, 0xff) },
6538d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0154, 0xff, 0xff, 0xff) },
6548d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0155, 0xff, 0xff, 0xff) },
6558d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0156, 0xff, 0xff, 0xff) },
6568d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0157, 0xff, 0xff, 0xff) },
6578d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0158, 0xff, 0xff, 0xff) },
6588d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0159, 0xff, 0xff, 0xff) },
6598d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0160, 0xff, 0xff, 0xff) },
6608d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0161, 0xff, 0xff, 0xff) },
6618d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0162, 0xff, 0xff, 0xff) },
662a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1008, 0xff, 0xff, 0xff) },
663a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1010, 0xff, 0xff, 0xff) },
664a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1012, 0xff, 0xff, 0xff) },
665a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1057, 0xff, 0xff, 0xff) },
666a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1058, 0xff, 0xff, 0xff) },
667a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1059, 0xff, 0xff, 0xff) },
668a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1060, 0xff, 0xff, 0xff) },
669a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1061, 0xff, 0xff, 0xff) },
670a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1062, 0xff, 0xff, 0xff) },
671a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1063, 0xff, 0xff, 0xff) },
672a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1064, 0xff, 0xff, 0xff) },
673a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1065, 0xff, 0xff, 0xff) },
674a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1066, 0xff, 0xff, 0xff) },
675a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1067, 0xff, 0xff, 0xff) },
676a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1068, 0xff, 0xff, 0xff) },
677a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1069, 0xff, 0xff, 0xff) },
678a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1070, 0xff, 0xff, 0xff) },
679a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1071, 0xff, 0xff, 0xff) },
680a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1072, 0xff, 0xff, 0xff) },
681a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1073, 0xff, 0xff, 0xff) },
682a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1074, 0xff, 0xff, 0xff) },
683a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1075, 0xff, 0xff, 0xff) },
684a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1076, 0xff, 0xff, 0xff) },
685a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1077, 0xff, 0xff, 0xff) },
686a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1078, 0xff, 0xff, 0xff) },
687a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1079, 0xff, 0xff, 0xff) },
688a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1080, 0xff, 0xff, 0xff) },
689a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1081, 0xff, 0xff, 0xff) },
690a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1082, 0xff, 0xff, 0xff) },
691a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1083, 0xff, 0xff, 0xff) },
692a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1084, 0xff, 0xff, 0xff) },
693a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1085, 0xff, 0xff, 0xff) },
694a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1086, 0xff, 0xff, 0xff) },
695a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1087, 0xff, 0xff, 0xff) },
696a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1088, 0xff, 0xff, 0xff) },
697a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1089, 0xff, 0xff, 0xff) },
698a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1090, 0xff, 0xff, 0xff) },
699a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1091, 0xff, 0xff, 0xff) },
700a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1092, 0xff, 0xff, 0xff) },
701a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1093, 0xff, 0xff, 0xff) },
702a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1094, 0xff, 0xff, 0xff) },
703a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1095, 0xff, 0xff, 0xff) },
704a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1096, 0xff, 0xff, 0xff) },
705a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1097, 0xff, 0xff, 0xff) },
706a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1098, 0xff, 0xff, 0xff) },
707a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1099, 0xff, 0xff, 0xff) },
708a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1100, 0xff, 0xff, 0xff) },
709a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1101, 0xff, 0xff, 0xff) },
710a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1102, 0xff, 0xff, 0xff) },
711a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1103, 0xff, 0xff, 0xff) },
712a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1104, 0xff, 0xff, 0xff) },
713a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1105, 0xff, 0xff, 0xff) },
714a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1106, 0xff, 0xff, 0xff) },
715a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1107, 0xff, 0xff, 0xff) },
716a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1108, 0xff, 0xff, 0xff) },
717a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1109, 0xff, 0xff, 0xff) },
718a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1110, 0xff, 0xff, 0xff) },
719a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1111, 0xff, 0xff, 0xff) },
720a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1112, 0xff, 0xff, 0xff) },
721a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1113, 0xff, 0xff, 0xff) },
722a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1114, 0xff, 0xff, 0xff) },
723a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1115, 0xff, 0xff, 0xff) },
724a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1116, 0xff, 0xff, 0xff) },
725a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1117, 0xff, 0xff, 0xff) },
726a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1118, 0xff, 0xff, 0xff) },
727a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1119, 0xff, 0xff, 0xff) },
728a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1120, 0xff, 0xff, 0xff) },
729a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1121, 0xff, 0xff, 0xff) },
730a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1122, 0xff, 0xff, 0xff) },
731a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1123, 0xff, 0xff, 0xff) },
732a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1124, 0xff, 0xff, 0xff) },
733a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1125, 0xff, 0xff, 0xff) },
734a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1126, 0xff, 0xff, 0xff) },
735a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1127, 0xff, 0xff, 0xff) },
736a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1128, 0xff, 0xff, 0xff) },
737a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1129, 0xff, 0xff, 0xff) },
738a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1130, 0xff, 0xff, 0xff) },
739a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1131, 0xff, 0xff, 0xff) },
740a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1132, 0xff, 0xff, 0xff) },
741a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1133, 0xff, 0xff, 0xff) },
742a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1134, 0xff, 0xff, 0xff) },
743a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1135, 0xff, 0xff, 0xff) },
744a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1136, 0xff, 0xff, 0xff) },
745a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1137, 0xff, 0xff, 0xff) },
746a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1138, 0xff, 0xff, 0xff) },
747a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1139, 0xff, 0xff, 0xff) },
748a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1140, 0xff, 0xff, 0xff) },
749a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1141, 0xff, 0xff, 0xff) },
750a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1142, 0xff, 0xff, 0xff) },
751a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1143, 0xff, 0xff, 0xff) },
752a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1144, 0xff, 0xff, 0xff) },
753a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1145, 0xff, 0xff, 0xff) },
754a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1146, 0xff, 0xff, 0xff) },
755a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1147, 0xff, 0xff, 0xff) },
756a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1148, 0xff, 0xff, 0xff) },
757a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1149, 0xff, 0xff, 0xff) },
758a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1150, 0xff, 0xff, 0xff) },
759a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1151, 0xff, 0xff, 0xff) },
760a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1152, 0xff, 0xff, 0xff) },
761a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1153, 0xff, 0xff, 0xff) },
762a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1154, 0xff, 0xff, 0xff) },
763a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1155, 0xff, 0xff, 0xff) },
764a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1156, 0xff, 0xff, 0xff) },
765a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1157, 0xff, 0xff, 0xff) },
766a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1158, 0xff, 0xff, 0xff) },
767a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1159, 0xff, 0xff, 0xff) },
768a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1160, 0xff, 0xff, 0xff) },
769a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1161, 0xff, 0xff, 0xff) },
770a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1162, 0xff, 0xff, 0xff) },
771a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1163, 0xff, 0xff, 0xff) },
772a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1164, 0xff, 0xff, 0xff) },
773a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1165, 0xff, 0xff, 0xff) },
774a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1166, 0xff, 0xff, 0xff) },
775a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1167, 0xff, 0xff, 0xff) },
776a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1168, 0xff, 0xff, 0xff) },
777a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1169, 0xff, 0xff, 0xff) },
778a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1170, 0xff, 0xff, 0xff) },
779a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1244, 0xff, 0xff, 0xff) },
780a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1245, 0xff, 0xff, 0xff) },
781a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1246, 0xff, 0xff, 0xff) },
782a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1247, 0xff, 0xff, 0xff) },
783a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1248, 0xff, 0xff, 0xff) },
784a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1249, 0xff, 0xff, 0xff) },
785a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1250, 0xff, 0xff, 0xff) },
786a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1251, 0xff, 0xff, 0xff) },
787a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1252, 0xff, 0xff, 0xff) },
788a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1253, 0xff, 0xff, 0xff) },
789a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1254, 0xff, 0xff, 0xff) },
790a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1255, 0xff, 0xff, 0xff) },
791a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1256, 0xff, 0xff, 0xff) },
792a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1257, 0xff, 0xff, 0xff) },
793a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1258, 0xff, 0xff, 0xff) },
794a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1259, 0xff, 0xff, 0xff) },
795a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1260, 0xff, 0xff, 0xff) },
796a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1261, 0xff, 0xff, 0xff) },
797a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1262, 0xff, 0xff, 0xff) },
798a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1263, 0xff, 0xff, 0xff) },
799a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1264, 0xff, 0xff, 0xff) },
800a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1265, 0xff, 0xff, 0xff) },
801a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1266, 0xff, 0xff, 0xff) },
802a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1267, 0xff, 0xff, 0xff) },
803a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1268, 0xff, 0xff, 0xff) },
804a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1269, 0xff, 0xff, 0xff) },
805a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1270, 0xff, 0xff, 0xff) },
806a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1271, 0xff, 0xff, 0xff) },
807a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1272, 0xff, 0xff, 0xff) },
808a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1273, 0xff, 0xff, 0xff) },
809a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1274, 0xff, 0xff, 0xff) },
810a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1275, 0xff, 0xff, 0xff) },
811a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1276, 0xff, 0xff, 0xff) },
812a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1277, 0xff, 0xff, 0xff) },
813a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1278, 0xff, 0xff, 0xff) },
814a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1279, 0xff, 0xff, 0xff) },
815a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1280, 0xff, 0xff, 0xff) },
816a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1281, 0xff, 0xff, 0xff) },
817a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1282, 0xff, 0xff, 0xff) },
818a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1283, 0xff, 0xff, 0xff) },
819a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1284, 0xff, 0xff, 0xff) },
820a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1285, 0xff, 0xff, 0xff) },
821a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1286, 0xff, 0xff, 0xff) },
822a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1287, 0xff, 0xff, 0xff) },
823a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1288, 0xff, 0xff, 0xff) },
824a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1289, 0xff, 0xff, 0xff) },
825a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1290, 0xff, 0xff, 0xff) },
826a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1291, 0xff, 0xff, 0xff) },
827a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1292, 0xff, 0xff, 0xff) },
828a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1293, 0xff, 0xff, 0xff) },
829a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1294, 0xff, 0xff, 0xff) },
830a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1295, 0xff, 0xff, 0xff) },
831a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1296, 0xff, 0xff, 0xff) },
832a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1297, 0xff, 0xff, 0xff) },
833a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1298, 0xff, 0xff, 0xff) },
834a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1299, 0xff, 0xff, 0xff) },
835a71ee85e1d74e862d68cc9b2f2ab6a806d2550c9zhao	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1300, 0xff, 0xff, 0xff) },
836c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0014, 0xff, 0xff, 0xff) }, /* ZTE CDMA products */
837c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0027, 0xff, 0xff, 0xff) },
838c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0059, 0xff, 0xff, 0xff) },
839c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0060, 0xff, 0xff, 0xff) },
840c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0070, 0xff, 0xff, 0xff) },
841c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0073, 0xff, 0xff, 0xff) },
8428d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0130, 0xff, 0xff, 0xff) },
8438d87cacda7c8db5c131bfcaaa1d90bfe918c2ebczhao.ming	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0141, 0xff, 0xff, 0xff) },
844c420befde6b2747ebc2b8f015687a5dbd6e167caHerton Ronaldo Krzesinski	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH, 0xff, 0xff, 0xff) },
845183791588efd416fc35a71819683b32dee92615bPeng Huang	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC8710, 0xff, 0xff, 0xff) },
846a67d8e6c1e49dc919c9d5480583fad8a46fc00aaHuzaifa Sidhpurwala	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC2726, 0xff, 0xff, 0xff) },
847fe30bc1b16dcfbbadf3f77bbad1c9014b23704cdMahesh Kuruganti	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC8710T, 0xff, 0xff, 0xff) },
848a559d2c8c1bf652ea2d0ecd6ab4a250fcdb37db8Dominik Brodowski	{ USB_DEVICE(ZTE_VENDOR_ID2, ZTE_PRODUCT_MF_330) },
84928fb66821f884870987a0b5ab064ef651d9f7c16Jesse Sung	{ USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) },
850c00deaa542100a697acb5be200b9f54317c1cf69Pascal Terjan	{ USB_DEVICE(DLINK_VENDOR_ID, DLINK_PRODUCT_DWM_652) },
851ff854ce0b17161a86b5ae444c6cb0aa221720fabZhang Le	{ USB_DEVICE(ALINK_VENDOR_ID, DLINK_PRODUCT_DWM_652_U5) }, /* Yes, ALINK_VENDOR_ID */
852bf162019b7f5bda9eb3241ae22de831df2126132Huang Ying	{ USB_DEVICE(ALINK_VENDOR_ID, DLINK_PRODUCT_DWM_652_U5A) },
853e3a3174519bae99fe3a3d3b9dfda68d820527b44Brad Lu	{ USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H21_4512) },
854e3a3174519bae99fe3a3d3b9dfda68d820527b44Brad Lu	{ USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H21_4523) },
855e3a3174519bae99fe3a3d3b9dfda68d820527b44Brad Lu	{ USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H20_4515) },
856646d90e2b925578abef5c45853e0b166b6a450bfÖmer Sezgin Ugurlu	{ USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H20_4518) },
857e3a3174519bae99fe3a3d3b9dfda68d820527b44Brad Lu	{ USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H20_4519) },
85875f47214f90e996eb184eb6e6b0e8b817999c8f7Peter Magdina	{ USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_PRODUCT_G450) },
859334f9b0f23c9bb90589213279c9cfe19ebe4c0c6Michele Valzelli	{ USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_PRODUCT_HSDPA_MINICARD ) }, /* Toshiba 3G HSDPA == Novatel Expedite EU870D MiniCard */
860c3325eb16d36a49f9a5ae09241c418cfd1d3f4f5Anssi Hannula	{ USB_DEVICE(ALINK_VENDOR_ID, 0x9000) },
861c3325eb16d36a49f9a5ae09241c418cfd1d3f4f5Anssi Hannula	{ USB_DEVICE_AND_INTERFACE_INFO(ALINK_VENDOR_ID, ALINK_PRODUCT_3GU, 0xff, 0xff, 0xff) },
86248c348cc939aaa3a07d4938669f2f315152e895eJavier Martin	{ USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S) },
86312148da6722be3b44c2220206b6ccb80d2d9d8f8Huzaifa Sidhpurwala	{ USB_DEVICE(AIRPLUS_VENDOR_ID, AIRPLUS_PRODUCT_MCD650) },
864fead2ab6cf9ad3a84a06e68ccc20d1e460fad13eBryan Wu	{ USB_DEVICE(TLAYTECH_VENDOR_ID, TLAYTECH_PRODUCT_TEU800) },
865ac7d4ca9e0b27d7705d273f17afd29828db35ee6Dan Williams	{ USB_DEVICE(LONGCHEER_VENDOR_ID, FOUR_G_SYSTEMS_PRODUCT_W14),
866a74171005f2f6474e05bdfccb05c9f0d68224a49Gernot Hillier  	  .driver_info = (kernel_ulong_t)&four_g_w14_blacklist
867a74171005f2f6474e05bdfccb05c9f0d68224a49Gernot Hillier  	},
868c983202bd03eb82394ef1dce5906702fcbc7bb80Donny Kurnia	{ USB_DEVICE(HAIER_VENDOR_ID, HAIER_PRODUCT_CE100) },
86933c387529b7931248c6637bf9720ac7504a0b28bspark	/* Pirelli  */
87033c387529b7931248c6637bf9720ac7504a0b28bspark	{ USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_C100_1)},
87133c387529b7931248c6637bf9720ac7504a0b28bspark	{ USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_C100_2)},
87233c387529b7931248c6637bf9720ac7504a0b28bspark	{ USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1004)},
87333c387529b7931248c6637bf9720ac7504a0b28bspark	{ USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1005)},
87433c387529b7931248c6637bf9720ac7504a0b28bspark	{ USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1006)},
87533c387529b7931248c6637bf9720ac7504a0b28bspark	{ USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1007)},
87633c387529b7931248c6637bf9720ac7504a0b28bspark	{ USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1008)},
87733c387529b7931248c6637bf9720ac7504a0b28bspark	{ USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1009)},
87833c387529b7931248c6637bf9720ac7504a0b28bspark	{ USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_100A)},
87933c387529b7931248c6637bf9720ac7504a0b28bspark	{ USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_100B) },
88033c387529b7931248c6637bf9720ac7504a0b28bspark	{ USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_100C) },
88133c387529b7931248c6637bf9720ac7504a0b28bspark	{ USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_100D) },
88233c387529b7931248c6637bf9720ac7504a0b28bspark	{ USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_100E) },
88333c387529b7931248c6637bf9720ac7504a0b28bspark	{ USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_100F) },
88433c387529b7931248c6637bf9720ac7504a0b28bspark	{ USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1011)},
88533c387529b7931248c6637bf9720ac7504a0b28bspark	{ USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1012)},
88633c387529b7931248c6637bf9720ac7504a0b28bspark
8876f44bcb60bfa58590142545096b64f44144f0bc1Greg Kroah-Hartman	{ USB_DEVICE(CINTERION_VENDOR_ID, 0x0047) },
88886234d4975ce084d14711283a3bfc69305f97602Nils Radtke
88986234d4975ce084d14711283a3bfc69305f97602Nils Radtke	{ USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD100) },
89014f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs	{ } /* Terminating entry */
89114f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs};
89258cfe9113e485f7e04bd0eac4fc4251b330af501Matthias UrlichsMODULE_DEVICE_TABLE(usb, option_ids);
89358cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
89458cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichsstatic struct usb_driver option_driver = {
89558cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs	.name       = "option",
89658cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs	.probe      = usb_serial_probe,
89758cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs	.disconnect = usb_serial_disconnect,
8985f4fab91f2b12c12f0506b4da49ed199db8c64edOliver Neukum#ifdef CONFIG_PM
8994901b2c34ecb6fc45909228ad269c8126efe4401Oliver Neukum	.suspend    = usb_serial_suspend,
9004901b2c34ecb6fc45909228ad269c8126efe4401Oliver Neukum	.resume     = usb_serial_resume,
901383cedc3bb435de7a27d31a92d622413daa5cb20Oliver Neukum	.supports_autosuspend =	1,
9025f4fab91f2b12c12f0506b4da49ed199db8c64edOliver Neukum#endif
90358cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs	.id_table   = option_ids,
904ba9dc657af86d05d2971633e57d1f6f94ed60472Greg Kroah-Hartman	.no_dynamic_id = 	1,
90558cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs};
90658cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
907c30fe7f73194650148b58ee80908c1bc38246397Uwe Zeisberger/* The card has three separate interfaces, which the serial driver
90858cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs * recognizes separately, thus num_port=1.
90958cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs */
91014f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs
91114f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichsstatic struct usb_serial_driver option_1port_device = {
91214f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs	.driver = {
91314f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs		.owner =	THIS_MODULE,
91402b2ac5b0370b1157a5a99f2fdf006644b9b86d5Matthias Urlichs		.name =		"option1",
91514f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs	},
91614f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs	.description       = "GSM modem (1-port)",
917d9b1b787736852f462dbf277b3ca708cbbf693aeJohannes Hölzl	.usb_driver        = &option_driver,
918b656b2cbd74fb591d46e07c7c291791b280ad5b4Greg Kroah-Hartman	.id_table          = option_ids,
91914f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs	.num_ports         = 1,
920c5be1b52d9ea6ede4931691bf9f0bd454515aa52Pascal Terjan	.probe             = option_probe,
9218b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett	.open              = usb_wwan_open,
9228b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett	.close             = usb_wwan_close,
9238b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett	.dtr_rts	   = usb_wwan_dtr_rts,
9248b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett	.write             = usb_wwan_write,
9258b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett	.write_room        = usb_wwan_write_room,
9268b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett	.chars_in_buffer   = usb_wwan_chars_in_buffer,
9278b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett	.set_termios       = usb_wwan_set_termios,
9288b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett	.tiocmget          = usb_wwan_tiocmget,
9298b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett	.tiocmset          = usb_wwan_tiocmset,
9308b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett	.attach            = usb_wwan_startup,
9318b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett	.disconnect        = usb_wwan_disconnect,
9328b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett	.release           = usb_wwan_release,
933ba460e48064edeb57e3398eb8972c58de33f11eaMatthias Urlichs	.read_int_callback = option_instat_callback,
9345f4fab91f2b12c12f0506b4da49ed199db8c64edOliver Neukum#ifdef CONFIG_PM
9358b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett	.suspend           = usb_wwan_suspend,
9368b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett	.resume            = usb_wwan_resume,
9375f4fab91f2b12c12f0506b4da49ed199db8c64edOliver Neukum#endif
93858cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs};
93958cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
94058cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichsstatic int debug;
941ba460e48064edeb57e3398eb8972c58de33f11eaMatthias Urlichs
94258cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs/* per port private data */
94358cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
944ba460e48064edeb57e3398eb8972c58de33f11eaMatthias Urlichs#define N_IN_URB 4
945f1632df36b9467b75b7abfd2799aef67ec74a60aGreg Kroah-Hartman#define N_OUT_URB 4
946b27c73dcab61826e5f1228d69d56f469b0abfc05Matthias Urlichs#define IN_BUFLEN 4096
947f1632df36b9467b75b7abfd2799aef67ec74a60aGreg Kroah-Hartman#define OUT_BUFLEN 4096
94858cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
94958cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichsstruct option_port_private {
95058cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs	/* Input endpoints and buffer for this port */
951ba460e48064edeb57e3398eb8972c58de33f11eaMatthias Urlichs	struct urb *in_urbs[N_IN_URB];
9522129c4e1b4469e1f9711a54e97e8ddf8b26bb62dOliver Neukum	u8 *in_buffer[N_IN_URB];
95358cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs	/* Output endpoints and buffer for this port */
954ba460e48064edeb57e3398eb8972c58de33f11eaMatthias Urlichs	struct urb *out_urbs[N_OUT_URB];
9552129c4e1b4469e1f9711a54e97e8ddf8b26bb62dOliver Neukum	u8 *out_buffer[N_OUT_URB];
95659c2afa072506aae10ef93126aab651142e0c908Alan Stern	unsigned long out_busy;		/* Bit vector of URBs in use */
957383cedc3bb435de7a27d31a92d622413daa5cb20Oliver Neukum	int opened;
958383cedc3bb435de7a27d31a92d622413daa5cb20Oliver Neukum	struct usb_anchor delayed;
95958cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
96058cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs	/* Settings for the port */
961ba460e48064edeb57e3398eb8972c58de33f11eaMatthias Urlichs	int rts_state;	/* Handshaking pins (outputs) */
962ba460e48064edeb57e3398eb8972c58de33f11eaMatthias Urlichs	int dtr_state;
963ba460e48064edeb57e3398eb8972c58de33f11eaMatthias Urlichs	int cts_state;	/* Handshaking pins (inputs) */
964ba460e48064edeb57e3398eb8972c58de33f11eaMatthias Urlichs	int dsr_state;
965ba460e48064edeb57e3398eb8972c58de33f11eaMatthias Urlichs	int dcd_state;
966ba460e48064edeb57e3398eb8972c58de33f11eaMatthias Urlichs	int ri_state;
967ba460e48064edeb57e3398eb8972c58de33f11eaMatthias Urlichs
968ba460e48064edeb57e3398eb8972c58de33f11eaMatthias Urlichs	unsigned long tx_start_time[N_OUT_URB];
96958cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs};
97058cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
97158cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs/* Functions used by new usb-serial code. */
9727bb75aeeeec7417a961920b3f63a83007475260fAndrew Mortonstatic int __init option_init(void)
97358cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs{
97458cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs	int retval;
97514f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs	retval = usb_serial_register(&option_1port_device);
97614f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs	if (retval)
97714f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichs		goto failed_1port_device_register;
97858cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs	retval = usb_register(&option_driver);
97958cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs	if (retval)
98058cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs		goto failed_driver_register;
98158cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
982c197a8db59daf06dc5e77acd5a9681329cb22458Greg Kroah-Hartman	printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
983c197a8db59daf06dc5e77acd5a9681329cb22458Greg Kroah-Hartman	       DRIVER_DESC "\n");
98458cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
98558cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs	return 0;
98658cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
98758cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichsfailed_driver_register:
98819e58fae0c8f197d80fcea338b94fb5740369bc1Alan Cox	usb_serial_deregister(&option_1port_device);
98914f76cc7ab75b1c9db036dcd6b247e0dcc8952beMatthias Urlichsfailed_1port_device_register:
99058cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs	return retval;
99158cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs}
99258cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
9937bb75aeeeec7417a961920b3f63a83007475260fAndrew Mortonstatic void __exit option_exit(void)
99458cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs{
99519e58fae0c8f197d80fcea338b94fb5740369bc1Alan Cox	usb_deregister(&option_driver);
99619e58fae0c8f197d80fcea338b94fb5740369bc1Alan Cox	usb_serial_deregister(&option_1port_device);
99758cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs}
99858cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
99958cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichsmodule_init(option_init);
100058cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichsmodule_exit(option_exit);
100158cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
1002c5be1b52d9ea6ede4931691bf9f0bd454515aa52Pascal Terjanstatic int option_probe(struct usb_serial *serial,
1003c5be1b52d9ea6ede4931691bf9f0bd454515aa52Pascal Terjan			const struct usb_device_id *id)
1004c5be1b52d9ea6ede4931691bf9f0bd454515aa52Pascal Terjan{
10058b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett	struct usb_wwan_intf_private *data;
1006c5be1b52d9ea6ede4931691bf9f0bd454515aa52Pascal Terjan	/* D-Link DWM 652 still exposes CD-Rom emulation interface in modem mode */
1007c5be1b52d9ea6ede4931691bf9f0bd454515aa52Pascal Terjan	if (serial->dev->descriptor.idVendor == DLINK_VENDOR_ID &&
1008c5be1b52d9ea6ede4931691bf9f0bd454515aa52Pascal Terjan		serial->dev->descriptor.idProduct == DLINK_PRODUCT_DWM_652 &&
1009c5be1b52d9ea6ede4931691bf9f0bd454515aa52Pascal Terjan		serial->interface->cur_altsetting->desc.bInterfaceClass == 0x8)
1010c5be1b52d9ea6ede4931691bf9f0bd454515aa52Pascal Terjan		return -ENODEV;
1011c5be1b52d9ea6ede4931691bf9f0bd454515aa52Pascal Terjan
101233c387529b7931248c6637bf9720ac7504a0b28bspark	/* Bandrich modem and AT command interface is 0xff */
101333c387529b7931248c6637bf9720ac7504a0b28bspark	if ((serial->dev->descriptor.idVendor == BANDRICH_VENDOR_ID ||
101433c387529b7931248c6637bf9720ac7504a0b28bspark		serial->dev->descriptor.idVendor == PIRELLI_VENDOR_ID) &&
101533c387529b7931248c6637bf9720ac7504a0b28bspark		serial->interface->cur_altsetting->desc.bInterfaceClass != 0xff)
101633c387529b7931248c6637bf9720ac7504a0b28bspark		return -ENODEV;
101733c387529b7931248c6637bf9720ac7504a0b28bspark
10188b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett	data = serial->private = kzalloc(sizeof(struct usb_wwan_intf_private), GFP_KERNEL);
10198b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett
1020383cedc3bb435de7a27d31a92d622413daa5cb20Oliver Neukum	if (!data)
1021383cedc3bb435de7a27d31a92d622413daa5cb20Oliver Neukum		return -ENOMEM;
10228b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett	data->send_setup = option_send_setup;
1023383cedc3bb435de7a27d31a92d622413daa5cb20Oliver Neukum	spin_lock_init(&data->susp_lock);
10248b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett	data->private = (void *)id->driver_info;
1025c5be1b52d9ea6ede4931691bf9f0bd454515aa52Pascal Terjan	return 0;
1026c5be1b52d9ea6ede4931691bf9f0bd454515aa52Pascal Terjan}
1027c5be1b52d9ea6ede4931691bf9f0bd454515aa52Pascal Terjan
1028cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillierstatic enum option_blacklist_reason is_blacklisted(const u8 ifnum,
1029cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier				const struct option_blacklist_info *blacklist)
1030cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier{
1031cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier	const u8  *info;
1032cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier	int i;
1033cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier
1034cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier	if (blacklist) {
1035cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier		info = blacklist->ifaceinfo;
1036cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier
1037cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier		for (i = 0; i < blacklist->infolen; i++) {
1038cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier			if (info[i] == ifnum)
1039cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier				return blacklist->reason;
1040cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier		}
1041cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier	}
1042cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier	return OPTION_BLACKLIST_NONE;
1043cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier}
1044cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier
10457d12e780e003f93433d49ce78cfedf4b4c52adc5David Howellsstatic void option_instat_callback(struct urb *urb)
104658cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs{
104758cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs	int err;
1048d6977b51d5faa8649bbab0e53455e8421d425ce1Greg Kroah-Hartman	int status = urb->status;
1049cdc97792289179974af6dda781c855696358d307Ming Lei	struct usb_serial_port *port =  urb->context;
105058cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs	struct option_port_private *portdata = usb_get_serial_port_data(port);
105158cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
1052441b62c1edb986827154768d89bbac0ba779984fHarvey Harrison	dbg("%s", __func__);
105319e58fae0c8f197d80fcea338b94fb5740369bc1Alan Cox	dbg("%s: urb %p port %p has data %p", __func__, urb, port, portdata);
105458cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
1055d6977b51d5faa8649bbab0e53455e8421d425ce1Greg Kroah-Hartman	if (status == 0) {
105658cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs		struct usb_ctrlrequest *req_pkt =
105758cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs				(struct usb_ctrlrequest *)urb->transfer_buffer;
105858cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
105958cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs		if (!req_pkt) {
1060759f3634267a67ac90f3fa7fc06510dfd43b4e45Joe Perches			dbg("%s: NULL req_pkt", __func__);
106158cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs			return;
106258cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs		}
10637bb75aeeeec7417a961920b3f63a83007475260fAndrew Morton		if ((req_pkt->bRequestType == 0xA1) &&
10647bb75aeeeec7417a961920b3f63a83007475260fAndrew Morton				(req_pkt->bRequest == 0x20)) {
106558cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs			int old_dcd_state;
106658cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs			unsigned char signals = *((unsigned char *)
10677bb75aeeeec7417a961920b3f63a83007475260fAndrew Morton					urb->transfer_buffer +
10687bb75aeeeec7417a961920b3f63a83007475260fAndrew Morton					sizeof(struct usb_ctrlrequest));
106958cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
1070441b62c1edb986827154768d89bbac0ba779984fHarvey Harrison			dbg("%s: signal x%x", __func__, signals);
107158cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
107258cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs			old_dcd_state = portdata->dcd_state;
107358cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs			portdata->cts_state = 1;
107458cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs			portdata->dcd_state = ((signals & 0x01) ? 1 : 0);
107558cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs			portdata->dsr_state = ((signals & 0x02) ? 1 : 0);
107658cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs			portdata->ri_state = ((signals & 0x08) ? 1 : 0);
107758cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
10784a90f09b20f4622dcbff1f0e1e6bae1704f8ad8cAlan Cox			if (old_dcd_state && !portdata->dcd_state) {
10794a90f09b20f4622dcbff1f0e1e6bae1704f8ad8cAlan Cox				struct tty_struct *tty =
10804a90f09b20f4622dcbff1f0e1e6bae1704f8ad8cAlan Cox						tty_port_tty_get(&port->port);
10814a90f09b20f4622dcbff1f0e1e6bae1704f8ad8cAlan Cox				if (tty && !C_CLOCAL(tty))
10824a90f09b20f4622dcbff1f0e1e6bae1704f8ad8cAlan Cox					tty_hangup(tty);
10834a90f09b20f4622dcbff1f0e1e6bae1704f8ad8cAlan Cox				tty_kref_put(tty);
10844a90f09b20f4622dcbff1f0e1e6bae1704f8ad8cAlan Cox			}
10857bb75aeeeec7417a961920b3f63a83007475260fAndrew Morton		} else {
1086441b62c1edb986827154768d89bbac0ba779984fHarvey Harrison			dbg("%s: type %x req %x", __func__,
108719e58fae0c8f197d80fcea338b94fb5740369bc1Alan Cox				req_pkt->bRequestType, req_pkt->bRequest);
10887bb75aeeeec7417a961920b3f63a83007475260fAndrew Morton		}
108958cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs	} else
10904901b2c34ecb6fc45909228ad269c8126efe4401Oliver Neukum		err("%s: error %d", __func__, status);
109158cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
109258cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs	/* Resubmit urb so we continue receiving IRQ data */
10934901b2c34ecb6fc45909228ad269c8126efe4401Oliver Neukum	if (status != -ESHUTDOWN && status != -ENOENT) {
109458cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs		err = usb_submit_urb(urb, GFP_ATOMIC);
109558cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs		if (err)
10967bb75aeeeec7417a961920b3f63a83007475260fAndrew Morton			dbg("%s: resubmit intr urb failed. (%d)",
1097441b62c1edb986827154768d89bbac0ba779984fHarvey Harrison				__func__, err);
109858cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs	}
109958cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs}
110058cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
11015f760040bcb4cc0498d4c662c4ea305290198ef3Chris Collins/** send RTS/DTR state to the port.
11025f760040bcb4cc0498d4c662c4ea305290198ef3Chris Collins *
11035f760040bcb4cc0498d4c662c4ea305290198ef3Chris Collins * This is exactly the same as SET_CONTROL_LINE_STATE from the PSTN
11045f760040bcb4cc0498d4c662c4ea305290198ef3Chris Collins * CDC.
11055f760040bcb4cc0498d4c662c4ea305290198ef3Chris Collins*/
1106335f8514f200e63d689113d29cb7253a5c282967Alan Coxstatic int option_send_setup(struct usb_serial_port *port)
110758cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs{
110858cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs	struct usb_serial *serial = port->serial;
11098b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett	struct usb_wwan_intf_private *intfdata =
11108b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett		(struct usb_wwan_intf_private *) serial->private;
111158cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs	struct option_port_private *portdata;
11125f760040bcb4cc0498d4c662c4ea305290198ef3Chris Collins	int ifNum = serial->interface->cur_altsetting->desc.bInterfaceNumber;
1113335f8514f200e63d689113d29cb7253a5c282967Alan Cox	int val = 0;
1114441b62c1edb986827154768d89bbac0ba779984fHarvey Harrison	dbg("%s", __func__);
111558cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
11168b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett	if (is_blacklisted(ifNum,
11178b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett			   (struct option_blacklist_info *) intfdata->private)
11188b4c6a3ab596961b784659c71dc24b341f938a1aMatthew Garrett	    == OPTION_BLACKLIST_SENDSETUP) {
1119cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier		dbg("No send_setup on blacklisted interface #%d\n", ifNum);
1120cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier		return -EIO;
1121cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier	}
1122cc175ce2c01fc78dbf98a2b00f23d8863de20764Gernot Hillier
112358cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs	portdata = usb_get_serial_port_data(port);
112458cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
1125335f8514f200e63d689113d29cb7253a5c282967Alan Cox	if (portdata->dtr_state)
1126335f8514f200e63d689113d29cb7253a5c282967Alan Cox		val |= 0x01;
1127335f8514f200e63d689113d29cb7253a5c282967Alan Cox	if (portdata->rts_state)
1128335f8514f200e63d689113d29cb7253a5c282967Alan Cox		val |= 0x02;
112958cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
1130335f8514f200e63d689113d29cb7253a5c282967Alan Cox	return usb_control_msg(serial->dev,
1131335f8514f200e63d689113d29cb7253a5c282967Alan Cox		usb_rcvctrlpipe(serial->dev, 0),
1132335f8514f200e63d689113d29cb7253a5c282967Alan Cox		0x22, 0x21, val, ifNum, NULL, 0, USB_CTRL_SET_TIMEOUT);
113358cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs}
113458cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
113558cfe9113e485f7e04bd0eac4fc4251b330af501Matthias UrlichsMODULE_AUTHOR(DRIVER_AUTHOR);
113658cfe9113e485f7e04bd0eac4fc4251b330af501Matthias UrlichsMODULE_DESCRIPTION(DRIVER_DESC);
113758cfe9113e485f7e04bd0eac4fc4251b330af501Matthias UrlichsMODULE_VERSION(DRIVER_VERSION);
113858cfe9113e485f7e04bd0eac4fc4251b330af501Matthias UrlichsMODULE_LICENSE("GPL");
113958cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichs
114058cfe9113e485f7e04bd0eac4fc4251b330af501Matthias Urlichsmodule_param(debug, bool, S_IRUGO | S_IWUSR);
114158cfe9113e485f7e04bd0eac4fc4251b330af501Matthias UrlichsMODULE_PARM_DESC(debug, "Debug messages");
1142