summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohan Hovold <johan@kernel.org>2023-06-04 15:35:04 +0300
committerJohan Hovold <johan@kernel.org>2023-06-07 18:00:23 +0300
commitf4bbae27b32ea0ffb9e25931b9769600e8d8a664 (patch)
tree316888a72d756a75e95bad33f5b9ec58e88783aa
parent6ff58ae17fd9523246a260434133ed9ab7f56df2 (diff)
downloadlinux-f4bbae27b32ea0ffb9e25931b9769600e8d8a664.tar.xz
USB: serial: cp210x: disable break signalling on CP2105 SCI
Only the first UART interface (ECI) on CP2105 supports break signalling. Return an error on requests for break state changes for the second interface (SCI) to avoid transmitting a garbage character and waiting when break is not supported. Tested-by: Corey Minyard <cminyard@mvista.com> Signed-off-by: Johan Hovold <johan@kernel.org>
-rw-r--r--drivers/usb/serial/cp210x.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
index 81e49ed9d147..1e61fe043171 100644
--- a/drivers/usb/serial/cp210x.c
+++ b/drivers/usb/serial/cp210x.c
@@ -1437,8 +1437,14 @@ static int cp210x_tiocmget(struct tty_struct *tty)
static int cp210x_break_ctl(struct tty_struct *tty, int break_state)
{
struct usb_serial_port *port = tty->driver_data;
+ struct cp210x_serial_private *priv = usb_get_serial_data(port->serial);
u16 state;
+ if (priv->partnum == CP210X_PARTNUM_CP2105) {
+ if (cp210x_interface_num(port->serial) == 1)
+ return -ENOTTY;
+ }
+
if (break_state == 0)
state = BREAK_OFF;
else