Commit aa91def4 authored by Nicolas PLANEL's avatar Nicolas PLANEL Committed by Johan Hovold

USB: ch341: set tty baud speed according to tty struct

The ch341_set_baudrate() function initialize the device baud speed
according to the value on priv->baud_rate. By default the ch341_open() set
it to a hardcoded value (DEFAULT_BAUD_RATE 9600). Unfortunately, the
tty_struct is not initialized with the same default value. (usually 56700)

This means that the tty_struct and the device baud rate generator are not
synchronized after opening the port.

Fixup is done by calling ch341_set_termios() if tty exist.
Remove unnecessary variable priv->baud_rate setup as it's already done by
ch341_port_probe().
Remove unnecessary call to ch341_set_{handshake,baudrate}() in
ch341_open() as there already called in ch341_configure() and
ch341_set_termios()
Signed-off-by: default avatarNicolas PLANEL <nicolas.planel@enovance.com>
Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
parent 675af708
...@@ -84,6 +84,10 @@ struct ch341_private { ...@@ -84,6 +84,10 @@ struct ch341_private {
u8 line_status; /* active status of modem control inputs */ u8 line_status; /* active status of modem control inputs */
}; };
static void ch341_set_termios(struct tty_struct *tty,
struct usb_serial_port *port,
struct ktermios *old_termios);
static int ch341_control_out(struct usb_device *dev, u8 request, static int ch341_control_out(struct usb_device *dev, u8 request,
u16 value, u16 index) u16 value, u16 index)
{ {
...@@ -309,19 +313,12 @@ static int ch341_open(struct tty_struct *tty, struct usb_serial_port *port) ...@@ -309,19 +313,12 @@ static int ch341_open(struct tty_struct *tty, struct usb_serial_port *port)
struct ch341_private *priv = usb_get_serial_port_data(port); struct ch341_private *priv = usb_get_serial_port_data(port);
int r; int r;
priv->baud_rate = DEFAULT_BAUD_RATE;
r = ch341_configure(serial->dev, priv); r = ch341_configure(serial->dev, priv);
if (r) if (r)
goto out; goto out;
r = ch341_set_handshake(serial->dev, priv->line_control); if (tty)
if (r) ch341_set_termios(tty, port, NULL);
goto out;
r = ch341_set_baudrate(serial->dev, priv);
if (r)
goto out;
dev_dbg(&port->dev, "%s - submitting interrupt urb\n", __func__); dev_dbg(&port->dev, "%s - submitting interrupt urb\n", __func__);
r = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); r = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
......
Markdown is supported
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