summaryrefslogtreecommitdiffstats
path: root/drivers/usb/chipidea/ci13xxx_imx.c
diff options
context:
space:
mode:
authorSascha Hauer2013-06-13 17:00:00 +0200
committerGreg Kroah-Hartman2013-06-17 22:47:24 +0200
commitea1418b5f1a394d11c8cdb91ef19d24dcd9c0045 (patch)
treeae58876290b1f9e16d762f5145bbf68e45c26fb4 /drivers/usb/chipidea/ci13xxx_imx.c
parentusb: chipidea: usbmisc: use module_platform_driver (diff)
downloadkernel-qcow2-linux-ea1418b5f1a394d11c8cdb91ef19d24dcd9c0045.tar.gz
kernel-qcow2-linux-ea1418b5f1a394d11c8cdb91ef19d24dcd9c0045.tar.xz
kernel-qcow2-linux-ea1418b5f1a394d11c8cdb91ef19d24dcd9c0045.zip
usb: chipidea: i.MX: use devm_usb_get_phy_by_phandle to get phy
This patch converts the driver to use devm_usb_get_phy_by_phandle which makes the code smaller and a bit simpler. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/chipidea/ci13xxx_imx.c')
-rw-r--r--drivers/usb/chipidea/ci13xxx_imx.c32
1 files changed, 12 insertions, 20 deletions
diff --git a/drivers/usb/chipidea/ci13xxx_imx.c b/drivers/usb/chipidea/ci13xxx_imx.c
index 18d83abac7cd..7e6f0674bee3 100644
--- a/drivers/usb/chipidea/ci13xxx_imx.c
+++ b/drivers/usb/chipidea/ci13xxx_imx.c
@@ -28,7 +28,6 @@
((struct usb_phy *)platform_get_drvdata(pdev))
struct ci13xxx_imx_data {
- struct device_node *phy_np;
struct usb_phy *phy;
struct platform_device *ci_pdev;
struct clk *clk;
@@ -97,9 +96,9 @@ static int ci13xxx_imx_probe(struct platform_device *pdev)
CI13XXX_PULLUP_ON_VBUS |
CI13XXX_DISABLE_STREAMING,
};
- struct platform_device *phy_pdev;
struct resource *res;
int ret;
+ struct usb_phy *phy;
if (of_find_property(pdev->dev.of_node, "fsl,usbmisc", NULL)
&& !usbmisc_ops)
@@ -131,18 +130,16 @@ static int ci13xxx_imx_probe(struct platform_device *pdev)
return ret;
}
- data->phy_np = of_parse_phandle(pdev->dev.of_node, "fsl,usbphy", 0);
- if (data->phy_np) {
- phy_pdev = of_find_device_by_node(data->phy_np);
- if (phy_pdev) {
- struct usb_phy *phy;
- phy = pdev_to_phy(phy_pdev);
- if (phy &&
- try_module_get(phy_pdev->dev.driver->owner)) {
- usb_phy_init(phy);
- data->phy = phy;
- }
+ phy = devm_usb_get_phy_by_phandle(&pdev->dev, "fsl,usbphy", 0);
+ if (!IS_ERR(phy)) {
+ ret = usb_phy_init(phy);
+ if (ret) {
+ dev_err(&pdev->dev, "unable to init phy: %d\n", ret);
+ goto err_clk;
}
+ } else if (PTR_ERR(phy) == -EPROBE_DEFER) {
+ ret = -EPROBE_DEFER;
+ goto err_clk;
}
/* we only support host now, so enable vbus here */
@@ -153,7 +150,7 @@ static int ci13xxx_imx_probe(struct platform_device *pdev)
dev_err(&pdev->dev,
"Failed to enable vbus regulator, err=%d\n",
ret);
- goto put_np;
+ goto err_clk;
}
} else {
data->reg_vbus = NULL;
@@ -207,9 +204,7 @@ disable_device:
err:
if (data->reg_vbus)
regulator_disable(data->reg_vbus);
-put_np:
- if (data->phy_np)
- of_node_put(data->phy_np);
+err_clk:
clk_disable_unprepare(data->clk);
return ret;
}
@@ -229,9 +224,6 @@ static int ci13xxx_imx_remove(struct platform_device *pdev)
module_put(data->phy->dev->driver->owner);
}
- if (data->phy_np)
- of_node_put(data->phy_np);
-
clk_disable_unprepare(data->clk);
return 0;