iio: adc: ad7887: invert/rework external ref logic

This change inverts/reworks the logic to use an external reference via a
provided regulator.

Now the driver tries to obtain a regulator. If one is found, then it is
used. The rest of the driver logic already checks if there is a non-NULL
reference to a regulator, so it should be fine.

Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
Link: https://lore.kernel.org/r/20201002082723.184810-1-alexandru.ardelean@analog.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
Alexandru Ardelean 2020-10-02 11:27:23 +03:00 committed by Jonathan Cameron
parent ead1c9f376
commit 5483b8d501
2 changed files with 8 additions and 8 deletions

View File

@ -246,11 +246,15 @@ static int ad7887_probe(struct spi_device *spi)
st = iio_priv(indio_dev);
if (!pdata || !pdata->use_onchip_ref) {
st->reg = devm_regulator_get(&spi->dev, "vref");
if (IS_ERR(st->reg))
st->reg = devm_regulator_get_optional(&spi->dev, "vref");
if (IS_ERR(st->reg)) {
if (PTR_ERR(st->reg) != -ENODEV)
return PTR_ERR(st->reg);
st->reg = NULL;
}
if (st->reg) {
ret = regulator_enable(st->reg);
if (ret)
return ret;
@ -269,7 +273,7 @@ static int ad7887_probe(struct spi_device *spi)
/* Setup default message */
mode = AD7887_PM_MODE4;
if (!pdata || !pdata->use_onchip_ref)
if (!st->reg)
mode |= AD7887_REF_DIS;
if (pdata && pdata->en_dual)
mode |= AD7887_DUAL;

View File

@ -13,13 +13,9 @@
* second input channel, and Vref is internally connected to Vdd. If set to
* false the device is used in single channel mode and AIN1/Vref is used as
* VREF input.
* @use_onchip_ref: Whether to use the onchip reference. If set to true the
* internal 2.5V reference is used. If set to false a external reference is
* used.
*/
struct ad7887_platform_data {
bool en_dual;
bool use_onchip_ref;
};
#endif /* IIO_ADC_AD7887_H_ */