summaryrefslogtreecommitdiffstats
path: root/drivers/mfd
diff options
context:
space:
mode:
authorArvind Yadav <arvind.yadav.cs@gmail.com>2017-08-08 05:54:56 -0400
committerLee Jones <lee.jones@linaro.org>2017-09-05 03:46:01 -0400
commitb62d8dbe419893b7aee5fac282e1da8c811cfcfb (patch)
treede9a18bf7cb1579e047085e18ff1182a3cd6c1e5 /drivers/mfd
parente10feb36c98576fd7d1f24edaf2669dbfe7df21d (diff)
mfd: t7l66xb: Handle return value of clk_prepare_enable
clk_prepare_enable() can fail here and we must check its return value. we must disable clock, if t7l66xb_probe is not successful. Signed-off-by: Arvind Yadav <arvind.yadav.cs@gmail.com> Signed-off-by: Lee Jones <lee.jones@linaro.org>
Diffstat (limited to 'drivers/mfd')
-rw-r--r--drivers/mfd/t7l66xb.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/drivers/mfd/t7l66xb.c b/drivers/mfd/t7l66xb.c
index 22c811396edc..43d8683266de 100644
--- a/drivers/mfd/t7l66xb.c
+++ b/drivers/mfd/t7l66xb.c
@@ -86,8 +86,11 @@ static int t7l66xb_mmc_enable(struct platform_device *mmc)
86 struct t7l66xb *t7l66xb = platform_get_drvdata(dev); 86 struct t7l66xb *t7l66xb = platform_get_drvdata(dev);
87 unsigned long flags; 87 unsigned long flags;
88 u8 dev_ctl; 88 u8 dev_ctl;
89 int ret;
89 90
90 clk_prepare_enable(t7l66xb->clk32k); 91 ret = clk_prepare_enable(t7l66xb->clk32k);
92 if (ret)
93 return ret;
91 94
92 raw_spin_lock_irqsave(&t7l66xb->lock, flags); 95 raw_spin_lock_irqsave(&t7l66xb->lock, flags);
93 96
@@ -286,8 +289,12 @@ static int t7l66xb_resume(struct platform_device *dev)
286{ 289{
287 struct t7l66xb *t7l66xb = platform_get_drvdata(dev); 290 struct t7l66xb *t7l66xb = platform_get_drvdata(dev);
288 struct t7l66xb_platform_data *pdata = dev_get_platdata(&dev->dev); 291 struct t7l66xb_platform_data *pdata = dev_get_platdata(&dev->dev);
292 int ret;
293
294 ret = clk_prepare_enable(t7l66xb->clk48m);
295 if (ret)
296 return ret;
289 297
290 clk_prepare_enable(t7l66xb->clk48m);
291 if (pdata && pdata->resume) 298 if (pdata && pdata->resume)
292 pdata->resume(dev); 299 pdata->resume(dev);
293 300
@@ -361,7 +368,9 @@ static int t7l66xb_probe(struct platform_device *dev)
361 goto err_ioremap; 368 goto err_ioremap;
362 } 369 }
363 370
364 clk_prepare_enable(t7l66xb->clk48m); 371 ret = clk_prepare_enable(t7l66xb->clk48m);
372 if (ret)
373 goto err_clk_enable;
365 374
366 if (pdata->enable) 375 if (pdata->enable)
367 pdata->enable(dev); 376 pdata->enable(dev);
@@ -386,6 +395,8 @@ static int t7l66xb_probe(struct platform_device *dev)
386 return 0; 395 return 0;
387 396
388 t7l66xb_detach_irq(dev); 397 t7l66xb_detach_irq(dev);
398 clk_disable_unprepare(t7l66xb->clk48m);
399err_clk_enable:
389 iounmap(t7l66xb->scr); 400 iounmap(t7l66xb->scr);
390err_ioremap: 401err_ioremap:
391 release_resource(&t7l66xb->rscr); 402 release_resource(&t7l66xb->rscr);