diff mbox series

USB: serial: pl2303: fix HX type detection

Message ID 20210730122156.718-1-johan@kernel.org (mailing list archive)
State Accepted
Commit 1e9faef4d26de33bd6b5018695996e7394119e5b
Headers show
Series USB: serial: pl2303: fix HX type detection | expand

Commit Message

Johan Hovold July 30, 2021, 12:21 p.m. UTC
The device release number for HX-type devices is configurable in
EEPROM/OTPROM and cannot be used reliably for type detection.

Assume all (non-H) devices with bcdUSB 1.1 and unknown bcdDevice to be
of HX type while adding a bcdDevice check for HXD and TB (1.1 and 2.0,
respectively).

Reported-by: Chris <chris@cyber-anlage.de>
Fixes: 8a7bf7510d1f ("USB: serial: pl2303: amend and tighten type detection")
Cc: stable@vger.kernel.org	# 5.13
Signed-off-by: Johan Hovold <johan@kernel.org>
---
 drivers/usb/serial/pl2303.c | 41 ++++++++++++++++++++++---------------
 1 file changed, 25 insertions(+), 16 deletions(-)

Comments

Greg KH July 30, 2021, 12:29 p.m. UTC | #1
On Fri, Jul 30, 2021 at 02:21:56PM +0200, Johan Hovold wrote:
> The device release number for HX-type devices is configurable in
> EEPROM/OTPROM and cannot be used reliably for type detection.
> 
> Assume all (non-H) devices with bcdUSB 1.1 and unknown bcdDevice to be
> of HX type while adding a bcdDevice check for HXD and TB (1.1 and 2.0,
> respectively).
> 
> Reported-by: Chris <chris@cyber-anlage.de>
> Fixes: 8a7bf7510d1f ("USB: serial: pl2303: amend and tighten type detection")
> Cc: stable@vger.kernel.org	# 5.13
> Signed-off-by: Johan Hovold <johan@kernel.org>
> ---
>  drivers/usb/serial/pl2303.c | 41 ++++++++++++++++++++++---------------
>  1 file changed, 25 insertions(+), 16 deletions(-)
> 

Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Johan Hovold July 30, 2021, 3:11 p.m. UTC | #2
On Fri, Jul 30, 2021 at 02:29:55PM +0200, Greg Kroah-Hartman wrote:
> On Fri, Jul 30, 2021 at 02:21:56PM +0200, Johan Hovold wrote:
> > The device release number for HX-type devices is configurable in
> > EEPROM/OTPROM and cannot be used reliably for type detection.
> > 
> > Assume all (non-H) devices with bcdUSB 1.1 and unknown bcdDevice to be
> > of HX type while adding a bcdDevice check for HXD and TB (1.1 and 2.0,
> > respectively).
> > 
> > Reported-by: Chris <chris@cyber-anlage.de>
> > Fixes: 8a7bf7510d1f ("USB: serial: pl2303: amend and tighten type detection")
> > Cc: stable@vger.kernel.org	# 5.13
> > Signed-off-by: Johan Hovold <johan@kernel.org>
> > ---
> >  drivers/usb/serial/pl2303.c | 41 ++++++++++++++++++++++---------------
> >  1 file changed, 25 insertions(+), 16 deletions(-)
> > 
> 
> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Thanks for reviewing. Now applied.

Johan
diff mbox series

Patch

diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
index 2f2f5047452b..17601e32083e 100644
--- a/drivers/usb/serial/pl2303.c
+++ b/drivers/usb/serial/pl2303.c
@@ -418,24 +418,33 @@  static int pl2303_detect_type(struct usb_serial *serial)
 	bcdDevice = le16_to_cpu(desc->bcdDevice);
 	bcdUSB = le16_to_cpu(desc->bcdUSB);
 
-	switch (bcdDevice) {
-	case 0x100:
-		/*
-		 * Assume it's an HXN-type if the device doesn't support the old read
-		 * request value.
-		 */
-		if (bcdUSB == 0x200 && !pl2303_supports_hx_status(serial))
-			return TYPE_HXN;
+	switch (bcdUSB) {
+	case 0x110:
+		switch (bcdDevice) {
+		case 0x300:
+			return TYPE_HX;
+		case 0x400:
+			return TYPE_HXD;
+		default:
+			return TYPE_HX;
+		}
 		break;
-	case 0x300:
-		if (bcdUSB == 0x200)
+	case 0x200:
+		switch (bcdDevice) {
+		case 0x100:
+			/*
+			 * Assume it's an HXN-type if the device doesn't
+			 * support the old read request value.
+			 */
+			if (!pl2303_supports_hx_status(serial))
+				return TYPE_HXN;
+			break;
+		case 0x300:
 			return TYPE_TA;
-
-		return TYPE_HX;
-	case 0x400:
-		return TYPE_HXD;
-	case 0x500:
-		return TYPE_TB;
+		case 0x500:
+			return TYPE_TB;
+		}
+		break;
 	}
 
 	dev_err(&serial->interface->dev,