Commit 46c1cda8 authored by Vivek Gautam's avatar Vivek Gautam Committed by Greg Kroah-Hartman

usb: host: ehci-exynos: Remove unnecessary usb-phy support

Now that we have completely moved from older USB-PHY drivers
to newer GENERIC-PHY drivers for PHYs available with USB controllers
on Exynos series of SoCs, we can remove the support for the same
in our host drivers too.

We also defer the probe for our host in case we end up getting
EPROBE_DEFER error when getting PHYs.
Signed-off-by: default avatarVivek Gautam <gautam.vivek@samsung.com>
Acked-by: default avatarJingoo Han <jg1.han@samsung.com>
Acked-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent e5a9d621
...@@ -21,11 +21,8 @@ ...@@ -21,11 +21,8 @@
#include <linux/of_gpio.h> #include <linux/of_gpio.h>
#include <linux/phy/phy.h> #include <linux/phy/phy.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/usb/phy.h>
#include <linux/usb/samsung_usb_phy.h>
#include <linux/usb.h> #include <linux/usb.h>
#include <linux/usb/hcd.h> #include <linux/usb/hcd.h>
#include <linux/usb/otg.h>
#include "ehci.h" #include "ehci.h"
...@@ -47,9 +44,7 @@ static struct hc_driver __read_mostly exynos_ehci_hc_driver; ...@@ -47,9 +44,7 @@ static struct hc_driver __read_mostly exynos_ehci_hc_driver;
struct exynos_ehci_hcd { struct exynos_ehci_hcd {
struct clk *clk; struct clk *clk;
struct usb_phy *phy; struct phy *phy[PHY_NUMBER];
struct usb_otg *otg;
struct phy *phy_g[PHY_NUMBER];
}; };
#define to_exynos_ehci(hcd) (struct exynos_ehci_hcd *)(hcd_to_ehci(hcd)->priv) #define to_exynos_ehci(hcd) (struct exynos_ehci_hcd *)(hcd_to_ehci(hcd)->priv)
...@@ -60,8 +55,9 @@ static int exynos_ehci_get_phy(struct device *dev, ...@@ -60,8 +55,9 @@ static int exynos_ehci_get_phy(struct device *dev,
struct device_node *child; struct device_node *child;
struct phy *phy; struct phy *phy;
int phy_number; int phy_number;
int ret = 0; int ret;
/* Get PHYs for the controller */
for_each_available_child_of_node(dev->of_node, child) { for_each_available_child_of_node(dev->of_node, child) {
ret = of_property_read_u32(child, "reg", &phy_number); ret = of_property_read_u32(child, "reg", &phy_number);
if (ret) { if (ret) {
...@@ -77,31 +73,21 @@ static int exynos_ehci_get_phy(struct device *dev, ...@@ -77,31 +73,21 @@ static int exynos_ehci_get_phy(struct device *dev,
} }
phy = devm_of_phy_get(dev, child, NULL); phy = devm_of_phy_get(dev, child, NULL);
exynos_ehci->phy[phy_number] = phy;
of_node_put(child); of_node_put(child);
if (IS_ERR(phy)) if (IS_ERR(phy)) {
/* Lets fallback to older USB-PHYs */ ret = PTR_ERR(phy);
goto usb_phy_old; if (ret == -EPROBE_DEFER) {
exynos_ehci->phy_g[phy_number] = phy; return ret;
/* Make the older PHYs unavailable */ } else if (ret != -ENOSYS && ret != -ENODEV) {
exynos_ehci->phy = ERR_PTR(-ENXIO); dev_err(dev,
} "Error retrieving usb2 phy: %d\n", ret);
return 0;
usb_phy_old:
exynos_ehci->phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2);
if (IS_ERR(exynos_ehci->phy)) {
ret = PTR_ERR(exynos_ehci->phy);
if (ret != -ENXIO && ret != -ENODEV) {
dev_err(dev, "no usb2 phy configured\n");
return ret; return ret;
} }
dev_dbg(dev, "Failed to get usb2 phy\n"); }
} else {
exynos_ehci->otg = exynos_ehci->phy->otg;
} }
return ret; return 0;
} }
static int exynos_ehci_phy_enable(struct device *dev) static int exynos_ehci_phy_enable(struct device *dev)
...@@ -111,16 +97,13 @@ static int exynos_ehci_phy_enable(struct device *dev) ...@@ -111,16 +97,13 @@ static int exynos_ehci_phy_enable(struct device *dev)
int i; int i;
int ret = 0; int ret = 0;
if (!IS_ERR(exynos_ehci->phy))
return usb_phy_init(exynos_ehci->phy);
for (i = 0; ret == 0 && i < PHY_NUMBER; i++) for (i = 0; ret == 0 && i < PHY_NUMBER; i++)
if (!IS_ERR(exynos_ehci->phy_g[i])) if (!IS_ERR(exynos_ehci->phy[i]))
ret = phy_power_on(exynos_ehci->phy_g[i]); ret = phy_power_on(exynos_ehci->phy[i]);
if (ret) if (ret)
for (i--; i >= 0; i--) for (i--; i >= 0; i--)
if (!IS_ERR(exynos_ehci->phy_g[i])) if (!IS_ERR(exynos_ehci->phy[i]))
phy_power_off(exynos_ehci->phy_g[i]); phy_power_off(exynos_ehci->phy[i]);
return ret; return ret;
} }
...@@ -131,14 +114,9 @@ static void exynos_ehci_phy_disable(struct device *dev) ...@@ -131,14 +114,9 @@ static void exynos_ehci_phy_disable(struct device *dev)
struct exynos_ehci_hcd *exynos_ehci = to_exynos_ehci(hcd); struct exynos_ehci_hcd *exynos_ehci = to_exynos_ehci(hcd);
int i; int i;
if (!IS_ERR(exynos_ehci->phy)) {
usb_phy_shutdown(exynos_ehci->phy);
return;
}
for (i = 0; i < PHY_NUMBER; i++) for (i = 0; i < PHY_NUMBER; i++)
if (!IS_ERR(exynos_ehci->phy_g[i])) if (!IS_ERR(exynos_ehci->phy[i]))
phy_power_off(exynos_ehci->phy_g[i]); phy_power_off(exynos_ehci->phy[i]);
} }
static void exynos_setup_vbus_gpio(struct device *dev) static void exynos_setup_vbus_gpio(struct device *dev)
...@@ -231,9 +209,6 @@ static int exynos_ehci_probe(struct platform_device *pdev) ...@@ -231,9 +209,6 @@ static int exynos_ehci_probe(struct platform_device *pdev)
goto fail_io; goto fail_io;
} }
if (exynos_ehci->otg)
exynos_ehci->otg->set_host(exynos_ehci->otg, &hcd->self);
err = exynos_ehci_phy_enable(&pdev->dev); err = exynos_ehci_phy_enable(&pdev->dev);
if (err) { if (err) {
dev_err(&pdev->dev, "Failed to enable USB phy\n"); dev_err(&pdev->dev, "Failed to enable USB phy\n");
...@@ -273,9 +248,6 @@ static int exynos_ehci_remove(struct platform_device *pdev) ...@@ -273,9 +248,6 @@ static int exynos_ehci_remove(struct platform_device *pdev)
usb_remove_hcd(hcd); usb_remove_hcd(hcd);
if (exynos_ehci->otg)
exynos_ehci->otg->set_host(exynos_ehci->otg, &hcd->self);
exynos_ehci_phy_disable(&pdev->dev); exynos_ehci_phy_disable(&pdev->dev);
clk_disable_unprepare(exynos_ehci->clk); clk_disable_unprepare(exynos_ehci->clk);
...@@ -298,9 +270,6 @@ static int exynos_ehci_suspend(struct device *dev) ...@@ -298,9 +270,6 @@ static int exynos_ehci_suspend(struct device *dev)
if (rc) if (rc)
return rc; return rc;
if (exynos_ehci->otg)
exynos_ehci->otg->set_host(exynos_ehci->otg, &hcd->self);
exynos_ehci_phy_disable(dev); exynos_ehci_phy_disable(dev);
clk_disable_unprepare(exynos_ehci->clk); clk_disable_unprepare(exynos_ehci->clk);
...@@ -316,9 +285,6 @@ static int exynos_ehci_resume(struct device *dev) ...@@ -316,9 +285,6 @@ static int exynos_ehci_resume(struct device *dev)
clk_prepare_enable(exynos_ehci->clk); clk_prepare_enable(exynos_ehci->clk);
if (exynos_ehci->otg)
exynos_ehci->otg->set_host(exynos_ehci->otg, &hcd->self);
ret = exynos_ehci_phy_enable(dev); ret = exynos_ehci_phy_enable(dev);
if (ret) { if (ret) {
dev_err(dev, "Failed to enable USB phy\n"); dev_err(dev, "Failed to enable USB phy\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment