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

Commit fefb8275 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull USB fixes from Greg KH:
 "Here are a number of USB fixes for 3.15-rc3.  The majority are gadget
  fixes, as we didn't get any of those in for 3.15-rc2.  The others are
  all over the place, and there's a number of new device id addtions as
  well."

* tag 'usb-3.15-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (35 commits)
  usb: option: add and update a number of CMOTech devices
  usb: option: add Alcatel L800MA
  usb: option: add Olivetti Olicard 500
  usb: qcserial: add Sierra Wireless MC7305/MC7355
  usb: qcserial: add Sierra Wireless MC73xx
  usb: qcserial: add Sierra Wireless EM7355
  USB: io_ti: fix firmware download on big-endian machines
  usb/xhci: fix compilation warning when !CONFIG_PCI && !CONFIG_PM
  xhci: extend quirk for Renesas cards
  xhci: Switch Intel Lynx Point ports to EHCI on shutdown.
  usb: xhci: Prefer endpoint context dequeue pointer over stopped_trb
  phy: core: make NULL a valid phy reference if !CONFIG_GENERIC_PHY
  phy: fix kernel oops in phy_lookup()
  phy: restore OMAP_CONTROL_PHY dependencies
  phy: exynos: fix building as a module
  USB: serial: fix sysfs-attribute removal deadlock
  usb: wusbcore: fix panic in wusbhc_chid_set
  usb: wusbcore: convert nested lock to use spin_lock instead of spin_lock_irq
  uwb: don't call spin_unlock_irq in a USB completion handler
  usb: chipidea: coordinate usb phy initialization for different phy type
  ...
parents e9dba837 34f972d6
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ config PHY_MVEBU_SATA

config OMAP_CONTROL_PHY
	tristate "OMAP CONTROL PHY Driver"
	depends on ARCH_OMAP2PLUS || COMPILE_TEST
	help
	  Enable this to add support for the PHY part present in the control
	  module. This driver has API to power on the USB2 PHY and to write to
+5 −4
Original line number Diff line number Diff line
@@ -13,8 +13,9 @@ obj-$(CONFIG_TI_PIPE3) += phy-ti-pipe3.o
obj-$(CONFIG_TWL4030_USB)		+= phy-twl4030-usb.o
obj-$(CONFIG_PHY_EXYNOS5250_SATA)	+= phy-exynos5250-sata.o
obj-$(CONFIG_PHY_SUN4I_USB)		+= phy-sun4i-usb.o
obj-$(CONFIG_PHY_SAMSUNG_USB2)		+= phy-samsung-usb2.o
obj-$(CONFIG_PHY_EXYNOS4210_USB2)	+= phy-exynos4210-usb2.o
obj-$(CONFIG_PHY_EXYNOS4X12_USB2)	+= phy-exynos4x12-usb2.o
obj-$(CONFIG_PHY_EXYNOS5250_USB2)	+= phy-exynos5250-usb2.o
obj-$(CONFIG_PHY_SAMSUNG_USB2)		+= phy-exynos-usb2.o
phy-exynos-usb2-y			+= phy-samsung-usb2.o
phy-exynos-usb2-$(CONFIG_PHY_EXYNOS4210_USB2)	+= phy-exynos4210-usb2.o
phy-exynos-usb2-$(CONFIG_PHY_EXYNOS4X12_USB2)	+= phy-exynos4x12-usb2.o
phy-exynos-usb2-$(CONFIG_PHY_EXYNOS5250_USB2)	+= phy-exynos5250-usb2.o
obj-$(CONFIG_PHY_XGENE)			+= phy-xgene.o
+3 −0
Original line number Diff line number Diff line
@@ -64,6 +64,9 @@ static struct phy *phy_lookup(struct device *device, const char *port)
	class_dev_iter_init(&iter, phy_class, NULL, NULL);
	while ((dev = class_dev_iter_next(&iter))) {
		phy = to_phy(dev);

		if (!phy->init_data)
			continue;
		count = phy->init_data->num_consumers;
		consumers = phy->init_data->consumers;
		while (count--) {
+34 −3
Original line number Diff line number Diff line
@@ -276,6 +276,39 @@ static void hw_phymode_configure(struct ci_hdrc *ci)
	}
}

/**
 * ci_usb_phy_init: initialize phy according to different phy type
 * @ci: the controller
  *
 * This function returns an error code if usb_phy_init has failed
 */
static int ci_usb_phy_init(struct ci_hdrc *ci)
{
	int ret;

	switch (ci->platdata->phy_mode) {
	case USBPHY_INTERFACE_MODE_UTMI:
	case USBPHY_INTERFACE_MODE_UTMIW:
	case USBPHY_INTERFACE_MODE_HSIC:
		ret = usb_phy_init(ci->transceiver);
		if (ret)
			return ret;
		hw_phymode_configure(ci);
		break;
	case USBPHY_INTERFACE_MODE_ULPI:
	case USBPHY_INTERFACE_MODE_SERIAL:
		hw_phymode_configure(ci);
		ret = usb_phy_init(ci->transceiver);
		if (ret)
			return ret;
		break;
	default:
		ret = usb_phy_init(ci->transceiver);
	}

	return ret;
}

/**
 * hw_device_reset: resets chip (execute without interruption)
 * @ci: the controller
@@ -543,8 +576,6 @@ static int ci_hdrc_probe(struct platform_device *pdev)
		return -ENODEV;
	}

	hw_phymode_configure(ci);

	if (ci->platdata->phy)
		ci->transceiver = ci->platdata->phy;
	else
@@ -564,7 +595,7 @@ static int ci_hdrc_probe(struct platform_device *pdev)
		return -EPROBE_DEFER;
	}

	ret = usb_phy_init(ci->transceiver);
	ret = ci_usb_phy_init(ci);
	if (ret) {
		dev_err(dev, "unable to init phy: %d\n", ret);
		return ret;
+1 −1
Original line number Diff line number Diff line
@@ -821,6 +821,7 @@ static void dwc3_complete(struct device *dev)

	spin_lock_irqsave(&dwc->lock, flags);

	dwc3_event_buffers_setup(dwc);
	switch (dwc->dr_mode) {
	case USB_DR_MODE_PERIPHERAL:
	case USB_DR_MODE_OTG:
@@ -828,7 +829,6 @@ static void dwc3_complete(struct device *dev)
		/* FALLTHROUGH */
	case USB_DR_MODE_HOST:
	default:
		dwc3_event_buffers_setup(dwc);
		break;
	}

Loading