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>
This commit is contained in:
parent
c81eddb0e3
commit
cdc04834ce
@ -172,7 +172,7 @@ static unsigned int product_5052_count;
|
|||||||
/* the array dimension is the number of default entries plus */
|
/* the array dimension is the number of default entries plus */
|
||||||
/* TI_EXTRA_VID_PID_COUNT user defined entries plus 1 terminating */
|
/* TI_EXTRA_VID_PID_COUNT user defined entries plus 1 terminating */
|
||||||
/* null entry */
|
/* null entry */
|
||||||
static struct usb_device_id ti_id_table_3410[10+TI_EXTRA_VID_PID_COUNT+1] = {
|
static struct usb_device_id ti_id_table_3410[13+TI_EXTRA_VID_PID_COUNT+1] = {
|
||||||
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) },
|
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) },
|
||||||
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) },
|
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) },
|
||||||
{ USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) },
|
{ USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) },
|
||||||
@ -180,6 +180,9 @@ static struct usb_device_id ti_id_table_3410[10+TI_EXTRA_VID_PID_COUNT+1] = {
|
|||||||
{ USB_DEVICE(MTS_VENDOR_ID, MTS_CDMA_PRODUCT_ID) },
|
{ USB_DEVICE(MTS_VENDOR_ID, MTS_CDMA_PRODUCT_ID) },
|
||||||
{ USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_PRODUCT_ID) },
|
{ USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_PRODUCT_ID) },
|
||||||
{ USB_DEVICE(MTS_VENDOR_ID, MTS_EDGE_PRODUCT_ID) },
|
{ USB_DEVICE(MTS_VENDOR_ID, MTS_EDGE_PRODUCT_ID) },
|
||||||
|
{ USB_DEVICE(MTS_VENDOR_ID, MTS_MT9234MU_PRODUCT_ID) },
|
||||||
|
{ USB_DEVICE(MTS_VENDOR_ID, MTS_MT9234ZBA_PRODUCT_ID) },
|
||||||
|
{ USB_DEVICE(MTS_VENDOR_ID, MTS_MT9234ZBAOLD_PRODUCT_ID) },
|
||||||
{ USB_DEVICE(IBM_VENDOR_ID, IBM_4543_PRODUCT_ID) },
|
{ USB_DEVICE(IBM_VENDOR_ID, IBM_4543_PRODUCT_ID) },
|
||||||
{ USB_DEVICE(IBM_VENDOR_ID, IBM_454B_PRODUCT_ID) },
|
{ USB_DEVICE(IBM_VENDOR_ID, IBM_454B_PRODUCT_ID) },
|
||||||
{ USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) },
|
{ USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) },
|
||||||
@ -192,7 +195,7 @@ static struct usb_device_id ti_id_table_5052[5+TI_EXTRA_VID_PID_COUNT+1] = {
|
|||||||
{ USB_DEVICE(TI_VENDOR_ID, TI_5052_FIRMWARE_PRODUCT_ID) },
|
{ USB_DEVICE(TI_VENDOR_ID, TI_5052_FIRMWARE_PRODUCT_ID) },
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct usb_device_id ti_id_table_combined[14+2*TI_EXTRA_VID_PID_COUNT+1] = {
|
static struct usb_device_id ti_id_table_combined[17+2*TI_EXTRA_VID_PID_COUNT+1] = {
|
||||||
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) },
|
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) },
|
||||||
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) },
|
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) },
|
||||||
{ USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) },
|
{ USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) },
|
||||||
@ -200,6 +203,9 @@ static struct usb_device_id ti_id_table_combined[14+2*TI_EXTRA_VID_PID_COUNT+1]
|
|||||||
{ USB_DEVICE(MTS_VENDOR_ID, MTS_CDMA_PRODUCT_ID) },
|
{ USB_DEVICE(MTS_VENDOR_ID, MTS_CDMA_PRODUCT_ID) },
|
||||||
{ USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_PRODUCT_ID) },
|
{ USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_PRODUCT_ID) },
|
||||||
{ USB_DEVICE(MTS_VENDOR_ID, MTS_EDGE_PRODUCT_ID) },
|
{ USB_DEVICE(MTS_VENDOR_ID, MTS_EDGE_PRODUCT_ID) },
|
||||||
|
{ USB_DEVICE(MTS_VENDOR_ID, MTS_MT9234MU_PRODUCT_ID) },
|
||||||
|
{ USB_DEVICE(MTS_VENDOR_ID, MTS_MT9234ZBA_PRODUCT_ID) },
|
||||||
|
{ USB_DEVICE(MTS_VENDOR_ID, MTS_MT9234ZBAOLD_PRODUCT_ID) },
|
||||||
{ USB_DEVICE(TI_VENDOR_ID, TI_5052_BOOT_PRODUCT_ID) },
|
{ USB_DEVICE(TI_VENDOR_ID, TI_5052_BOOT_PRODUCT_ID) },
|
||||||
{ USB_DEVICE(TI_VENDOR_ID, TI_5152_BOOT_PRODUCT_ID) },
|
{ USB_DEVICE(TI_VENDOR_ID, TI_5152_BOOT_PRODUCT_ID) },
|
||||||
{ USB_DEVICE(TI_VENDOR_ID, TI_5052_EEPROM_PRODUCT_ID) },
|
{ USB_DEVICE(TI_VENDOR_ID, TI_5052_EEPROM_PRODUCT_ID) },
|
||||||
@ -287,6 +293,8 @@ MODULE_FIRMWARE("ti_5052.fw");
|
|||||||
MODULE_FIRMWARE("mts_cdma.fw");
|
MODULE_FIRMWARE("mts_cdma.fw");
|
||||||
MODULE_FIRMWARE("mts_gsm.fw");
|
MODULE_FIRMWARE("mts_gsm.fw");
|
||||||
MODULE_FIRMWARE("mts_edge.fw");
|
MODULE_FIRMWARE("mts_edge.fw");
|
||||||
|
MODULE_FIRMWARE("mts_mt9234mu.fw");
|
||||||
|
MODULE_FIRMWARE("mts_mt9234zba.fw");
|
||||||
|
|
||||||
module_param(debug, bool, S_IRUGO | S_IWUSR);
|
module_param(debug, bool, S_IRUGO | S_IWUSR);
|
||||||
MODULE_PARM_DESC(debug, "Enable debugging, 0=no, 1=yes");
|
MODULE_PARM_DESC(debug, "Enable debugging, 0=no, 1=yes");
|
||||||
@ -1687,6 +1695,7 @@ static int ti_download_firmware(struct ti_device *tdev)
|
|||||||
const struct firmware *fw_p;
|
const struct firmware *fw_p;
|
||||||
char buf[32];
|
char buf[32];
|
||||||
|
|
||||||
|
dbg("%s\n", __func__);
|
||||||
/* try ID specific firmware first, then try generic firmware */
|
/* try ID specific firmware first, then try generic firmware */
|
||||||
sprintf(buf, "ti_usb-v%04x-p%04x.fw", dev->descriptor.idVendor,
|
sprintf(buf, "ti_usb-v%04x-p%04x.fw", dev->descriptor.idVendor,
|
||||||
dev->descriptor.idProduct);
|
dev->descriptor.idProduct);
|
||||||
@ -1703,7 +1712,15 @@ static int ti_download_firmware(struct ti_device *tdev)
|
|||||||
case MTS_EDGE_PRODUCT_ID:
|
case MTS_EDGE_PRODUCT_ID:
|
||||||
strcpy(buf, "mts_edge.fw");
|
strcpy(buf, "mts_edge.fw");
|
||||||
break;
|
break;
|
||||||
}
|
case MTS_MT9234MU_PRODUCT_ID:
|
||||||
|
strcpy(buf, "mts_mt9234mu.fw");
|
||||||
|
break;
|
||||||
|
case MTS_MT9234ZBA_PRODUCT_ID:
|
||||||
|
strcpy(buf, "mts_mt9234zba.fw");
|
||||||
|
break;
|
||||||
|
case MTS_MT9234ZBAOLD_PRODUCT_ID:
|
||||||
|
strcpy(buf, "mts_mt9234zba.fw");
|
||||||
|
break; }
|
||||||
}
|
}
|
||||||
if (buf[0] == '\0') {
|
if (buf[0] == '\0') {
|
||||||
if (tdev->td_is_3410)
|
if (tdev->td_is_3410)
|
||||||
@ -1718,7 +1735,7 @@ static int ti_download_firmware(struct ti_device *tdev)
|
|||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
if (fw_p->size > TI_FIRMWARE_BUF_SIZE) {
|
if (fw_p->size > TI_FIRMWARE_BUF_SIZE) {
|
||||||
dev_err(&dev->dev, "%s - firmware too large\n", __func__);
|
dev_err(&dev->dev, "%s - firmware too large %d \n", __func__, fw_p->size);
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1730,6 +1747,7 @@ static int ti_download_firmware(struct ti_device *tdev)
|
|||||||
status = ti_do_download(dev, pipe, buffer, fw_p->size);
|
status = ti_do_download(dev, pipe, buffer, fw_p->size);
|
||||||
kfree(buffer);
|
kfree(buffer);
|
||||||
} else {
|
} else {
|
||||||
|
dbg("%s ENOMEM\n", __func__);
|
||||||
status = -ENOMEM;
|
status = -ENOMEM;
|
||||||
}
|
}
|
||||||
release_firmware(fw_p);
|
release_firmware(fw_p);
|
||||||
|
@ -45,6 +45,9 @@
|
|||||||
#define MTS_CDMA_PRODUCT_ID 0xF110
|
#define MTS_CDMA_PRODUCT_ID 0xF110
|
||||||
#define MTS_GSM_PRODUCT_ID 0xF111
|
#define MTS_GSM_PRODUCT_ID 0xF111
|
||||||
#define MTS_EDGE_PRODUCT_ID 0xF112
|
#define MTS_EDGE_PRODUCT_ID 0xF112
|
||||||
|
#define MTS_MT9234MU_PRODUCT_ID 0xF114
|
||||||
|
#define MTS_MT9234ZBA_PRODUCT_ID 0xF115
|
||||||
|
#define MTS_MT9234ZBAOLD_PRODUCT_ID 0x0319
|
||||||
|
|
||||||
/* Commands */
|
/* Commands */
|
||||||
#define TI_GET_VERSION 0x01
|
#define TI_GET_VERSION 0x01
|
||||||
|
Loading…
Reference in New Issue
Block a user