Merge branch 'master' into for-next
Fast-forward merge with Linus to be able to merge patches based on more recent version of the tree.
This commit is contained in:
@@ -101,6 +101,7 @@ static int ftdi_jtag_probe(struct usb_serial *serial);
|
||||
static int ftdi_mtxorb_hack_setup(struct usb_serial *serial);
|
||||
static int ftdi_NDI_device_setup(struct usb_serial *serial);
|
||||
static int ftdi_stmclite_probe(struct usb_serial *serial);
|
||||
static int ftdi_8u2232c_probe(struct usb_serial *serial);
|
||||
static void ftdi_USB_UIRT_setup(struct ftdi_private *priv);
|
||||
static void ftdi_HE_TIRA1_setup(struct ftdi_private *priv);
|
||||
|
||||
@@ -128,6 +129,10 @@ static struct ftdi_sio_quirk ftdi_stmclite_quirk = {
|
||||
.probe = ftdi_stmclite_probe,
|
||||
};
|
||||
|
||||
static struct ftdi_sio_quirk ftdi_8u2232c_quirk = {
|
||||
.probe = ftdi_8u2232c_probe,
|
||||
};
|
||||
|
||||
/*
|
||||
* The 8U232AM has the same API as the sio except for:
|
||||
* - it can support MUCH higher baudrates; up to:
|
||||
@@ -151,6 +156,7 @@ static struct ftdi_sio_quirk ftdi_stmclite_quirk = {
|
||||
* /sys/bus/usb/ftdi_sio/new_id, then send patch/report!
|
||||
*/
|
||||
static struct usb_device_id id_table_combined [] = {
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_ZEITCONTROL_TAGTRACE_MIFARE_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_CTI_MINI_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_CTI_NANO_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) },
|
||||
@@ -177,7 +183,8 @@ static struct usb_device_id id_table_combined [] = {
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_8U232AM_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_8U232AM_ALT_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_232RL_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_8U2232C_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_8U2232C_PID) ,
|
||||
.driver_info = (kernel_ulong_t)&ftdi_8u2232c_quirk },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_4232H_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_232H_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_MICRO_CHAMELEON_PID) },
|
||||
@@ -1171,7 +1178,7 @@ static __u32 get_ftdi_divisor(struct tty_struct *tty,
|
||||
case FT2232H: /* FT2232H chip */
|
||||
case FT4232H: /* FT4232H chip */
|
||||
case FT232H: /* FT232H chip */
|
||||
if ((baud <= 12000000) & (baud >= 1200)) {
|
||||
if ((baud <= 12000000) && (baud >= 1200)) {
|
||||
div_value = ftdi_2232h_baud_to_divisor(baud);
|
||||
} else if (baud < 1200) {
|
||||
div_value = ftdi_232bm_baud_to_divisor(baud);
|
||||
@@ -1205,7 +1212,10 @@ static int change_speed(struct tty_struct *tty, struct usb_serial_port *port)
|
||||
urb_index_value = get_ftdi_divisor(tty, port);
|
||||
urb_value = (__u16)urb_index_value;
|
||||
urb_index = (__u16)(urb_index_value >> 16);
|
||||
if (priv->interface) { /* FT2232C */
|
||||
if ((priv->chip_type == FT2232C) || (priv->chip_type == FT2232H) ||
|
||||
(priv->chip_type == FT4232H) || (priv->chip_type == FT232H)) {
|
||||
/* Probably the BM type needs the MSB of the encoded fractional
|
||||
* divider also moved like for the chips above. Any infos? */
|
||||
urb_index = (__u16)((urb_index << 8) | priv->interface);
|
||||
}
|
||||
|
||||
@@ -1733,6 +1743,18 @@ static int ftdi_jtag_probe(struct usb_serial *serial)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ftdi_8u2232c_probe(struct usb_serial *serial)
|
||||
{
|
||||
struct usb_device *udev = serial->dev;
|
||||
|
||||
dbg("%s", __func__);
|
||||
|
||||
if (strcmp(udev->manufacturer, "CALAO Systems") == 0)
|
||||
return ftdi_jtag_probe(serial);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* First and second port on STMCLiteadaptors is reserved for JTAG interface
|
||||
* and the forth port for pio
|
||||
|
||||
@@ -1159,4 +1159,8 @@
|
||||
/* USB-Nano-485*/
|
||||
#define FTDI_CTI_NANO_PID 0xF60B
|
||||
|
||||
|
||||
/*
|
||||
* ZeitControl cardsystems GmbH rfid-readers http://zeitconrol.de
|
||||
*/
|
||||
/* TagTracer MIFARE*/
|
||||
#define FTDI_ZEITCONTROL_TAGTRACE_MIFARE_PID 0xF7C0
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <asm/atomic.h>
|
||||
#include <linux/atomic.h>
|
||||
#include <linux/usb.h>
|
||||
#include <linux/usb/serial.h>
|
||||
|
||||
|
||||
@@ -148,6 +148,12 @@ static void option_instat_callback(struct urb *urb);
|
||||
#define HUAWEI_PRODUCT_K4505 0x1464
|
||||
#define HUAWEI_PRODUCT_K3765 0x1465
|
||||
#define HUAWEI_PRODUCT_E14AC 0x14AC
|
||||
#define HUAWEI_PRODUCT_K3806 0x14AE
|
||||
#define HUAWEI_PRODUCT_K4605 0x14C6
|
||||
#define HUAWEI_PRODUCT_K3770 0x14C9
|
||||
#define HUAWEI_PRODUCT_K3771 0x14CA
|
||||
#define HUAWEI_PRODUCT_K4510 0x14CB
|
||||
#define HUAWEI_PRODUCT_K4511 0x14CC
|
||||
#define HUAWEI_PRODUCT_ETS1220 0x1803
|
||||
#define HUAWEI_PRODUCT_E353 0x1506
|
||||
|
||||
@@ -412,6 +418,56 @@ static void option_instat_callback(struct urb *urb);
|
||||
#define SAMSUNG_VENDOR_ID 0x04e8
|
||||
#define SAMSUNG_PRODUCT_GT_B3730 0x6889
|
||||
|
||||
/* YUGA products www.yuga-info.com*/
|
||||
#define YUGA_VENDOR_ID 0x257A
|
||||
#define YUGA_PRODUCT_CEM600 0x1601
|
||||
#define YUGA_PRODUCT_CEM610 0x1602
|
||||
#define YUGA_PRODUCT_CEM500 0x1603
|
||||
#define YUGA_PRODUCT_CEM510 0x1604
|
||||
#define YUGA_PRODUCT_CEM800 0x1605
|
||||
#define YUGA_PRODUCT_CEM900 0x1606
|
||||
|
||||
#define YUGA_PRODUCT_CEU818 0x1607
|
||||
#define YUGA_PRODUCT_CEU816 0x1608
|
||||
#define YUGA_PRODUCT_CEU828 0x1609
|
||||
#define YUGA_PRODUCT_CEU826 0x160A
|
||||
#define YUGA_PRODUCT_CEU518 0x160B
|
||||
#define YUGA_PRODUCT_CEU516 0x160C
|
||||
#define YUGA_PRODUCT_CEU528 0x160D
|
||||
#define YUGA_PRODUCT_CEU526 0x160F
|
||||
|
||||
#define YUGA_PRODUCT_CWM600 0x2601
|
||||
#define YUGA_PRODUCT_CWM610 0x2602
|
||||
#define YUGA_PRODUCT_CWM500 0x2603
|
||||
#define YUGA_PRODUCT_CWM510 0x2604
|
||||
#define YUGA_PRODUCT_CWM800 0x2605
|
||||
#define YUGA_PRODUCT_CWM900 0x2606
|
||||
|
||||
#define YUGA_PRODUCT_CWU718 0x2607
|
||||
#define YUGA_PRODUCT_CWU716 0x2608
|
||||
#define YUGA_PRODUCT_CWU728 0x2609
|
||||
#define YUGA_PRODUCT_CWU726 0x260A
|
||||
#define YUGA_PRODUCT_CWU518 0x260B
|
||||
#define YUGA_PRODUCT_CWU516 0x260C
|
||||
#define YUGA_PRODUCT_CWU528 0x260D
|
||||
#define YUGA_PRODUCT_CWU526 0x260F
|
||||
|
||||
#define YUGA_PRODUCT_CLM600 0x2601
|
||||
#define YUGA_PRODUCT_CLM610 0x2602
|
||||
#define YUGA_PRODUCT_CLM500 0x2603
|
||||
#define YUGA_PRODUCT_CLM510 0x2604
|
||||
#define YUGA_PRODUCT_CLM800 0x2605
|
||||
#define YUGA_PRODUCT_CLM900 0x2606
|
||||
|
||||
#define YUGA_PRODUCT_CLU718 0x2607
|
||||
#define YUGA_PRODUCT_CLU716 0x2608
|
||||
#define YUGA_PRODUCT_CLU728 0x2609
|
||||
#define YUGA_PRODUCT_CLU726 0x260A
|
||||
#define YUGA_PRODUCT_CLU518 0x260B
|
||||
#define YUGA_PRODUCT_CLU516 0x260C
|
||||
#define YUGA_PRODUCT_CLU528 0x260D
|
||||
#define YUGA_PRODUCT_CLU526 0x260F
|
||||
|
||||
/* some devices interfaces need special handling due to a number of reasons */
|
||||
enum option_blacklist_reason {
|
||||
OPTION_BLACKLIST_NONE = 0,
|
||||
@@ -547,6 +603,16 @@ static const struct usb_device_id option_ids[] = {
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3765, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_ETS1220, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E14AC, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3806, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4605, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3770, 0xff, 0x02, 0x31) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3770, 0xff, 0x02, 0x32) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3771, 0xff, 0x02, 0x31) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3771, 0xff, 0x02, 0x32) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4510, 0xff, 0x01, 0x31) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4510, 0xff, 0x01, 0x32) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4511, 0xff, 0x01, 0x31) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4511, 0xff, 0x01, 0x32) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x01) },
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) },
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) },
|
||||
@@ -993,6 +1059,48 @@ static const struct usb_device_id option_ids[] = {
|
||||
{ USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */
|
||||
{ USB_DEVICE(ONDA_VENDOR_ID, ONDA_MT825UP) }, /* ONDA MT825UP modem */
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_GT_B3730, USB_CLASS_CDC_DATA, 0x00, 0x00) }, /* Samsung GT-B3730 LTE USB modem.*/
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM600) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM610) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM500) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM510) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM800) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM900) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU818) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU816) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU828) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU826) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU518) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU516) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU528) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU526) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWM600) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWM610) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWM500) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWM510) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWM800) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWM900) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU718) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU716) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU728) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU726) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU518) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU516) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU528) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU526) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLM600) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLM610) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLM500) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLM510) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLM800) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLM900) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU718) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU716) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU728) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU726) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU518) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU516) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU528) },
|
||||
{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU526) },
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
MODULE_DEVICE_TABLE(usb, option_ids);
|
||||
@@ -1122,11 +1230,13 @@ static int option_probe(struct usb_serial *serial,
|
||||
serial->interface->cur_altsetting->desc.bInterfaceClass != 0xff)
|
||||
return -ENODEV;
|
||||
|
||||
/* Don't bind network interfaces on Huawei K3765 & K4505 */
|
||||
/* Don't bind network interfaces on Huawei K3765, K4505 & K4605 */
|
||||
if (serial->dev->descriptor.idVendor == HUAWEI_VENDOR_ID &&
|
||||
(serial->dev->descriptor.idProduct == HUAWEI_PRODUCT_K3765 ||
|
||||
serial->dev->descriptor.idProduct == HUAWEI_PRODUCT_K4505) &&
|
||||
serial->interface->cur_altsetting->desc.bInterfaceNumber == 1)
|
||||
serial->dev->descriptor.idProduct == HUAWEI_PRODUCT_K4505 ||
|
||||
serial->dev->descriptor.idProduct == HUAWEI_PRODUCT_K4605) &&
|
||||
(serial->interface->cur_altsetting->desc.bInterfaceNumber == 1 ||
|
||||
serial->interface->cur_altsetting->desc.bInterfaceNumber == 2))
|
||||
return -ENODEV;
|
||||
|
||||
/* Don't bind network interface on Samsung GT-B3730, it is handled by a separate module */
|
||||
|
||||
@@ -45,6 +45,7 @@ static const struct usb_device_id id_table[] = {
|
||||
{USB_DEVICE(0x05c6, 0x9203)}, /* Generic Gobi Modem device */
|
||||
{USB_DEVICE(0x05c6, 0x9222)}, /* Generic Gobi Modem device */
|
||||
{USB_DEVICE(0x05c6, 0x9008)}, /* Generic Gobi QDL device */
|
||||
{USB_DEVICE(0x05c6, 0x9009)}, /* Generic Gobi Modem device */
|
||||
{USB_DEVICE(0x05c6, 0x9201)}, /* Generic Gobi QDL device */
|
||||
{USB_DEVICE(0x05c6, 0x9221)}, /* Generic Gobi QDL device */
|
||||
{USB_DEVICE(0x05c6, 0x9231)}, /* Generic Gobi QDL device */
|
||||
@@ -78,6 +79,7 @@ static const struct usb_device_id id_table[] = {
|
||||
{USB_DEVICE(0x1199, 0x9008)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */
|
||||
{USB_DEVICE(0x1199, 0x9009)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */
|
||||
{USB_DEVICE(0x1199, 0x900a)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */
|
||||
{USB_DEVICE(0x1199, 0x9011)}, /* Sierra Wireless Gobi 2000 Modem device (MC8305) */
|
||||
{USB_DEVICE(0x16d8, 0x8001)}, /* CMDTech Gobi 2000 QDL device (VU922) */
|
||||
{USB_DEVICE(0x16d8, 0x8002)}, /* CMDTech Gobi 2000 Modem device (VU922) */
|
||||
{USB_DEVICE(0x05c6, 0x9204)}, /* Gobi 2000 QDL device */
|
||||
|
||||
Reference in New Issue
Block a user