|
Takashi Iwai |
bc4a20 |
From 979d9cbe75b922ab1695b8ad5576115774f72e62 Mon Sep 17 00:00:00 2001
|
|
Takashi Iwai |
bc4a20 |
From: Johan Hovold <johan@kernel.org>
|
|
Takashi Iwai |
bc4a20 |
Date: Mon, 11 Jan 2021 18:00:19 +0100
|
|
Takashi Iwai |
bc4a20 |
Subject: [PATCH] USB: serial: pl2303: fix line-speed handling on newer chips
|
|
Takashi Iwai |
bc4a20 |
Git-commit: 979d9cbe75b922ab1695b8ad5576115774f72e62
|
|
Takashi Iwai |
bc4a20 |
Patch-mainline: v5.12-rc1
|
|
Takashi Iwai |
bc4a20 |
References: bsc#1186320
|
|
Takashi Iwai |
bc4a20 |
|
|
Takashi Iwai |
bc4a20 |
The latest chip family (HXN) apparently does not support setting the
|
|
Takashi Iwai |
bc4a20 |
line speed using divisors and instead needs to use the direct encoding
|
|
Takashi Iwai |
bc4a20 |
scheme for all rates.
|
|
Takashi Iwai |
bc4a20 |
|
|
Takashi Iwai |
bc4a20 |
This specifically enables 50, 110, 134, 200 bps and other rates not
|
|
Takashi Iwai |
bc4a20 |
supported by the original chip type.
|
|
Takashi Iwai |
bc4a20 |
|
|
Takashi Iwai |
bc4a20 |
Fixes: ebd09f1cd417 ("USB: serial: pl2303: add support for PL2303HXN")
|
|
Takashi Iwai |
bc4a20 |
Cc: stable@vger.kernel.org # 5.5
|
|
Takashi Iwai |
bc4a20 |
Cc: Charles Yeh <charlesyeh522@gmail.com>
|
|
Takashi Iwai |
bc4a20 |
Signed-off-by: Johan Hovold <johan@kernel.org>
|
|
Takashi Iwai |
bc4a20 |
Acked-by: Takashi Iwai <tiwai@suse.de>
|
|
Takashi Iwai |
bc4a20 |
|
|
Takashi Iwai |
bc4a20 |
---
|
|
Takashi Iwai |
bc4a20 |
drivers/usb/serial/pl2303.c | 8 +++++++-
|
|
Takashi Iwai |
bc4a20 |
1 file changed, 7 insertions(+), 1 deletion(-)
|
|
Takashi Iwai |
bc4a20 |
|
|
Takashi Iwai |
bc4a20 |
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
|
|
Takashi Iwai |
bc4a20 |
index be8067017eaa..29dda60e3bcd 100644
|
|
Takashi Iwai |
bc4a20 |
--- a/drivers/usb/serial/pl2303.c
|
|
Takashi Iwai |
bc4a20 |
+++ b/drivers/usb/serial/pl2303.c
|
|
Takashi Iwai |
bc4a20 |
@@ -183,6 +183,7 @@ struct pl2303_type_data {
|
|
Takashi Iwai |
bc4a20 |
speed_t max_baud_rate;
|
|
Takashi Iwai |
bc4a20 |
unsigned long quirks;
|
|
Takashi Iwai |
bc4a20 |
unsigned int no_autoxonxoff:1;
|
|
Takashi Iwai |
bc4a20 |
+ unsigned int no_divisors:1;
|
|
Takashi Iwai |
bc4a20 |
};
|
|
Takashi Iwai |
bc4a20 |
|
|
Takashi Iwai |
bc4a20 |
struct pl2303_serial_private {
|
|
Takashi Iwai |
bc4a20 |
@@ -209,6 +210,7 @@ static const struct pl2303_type_data pl2303_type_data[TYPE_COUNT] = {
|
|
Takashi Iwai |
bc4a20 |
},
|
|
Takashi Iwai |
bc4a20 |
[TYPE_HXN] = {
|
|
Takashi Iwai |
bc4a20 |
.max_baud_rate = 12000000,
|
|
Takashi Iwai |
bc4a20 |
+ .no_divisors = true,
|
|
Takashi Iwai |
bc4a20 |
},
|
|
Takashi Iwai |
bc4a20 |
};
|
|
Takashi Iwai |
bc4a20 |
|
|
Takashi Iwai |
bc4a20 |
@@ -571,8 +573,12 @@ static void pl2303_encode_baud_rate(struct tty_struct *tty,
|
|
Takashi Iwai |
bc4a20 |
baud = min_t(speed_t, baud, spriv->type->max_baud_rate);
|
|
Takashi Iwai |
bc4a20 |
/*
|
|
Takashi Iwai |
bc4a20 |
* Use direct method for supported baud rates, otherwise use divisors.
|
|
Takashi Iwai |
bc4a20 |
+ * Newer chip types do not support divisor encoding.
|
|
Takashi Iwai |
bc4a20 |
*/
|
|
Takashi Iwai |
bc4a20 |
- baud_sup = pl2303_get_supported_baud_rate(baud);
|
|
Takashi Iwai |
bc4a20 |
+ if (spriv->type->no_divisors)
|
|
Takashi Iwai |
bc4a20 |
+ baud_sup = baud;
|
|
Takashi Iwai |
bc4a20 |
+ else
|
|
Takashi Iwai |
bc4a20 |
+ baud_sup = pl2303_get_supported_baud_rate(baud);
|
|
Takashi Iwai |
bc4a20 |
|
|
Takashi Iwai |
bc4a20 |
if (baud == baud_sup)
|
|
Takashi Iwai |
bc4a20 |
baud = pl2303_encode_baud_rate_direct(buf, baud);
|
|
Takashi Iwai |
bc4a20 |
--
|
|
Takashi Iwai |
bc4a20 |
2.26.2
|
|
Takashi Iwai |
bc4a20 |
|