USB: serial: cp210x: add minimun baud rate for CP2105 SCI
Quoted 36 lines · Johan Hovold
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_speedfield instead of special casing which tends to make the code harder to read.Quoted 15 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 +1
-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 ) {
Quoted 8 lines
drivers/usb/serial/cp210x.c static void cp210x_change_speed(struct tty_struct *tty, · line 1118
Quoted 4 lines
drivers/usb/serial/cp210x.c +3
-0+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 tocp210x_get_actual_rate()and amendcp210x_init_max_speed()as needed.
Or better still, move the clamp from cp210x_get_actual_rate() to above these conditionals and make sure to honour min_speed. Then you can drop the final else-if here too.
Quoted 5 lines
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