Skip to content

Commit db388a6

Browse files
committed
Merge tag 'usb-serial-5.10-rc3' of https://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial into usb-linus
Johan writes: USB-serial fixes for 5.10-rc3 Here's a fix for a long-standing issue with the cyberjack driver and some new device ids. All have been in linux-next with no reported issues. * tag 'usb-serial-5.10-rc3' of https://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial: USB: serial: option: add Telit FN980 composition 0x1055 USB: serial: option: add LE910Cx compositions 0x1203, 0x1230, 0x1231 USB: serial: cyberjack: fix write-URB completion race USB: serial: option: add Quectel EC200T module support
2 parents 00bd6bc + db0362e commit db388a6

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

drivers/usb/serial/cyberjack.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -357,11 +357,12 @@ static void cyberjack_write_bulk_callback(struct urb *urb)
357357
struct device *dev = &port->dev;
358358
int status = urb->status;
359359
unsigned long flags;
360+
bool resubmitted = false;
360361

361-
set_bit(0, &port->write_urbs_free);
362362
if (status) {
363363
dev_dbg(dev, "%s - nonzero write bulk status received: %d\n",
364364
__func__, status);
365+
set_bit(0, &port->write_urbs_free);
365366
return;
366367
}
367368

@@ -394,6 +395,8 @@ static void cyberjack_write_bulk_callback(struct urb *urb)
394395
goto exit;
395396
}
396397

398+
resubmitted = true;
399+
397400
dev_dbg(dev, "%s - priv->wrsent=%d\n", __func__, priv->wrsent);
398401
dev_dbg(dev, "%s - priv->wrfilled=%d\n", __func__, priv->wrfilled);
399402

@@ -410,6 +413,8 @@ static void cyberjack_write_bulk_callback(struct urb *urb)
410413

411414
exit:
412415
spin_unlock_irqrestore(&priv->lock, flags);
416+
if (!resubmitted)
417+
set_bit(0, &port->write_urbs_free);
413418
usb_serial_port_softint(port);
414419
}
415420

drivers/usb/serial/option.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ static void option_instat_callback(struct urb *urb);
250250
#define QUECTEL_PRODUCT_EP06 0x0306
251251
#define QUECTEL_PRODUCT_EM12 0x0512
252252
#define QUECTEL_PRODUCT_RM500Q 0x0800
253+
#define QUECTEL_PRODUCT_EC200T 0x6026
253254

254255
#define CMOTECH_VENDOR_ID 0x16d8
255256
#define CMOTECH_PRODUCT_6001 0x6001
@@ -1117,6 +1118,7 @@ static const struct usb_device_id option_ids[] = {
11171118
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0, 0) },
11181119
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x10),
11191120
.driver_info = ZLP },
1121+
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200T, 0xff, 0, 0) },
11201122

11211123
{ USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) },
11221124
{ USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) },
@@ -1189,6 +1191,8 @@ static const struct usb_device_id option_ids[] = {
11891191
.driver_info = NCTRL(0) | RSVD(1) },
11901192
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1054, 0xff), /* Telit FT980-KS */
11911193
.driver_info = NCTRL(2) | RSVD(3) },
1194+
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1055, 0xff), /* Telit FN980 (PCIe) */
1195+
.driver_info = NCTRL(0) | RSVD(1) },
11921196
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910),
11931197
.driver_info = NCTRL(0) | RSVD(1) | RSVD(3) },
11941198
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM),
@@ -1201,6 +1205,8 @@ static const struct usb_device_id option_ids[] = {
12011205
.driver_info = NCTRL(0) },
12021206
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910),
12031207
.driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
1208+
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1203, 0xff), /* Telit LE910Cx (RNDIS) */
1209+
.driver_info = NCTRL(2) | RSVD(3) },
12041210
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910_USBCFG4),
12051211
.driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) },
12061212
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920),
@@ -1215,6 +1221,10 @@ static const struct usb_device_id option_ids[] = {
12151221
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1213, 0xff) },
12161222
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1214),
12171223
.driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) },
1224+
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1230, 0xff), /* Telit LE910Cx (rmnet) */
1225+
.driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
1226+
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1231, 0xff), /* Telit LE910Cx (RNDIS) */
1227+
.driver_info = NCTRL(2) | RSVD(3) },
12181228
{ USB_DEVICE(TELIT_VENDOR_ID, 0x1260),
12191229
.driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
12201230
{ USB_DEVICE(TELIT_VENDOR_ID, 0x1261),

0 commit comments

Comments
 (0)