Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 89cb9ae2 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull USB fixes from Greg KH:
 "Here are some small USB fixes for 3.11-rc6 that have accumulated.

  Nothing huge, a EHCI fix that solves a much-reported audio USB
  problem, some usb-serial driver endian fixes and other minor fixes, a
  wireless USB oops fix, and two new quirks"

* tag 'usb-3.11-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb:
  USB: keyspan: fix null-deref at disconnect and release
  USB: mos7720: fix broken control requests
  usb: add two quirky touchscreen
  USB: ti_usb_3410_5052: fix big-endian firmware handling
  USB: adutux: fix big-endian device-type reporting
  USB: usbtmc: fix big-endian probe of Rigol devices
  USB: mos7840: fix big-endian probe
  USB-Serial: Fix error handling of usb_wwan
  wusbcore: fix kernel panic when disconnecting a wireless USB->serial device
  USB: EHCI: accept very late isochronous URBs
parents ddea368c ff8a43c1
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -1119,11 +1119,11 @@ static int usbtmc_probe(struct usb_interface *intf,
	/* Determine if it is a Rigol or not */
	data->rigol_quirk = 0;
	dev_dbg(&intf->dev, "Trying to find if device Vendor 0x%04X Product 0x%04X has the RIGOL quirk\n",
		data->usb_dev->descriptor.idVendor,
		data->usb_dev->descriptor.idProduct);
		le16_to_cpu(data->usb_dev->descriptor.idVendor),
		le16_to_cpu(data->usb_dev->descriptor.idProduct));
	for(n = 0; usbtmc_id_quirk[n].idVendor > 0; n++) {
		if ((usbtmc_id_quirk[n].idVendor == data->usb_dev->descriptor.idVendor) &&
		    (usbtmc_id_quirk[n].idProduct == data->usb_dev->descriptor.idProduct)) {
		if ((usbtmc_id_quirk[n].idVendor == le16_to_cpu(data->usb_dev->descriptor.idVendor)) &&
		    (usbtmc_id_quirk[n].idProduct == le16_to_cpu(data->usb_dev->descriptor.idProduct))) {
			dev_dbg(&intf->dev, "Setting this device as having the RIGOL quirk\n");
			data->rigol_quirk = 1;
			break;
+6 −0
Original line number Diff line number Diff line
@@ -78,6 +78,12 @@ static const struct usb_device_id usb_quirk_list[] = {
	{ USB_DEVICE(0x04d8, 0x000c), .driver_info =
			USB_QUIRK_CONFIG_INTF_STRINGS },

	/* CarrolTouch 4000U */
	{ USB_DEVICE(0x04e7, 0x0009), .driver_info = USB_QUIRK_RESET_RESUME },

	/* CarrolTouch 4500U */
	{ USB_DEVICE(0x04e7, 0x0030), .driver_info = USB_QUIRK_RESET_RESUME },

	/* Samsung Android phone modem - ID conflict with SPH-I500 */
	{ USB_DEVICE(0x04e8, 0x6601), .driver_info =
			USB_QUIRK_CONFIG_INTF_STRINGS },
+6 −7
Original line number Diff line number Diff line
@@ -1391,21 +1391,20 @@ iso_stream_schedule (

		/* Behind the scheduling threshold? */
		if (unlikely(start < next)) {
			unsigned now2 = (now - base) & (mod - 1);

			/* USB_ISO_ASAP: Round up to the first available slot */
			if (urb->transfer_flags & URB_ISO_ASAP)
				start += (next - start + period - 1) & -period;

			/*
			 * Not ASAP: Use the next slot in the stream.  If
			 * the entire URB falls before the threshold, fail.
			 * Not ASAP: Use the next slot in the stream,
			 * no matter what.
			 */
			else if (start + span - period < next) {
				ehci_dbg(ehci, "iso urb late %p (%u+%u < %u)\n",
			else if (start + span - period < now2) {
				ehci_dbg(ehci, "iso underrun %p (%u+%u < %u)\n",
						urb, start + base,
						span - period, next + base);
				status = -EXDEV;
				goto fail;
						span - period, now2 + base);
			}
		}

+1 −1
Original line number Diff line number Diff line
@@ -830,7 +830,7 @@ static int adu_probe(struct usb_interface *interface,

	/* let the user know what node this device is now attached to */
	dev_info(&interface->dev, "ADU%d %s now attached to /dev/usb/adutux%d\n",
		 udev->descriptor.idProduct, dev->serial_number,
		 le16_to_cpu(udev->descriptor.idProduct), dev->serial_number,
		 (dev->minor - ADU_MINOR_BASE));
exit:
	dbg(2, " %s : leave, return value %p (dev)", __func__, dev);
+1 −1
Original line number Diff line number Diff line
@@ -2303,7 +2303,7 @@ static int keyspan_startup(struct usb_serial *serial)
	if (d_details == NULL) {
		dev_err(&serial->dev->dev, "%s - unknown product id %x\n",
		    __func__, le16_to_cpu(serial->dev->descriptor.idProduct));
		return 1;
		return -ENODEV;
	}

	/* Setup private data for serial driver */
Loading