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

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.org


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent e98ba8cc
Loading
Loading
Loading
Loading
+25 −10
Original line number Original line Diff line number Diff line
@@ -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,


	/* 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) {
		case USB_DEVICE_ID_CODEMERCS_IOW56:
		case USB_DEVICE_ID_CODEMERCS_IOW56AM:
			dev->report_size = 7;
			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);