Commit 17a82716 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

USB: iowarrior: fix up report size handling for some devices

In previous patches that added support for new iowarrior devices, the
handling of the report size was not done correct.

Fix that up and update the copyright date for the driver

Reworked from an original patch written by Christoph Jung.

Fixes: bab5417f ("USB: misc: iowarrior: add support for the 100 device")
Fixes: 5f6f8da2 ("USB: misc: iowarrior: add support for the 28 and 28L devices")
Fixes: 461d8deb ("USB: misc: iowarrior: add support for 2 OEMed devices")
Cc: stable <stable@kernel.org>
Reported-by: default avatarChristoph Jung <jung@codemercs.com>
Link: https://lore.kernel.org/r/20200726094939.1268978-1-gregkh@linuxfoundation.orgSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent e98ba8cc
...@@ -2,8 +2,9 @@ ...@@ -2,8 +2,9 @@
/* /*
* Native support for the I/O-Warrior USB devices * Native support for the I/O-Warrior USB devices
* *
* Copyright (c) 2003-2005 Code Mercenaries GmbH * Copyright (c) 2003-2005, 2020 Code Mercenaries GmbH
* written by Christian Lucht <lucht@codemercs.com> * written by Christian Lucht <lucht@codemercs.com> and
* Christoph Jung <jung@codemercs.com>
* *
* based on * based on
...@@ -802,14 +803,28 @@ static int iowarrior_probe(struct usb_interface *interface, ...@@ -802,14 +803,28 @@ static int iowarrior_probe(struct usb_interface *interface,
/* we have to check the report_size often, so remember it in the endianness suitable for our machine */ /* we have to check the report_size often, so remember it in the endianness suitable for our machine */
dev->report_size = usb_endpoint_maxp(dev->int_in_endpoint); dev->report_size = usb_endpoint_maxp(dev->int_in_endpoint);
if ((dev->interface->cur_altsetting->desc.bInterfaceNumber == 0) &&
((dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56) || /*
(dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56AM) || * Some devices need the report size to be different than the
(dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW28) || * endpoint size.
(dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW28L) || */
(dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW100))) if (dev->interface->cur_altsetting->desc.bInterfaceNumber == 0) {
/* IOWarrior56 has wMaxPacketSize different from report size */ switch (dev->product_id) {
dev->report_size = 7; case USB_DEVICE_ID_CODEMERCS_IOW56:
case USB_DEVICE_ID_CODEMERCS_IOW56AM:
dev->report_size = 7;
break;
case USB_DEVICE_ID_CODEMERCS_IOW28:
case USB_DEVICE_ID_CODEMERCS_IOW28L:
dev->report_size = 4;
break;
case USB_DEVICE_ID_CODEMERCS_IOW100:
dev->report_size = 13;
break;
}
}
/* create the urb and buffer for reading */ /* create the urb and buffer for reading */
dev->int_in_urb = usb_alloc_urb(0, GFP_KERNEL); dev->int_in_urb = usb_alloc_urb(0, GFP_KERNEL);
......
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