]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
USB: serial: ir-usb: fix link-speed handling
authorJohan Hovold <johan@kernel.org>
Wed, 22 Jan 2020 10:15:27 +0000 (11:15 +0100)
committerKhalid Elmously <khalid.elmously@canonical.com>
Fri, 6 Mar 2020 07:13:20 +0000 (02:13 -0500)
BugLink: https://bugs.launchpad.net/bugs/1864904
commit 17a0184ca17e288decdca8b2841531e34d49285f upstream.

Commit e0d795e4f36c ("usb: irda: cleanup on ir-usb module") added a USB
IrDA header with common defines, but mistakingly switched to using the
class-descriptor baud-rate bitmask values for the outbound header.

This broke link-speed handling for rates above 9600 baud, but a device
would also be able to operate at the default 9600 baud until a
link-speed request was issued (e.g. using the TCGETS ioctl).

Fixes: e0d795e4f36c ("usb: irda: cleanup on ir-usb module")
Cc: stable <stable@vger.kernel.org> # 2.6.27
Cc: Felipe Balbi <balbi@kernel.org>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
drivers/usb/serial/ir-usb.c
include/linux/usb/irda.h

index 5db0996a08cee24ea80b4e1574566b0ce1c75889..4256d725586d5fe3112312857b2bb32e6cf32107 100644 (file)
@@ -335,34 +335,34 @@ static void ir_set_termios(struct tty_struct *tty,
 
        switch (baud) {
        case 2400:
-               ir_baud = USB_IRDA_BR_2400;
+               ir_baud = USB_IRDA_LS_2400;
                break;
        case 9600:
-               ir_baud = USB_IRDA_BR_9600;
+               ir_baud = USB_IRDA_LS_9600;
                break;
        case 19200:
-               ir_baud = USB_IRDA_BR_19200;
+               ir_baud = USB_IRDA_LS_19200;
                break;
        case 38400:
-               ir_baud = USB_IRDA_BR_38400;
+               ir_baud = USB_IRDA_LS_38400;
                break;
        case 57600:
-               ir_baud = USB_IRDA_BR_57600;
+               ir_baud = USB_IRDA_LS_57600;
                break;
        case 115200:
-               ir_baud = USB_IRDA_BR_115200;
+               ir_baud = USB_IRDA_LS_115200;
                break;
        case 576000:
-               ir_baud = USB_IRDA_BR_576000;
+               ir_baud = USB_IRDA_LS_576000;
                break;
        case 1152000:
-               ir_baud = USB_IRDA_BR_1152000;
+               ir_baud = USB_IRDA_LS_1152000;
                break;
        case 4000000:
-               ir_baud = USB_IRDA_BR_4000000;
+               ir_baud = USB_IRDA_LS_4000000;
                break;
        default:
-               ir_baud = USB_IRDA_BR_9600;
+               ir_baud = USB_IRDA_LS_9600;
                baud = 9600;
        }
 
index 396d2b043e6476fe98c578eff331a36aa4d8ba61..556a801efce30163fca9588a6f6a2d4d9d17d8fe 100644 (file)
@@ -119,11 +119,22 @@ struct usb_irda_cs_descriptor {
  * 6 - 115200 bps
  * 7 - 576000 bps
  * 8 - 1.152 Mbps
- * 9 - 5 mbps
+ * 9 - 4 Mbps
  * 10..15 - Reserved
  */
 #define USB_IRDA_STATUS_LINK_SPEED     0x0f
 
+#define USB_IRDA_LS_NO_CHANGE          0
+#define USB_IRDA_LS_2400               1
+#define USB_IRDA_LS_9600               2
+#define USB_IRDA_LS_19200              3
+#define USB_IRDA_LS_38400              4
+#define USB_IRDA_LS_57600              5
+#define USB_IRDA_LS_115200             6
+#define USB_IRDA_LS_576000             7
+#define USB_IRDA_LS_1152000            8
+#define USB_IRDA_LS_4000000            9
+
 /* The following is a 4-bit value used only for
  * outbound header:
  *