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 | |
| 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>
| -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); |
