USB: qcserial: Add support for HP lt4112 LTE/HSPA+ Gobi 4G Modem
authorMartin Hauke <mardnh@gmx.de>
Sun, 16 Nov 2014 20:17:30 +0000 (21:17 +0100)
committerJohan Hovold <johan@kernel.org>
Wed, 19 Nov 2014 15:17:03 +0000 (16:17 +0100)
Added new device layout "DEVICE_HWI" and also added the USB VID/PID for the
HP lt4112 LTE/HSPA+ Gobi 4G Modem (Huawei me906e)

Signed-off-by: Martin Hauke <mardnh@gmx.de>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Johan Hovold <johan@kernel.org>
drivers/usb/serial/qcserial.c

index b2aa003bf41126dc05ef7e9797f21a741887c4df..cb3e14780a7e0c6182e5f9bf3ad505b61fa75684 100644 (file)
@@ -27,12 +27,15 @@ enum qcserial_layouts {
        QCSERIAL_G2K = 0,       /* Gobi 2000 */
        QCSERIAL_G1K = 1,       /* Gobi 1000 */
        QCSERIAL_SWI = 2,       /* Sierra Wireless */
+       QCSERIAL_HWI = 3,       /* Huawei */
 };
 
 #define DEVICE_G1K(v, p) \
        USB_DEVICE(v, p), .driver_info = QCSERIAL_G1K
 #define DEVICE_SWI(v, p) \
        USB_DEVICE(v, p), .driver_info = QCSERIAL_SWI
+#define DEVICE_HWI(v, p) \
+       USB_DEVICE(v, p), .driver_info = QCSERIAL_HWI
 
 static const struct usb_device_id id_table[] = {
        /* Gobi 1000 devices */
@@ -157,6 +160,9 @@ static const struct usb_device_id id_table[] = {
        {DEVICE_SWI(0x413c, 0x81a8)},   /* Dell Wireless 5808 Gobi(TM) 4G LTE Mobile Broadband Card */
        {DEVICE_SWI(0x413c, 0x81a9)},   /* Dell Wireless 5808e Gobi(TM) 4G LTE Mobile Broadband Card */
 
+       /* Huawei devices */
+       {DEVICE_HWI(0x03f0, 0x581d)},   /* HP lt4112 LTE/HSPA+ Gobi 4G Modem (Huawei me906e) */
+
        { }                             /* Terminating entry */
 };
 MODULE_DEVICE_TABLE(usb, id_table);
@@ -287,6 +293,33 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
                        break;
                }
                break;
+       case QCSERIAL_HWI:
+               /*
+                * Huawei layout:
+                * 0: AT-capable modem port
+                * 1: DM/DIAG
+                * 2: AT-capable modem port
+                * 3: CCID-compatible PCSC interface
+                * 4: QMI/net
+                * 5: NMEA
+                */
+               switch (ifnum) {
+               case 0:
+               case 2:
+                       dev_dbg(dev, "Modem port found\n");
+                       break;
+               case 1:
+                       dev_dbg(dev, "DM/DIAG interface found\n");
+                       break;
+               case 5:
+                       dev_dbg(dev, "NMEA GPS interface found\n");
+                       break;
+               default:
+                       /* don't claim any unsupported interface */
+                       altsetting = -1;
+                       break;
+               }
+               break;
        default:
                dev_err(dev, "unsupported device layout type: %lu\n",
                        id->driver_info);