summaryrefslogtreecommitdiff
path: root/drivers/usb/host
diff options
context:
space:
mode:
authorGerhard Sittig <gsi@denx.de>2013-07-19 14:18:31 +0200
committerAnatolij Gustschin <agust@denx.de>2013-08-23 19:25:03 +0200
commit7282bdb224658b25b445f2b1b3f6cab93cbef961 (patch)
treef61363d663c87941cbfcd27a30664d7da32f1466 /drivers/usb/host
parent2d30ccacb12f1f5fd028da857f61f4d511fc5bcb (diff)
USB: fsl-mph-dr-of: cleanup clock API use
use devm_get_clk() for automatic put upon device release, check for and propagate errors when enabling clocks, must prepare clocks before they can get enabled, unprepare after disable need to use the _parent_ of the platform device for clock lookup, since this one is associated with the respective device tree node; this change remains neutral as long as a "globally" provided "usb%d_clk" item gets provided by either the PPC_CLOCK implementation or clkdev_register'ed aliases, using the correct devide and thus referencing the right DT node becomes essential when clock lookup will become based on device tree when common clock support will get introduced Signed-off-by: Gerhard Sittig <gsi@denx.de> Signed-off-by: Anatolij Gustschin <agust@denx.de>
Diffstat (limited to 'drivers/usb/host')
-rw-r--r--drivers/usb/host/fsl-mph-dr-of.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/usb/host/fsl-mph-dr-of.c b/drivers/usb/host/fsl-mph-dr-of.c
index 11e0b79ff9d5..ff15651cb83f 100644
--- a/drivers/usb/host/fsl-mph-dr-of.c
+++ b/drivers/usb/host/fsl-mph-dr-of.c
@@ -260,6 +260,7 @@ int fsl_usb2_mpc5121_init(struct platform_device *pdev)
{
struct fsl_usb2_platform_data *pdata = pdev->dev.platform_data;
struct clk *clk;
+ int err;
char clk_name[10];
int base, clk_num;
@@ -272,13 +273,16 @@ int fsl_usb2_mpc5121_init(struct platform_device *pdev)
return -ENODEV;
snprintf(clk_name, sizeof(clk_name), "usb%d_clk", clk_num);
- clk = clk_get(&pdev->dev, clk_name);
+ clk = devm_clk_get(pdev->dev.parent, clk_name);
if (IS_ERR(clk)) {
dev_err(&pdev->dev, "failed to get clk\n");
return PTR_ERR(clk);
}
-
- clk_enable(clk);
+ err = clk_prepare_enable(clk);
+ if (err) {
+ dev_err(&pdev->dev, "failed to enable clk\n");
+ return err;
+ }
pdata->clk = clk;
if (pdata->phy_mode == FSL_USB2_PHY_UTMI_WIDE) {
@@ -302,10 +306,8 @@ static void fsl_usb2_mpc5121_exit(struct platform_device *pdev)
pdata->regs = NULL;
- if (pdata->clk) {
- clk_disable(pdata->clk);
- clk_put(pdata->clk);
- }
+ if (pdata->clk)
+ clk_disable_unprepare(pdata->clk);
}
static struct fsl_usb2_platform_data fsl_usb2_mpc5121_pd = {