lkml.org 
[lkml]   [2017]   [Mar]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.16 196/370] USB: ch341: set tty baud speed according to tty struct
    3.16.42-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Nicolas PLANEL <nicolas.planel@enovance.com>

    commit aa91def41a7bb1fd65492934ce6bea19202b6080 upstream.

    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: Nicolas PLANEL <nicolas.planel@enovance.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    drivers/usb/serial/ch341.c | 15 ++++++---------
    1 file changed, 6 insertions(+), 9 deletions(-)

    diff --git a/drivers/usb/serial/ch341.c b/drivers/usb/serial/ch341.c
    index 2d72aa3564a3..ede4f5fcfadd 100644
    --- a/drivers/usb/serial/ch341.c
    +++ b/drivers/usb/serial/ch341.c
    @@ -84,6 +84,10 @@ struct ch341_private {
    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,
    u16 value, u16 index)
    {
    @@ -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);
    int r;

    - priv->baud_rate = DEFAULT_BAUD_RATE;
    -
    r = ch341_configure(serial->dev, priv);
    if (r)
    goto out;

    - r = ch341_set_handshake(serial->dev, priv->line_control);
    - if (r)
    - goto out;
    -
    - r = ch341_set_baudrate(serial->dev, priv);
    - if (r)
    - goto out;
    + if (tty)
    + ch341_set_termios(tty, port, NULL);

    dev_dbg(&port->dev, "%s - submitting interrupt urb\n", __func__);
    r = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
    \
     
     \ /
      Last update: 2017-03-10 13:38    [W:2.551 / U:0.816 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site