Commit 3bfb8239 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

Merge tag 'usb-serial-5.10-rc1' of...

Merge tag 'usb-serial-5.10-rc1' of https://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial into usb-next

Johan writes:

USB-serial updates for 5.10-rc1

Here are the USB-serial updates for 5.10-rc1, including:

 - new device ids
 - various clean ups

All have been in linux-next with no reported issues.

* tag 'usb-serial-5.10-rc1' of https://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial:
  USB: serial: option: add Cellient MPL200 card
  USB: serial: ftdi_sio: use cur_altsetting for consistency
  USB: serial: option: Add Telit FT980-KS composition
  USB: serial: qcserial: fix altsetting probing
  USB: serial: ftdi_sio: clean up jtag quirks
  USB: serial: pl2303: add device-id for HP GC device
  USB: serial: ftdi_sio: add support for FreeCalypso JTAG+UART adapters
parents afb487a3 3e765cab
...@@ -1037,6 +1037,11 @@ static const struct usb_device_id id_table_combined[] = { ...@@ -1037,6 +1037,11 @@ static const struct usb_device_id id_table_combined[] = {
/* U-Blox devices */ /* U-Blox devices */
{ USB_DEVICE(UBLOX_VID, UBLOX_C099F9P_ZED_PID) }, { USB_DEVICE(UBLOX_VID, UBLOX_C099F9P_ZED_PID) },
{ USB_DEVICE(UBLOX_VID, UBLOX_C099F9P_ODIN_PID) }, { USB_DEVICE(UBLOX_VID, UBLOX_C099F9P_ODIN_PID) },
/* FreeCalypso USB adapters */
{ USB_DEVICE(FTDI_VID, FTDI_FALCONIA_JTAG_BUF_PID),
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
{ USB_DEVICE(FTDI_VID, FTDI_FALCONIA_JTAG_UNBUF_PID),
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
{ } /* Terminating entry */ { } /* Terminating entry */
}; };
...@@ -1566,7 +1571,8 @@ static void ftdi_determine_type(struct usb_serial_port *port) ...@@ -1566,7 +1571,8 @@ static void ftdi_determine_type(struct usb_serial_port *port)
dev_dbg(&port->dev, "%s: bcdDevice = 0x%x, bNumInterfaces = %u\n", __func__, dev_dbg(&port->dev, "%s: bcdDevice = 0x%x, bNumInterfaces = %u\n", __func__,
version, interfaces); version, interfaces);
if (interfaces > 1) { if (interfaces > 1) {
int inter; struct usb_interface *intf = serial->interface;
int ifnum = intf->cur_altsetting->desc.bInterfaceNumber;
/* Multiple interfaces.*/ /* Multiple interfaces.*/
if (version == 0x0800) { if (version == 0x0800) {
...@@ -1581,16 +1587,15 @@ static void ftdi_determine_type(struct usb_serial_port *port) ...@@ -1581,16 +1587,15 @@ static void ftdi_determine_type(struct usb_serial_port *port)
priv->chip_type = FT2232C; priv->chip_type = FT2232C;
/* Determine interface code. */ /* Determine interface code. */
inter = serial->interface->altsetting->desc.bInterfaceNumber; if (ifnum == 0)
if (inter == 0) {
priv->interface = INTERFACE_A; priv->interface = INTERFACE_A;
} else if (inter == 1) { else if (ifnum == 1)
priv->interface = INTERFACE_B; priv->interface = INTERFACE_B;
} else if (inter == 2) { else if (ifnum == 2)
priv->interface = INTERFACE_C; priv->interface = INTERFACE_C;
} else if (inter == 3) { else if (ifnum == 3)
priv->interface = INTERFACE_D; priv->interface = INTERFACE_D;
}
/* BM-type devices have a bug where bcdDevice gets set /* BM-type devices have a bug where bcdDevice gets set
* to 0x200 when iSerialNumber is 0. */ * to 0x200 when iSerialNumber is 0. */
if (version < 0x500) { if (version < 0x500) {
...@@ -2330,12 +2335,11 @@ static int ftdi_NDI_device_setup(struct usb_serial *serial) ...@@ -2330,12 +2335,11 @@ static int ftdi_NDI_device_setup(struct usb_serial *serial)
*/ */
static int ftdi_jtag_probe(struct usb_serial *serial) static int ftdi_jtag_probe(struct usb_serial *serial)
{ {
struct usb_device *udev = serial->dev; struct usb_interface *intf = serial->interface;
struct usb_interface *interface = serial->interface; int ifnum = intf->cur_altsetting->desc.bInterfaceNumber;
if (interface == udev->actconfig->interface[0]) { if (ifnum == 0) {
dev_info(&udev->dev, dev_info(&intf->dev, "Ignoring interface reserved for JTAG\n");
"Ignoring serial port reserved for JTAG\n");
return -ENODEV; return -ENODEV;
} }
...@@ -2367,12 +2371,11 @@ static int ftdi_8u2232c_probe(struct usb_serial *serial) ...@@ -2367,12 +2371,11 @@ static int ftdi_8u2232c_probe(struct usb_serial *serial)
*/ */
static int ftdi_stmclite_probe(struct usb_serial *serial) static int ftdi_stmclite_probe(struct usb_serial *serial)
{ {
struct usb_device *udev = serial->dev; struct usb_interface *intf = serial->interface;
struct usb_interface *interface = serial->interface; int ifnum = intf->cur_altsetting->desc.bInterfaceNumber;
if (interface == udev->actconfig->interface[0] || if (ifnum < 2) {
interface == udev->actconfig->interface[1]) { dev_info(&intf->dev, "Ignoring interface reserved for JTAG\n");
dev_info(&udev->dev, "Ignoring serial port reserved for JTAG\n");
return -ENODEV; return -ENODEV;
} }
......
...@@ -39,6 +39,13 @@ ...@@ -39,6 +39,13 @@
#define FTDI_LUMEL_PD12_PID 0x6002 #define FTDI_LUMEL_PD12_PID 0x6002
/*
* Custom USB adapters made by Falconia Partners LLC
* for FreeCalypso project, ID codes allocated to Falconia by FTDI.
*/
#define FTDI_FALCONIA_JTAG_BUF_PID 0x7150
#define FTDI_FALCONIA_JTAG_UNBUF_PID 0x7151
/* Sienna Serial Interface by Secyourit GmbH */ /* Sienna Serial Interface by Secyourit GmbH */
#define FTDI_SIENNA_PID 0x8348 #define FTDI_SIENNA_PID 0x8348
......
...@@ -528,6 +528,7 @@ static void option_instat_callback(struct urb *urb); ...@@ -528,6 +528,7 @@ static void option_instat_callback(struct urb *urb);
/* Cellient products */ /* Cellient products */
#define CELLIENT_VENDOR_ID 0x2692 #define CELLIENT_VENDOR_ID 0x2692
#define CELLIENT_PRODUCT_MEN200 0x9005 #define CELLIENT_PRODUCT_MEN200 0x9005
#define CELLIENT_PRODUCT_MPL200 0x9025
/* Hyundai Petatel Inc. products */ /* Hyundai Petatel Inc. products */
#define PETATEL_VENDOR_ID 0x1ff4 #define PETATEL_VENDOR_ID 0x1ff4
...@@ -1186,6 +1187,8 @@ static const struct usb_device_id option_ids[] = { ...@@ -1186,6 +1187,8 @@ static const struct usb_device_id option_ids[] = {
.driver_info = NCTRL(2) | RSVD(3) }, .driver_info = NCTRL(2) | RSVD(3) },
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1053, 0xff), /* Telit FN980 (ECM) */ { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1053, 0xff), /* Telit FN980 (ECM) */
.driver_info = NCTRL(0) | RSVD(1) }, .driver_info = NCTRL(0) | RSVD(1) },
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1054, 0xff), /* Telit FT980-KS */
.driver_info = NCTRL(2) | RSVD(3) },
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910), { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910),
.driver_info = NCTRL(0) | RSVD(1) | RSVD(3) }, .driver_info = NCTRL(0) | RSVD(1) | RSVD(3) },
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM), { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM),
...@@ -1982,6 +1985,8 @@ static const struct usb_device_id option_ids[] = { ...@@ -1982,6 +1985,8 @@ static const struct usb_device_id option_ids[] = {
{ USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x02, 0x01) }, { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x02, 0x01) },
{ USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x00, 0x00) }, { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x00, 0x00) },
{ USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MEN200) }, { USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MEN200) },
{ USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MPL200),
.driver_info = RSVD(1) | RSVD(4) },
{ USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T_600A) }, { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T_600A) },
{ USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T_600E) }, { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T_600E) },
{ USB_DEVICE_AND_INTERFACE_INFO(TPLINK_VENDOR_ID, TPLINK_PRODUCT_LTE, 0xff, 0x00, 0x00) }, /* TP-Link LTE Module */ { USB_DEVICE_AND_INTERFACE_INFO(TPLINK_VENDOR_ID, TPLINK_PRODUCT_LTE, 0xff, 0x00, 0x00) }, /* TP-Link LTE Module */
......
...@@ -100,6 +100,7 @@ static const struct usb_device_id id_table[] = { ...@@ -100,6 +100,7 @@ static const struct usb_device_id id_table[] = {
{ USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) }, { USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) },
{ USB_DEVICE(HP_VENDOR_ID, HP_LD220TA_PRODUCT_ID) }, { USB_DEVICE(HP_VENDOR_ID, HP_LD220TA_PRODUCT_ID) },
{ USB_DEVICE(HP_VENDOR_ID, HP_LD381_PRODUCT_ID) }, { USB_DEVICE(HP_VENDOR_ID, HP_LD381_PRODUCT_ID) },
{ USB_DEVICE(HP_VENDOR_ID, HP_LD381GC_PRODUCT_ID) },
{ USB_DEVICE(HP_VENDOR_ID, HP_LD960_PRODUCT_ID) }, { USB_DEVICE(HP_VENDOR_ID, HP_LD960_PRODUCT_ID) },
{ USB_DEVICE(HP_VENDOR_ID, HP_LD960TA_PRODUCT_ID) }, { USB_DEVICE(HP_VENDOR_ID, HP_LD960TA_PRODUCT_ID) },
{ USB_DEVICE(HP_VENDOR_ID, HP_LCM220_PRODUCT_ID) }, { USB_DEVICE(HP_VENDOR_ID, HP_LCM220_PRODUCT_ID) },
......
...@@ -127,6 +127,7 @@ ...@@ -127,6 +127,7 @@
/* Hewlett-Packard POS Pole Displays */ /* Hewlett-Packard POS Pole Displays */
#define HP_VENDOR_ID 0x03f0 #define HP_VENDOR_ID 0x03f0
#define HP_LD381GC_PRODUCT_ID 0x0183
#define HP_LM920_PRODUCT_ID 0x026b #define HP_LM920_PRODUCT_ID 0x026b
#define HP_TD620_PRODUCT_ID 0x0956 #define HP_TD620_PRODUCT_ID 0x0956
#define HP_LD960_PRODUCT_ID 0x0b39 #define HP_LD960_PRODUCT_ID 0x0b39
......
...@@ -243,11 +243,11 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id) ...@@ -243,11 +243,11 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
/* QDL mode */ /* QDL mode */
/* Gobi 2000 has a single altsetting, older ones have two */ /* Gobi 2000 has a single altsetting, older ones have two */
if (serial->interface->num_altsetting == 2) if (serial->interface->num_altsetting == 2)
intf = &serial->interface->altsetting[1]; intf = usb_altnum_to_altsetting(serial->interface, 1);
else if (serial->interface->num_altsetting > 2) else if (serial->interface->num_altsetting > 2)
goto done; goto done;
if (intf->desc.bNumEndpoints == 2 && if (intf && intf->desc.bNumEndpoints == 2 &&
usb_endpoint_is_bulk_in(&intf->endpoint[0].desc) && usb_endpoint_is_bulk_in(&intf->endpoint[0].desc) &&
usb_endpoint_is_bulk_out(&intf->endpoint[1].desc)) { usb_endpoint_is_bulk_out(&intf->endpoint[1].desc)) {
dev_dbg(dev, "QDL port found\n"); dev_dbg(dev, "QDL port found\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment