aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFabio Estevam <fabio.estevam@freescale.com>2014-10-04 07:50:21 -0400
committerJonathan Cameron <jic23@kernel.org>2014-10-09 16:02:51 -0400
commit75d7ed3b9e7cb79a3b0e1f417fb674d54b4fc668 (patch)
treecaaca18cd67f7fa4e5dd3482b50a8152642eea3d
parent4250c90b30b8bf2a1a21122ba0484f8f351f152d (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.c12
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);
1650err_trig: 1652err_trig:
1651 iio_triggered_buffer_cleanup(iio); 1653 iio_triggered_buffer_cleanup(iio);
1654err_clk:
1655 clk_disable_unprepare(lradc->clk);
1652 return ret; 1656 return ret;
1653} 1657}
1654 1658