Commit a6aedb58 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

Merge tag 'usb-serial-6.0-rc4' of...

Merge tag 'usb-serial-6.0-rc4' of https://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial into usb-linus

Johan writes:
  "USB-serial fixes for 6.0-rc4

   Here are a couple of fixes for two long-standing issues with some older
   ch341 devices and a number of new device ids.

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

* tag 'usb-serial-6.0-rc4' of https://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial:
  USB: serial: ch341: fix disabled rx timer on older devices
  USB: serial: ch341: fix lost character on LCR updates
  USB: serial: cp210x: add Decagon UCA device id
  USB: serial: option: add support for Cinterion MV32-WA/WB RmNet mode
  USB: serial: ftdi_sio: add Omron CS1W-CIF31 device id
  USB: serial: option: add Quectel EM060K modem
  USB: serial: option: add support for OPPO R11 diag port
parents 58bfe7d8 41ca302a
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -97,7 +97,10 @@ struct ch341_private {
	u8 mcr;
	u8 msr;
	u8 lcr;

	unsigned long quirks;
	u8 version;

	unsigned long break_end;
};

@@ -250,7 +253,11 @@ static int ch341_set_baudrate_lcr(struct usb_device *dev,
	/*
	 * CH341A buffers data until a full endpoint-size packet (32 bytes)
	 * has been received unless bit 7 is set.
	 *
	 * At least one device with version 0x27 appears to have this bit
	 * inverted.
	 */
	if (priv->version > 0x27)
		val |= BIT(7);

	r = ch341_control_out(dev, CH341_REQ_WRITE_REG,
@@ -265,6 +272,9 @@ static int ch341_set_baudrate_lcr(struct usb_device *dev,
	 * (stop bits, parity and word length). Version 0x30 and above use
	 * CH341_REG_LCR only and CH341_REG_LCR2 is always set to zero.
	 */
	if (priv->version < 0x30)
		return 0;

	r = ch341_control_out(dev, CH341_REQ_WRITE_REG,
			      CH341_REG_LCR2 << 8 | CH341_REG_LCR, lcr);
	if (r)
@@ -308,7 +318,9 @@ static int ch341_configure(struct usb_device *dev, struct ch341_private *priv)
	r = ch341_control_in(dev, CH341_REQ_READ_VERSION, 0, 0, buffer, size);
	if (r)
		return r;
	dev_dbg(&dev->dev, "Chip version: 0x%02x\n", buffer[0]);

	priv->version = buffer[0];
	dev_dbg(&dev->dev, "Chip version: 0x%02x\n", priv->version);

	r = ch341_control_out(dev, CH341_REQ_SERIAL_INIT, 0, 0);
	if (r < 0)
+1 −0
Original line number Diff line number Diff line
@@ -130,6 +130,7 @@ static const struct usb_device_id id_table[] = {
	{ USB_DEVICE(0x10C4, 0x83AA) }, /* Mark-10 Digital Force Gauge */
	{ USB_DEVICE(0x10C4, 0x83D8) }, /* DekTec DTA Plus VHF/UHF Booster/Attenuator */
	{ USB_DEVICE(0x10C4, 0x8411) }, /* Kyocera GPS Module */
	{ USB_DEVICE(0x10C4, 0x8414) }, /* Decagon USB Cable Adapter */
	{ USB_DEVICE(0x10C4, 0x8418) }, /* IRZ Automation Teleport SG-10 GSM/GPRS Modem */
	{ USB_DEVICE(0x10C4, 0x846E) }, /* BEI USB Sensor Interface (VCP) */
	{ USB_DEVICE(0x10C4, 0x8470) }, /* Juniper Networks BX Series System Console */
+2 −0
Original line number Diff line number Diff line
@@ -1045,6 +1045,8 @@ static const struct usb_device_id id_table_combined[] = {
	/* IDS GmbH devices */
	{ USB_DEVICE(IDS_VID, IDS_SI31A_PID) },
	{ USB_DEVICE(IDS_VID, IDS_CM31A_PID) },
	/* Omron devices */
	{ USB_DEVICE(OMRON_VID, OMRON_CS1W_CIF31_PID) },
	/* U-Blox devices */
	{ USB_DEVICE(UBLOX_VID, UBLOX_C099F9P_ZED_PID) },
	{ USB_DEVICE(UBLOX_VID, UBLOX_C099F9P_ODIN_PID) },
+6 −0
Original line number Diff line number Diff line
@@ -661,6 +661,12 @@
#define INFINEON_TRIBOARD_TC1798_PID	0x0028 /* DAS JTAG TriBoard TC1798 V1.0 */
#define INFINEON_TRIBOARD_TC2X7_PID	0x0043 /* DAS JTAG TriBoard TC2X7 V1.0 */

/*
 * Omron corporation (https://www.omron.com)
 */
 #define OMRON_VID			0x0590
 #define OMRON_CS1W_CIF31_PID		0x00b2

/*
 * Acton Research Corp.
 */
+15 −0
Original line number Diff line number Diff line
@@ -253,6 +253,7 @@ static void option_instat_callback(struct urb *urb);
#define QUECTEL_PRODUCT_BG96			0x0296
#define QUECTEL_PRODUCT_EP06			0x0306
#define QUECTEL_PRODUCT_EM05G			0x030a
#define QUECTEL_PRODUCT_EM060K			0x030b
#define QUECTEL_PRODUCT_EM12			0x0512
#define QUECTEL_PRODUCT_RM500Q			0x0800
#define QUECTEL_PRODUCT_EC200S_CN		0x6002
@@ -438,6 +439,8 @@ static void option_instat_callback(struct urb *urb);
#define CINTERION_PRODUCT_MV31_2_RMNET		0x00b9
#define CINTERION_PRODUCT_MV32_WA		0x00f1
#define CINTERION_PRODUCT_MV32_WB		0x00f2
#define CINTERION_PRODUCT_MV32_WA_RMNET		0x00f3
#define CINTERION_PRODUCT_MV32_WB_RMNET		0x00f4

/* Olivetti products */
#define OLIVETTI_VENDOR_ID			0x0b3c
@@ -573,6 +576,10 @@ static void option_instat_callback(struct urb *urb);
#define WETELECOM_PRODUCT_6802			0x6802
#define WETELECOM_PRODUCT_WMD300		0x6803

/* OPPO products */
#define OPPO_VENDOR_ID				0x22d9
#define OPPO_PRODUCT_R11			0x276c


/* Device flags */

@@ -1138,6 +1145,9 @@ static const struct usb_device_id option_ids[] = {
	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EP06, 0xff, 0, 0) },
	{ USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G, 0xff),
	  .driver_info = RSVD(6) | ZLP },
	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K, 0xff, 0x00, 0x40) },
	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K, 0xff, 0xff, 0x30) },
	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K, 0xff, 0xff, 0x40) },
	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM12, 0xff, 0xff, 0xff),
	  .driver_info = RSVD(1) | RSVD(2) | RSVD(3) | RSVD(4) | NUMEP2 },
	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM12, 0xff, 0, 0) },
@@ -1993,8 +2003,12 @@ static const struct usb_device_id option_ids[] = {
	  .driver_info = RSVD(0)},
	{ USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_MV32_WA, 0xff),
	  .driver_info = RSVD(3)},
	{ USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_MV32_WA_RMNET, 0xff),
	  .driver_info = RSVD(0) },
	{ USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_MV32_WB, 0xff),
	  .driver_info = RSVD(3)},
	{ USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_MV32_WB_RMNET, 0xff),
	  .driver_info = RSVD(0) },
	{ USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD100),
	  .driver_info = RSVD(4) },
	{ USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD120),
@@ -2155,6 +2169,7 @@ static const struct usb_device_id option_ids[] = {
	{ USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1404, 0xff) },			/* GosunCn GM500 RNDIS */
	{ USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1405, 0xff) },			/* GosunCn GM500 MBIM */
	{ USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1406, 0xff) },			/* GosunCn GM500 ECM/NCM */
	{ USB_DEVICE_AND_INTERFACE_INFO(OPPO_VENDOR_ID, OPPO_PRODUCT_R11, 0xff, 0xff, 0x30) },
	{ } /* Terminating entry */
};
MODULE_DEVICE_TABLE(usb, option_ids);