Commit 17a0184c authored by Johan Hovold's avatar Johan Hovold
Browse files

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



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>
parent 2988a8ae
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -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;
	}

+12 −1
Original line number Diff line number Diff line
@@ -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:
 *