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

USB: ti_usb_3410_5052: adding multitech dialup fax/modem devices

The following patch adds support for Multitech Systems' MT9234MU and
MT9234ZBA usb dialup fax modems. It is based on a patch and firmware
provided to me by Multitech Systems' support, after I reported to them
that my MT9234MU modem was not working with recent linux kernels.

Signed-off-by: Alex Manoussakis <alex@juniper.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

authored by

Alex Manoussakis and committed by
Greg Kroah-Hartman
cdc04834 c81eddb0

+25 -4
+22 -4
drivers/usb/serial/ti_usb_3410_5052.c
··· 172 172 /* the array dimension is the number of default entries plus */ 173 173 /* TI_EXTRA_VID_PID_COUNT user defined entries plus 1 terminating */ 174 174 /* null entry */ 175 - static struct usb_device_id ti_id_table_3410[10+TI_EXTRA_VID_PID_COUNT+1] = { 175 + static struct usb_device_id ti_id_table_3410[13+TI_EXTRA_VID_PID_COUNT+1] = { 176 176 { USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) }, 177 177 { USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) }, 178 178 { USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) }, ··· 180 180 { USB_DEVICE(MTS_VENDOR_ID, MTS_CDMA_PRODUCT_ID) }, 181 181 { USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_PRODUCT_ID) }, 182 182 { USB_DEVICE(MTS_VENDOR_ID, MTS_EDGE_PRODUCT_ID) }, 183 + { USB_DEVICE(MTS_VENDOR_ID, MTS_MT9234MU_PRODUCT_ID) }, 184 + { USB_DEVICE(MTS_VENDOR_ID, MTS_MT9234ZBA_PRODUCT_ID) }, 185 + { USB_DEVICE(MTS_VENDOR_ID, MTS_MT9234ZBAOLD_PRODUCT_ID) }, 183 186 { USB_DEVICE(IBM_VENDOR_ID, IBM_4543_PRODUCT_ID) }, 184 187 { USB_DEVICE(IBM_VENDOR_ID, IBM_454B_PRODUCT_ID) }, 185 188 { USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) }, ··· 195 192 { USB_DEVICE(TI_VENDOR_ID, TI_5052_FIRMWARE_PRODUCT_ID) }, 196 193 }; 197 194 198 - static struct usb_device_id ti_id_table_combined[14+2*TI_EXTRA_VID_PID_COUNT+1] = { 195 + static struct usb_device_id ti_id_table_combined[17+2*TI_EXTRA_VID_PID_COUNT+1] = { 199 196 { USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) }, 200 197 { USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) }, 201 198 { USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) }, ··· 203 200 { USB_DEVICE(MTS_VENDOR_ID, MTS_CDMA_PRODUCT_ID) }, 204 201 { USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_PRODUCT_ID) }, 205 202 { USB_DEVICE(MTS_VENDOR_ID, MTS_EDGE_PRODUCT_ID) }, 203 + { USB_DEVICE(MTS_VENDOR_ID, MTS_MT9234MU_PRODUCT_ID) }, 204 + { USB_DEVICE(MTS_VENDOR_ID, MTS_MT9234ZBA_PRODUCT_ID) }, 205 + { USB_DEVICE(MTS_VENDOR_ID, MTS_MT9234ZBAOLD_PRODUCT_ID) }, 206 206 { USB_DEVICE(TI_VENDOR_ID, TI_5052_BOOT_PRODUCT_ID) }, 207 207 { USB_DEVICE(TI_VENDOR_ID, TI_5152_BOOT_PRODUCT_ID) }, 208 208 { USB_DEVICE(TI_VENDOR_ID, TI_5052_EEPROM_PRODUCT_ID) }, ··· 293 287 MODULE_FIRMWARE("mts_cdma.fw"); 294 288 MODULE_FIRMWARE("mts_gsm.fw"); 295 289 MODULE_FIRMWARE("mts_edge.fw"); 290 + MODULE_FIRMWARE("mts_mt9234mu.fw"); 291 + MODULE_FIRMWARE("mts_mt9234zba.fw"); 296 292 297 293 module_param(debug, bool, S_IRUGO | S_IWUSR); 298 294 MODULE_PARM_DESC(debug, "Enable debugging, 0=no, 1=yes"); ··· 1695 1687 const struct firmware *fw_p; 1696 1688 char buf[32]; 1697 1689 1690 + dbg("%s\n", __func__); 1698 1691 /* try ID specific firmware first, then try generic firmware */ 1699 1692 sprintf(buf, "ti_usb-v%04x-p%04x.fw", dev->descriptor.idVendor, 1700 1693 dev->descriptor.idProduct); ··· 1712 1703 case MTS_EDGE_PRODUCT_ID: 1713 1704 strcpy(buf, "mts_edge.fw"); 1714 1705 break; 1715 - } 1706 + case MTS_MT9234MU_PRODUCT_ID: 1707 + strcpy(buf, "mts_mt9234mu.fw"); 1708 + break; 1709 + case MTS_MT9234ZBA_PRODUCT_ID: 1710 + strcpy(buf, "mts_mt9234zba.fw"); 1711 + break; 1712 + case MTS_MT9234ZBAOLD_PRODUCT_ID: 1713 + strcpy(buf, "mts_mt9234zba.fw"); 1714 + break; } 1716 1715 } 1717 1716 if (buf[0] == '\0') { 1718 1717 if (tdev->td_is_3410) ··· 1735 1718 return -ENOENT; 1736 1719 } 1737 1720 if (fw_p->size > TI_FIRMWARE_BUF_SIZE) { 1738 - dev_err(&dev->dev, "%s - firmware too large\n", __func__); 1721 + dev_err(&dev->dev, "%s - firmware too large %d \n", __func__, fw_p->size); 1739 1722 return -ENOENT; 1740 1723 } 1741 1724 ··· 1747 1730 status = ti_do_download(dev, pipe, buffer, fw_p->size); 1748 1731 kfree(buffer); 1749 1732 } else { 1733 + dbg("%s ENOMEM\n", __func__); 1750 1734 status = -ENOMEM; 1751 1735 } 1752 1736 release_firmware(fw_p);
+3
drivers/usb/serial/ti_usb_3410_5052.h
··· 45 45 #define MTS_CDMA_PRODUCT_ID 0xF110 46 46 #define MTS_GSM_PRODUCT_ID 0xF111 47 47 #define MTS_EDGE_PRODUCT_ID 0xF112 48 + #define MTS_MT9234MU_PRODUCT_ID 0xF114 49 + #define MTS_MT9234ZBA_PRODUCT_ID 0xF115 50 + #define MTS_MT9234ZBAOLD_PRODUCT_ID 0x0319 48 51 49 52 /* Commands */ 50 53 #define TI_GET_VERSION 0x01