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>
((struct usb_phy *)platform_get_drvdata(pdev))
struct ci13xxx_imx_data {
((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;
struct usb_phy *phy;
struct platform_device *ci_pdev;
struct clk *clk;
CI13XXX_PULLUP_ON_VBUS |
CI13XXX_DISABLE_STREAMING,
};
CI13XXX_PULLUP_ON_VBUS |
CI13XXX_DISABLE_STREAMING,
};
- struct platform_device *phy_pdev;
struct resource *res;
int ret;
struct resource *res;
int ret;
if (of_find_property(pdev->dev.of_node, "fsl,usbmisc", NULL)
&& !usbmisc_ops)
if (of_find_property(pdev->dev.of_node, "fsl,usbmisc", NULL)
&& !usbmisc_ops)
- 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 */
}
/* we only support host now, so enable vbus here */
dev_err(&pdev->dev,
"Failed to enable vbus regulator, err=%d\n",
ret);
dev_err(&pdev->dev,
"Failed to enable vbus regulator, err=%d\n",
ret);
}
} else {
data->reg_vbus = NULL;
}
} else {
data->reg_vbus = NULL;
err:
if (data->reg_vbus)
regulator_disable(data->reg_vbus);
err:
if (data->reg_vbus)
regulator_disable(data->reg_vbus);
-put_np:
- if (data->phy_np)
- of_node_put(data->phy_np);
clk_disable_unprepare(data->clk);
return ret;
}
clk_disable_unprepare(data->clk);
return ret;
}
module_put(data->phy->dev->driver->owner);
}
module_put(data->phy->dev->driver->owner);
}
- if (data->phy_np)
- of_node_put(data->phy_np);
-
clk_disable_unprepare(data->clk);
return 0;
clk_disable_unprepare(data->clk);
return 0;