diff options
author | Arvind Yadav <arvind.yadav.cs@gmail.com> | 2017-08-08 05:54:56 -0400 |
---|---|---|
committer | Lee Jones <lee.jones@linaro.org> | 2017-09-05 03:46:01 -0400 |
commit | b62d8dbe419893b7aee5fac282e1da8c811cfcfb (patch) | |
tree | de9a18bf7cb1579e047085e18ff1182a3cd6c1e5 /drivers/mfd | |
parent | e10feb36c98576fd7d1f24edaf2669dbfe7df21d (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.c | 17 |
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); | ||
399 | err_clk_enable: | ||
389 | iounmap(t7l66xb->scr); | 400 | iounmap(t7l66xb->scr); |
390 | err_ioremap: | 401 | err_ioremap: |
391 | release_resource(&t7l66xb->rscr); | 402 | release_resource(&t7l66xb->rscr); |