| From 84968291d7924261c6a0624b9a72f952398e258b Mon Sep 17 00:00:00 2001 |
| From: Johan Hovold <johan@kernel.org> |
| Date: Tue, 29 Oct 2019 11:23:54 +0100 |
| Subject: USB: serial: whiteheat: fix line-speed endianness |
| |
| 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) */ |