diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-13 20:07:21 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-13 20:07:21 -0400 |
| commit | 42e3a58b028e0e51746f596a11abfec01cd1c5c4 (patch) | |
| tree | b2dd1e8730359dc312519bcdaed9c52bae622990 /drivers/phy | |
| parent | 4fd48b45ffc4addd3c2963448b05417aa14abbf7 (diff) | |
| parent | 00fe52deb45b1a5ef42b0aa82e632e2df012eddc (diff) | |
Merge tag 'usb-4.1-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
Pull USB driver updates from Greg KH:
"Here's the big USB (and PHY) driver patchset for 4.1-rc1.
Everything here has been in linux-next, and the full details are below
in the shortlog. Nothing major, just the normal round of new
drivers,api updates, and other changes, mostly in the USB gadget area,
as usual"
* tag 'usb-4.1-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (252 commits)
drivers/usb/core: devio.c: Removed an uneeded space before tab
usb: dwc2: host: sleep USB_RESUME_TIMEOUT during resume
usb: chipidea: debug: add low power mode check before print registers
usb: chipidea: udc: bypass pullup DP when gadget connect in OTG fsm mode
usb: core: hub: use new USB_RESUME_TIMEOUT
usb: isp1760: hcd: use new USB_RESUME_TIMEOUT
usb: dwc2: hcd: use new USB_RESUME_TIMEOUT
usb: host: sl811: use new USB_RESUME_TIMEOUT
usb: host: r8a66597: use new USB_RESUME_TIMEOUT
usb: host: oxu210hp: use new USB_RESUME_TIMEOUT
usb: host: fusbh200: use new USB_RESUME_TIMEOUT
usb: host: fotg210: use new USB_RESUME_TIMEOUT
usb: host: isp116x: use new USB_RESUME_TIMEOUT
usb: musb: use new USB_RESUME_TIMEOUT
usb: host: uhci: use new USB_RESUME_TIMEOUT
usb: host: ehci: use new USB_RESUME_TIMEOUT
usb: host: xhci: use new USB_RESUME_TIMEOUT
usb: define a generic USB_RESUME_TIMEOUT macro
usb: musb: dsps: fix build on i386 when COMPILE_TEST is set
ehci-hub: use USB_DT_HUB
...
Diffstat (limited to 'drivers/phy')
| -rw-r--r-- | drivers/phy/Kconfig | 18 | ||||
| -rw-r--r-- | drivers/phy/Makefile | 2 | ||||
| -rw-r--r-- | drivers/phy/phy-berlin-sata.c | 2 | ||||
| -rw-r--r-- | drivers/phy/phy-berlin-usb.c | 19 | ||||
| -rw-r--r-- | drivers/phy/phy-dm816x-usb.c | 290 | ||||
| -rw-r--r-- | drivers/phy/phy-exynos5-usbdrd.c | 10 | ||||
| -rw-r--r-- | drivers/phy/phy-miphy28lp.c | 5 | ||||
| -rw-r--r-- | drivers/phy/phy-miphy365x.c | 14 | ||||
| -rw-r--r-- | drivers/phy/phy-omap-control.c | 10 | ||||
| -rw-r--r-- | drivers/phy/phy-omap-usb2.c | 6 | ||||
| -rw-r--r-- | drivers/phy/phy-qcom-ufs.c | 33 | ||||
| -rw-r--r-- | drivers/phy/phy-samsung-usb2.c | 10 | ||||
| -rw-r--r-- | drivers/phy/phy-spear1310-miphy.c | 4 | ||||
| -rw-r--r-- | drivers/phy/phy-spear1340-miphy.c | 4 | ||||
| -rw-r--r-- | drivers/phy/phy-stih41x-usb.c | 8 | ||||
| -rw-r--r-- | drivers/phy/phy-sun9i-usb.c | 202 | ||||
| -rw-r--r-- | drivers/phy/phy-ti-pipe3.c | 9 | ||||
| -rw-r--r-- | drivers/phy/phy-xgene.c | 23 |
18 files changed, 580 insertions, 89 deletions
diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig index 2962de205ba7..a53bd5b52df9 100644 --- a/drivers/phy/Kconfig +++ b/drivers/phy/Kconfig | |||
| @@ -35,6 +35,13 @@ config ARMADA375_USBCLUSTER_PHY | |||
| 35 | depends on OF | 35 | depends on OF |
| 36 | select GENERIC_PHY | 36 | select GENERIC_PHY |
| 37 | 37 | ||
| 38 | config PHY_DM816X_USB | ||
| 39 | tristate "TI dm816x USB PHY driver" | ||
| 40 | depends on ARCH_OMAP2PLUS | ||
| 41 | select GENERIC_PHY | ||
| 42 | help | ||
| 43 | Enable this for dm816x USB to work. | ||
| 44 | |||
| 38 | config PHY_EXYNOS_MIPI_VIDEO | 45 | config PHY_EXYNOS_MIPI_VIDEO |
| 39 | tristate "S5P/EXYNOS SoC series MIPI CSI-2/DSI PHY driver" | 46 | tristate "S5P/EXYNOS SoC series MIPI CSI-2/DSI PHY driver" |
| 40 | depends on HAS_IOMEM | 47 | depends on HAS_IOMEM |
| @@ -174,6 +181,17 @@ config PHY_SUN4I_USB | |||
| 174 | This driver controls the entire USB PHY block, both the USB OTG | 181 | This driver controls the entire USB PHY block, both the USB OTG |
| 175 | parts, as well as the 2 regular USB 2 host PHYs. | 182 | parts, as well as the 2 regular USB 2 host PHYs. |
| 176 | 183 | ||
| 184 | config PHY_SUN9I_USB | ||
| 185 | tristate "Allwinner sun9i SoC USB PHY driver" | ||
| 186 | depends on ARCH_SUNXI && HAS_IOMEM && OF | ||
| 187 | depends on RESET_CONTROLLER | ||
| 188 | select GENERIC_PHY | ||
| 189 | help | ||
| 190 | Enable this to support the transceiver that is part of Allwinner | ||
| 191 | sun9i SoCs. | ||
| 192 | |||
| 193 | This driver controls each individual USB 2 host PHY. | ||
| 194 | |||
| 177 | config PHY_SAMSUNG_USB2 | 195 | config PHY_SAMSUNG_USB2 |
| 178 | tristate "Samsung USB 2.0 PHY driver" | 196 | tristate "Samsung USB 2.0 PHY driver" |
| 179 | depends on HAS_IOMEM | 197 | depends on HAS_IOMEM |
diff --git a/drivers/phy/Makefile b/drivers/phy/Makefile index f080e1bb2a74..f12625178780 100644 --- a/drivers/phy/Makefile +++ b/drivers/phy/Makefile | |||
| @@ -5,6 +5,7 @@ | |||
| 5 | obj-$(CONFIG_GENERIC_PHY) += phy-core.o | 5 | obj-$(CONFIG_GENERIC_PHY) += phy-core.o |
| 6 | obj-$(CONFIG_PHY_BERLIN_USB) += phy-berlin-usb.o | 6 | obj-$(CONFIG_PHY_BERLIN_USB) += phy-berlin-usb.o |
| 7 | obj-$(CONFIG_PHY_BERLIN_SATA) += phy-berlin-sata.o | 7 | obj-$(CONFIG_PHY_BERLIN_SATA) += phy-berlin-sata.o |
| 8 | obj-$(CONFIG_PHY_DM816X_USB) += phy-dm816x-usb.o | ||
| 8 | obj-$(CONFIG_ARMADA375_USBCLUSTER_PHY) += phy-armada375-usb2.o | 9 | obj-$(CONFIG_ARMADA375_USBCLUSTER_PHY) += phy-armada375-usb2.o |
| 9 | obj-$(CONFIG_BCM_KONA_USB2_PHY) += phy-bcm-kona-usb2.o | 10 | obj-$(CONFIG_BCM_KONA_USB2_PHY) += phy-bcm-kona-usb2.o |
| 10 | obj-$(CONFIG_PHY_EXYNOS_DP_VIDEO) += phy-exynos-dp-video.o | 11 | obj-$(CONFIG_PHY_EXYNOS_DP_VIDEO) += phy-exynos-dp-video.o |
| @@ -20,6 +21,7 @@ obj-$(CONFIG_TWL4030_USB) += phy-twl4030-usb.o | |||
| 20 | obj-$(CONFIG_PHY_EXYNOS5250_SATA) += phy-exynos5250-sata.o | 21 | obj-$(CONFIG_PHY_EXYNOS5250_SATA) += phy-exynos5250-sata.o |
| 21 | obj-$(CONFIG_PHY_HIX5HD2_SATA) += phy-hix5hd2-sata.o | 22 | obj-$(CONFIG_PHY_HIX5HD2_SATA) += phy-hix5hd2-sata.o |
| 22 | obj-$(CONFIG_PHY_SUN4I_USB) += phy-sun4i-usb.o | 23 | obj-$(CONFIG_PHY_SUN4I_USB) += phy-sun4i-usb.o |
| 24 | obj-$(CONFIG_PHY_SUN9I_USB) += phy-sun9i-usb.o | ||
| 23 | obj-$(CONFIG_PHY_SAMSUNG_USB2) += phy-exynos-usb2.o | 25 | obj-$(CONFIG_PHY_SAMSUNG_USB2) += phy-exynos-usb2.o |
| 24 | phy-exynos-usb2-y += phy-samsung-usb2.o | 26 | phy-exynos-usb2-y += phy-samsung-usb2.o |
| 25 | phy-exynos-usb2-$(CONFIG_PHY_EXYNOS4210_USB2) += phy-exynos4210-usb2.o | 27 | phy-exynos-usb2-$(CONFIG_PHY_EXYNOS4210_USB2) += phy-exynos4210-usb2.o |
diff --git a/drivers/phy/phy-berlin-sata.c b/drivers/phy/phy-berlin-sata.c index 099eee8851e5..6f3e06d687de 100644 --- a/drivers/phy/phy-berlin-sata.c +++ b/drivers/phy/phy-berlin-sata.c | |||
| @@ -218,7 +218,7 @@ static int phy_berlin_sata_probe(struct platform_device *pdev) | |||
| 218 | if (priv->nphys == 0) | 218 | if (priv->nphys == 0) |
| 219 | return -ENODEV; | 219 | return -ENODEV; |
| 220 | 220 | ||
| 221 | priv->phys = devm_kzalloc(dev, priv->nphys * sizeof(*priv->phys), | 221 | priv->phys = devm_kcalloc(dev, priv->nphys, sizeof(*priv->phys), |
| 222 | GFP_KERNEL); | 222 | GFP_KERNEL); |
| 223 | if (!priv->phys) | 223 | if (!priv->phys) |
| 224 | return -ENOMEM; | 224 | return -ENOMEM; |
diff --git a/drivers/phy/phy-berlin-usb.c b/drivers/phy/phy-berlin-usb.c index c8a8d53a6ece..c6fc95b53083 100644 --- a/drivers/phy/phy-berlin-usb.c +++ b/drivers/phy/phy-berlin-usb.c | |||
| @@ -103,9 +103,6 @@ | |||
| 103 | #define MODE_TEST_EN BIT(11) | 103 | #define MODE_TEST_EN BIT(11) |
| 104 | #define ANA_TEST_DC_CTRL(x) ((x) << 12) | 104 | #define ANA_TEST_DC_CTRL(x) ((x) << 12) |
| 105 | 105 | ||
| 106 | #define to_phy_berlin_usb_priv(p) \ | ||
| 107 | container_of((p), struct phy_berlin_usb_priv, phy) | ||
| 108 | |||
| 109 | static const u32 phy_berlin_pll_dividers[] = { | 106 | static const u32 phy_berlin_pll_dividers[] = { |
| 110 | /* Berlin 2 */ | 107 | /* Berlin 2 */ |
| 111 | CLK_REF_DIV(0xc) | FEEDBACK_CLK_DIV(0x54), | 108 | CLK_REF_DIV(0xc) | FEEDBACK_CLK_DIV(0x54), |
| @@ -115,14 +112,13 @@ static const u32 phy_berlin_pll_dividers[] = { | |||
| 115 | 112 | ||
| 116 | struct phy_berlin_usb_priv { | 113 | struct phy_berlin_usb_priv { |
| 117 | void __iomem *base; | 114 | void __iomem *base; |
| 118 | struct phy *phy; | ||
| 119 | struct reset_control *rst_ctrl; | 115 | struct reset_control *rst_ctrl; |
| 120 | u32 pll_divider; | 116 | u32 pll_divider; |
| 121 | }; | 117 | }; |
| 122 | 118 | ||
| 123 | static int phy_berlin_usb_power_on(struct phy *phy) | 119 | static int phy_berlin_usb_power_on(struct phy *phy) |
| 124 | { | 120 | { |
| 125 | struct phy_berlin_usb_priv *priv = dev_get_drvdata(phy->dev.parent); | 121 | struct phy_berlin_usb_priv *priv = phy_get_drvdata(phy); |
| 126 | 122 | ||
| 127 | reset_control_reset(priv->rst_ctrl); | 123 | reset_control_reset(priv->rst_ctrl); |
| 128 | 124 | ||
| @@ -175,6 +171,7 @@ static int phy_berlin_usb_probe(struct platform_device *pdev) | |||
| 175 | of_match_device(phy_berlin_sata_of_match, &pdev->dev); | 171 | of_match_device(phy_berlin_sata_of_match, &pdev->dev); |
| 176 | struct phy_berlin_usb_priv *priv; | 172 | struct phy_berlin_usb_priv *priv; |
| 177 | struct resource *res; | 173 | struct resource *res; |
| 174 | struct phy *phy; | ||
| 178 | struct phy_provider *phy_provider; | 175 | struct phy_provider *phy_provider; |
| 179 | 176 | ||
| 180 | priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); | 177 | priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); |
| @@ -192,20 +189,18 @@ static int phy_berlin_usb_probe(struct platform_device *pdev) | |||
| 192 | 189 | ||
| 193 | priv->pll_divider = *((u32 *)match->data); | 190 | priv->pll_divider = *((u32 *)match->data); |
| 194 | 191 | ||
| 195 | priv->phy = devm_phy_create(&pdev->dev, NULL, &phy_berlin_usb_ops); | 192 | phy = devm_phy_create(&pdev->dev, NULL, &phy_berlin_usb_ops); |
| 196 | if (IS_ERR(priv->phy)) { | 193 | if (IS_ERR(phy)) { |
| 197 | dev_err(&pdev->dev, "failed to create PHY\n"); | 194 | dev_err(&pdev->dev, "failed to create PHY\n"); |
| 198 | return PTR_ERR(priv->phy); | 195 | return PTR_ERR(phy); |
| 199 | } | 196 | } |
| 200 | 197 | ||
| 201 | platform_set_drvdata(pdev, priv); | 198 | platform_set_drvdata(pdev, priv); |
| 199 | phy_set_drvdata(phy, priv); | ||
| 202 | 200 | ||
| 203 | phy_provider = | 201 | phy_provider = |
| 204 | devm_of_phy_provider_register(&pdev->dev, of_phy_simple_xlate); | 202 | devm_of_phy_provider_register(&pdev->dev, of_phy_simple_xlate); |
| 205 | if (IS_ERR(phy_provider)) | 203 | return PTR_ERR_OR_ZERO(phy_provider); |
| 206 | return PTR_ERR(phy_provider); | ||
| 207 | |||
| 208 | return 0; | ||
| 209 | } | 204 | } |
| 210 | 205 | ||
| 211 | static struct platform_driver phy_berlin_usb_driver = { | 206 | static struct platform_driver phy_berlin_usb_driver = { |
diff --git a/drivers/phy/phy-dm816x-usb.c b/drivers/phy/phy-dm816x-usb.c new file mode 100644 index 000000000000..7b42555ddd51 --- /dev/null +++ b/drivers/phy/phy-dm816x-usb.c | |||
| @@ -0,0 +1,290 @@ | |||
| 1 | /* | ||
| 2 | * This program is free software; you can redistribute it and/or | ||
| 3 | |||
