diff options
author | Sachin Kamat <sachin.kamat@linaro.org> | 2013-08-31 13:12:00 -0400 |
---|---|---|
committer | Jonathan Cameron <jic23@kernel.org> | 2013-09-07 16:46:50 -0400 |
commit | 1e319cecdb4800e03a803e96da63091de0165ecb (patch) | |
tree | f665d6e047ae81acaf2ff8890c7981002d37af31 | |
parent | 6898eb89655a8ac7d098b2fada95c1c91870365c (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.c | 15 |
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: | |||
677 | error_disable_reg: | 677 | error_disable_reg: |
678 | if (!IS_ERR(st->reg)) | 678 | if (!IS_ERR(st->reg)) |
679 | regulator_disable(st->reg); | 679 | regulator_disable(st->reg); |
680 | error_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 | } |