USB: serial: cp210x: add minimun baud rate for CP2105 SCI
Quoted 8 lines · Johanna Abrahamsson
From: Johanna Abrahamsson <[email protected]>
This patch adds a minimum baud rate of 2400 for CP2105 SCI
According to the datasheet for CP2105, the SCI supports 2400 as the lowest baud rate. As this is not heeded in the current code, an error message 'failed set req
0x1esize 4 status: -32' when trying to set a lower baud rate such as 300.
Good to hear to you found the root cause of that failed baudrate request.
Quoted 4 lines
Since this is, as far as I can tell, the only cp210x chip with a minimum baud rate higher than 300, I've added a special case to
cp210x_change_speedrather than adding amin_speedfield incp210x_serial_private.
But please do add a min_speed field instead of special casing which tends to make the code harder to read.
Quoted 10 lines
Signed-off-by Johanna Abrahamsson <[email protected]>--- drivers/usb/serial/cp210x.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)drivers/usb/serial/cp210x.c +0
-0
drivers/usb/serial/cp210x.c static void cp210x_change_speed(struct tty_struct *tty, · line 1118
Quoted 9 lines
drivers/usb/serial/cp210x.c +4
-1@@ -1111,9 +1111,12 @@ static void cp210x_change_speed(struct tty_struct *tty,*/ if (priv->use_actual_rate) baud =cp210x_get_actual_rate (serial, baud); -else if (baud <1000000 ) +else if (baud <1000000 ) { +if (priv->partnum ==CP210X_PARTNUM_CP2105 && +cp210x_interface_num (serial) ==1 ) + baud =clamp (baud,2400u , priv->max_speed); baud =cp210x_get_an205_rate (baud);
We already have a clamp in place in cp210x_get_actual_rate() so just add a similar construct to cp210x_get_actual_rate() and amend cp210x_init_max_speed() as needed.
drivers/usb/serial/cp210x.c static void cp210x_change_speed(struct tty_struct *tty, · line 1122
Quoted 5 lines
drivers/usb/serial/cp210x.c +1
-1-else if (baud > priv->max_speed) + }else if (baud > priv->max_speed) baud = priv->max_speed;dev_dbg (&port->dev,"%s - setting baud rate to %u\n" , __func__, baud);
Johan