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

Commit 41c8c535 authored by Linus Torvalds's avatar Linus Torvalds
Browse files


Pull USB fixes from Greg Kroah-Hartman:
 "Here are a bunch of tiny fixes for the USB core and drivers for
  3.5-rc3

  A bunch of gadget fixes, and new device ids, as well as some fixes for
  a number of different regressions that have been reported recently.
  We also fixed some PCI host controllers to resolve a long-standing bug
  with a whole class of host controllers that have been plaguing people
  for a number of kernel releases, preventing their systems from
  suspending properly.

  Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org&gt;">

* tag 'usb-3.5-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (41 commits)
  USB: fix gathering of interface associations
  usb: ehci-sh: fix illegal phy_init() running when platform_data is NULL
  usb: cdc-acm: fix devices not unthrottled on open
  Fix OMAP EHCI suspend/resume failure (i693)
  USB: ohci-hub: Mark ohci_finish_controller_resume() as __maybe_unused
  usb: use usb_serial_put in usb_serial_probe errors
  USB: EHCI: Fix build warning in xilinx ehci driver
  USB: fix PS3 EHCI systems
  xHCI: Increase the timeout for controller save/restore state operation
  xhci: Don't free endpoints in xhci_mem_cleanup()
  xhci: Fix invalid loop check in xhci_free_tt_info()
  xhci: Fix error path return value.
  USB: Checking the wrong variable in usb_disable_lpm()
  usb-storage: Add 090c:1000 to unusal-devs
  USB: serial-generic: use a single set of device IDs
  USB: serial: Enforce USB driver and USB serial driver match
  USB: add NO_D3_DURING_SLEEP flag and revert 151b6128
  USB: option: add more YUGA device ids
  USB: mos7840: Fix compilation of usb serial driver
  USB: option: fix memory leak
  ...
parents 8e53ed10 b3a3dd07
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -1744,6 +1744,11 @@ int pci_prepare_to_sleep(struct pci_dev *dev)
	if (target_state == PCI_POWER_ERROR)
	if (target_state == PCI_POWER_ERROR)
		return -EIO;
		return -EIO;


	/* Some devices mustn't be in D3 during system sleep */
	if (target_state == PCI_D3hot &&
			(dev->dev_flags & PCI_DEV_FLAGS_NO_D3_DURING_SLEEP))
		return 0;

	pci_enable_wake(dev, target_state, device_may_wakeup(&dev->dev));
	pci_enable_wake(dev, target_state, device_may_wakeup(&dev->dev));


	error = pci_set_power_state(dev, target_state);
	error = pci_set_power_state(dev, target_state);
+26 −0
Original line number Original line Diff line number Diff line
@@ -2929,6 +2929,32 @@ static void __devinit disable_igfx_irq(struct pci_dev *dev)
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0102, disable_igfx_irq);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0102, disable_igfx_irq);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq);


/*
 * The Intel 6 Series/C200 Series chipset's EHCI controllers on many
 * ASUS motherboards will cause memory corruption or a system crash
 * if they are in D3 while the system is put into S3 sleep.
 */
static void __devinit asus_ehci_no_d3(struct pci_dev *dev)
{
	const char *sys_info;
	static const char good_Asus_board[] = "P8Z68-V";

	if (dev->dev_flags & PCI_DEV_FLAGS_NO_D3_DURING_SLEEP)
		return;
	if (dev->subsystem_vendor != PCI_VENDOR_ID_ASUSTEK)
		return;
	sys_info = dmi_get_system_info(DMI_BOARD_NAME);
	if (sys_info && memcmp(sys_info, good_Asus_board,
			sizeof(good_Asus_board) - 1) == 0)
		return;

	dev_info(&dev->dev, "broken D3 during system sleep on ASUS\n");
	dev->dev_flags |= PCI_DEV_FLAGS_NO_D3_DURING_SLEEP;
	device_set_wakeup_capable(&dev->dev, false);
}
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1c26, asus_ehci_no_d3);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1c2d, asus_ehci_no_d3);

static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f,
static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f,
			  struct pci_fixup *end)
			  struct pci_fixup *end)
{
{
+8 −0
Original line number Original line Diff line number Diff line
@@ -567,6 +567,14 @@ static int acm_port_activate(struct tty_port *port, struct tty_struct *tty)


	usb_autopm_put_interface(acm->control);
	usb_autopm_put_interface(acm->control);


	/*
	 * Unthrottle device in case the TTY was closed while throttled.
	 */
	spin_lock_irq(&acm->read_lock);
	acm->throttled = 0;
	acm->throttle_req = 0;
	spin_unlock_irq(&acm->read_lock);

	if (acm_submit_read_urbs(acm, GFP_KERNEL))
	if (acm_submit_read_urbs(acm, GFP_KERNEL))
		goto error_submit_read_urbs;
		goto error_submit_read_urbs;


+9 −0
Original line number Original line Diff line number Diff line
@@ -55,6 +55,15 @@ static const struct usb_device_id wdm_ids[] = {
		.bInterfaceSubClass = 1,
		.bInterfaceSubClass = 1,
		.bInterfaceProtocol = 9, /* NOTE: CDC ECM control interface! */
		.bInterfaceProtocol = 9, /* NOTE: CDC ECM control interface! */
	},
	},
	{
		 /* Vodafone/Huawei K5005 (12d1:14c8) and similar modems */
		.match_flags        = USB_DEVICE_ID_MATCH_VENDOR |
				      USB_DEVICE_ID_MATCH_INT_INFO,
		.idVendor           = HUAWEI_VENDOR_ID,
		.bInterfaceClass    = USB_CLASS_VENDOR_SPEC,
		.bInterfaceSubClass = 1,
		.bInterfaceProtocol = 57, /* NOTE: CDC ECM control interface! */
	},
	{ }
	{ }
};
};


+0 −9
Original line number Original line Diff line number Diff line
@@ -493,15 +493,6 @@ static int hcd_pci_suspend_noirq(struct device *dev)


	pci_save_state(pci_dev);
	pci_save_state(pci_dev);


	/*
	 * Some systems crash if an EHCI controller is in D3 during
	 * a sleep transition.  We have to leave such controllers in D0.
	 */
	if (hcd->broken_pci_sleep) {
		dev_dbg(dev, "Staying in PCI D0\n");
		return retval;
	}

	/* If the root hub is dead rather than suspended, disallow remote
	/* If the root hub is dead rather than suspended, disallow remote
	 * wakeup.  usb_hc_died() should ensure that both hosts are marked as
	 * wakeup.  usb_hc_died() should ensure that both hosts are marked as
	 * dying, so we only need to check the primary roothub.
	 * dying, so we only need to check the primary roothub.
Loading