Commit 411a7dd1 authored by Johan Hovold's avatar Johan Hovold Committed by Khalid Elmously

USB: serial: ir-usb: fix link-speed handling

BugLink: https://bugs.launchpad.net/bugs/1864774

commit 17a0184c upstream.

Commit e0d795e4 ("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: e0d795e4 ("usb: irda: cleanup on ir-usb module")
Cc: stable <stable@vger.kernel.org>     # 2.6.27
Cc: Felipe Balbi <balbi@kernel.org>
Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarKhalid Elmously <khalid.elmously@canonical.com>
Signed-off-by: default avatarKleber Sacilotto de Souza <kleber.souza@canonical.com>
parent 9d8ce127
...@@ -336,34 +336,34 @@ static void ir_set_termios(struct tty_struct *tty, ...@@ -336,34 +336,34 @@ static void ir_set_termios(struct tty_struct *tty,
switch (baud) { switch (baud) {
case 2400: case 2400:
ir_baud = USB_IRDA_BR_2400; ir_baud = USB_IRDA_LS_2400;
break; break;
case 9600: case 9600:
ir_baud = USB_IRDA_BR_9600; ir_baud = USB_IRDA_LS_9600;
break; break;
case 19200: case 19200:
ir_baud = USB_IRDA_BR_19200; ir_baud = USB_IRDA_LS_19200;
break; break;
case 38400: case 38400:
ir_baud = USB_IRDA_BR_38400; ir_baud = USB_IRDA_LS_38400;
break; break;
case 57600: case 57600:
ir_baud = USB_IRDA_BR_57600; ir_baud = USB_IRDA_LS_57600;
break; break;
case 115200: case 115200:
ir_baud = USB_IRDA_BR_115200; ir_baud = USB_IRDA_LS_115200;
break; break;
case 576000: case 576000:
ir_baud = USB_IRDA_BR_576000; ir_baud = USB_IRDA_LS_576000;
break; break;
case 1152000: case 1152000:
ir_baud = USB_IRDA_BR_1152000; ir_baud = USB_IRDA_LS_1152000;
break; break;
case 4000000: case 4000000:
ir_baud = USB_IRDA_BR_4000000; ir_baud = USB_IRDA_LS_4000000;
break; break;
default: default:
ir_baud = USB_IRDA_BR_9600; ir_baud = USB_IRDA_LS_9600;
baud = 9600; baud = 9600;
} }
......
...@@ -118,11 +118,22 @@ struct usb_irda_cs_descriptor { ...@@ -118,11 +118,22 @@ struct usb_irda_cs_descriptor {
* 6 - 115200 bps * 6 - 115200 bps
* 7 - 576000 bps * 7 - 576000 bps
* 8 - 1.152 Mbps * 8 - 1.152 Mbps
* 9 - 5 mbps * 9 - 4 Mbps
* 10..15 - Reserved * 10..15 - Reserved
*/ */
#define USB_IRDA_STATUS_LINK_SPEED 0x0f #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 /* The following is a 4-bit value used only for
* outbound header: * outbound header:
* *
......
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