diff options
author | Fabio Estevam <fabio.estevam@freescale.com> | 2014-10-04 07:50:21 -0400 |
---|---|---|
committer | Jonathan Cameron <jic23@kernel.org> | 2014-10-09 16:02:51 -0400 |
commit | 75d7ed3b9e7cb79a3b0e1f417fb674d54b4fc668 (patch) | |
tree | caaca18cd67f7fa4e5dd3482b50a8152642eea3d | |
parent | 4250c90b30b8bf2a1a21122ba0484f8f351f152d (diff) |
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) | |||
1565 | /* Grab all IRQ sources */ | 1565 | /* Grab all IRQ sources */ |
1566 | for (i = 0; i < of_cfg->irq_count; i++) { | 1566 | for (i = 0; i < of_cfg->irq_count; i++) { |
1567 | lradc->irq[i] = platform_get_irq(pdev, i); | 1567 | lradc->irq[i] = platform_get_irq(pdev, i); |
1568 | if (lradc->irq[i] < 0) | 1568 | if (lradc->irq[i] < 0) { |
1569 | return lradc->irq[i]; | 1569 | ret = lradc->irq[i]; |
1570 | goto err_clk; | ||
1571 | } | ||
1570 | 1572 | ||
1571 | ret = devm_request_irq(dev, lradc->irq[i], | 1573 | ret = devm_request_irq(dev, lradc->irq[i], |
1572 | mxs_lradc_handle_irq, 0, | 1574 | mxs_lradc_handle_irq, 0, |
1573 | of_cfg->irq_name[i], iio); | 1575 | of_cfg->irq_name[i], iio); |
1574 | if (ret) | 1576 | if (ret) |
1575 | return ret; | 1577 | goto err_clk; |
1576 | } | 1578 | } |
1577 | 1579 | ||
1578 | lradc->vref_mv = of_cfg->vref_mv; | 1580 | lradc->vref_mv = of_cfg->vref_mv; |
@@ -1594,7 +1596,7 @@ static int mxs_lradc_probe(struct platform_device *pdev) | |||
1594 | &mxs_lradc_trigger_handler, | 1596 | &mxs_lradc_trigger_handler, |
1595 | &mxs_lradc_buffer_ops); | 1597 | &mxs_lradc_buffer_ops); |
1596 | if (ret) | 1598 | if (ret) |
1597 | return ret; | 1599 | goto err_clk; |
1598 | 1600 | ||
1599 | ret = mxs_lradc_trigger_init(iio); | 1601 | ret = mxs_lradc_trigger_init(iio); |
1600 | if (ret) | 1602 | if (ret) |
@@ -1649,6 +1651,8 @@ err_dev: | |||
1649 | mxs_lradc_trigger_remove(iio); | 1651 | mxs_lradc_trigger_remove(iio); |
1650 | err_trig: | 1652 | err_trig: |
1651 | iio_triggered_buffer_cleanup(iio); | 1653 | iio_triggered_buffer_cleanup(iio); |
1654 | err_clk: | ||
1655 | clk_disable_unprepare(lradc->clk); | ||
1652 | return ret; | 1656 | return ret; |
1653 | } | 1657 | } |
1654 | 1658 | ||