Skip to content

Commit

Permalink
staging: iio: ad7606: rework regulator handling
Browse files Browse the repository at this point in the history
Currently, this driver ignores all errors from regulator_get(). The way
it is now, it also breaks probe deferral (EPROBE_DEFER). The correct
behavior is to propagate the error to the upper layers so they can
handle it accordingly.

Rework the regulator handling so that it matches the standard behavior.
If the specific design uses a static always-on regulator and does not
explicitly specify it, regulator_get() will return the dummy regulator.

Suggested-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Eva Rachel Retuya <eraretuya@gmail.com>
Acked-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
  • Loading branch information
Eva Rachel Retuya authored and Jonathan Cameron committed Oct 23, 2016
1 parent 12edb97 commit f087921
Showing 1 changed file with 9 additions and 8 deletions.
17 changes: 9 additions & 8 deletions drivers/staging/iio/adc/ad7606.c
Original file line number Diff line number Diff line change
Expand Up @@ -425,10 +425,13 @@ int ad7606_probe(struct device *dev, int irq, void __iomem *base_address,
INIT_WORK(&st->poll_work, &ad7606_poll_bh_to_ring);

st->reg = devm_regulator_get(dev, "avcc");
if (!IS_ERR(st->reg)) {
ret = regulator_enable(st->reg);
if (ret)
return ret;
if (IS_ERR(st->reg))
return PTR_ERR(st->reg);

ret = regulator_enable(st->reg);
if (ret) {
dev_err(dev, "Failed to enable specified AVcc supply\n");
return ret;
}

ret = ad7606_request_gpios(st);
Expand Down Expand Up @@ -484,8 +487,7 @@ int ad7606_probe(struct device *dev, int irq, void __iomem *base_address,
free_irq(irq, indio_dev);

error_disable_reg:
if (!IS_ERR(st->reg))
regulator_disable(st->reg);
regulator_disable(st->reg);
return ret;
}
EXPORT_SYMBOL_GPL(ad7606_probe);
Expand All @@ -499,8 +501,7 @@ int ad7606_remove(struct device *dev, int irq)
iio_triggered_buffer_cleanup(indio_dev);

free_irq(irq, indio_dev);
if (!IS_ERR(st->reg))
regulator_disable(st->reg);
regulator_disable(st->reg);

return 0;
}
Expand Down

0 comments on commit f087921

Please sign in to comment.