diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2013-06-13 15:00:00 (GMT) |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-06-17 20:47:24 (GMT) |
commit | ea1418b5f1a394d11c8cdb91ef19d24dcd9c0045 (patch) | |
tree | ae58876290b1f9e16d762f5145bbf68e45c26fb4 /drivers/usb/chipidea | |
parent | 0404ae035149c83fc9a04818aa7da35e482686ea (diff) | |
download | linux-ea1418b5f1a394d11c8cdb91ef19d24dcd9c0045.tar.xz |
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')
-rw-r--r-- | drivers/usb/chipidea/ci13xxx_imx.c | 32 |
1 files changed, 12 insertions, 20 deletions
diff --git a/drivers/usb/chipidea/ci13xxx_imx.c b/drivers/usb/chipidea/ci13xxx_imx.c index 18d83ab..7e6f067 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; |