]>
Commit | Line | Data |
---|---|---|
878e5d04 GKH |
1 | From e7181d005e84b15fe3121a8d22840adc3395d496 Mon Sep 17 00:00:00 2001 |
2 | From: Martin Hauke <mardnh@gmx.de> | |
3 | Date: Sun, 16 Nov 2014 21:17:30 +0100 | |
4 | Subject: USB: qcserial: Add support for HP lt4112 LTE/HSPA+ Gobi 4G Modem | |
5 | ||
6 | From: Martin Hauke <mardnh@gmx.de> | |
7 | ||
8 | commit e7181d005e84b15fe3121a8d22840adc3395d496 upstream. | |
9 | ||
10 | Added new device layout "DEVICE_HWI" and also added the USB VID/PID for the | |
11 | HP lt4112 LTE/HSPA+ Gobi 4G Modem (Huawei me906e) | |
12 | ||
13 | Signed-off-by: Martin Hauke <mardnh@gmx.de> | |
14 | Signed-off-by: Johan Hovold <johan@kernel.org> | |
15 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | |
16 | ||
17 | --- | |
18 | drivers/usb/serial/qcserial.c | 33 +++++++++++++++++++++++++++++++++ | |
19 | 1 file changed, 33 insertions(+) | |
20 | ||
21 | --- a/drivers/usb/serial/qcserial.c | |
22 | +++ b/drivers/usb/serial/qcserial.c | |
23 | @@ -27,12 +27,15 @@ enum qcserial_layouts { | |
24 | QCSERIAL_G2K = 0, /* Gobi 2000 */ | |
25 | QCSERIAL_G1K = 1, /* Gobi 1000 */ | |
26 | QCSERIAL_SWI = 2, /* Sierra Wireless */ | |
27 | + QCSERIAL_HWI = 3, /* Huawei */ | |
28 | }; | |
29 | ||
30 | #define DEVICE_G1K(v, p) \ | |
31 | USB_DEVICE(v, p), .driver_info = QCSERIAL_G1K | |
32 | #define DEVICE_SWI(v, p) \ | |
33 | USB_DEVICE(v, p), .driver_info = QCSERIAL_SWI | |
34 | +#define DEVICE_HWI(v, p) \ | |
35 | + USB_DEVICE(v, p), .driver_info = QCSERIAL_HWI | |
36 | ||
37 | static const struct usb_device_id id_table[] = { | |
38 | /* Gobi 1000 devices */ | |
39 | @@ -157,6 +160,9 @@ static const struct usb_device_id id_tab | |
40 | {DEVICE_SWI(0x413c, 0x81a8)}, /* Dell Wireless 5808 Gobi(TM) 4G LTE Mobile Broadband Card */ | |
41 | {DEVICE_SWI(0x413c, 0x81a9)}, /* Dell Wireless 5808e Gobi(TM) 4G LTE Mobile Broadband Card */ | |
42 | ||
43 | + /* Huawei devices */ | |
44 | + {DEVICE_HWI(0x03f0, 0x581d)}, /* HP lt4112 LTE/HSPA+ Gobi 4G Modem (Huawei me906e) */ | |
45 | + | |
46 | { } /* Terminating entry */ | |
47 | }; | |
48 | MODULE_DEVICE_TABLE(usb, id_table); | |
49 | @@ -283,6 +289,33 @@ static int qcprobe(struct usb_serial *se | |
50 | break; | |
51 | default: | |
52 | /* don't claim any unsupported interface */ | |
53 | + altsetting = -1; | |
54 | + break; | |
55 | + } | |
56 | + break; | |
57 | + case QCSERIAL_HWI: | |
58 | + /* | |
59 | + * Huawei layout: | |
60 | + * 0: AT-capable modem port | |
61 | + * 1: DM/DIAG | |
62 | + * 2: AT-capable modem port | |
63 | + * 3: CCID-compatible PCSC interface | |
64 | + * 4: QMI/net | |
65 | + * 5: NMEA | |
66 | + */ | |
67 | + switch (ifnum) { | |
68 | + case 0: | |
69 | + case 2: | |
70 | + dev_dbg(dev, "Modem port found\n"); | |
71 | + break; | |
72 | + case 1: | |
73 | + dev_dbg(dev, "DM/DIAG interface found\n"); | |
74 | + break; | |
75 | + case 5: | |
76 | + dev_dbg(dev, "NMEA GPS interface found\n"); | |
77 | + break; | |
78 | + default: | |
79 | + /* don't claim any unsupported interface */ | |
80 | altsetting = -1; | |
81 | break; | |
82 | } |