diff options
author | Fabio Estevam <fabio.estevam@freescale.com> | 2014-10-04 13:50:21 +0200 |
---|---|---|
committer | Jonathan Cameron <jic23@kernel.org> | 2014-10-09 22:02:51 +0200 |
commit | 75d7ed3b9e7cb79a3b0e1f417fb674d54b4fc668 (patch) | |
tree | caaca18cd67f7fa4e5dd3482b50a8152642eea3d | |
parent | iio: st_sensors: Fix buffer copy (diff) | |
download | linux-75d7ed3b9e7cb79a3b0e1f417fb674d54b4fc668.tar.xz linux-75d7ed3b9e7cb79a3b0e1f417fb674d54b4fc668.zip |
iio: adc: mxs-lradc: Disable the clock on probe failure
We should disable lradc->clk in the case of errors in the probe function.
Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Reviewed-by: Marek Vasut <marex@denx.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Cc: <Stable@vger.kernel.org>
-rw-r--r-- | drivers/staging/iio/adc/mxs-lradc.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/staging/iio/adc/mxs-lradc.c b/drivers/staging/iio/adc/mxs-lradc.c index 468327f4a753..d3436114a6f4 100644 --- a/drivers/staging/iio/adc/mxs-lradc.c +++ b/drivers/staging/iio/adc/mxs-lradc.c @@ -1565,14 +1565,16 @@ static int mxs_lradc_probe(struct platform_device *pdev) /* Grab all IRQ sources */ for (i = 0; i < of_cfg->irq_count; i++) { lradc->irq[i] = platform_get_irq(pdev, i); - if (lradc->irq[i] < 0) - return lradc->irq[i]; + if (lradc->irq[i] < 0) { + ret = lradc->irq[i]; + goto err_clk; + } ret = devm_request_irq(dev, lradc->irq[i], mxs_lradc_handle_irq, 0, of_cfg->irq_name[i], iio); if (ret) - return ret; + goto err_clk; } lradc->vref_mv = of_cfg->vref_mv; @@ -1594,7 +1596,7 @@ static int mxs_lradc_probe(struct platform_device *pdev) &mxs_lradc_trigger_handler, &mxs_lradc_buffer_ops); if (ret) - return ret; + goto err_clk; ret = mxs_lradc_trigger_init(iio); if (ret) @@ -1649,6 +1651,8 @@ err_dev: mxs_lradc_trigger_remove(iio); err_trig: iio_triggered_buffer_cleanup(iio); +err_clk: + clk_disable_unprepare(lradc->clk); return ret; } |