Message ID | 20200122101530.29176-3-johan@kernel.org (mailing list archive) |
---|---|
State | Mainlined |
Commit | 17a0184ca17e288decdca8b2841531e34d49285f |
Headers | show |
Series | USB: serial: ir-usb fixes and cleanups | expand |
On Wed, Jan 22, 2020 at 11:15:27AM +0100, Johan Hovold wrote: > 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). People still use this driver/hardware? And this wasn't found until now? wow... > Fixes: e0d795e4f36c ("usb: irda: cleanup on ir-usb module") > Cc: stable <stable@vger.kernel.org> # 2.6.27 > Cc: Felipe Balbi <balbi@kernel.org> > Signed-off-by: Johan Hovold <johan@kernel.org> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
On Wed, Jan 22, 2020 at 02:24:50PM +0100, Greg Kroah-Hartman wrote: > On Wed, Jan 22, 2020 at 11:15:27AM +0100, Johan Hovold wrote: > > 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). > > People still use this driver/hardware? And this wasn't found until now? > wow... Good question. I was considering just removing the driver, but since it would have continued to work on low and default link speed I figured I better just fix it up. > > Fixes: e0d795e4f36c ("usb: irda: cleanup on ir-usb module") > > Cc: stable <stable@vger.kernel.org> # 2.6.27 > > Cc: Felipe Balbi <balbi@kernel.org> > > Signed-off-by: Johan Hovold <johan@kernel.org> > > > Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Thanks for reviewing. Johan
diff --git a/drivers/usb/serial/ir-usb.c b/drivers/usb/serial/ir-usb.c index c3b06fc5a7f0..26eab1307165 100644 --- a/drivers/usb/serial/ir-usb.c +++ b/drivers/usb/serial/ir-usb.c @@ -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; } diff --git a/include/linux/usb/irda.h b/include/linux/usb/irda.h index 396d2b043e64..556a801efce3 100644 --- a/include/linux/usb/irda.h +++ b/include/linux/usb/irda.h @@ -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: *
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> Signed-off-by: Johan Hovold <johan@kernel.org> --- drivers/usb/serial/ir-usb.c | 20 ++++++++++---------- include/linux/usb/irda.h | 13 ++++++++++++- 2 files changed, 22 insertions(+), 11 deletions(-)