aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSachin Kamat <sachin.kamat@linaro.org>2013-08-31 13:12:00 -0400
committerJonathan Cameron <jic23@kernel.org>2013-09-07 16:46:50 -0400
commit1e319cecdb4800e03a803e96da63091de0165ecb (patch)
treef665d6e047ae81acaf2ff8890c7981002d37af31
parent6898eb89655a8ac7d098b2fada95c1c91870365c (diff)
staging: iio: ad7192: Use devm_* APIs and fix a memory leak
devm_* APIs are device managed and make code simpler. The memory leak was a lack of freeing the iio_dev structure in the remove function. Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
-rw-r--r--drivers/staging/iio/adc/ad7192.c15
1 files changed, 4 insertions, 11 deletions
diff --git a/drivers/staging/iio/adc/ad7192.c b/drivers/staging/iio/adc/ad7192.c
index 3283e2829536..83bb44b38152 100644
--- a/drivers/staging/iio/adc/ad7192.c
+++ b/drivers/staging/iio/adc/ad7192.c
@@ -623,17 +623,17 @@ static int ad7192_probe(struct spi_device *spi)
623 return -ENODEV; 623 return -ENODEV;
624 } 624 }
625 625
626 indio_dev = iio_device_alloc(sizeof(*st)); 626 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
627 if (indio_dev == NULL) 627 if (indio_dev == NULL)
628 return -ENOMEM; 628 return -ENOMEM;
629 629
630 st = iio_priv(indio_dev); 630 st = iio_priv(indio_dev);
631 631
632 st->reg = regulator_get(&spi->dev, "vcc"); 632 st->reg = devm_regulator_get(&spi->dev, "vcc");
633 if (!IS_ERR(st->reg)) { 633 if (!IS_ERR(st->reg)) {
634 ret = regulator_enable(st->reg); 634 ret = regulator_enable(st->reg);
635 if (ret) 635 if (ret)
636 goto error_put_reg; 636 return ret;
637 637
638 voltage_uv = regulator_get_voltage(st->reg); 638 voltage_uv = regulator_get_voltage(st->reg);
639 } 639 }
@@ -677,11 +677,6 @@ error_remove_trigger:
677error_disable_reg: 677error_disable_reg:
678 if (!IS_ERR(st->reg)) 678 if (!IS_ERR(st->reg))
679 regulator_disable(st->reg); 679 regulator_disable(st->reg);
680error_put_reg:
681 if (!IS_ERR(st->reg))
682 regulator_put(st->reg);
683
684 iio_device_free(indio_dev);
685 680
686 return ret; 681 return ret;
687} 682}
@@ -694,10 +689,8 @@ static int ad7192_remove(struct spi_device *spi)
694 iio_device_unregister(indio_dev); 689 iio_device_unregister(indio_dev);
695 ad_sd_cleanup_buffer_and_trigger(indio_dev); 690 ad_sd_cleanup_buffer_and_trigger(indio_dev);
696 691
697 if (!IS_ERR(st->reg)) { 692 if (!IS_ERR(st->reg))
698 regulator_disable(st->reg); 693 regulator_disable(st->reg);
699 regulator_put(st->reg);
700 }
701 694
702 return 0; 695 return 0;
703} 696}