| From 75d7ed3b9e7cb79a3b0e1f417fb674d54b4fc668 Mon Sep 17 00:00:00 2001 |
| From: Fabio Estevam <fabio.estevam@freescale.com> |
| Date: Sat, 4 Oct 2014 08:50:21 -0300 |
| Subject: iio: adc: mxs-lradc: Disable the clock on probe failure |
| |
| From: Fabio Estevam <fabio.estevam@freescale.com> |
| |
| commit 75d7ed3b9e7cb79a3b0e1f417fb674d54b4fc668 upstream. |
| |
| 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> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/staging/iio/adc/mxs-lradc.c | 12 ++++++++---- |
| 1 file changed, 8 insertions(+), 4 deletions(-) |
| |
| --- 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 platfo |
| /* 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 platfo |
| &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; |
| } |
| |