Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ti_usb_3410_5052: add Multi-Tech modem support

Add Multi-Tech cellular modem support to the ti_usb_3410_5052 driver.

Signed-off-by: Chris Adams <cmadams@hiwaay.net>
Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Chris Adams and committed by
Linus Torvalds
cb7a7c6a 05a3d905

+39 -5
+31 -5
drivers/usb/serial/ti_usb_3410_5052.c
··· 176 176 /* the array dimension is the number of default entries plus */ 177 177 /* TI_EXTRA_VID_PID_COUNT user defined entries plus 1 terminating */ 178 178 /* null entry */ 179 - static struct usb_device_id ti_id_table_3410[2+TI_EXTRA_VID_PID_COUNT+1] = { 179 + static struct usb_device_id ti_id_table_3410[7+TI_EXTRA_VID_PID_COUNT+1] = { 180 180 { USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) }, 181 181 { USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) }, 182 + { USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) }, 183 + { USB_DEVICE(MTS_VENDOR_ID, MTS_CDMA_NO_FW_PRODUCT_ID) }, 184 + { USB_DEVICE(MTS_VENDOR_ID, MTS_CDMA_PRODUCT_ID) }, 185 + { USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_PRODUCT_ID) }, 186 + { USB_DEVICE(MTS_VENDOR_ID, MTS_EDGE_PRODUCT_ID) }, 182 187 }; 183 188 184 189 static struct usb_device_id ti_id_table_5052[4+TI_EXTRA_VID_PID_COUNT+1] = { ··· 196 191 static struct usb_device_id ti_id_table_combined[6+2*TI_EXTRA_VID_PID_COUNT+1] = { 197 192 { USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) }, 198 193 { USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) }, 194 + { USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) }, 195 + { USB_DEVICE(MTS_VENDOR_ID, MTS_CDMA_NO_FW_PRODUCT_ID) }, 196 + { USB_DEVICE(MTS_VENDOR_ID, MTS_CDMA_PRODUCT_ID) }, 197 + { USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_PRODUCT_ID) }, 198 + { USB_DEVICE(MTS_VENDOR_ID, MTS_EDGE_PRODUCT_ID) }, 199 199 { USB_DEVICE(TI_VENDOR_ID, TI_5052_BOOT_PRODUCT_ID) }, 200 200 { USB_DEVICE(TI_VENDOR_ID, TI_5152_BOOT_PRODUCT_ID) }, 201 201 { USB_DEVICE(TI_VENDOR_ID, TI_5052_EEPROM_PRODUCT_ID) }, ··· 1699 1689 sprintf(buf, "ti_usb-v%04x-p%04x.fw", dev->descriptor.idVendor, 1700 1690 dev->descriptor.idProduct); 1701 1691 if ((status = request_firmware(&fw_p, buf, &dev->dev)) != 0) { 1702 - if (tdev->td_is_3410) 1703 - strcpy(buf, "ti_3410.fw"); 1704 - else 1705 - strcpy(buf, "ti_5052.fw"); 1692 + buf[0] = '\0'; 1693 + if (dev->descriptor.idVendor == MTS_VENDOR_ID) { 1694 + switch (dev->descriptor.idProduct) { 1695 + case MTS_CDMA_PRODUCT_ID: 1696 + strcpy(buf, "mts_cdma.fw"); 1697 + break; 1698 + case MTS_GSM_PRODUCT_ID: 1699 + strcpy(buf, "mts_gsm.fw"); 1700 + break; 1701 + case MTS_EDGE_PRODUCT_ID: 1702 + strcpy(buf, "mts_edge.fw"); 1703 + break; 1704 + } 1705 + } 1706 + if (buf[0] == '\0') { 1707 + if (tdev->td_is_3410) 1708 + strcpy(buf, "ti_3410.fw"); 1709 + else 1710 + strcpy(buf, "ti_5052.fw"); 1711 + } 1706 1712 status = request_firmware(&fw_p, buf, &dev->dev); 1707 1713 } 1708 1714 if (status) {
+8
drivers/usb/serial/ti_usb_3410_5052.h
··· 34 34 #define TI_5052_EEPROM_PRODUCT_ID 0x505A /* EEPROM, no firmware */ 35 35 #define TI_5052_FIRMWARE_PRODUCT_ID 0x505F /* firmware is running */ 36 36 37 + /* Multi-Tech vendor and product ids */ 38 + #define MTS_VENDOR_ID 0x06E0 39 + #define MTS_GSM_NO_FW_PRODUCT_ID 0xF108 40 + #define MTS_CDMA_NO_FW_PRODUCT_ID 0xF109 41 + #define MTS_CDMA_PRODUCT_ID 0xF110 42 + #define MTS_GSM_PRODUCT_ID 0xF111 43 + #define MTS_EDGE_PRODUCT_ID 0xF112 44 + 37 45 /* Commands */ 38 46 #define TI_GET_VERSION 0x01 39 47 #define TI_GET_PORT_STATUS 0x02