lkml.org 
[lkml]   [2019]   [Nov]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 73/95] USB: serial: whiteheat: fix line-speed endianness
    Date
    From: Johan Hovold <johan@kernel.org>

    commit 84968291d7924261c6a0624b9a72f952398e258b upstream.

    Add missing endianness conversion when setting the line speed so that
    this driver might work also on big-endian machines.

    Also use an unsigned format specifier in the corresponding debug
    message.

    Signed-off-by: Johan Hovold <johan@kernel.org>
    Cc: stable <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/20191029102354.2733-3-johan@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/usb/serial/whiteheat.c | 9 ++++++---
    drivers/usb/serial/whiteheat.h | 2 +-
    2 files changed, 7 insertions(+), 4 deletions(-)

    --- a/drivers/usb/serial/whiteheat.c
    +++ b/drivers/usb/serial/whiteheat.c
    @@ -652,6 +652,7 @@ static void firm_setup_port(struct tty_s
    struct device *dev = &port->dev;
    struct whiteheat_port_settings port_settings;
    unsigned int cflag = tty->termios.c_cflag;
    + speed_t baud;

    port_settings.port = port->port_number + 1;

    @@ -712,11 +713,13 @@ static void firm_setup_port(struct tty_s
    dev_dbg(dev, "%s - XON = %2x, XOFF = %2x\n", __func__, port_settings.xon, port_settings.xoff);

    /* get the baud rate wanted */
    - port_settings.baud = tty_get_baud_rate(tty);
    - dev_dbg(dev, "%s - baud rate = %d\n", __func__, port_settings.baud);
    + baud = tty_get_baud_rate(tty);
    + port_settings.baud = cpu_to_le32(baud);
    + dev_dbg(dev, "%s - baud rate = %u\n", __func__, baud);

    /* fixme: should set validated settings */
    - tty_encode_baud_rate(tty, port_settings.baud, port_settings.baud);
    + tty_encode_baud_rate(tty, baud, baud);
    +
    /* handle any settings that aren't specified in the tty structure */
    port_settings.lloop = 0;

    --- a/drivers/usb/serial/whiteheat.h
    +++ b/drivers/usb/serial/whiteheat.h
    @@ -91,7 +91,7 @@ struct whiteheat_simple {

    struct whiteheat_port_settings {
    __u8 port; /* port number (1 to N) */
    - __u32 baud; /* any value 7 - 460800, firmware calculates
    + __le32 baud; /* any value 7 - 460800, firmware calculates
    best fit; arrives little endian */
    __u8 bits; /* 5, 6, 7, or 8 */
    __u8 stop; /* 1 or 2, default 1 (2 = 1.5 if bits = 5) */

    \
     
     \ /
      Last update: 2019-11-04 23:24    [W:4.610 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site