staging: iio: adc: ad7192: disable burnout currents on misconfig
authorAlexandru Ardelean <alexandru.ardelean@analog.com>
Thu, 18 Jan 2018 14:57:40 +0000 (16:57 +0200)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Tue, 30 Jan 2018 18:33:21 +0000 (18:33 +0000)
The burnout currents can be enabled only if buffer is enabled
and CHOP is disabled.

So, if neither of these conditions are met, then
we should disable the burnout currents in the driver as well,
and warn the user.

This change doesn't fix anything.
The burnout currents simply won't work if CHOP is enabled
or buffer is disabled.
The intent is to provide the user with some feedback
instead of silently not working inside the chip.

Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/staging/iio/adc/ad7192.c

index f01595593ce2d25558a51d47ec2eece33767f002..079a8410d664408b380cf3052a66635dcc67efd3 100644 (file)
@@ -290,8 +290,12 @@ static int ad7192_setup(struct ad7192_state *st,
        if (pdata->unipolar_en)
                st->conf |= AD7192_CONF_UNIPOLAR;
 
-       if (pdata->burnout_curr_en)
+       if (pdata->burnout_curr_en && pdata->buf_en && !pdata->chop_en) {
                st->conf |= AD7192_CONF_BURN;
+       } else if (pdata->burnout_curr_en) {
+               dev_warn(&st->sd.spi->dev,
+                        "Can't enable burnout currents: see CHOP or buffer\n");
+       }
 
        ret = ad_sd_write_reg(&st->sd, AD7192_REG_MODE, 3, st->mode);
        if (ret)