Commit ba4bbdab authored by Johan Hovold's avatar Johan Hovold
Browse files

USB: serial: cp210x: fix flow-control error handling

Make sure that the driver crtscts state is not updated in the unlikely
event that the flow-control request fails. Not doing so could break RTS

Fixes: 5951b850

 ("USB: serial: cp210x: suppress modem-control errors")
Cc:	# 5.11
Reviewed-by: default avatarGreg Kroah-Hartman <>
Signed-off-by: default avatarJohan Hovold <>
parent 2d9a0070
......@@ -1190,6 +1190,7 @@ static void cp210x_set_flow_control(struct tty_struct *tty,
struct cp210x_flow_ctl flow_ctl;
u32 flow_repl;
u32 ctl_hs;
bool crtscts;
int ret;
......@@ -1249,14 +1250,14 @@ static void cp210x_set_flow_control(struct tty_struct *tty,
flow_repl |= CP210X_SERIAL_RTS_FLOW_CTL;
flow_repl |= CP210X_SERIAL_RTS_INACTIVE;
port_priv->crtscts = true;
crtscts = true;
} else {
if (port_priv->rts)
flow_repl |= CP210X_SERIAL_RTS_ACTIVE;
flow_repl |= CP210X_SERIAL_RTS_INACTIVE;
port_priv->crtscts = false;
crtscts = false;
if (I_IXOFF(tty)) {
......@@ -1279,8 +1280,12 @@ static void cp210x_set_flow_control(struct tty_struct *tty,
flow_ctl.ulControlHandshake = cpu_to_le32(ctl_hs);
flow_ctl.ulFlowReplace = cpu_to_le32(flow_repl);
cp210x_write_reg_block(port, CP210X_SET_FLOW, &flow_ctl,
ret = cp210x_write_reg_block(port, CP210X_SET_FLOW, &flow_ctl,
if (ret)
goto out_unlock;
port_priv->crtscts = crtscts;
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment