On 4/14/24 8:58 AM, Alisa-Dariana Roman wrote: > On 13.04.2024 22:10, David Lechner wrote: >> On Sat, Apr 13, 2024 at 10:12 AM Alisa-Dariana Roman >> <alisadariana@xxxxxxxxx> wrote: >>> >>> AINCOM should actually be a supply. If present and it has a non-zero >>> voltage, the pseudo-differential channels are configured as single-ended >>> with an offset. Otherwise, they are configured as differential channels >>> between AINx and AINCOM pins. >>> >>> Signed-off-by: Alisa-Dariana Roman <alisa.roman@xxxxxxxxxx> >>> --- >>> drivers/iio/adc/ad7192.c | 53 +++++++++++++++++++++++++++++++++++++--- >>> 1 file changed, 49 insertions(+), 4 deletions(-) > > ... > >>> @@ -745,6 +746,9 @@ static int ad7192_read_raw(struct iio_dev *indio_dev, >>> /* Kelvin to Celsius */ >> >> Not related to this patch, but I'm not a fan of the way the >> temperature case writes over *val (maybe clean that up using a switch >> statement instead in another patch while we are working on this?). >> Adding the else if to this makes it even harder to follow. >> >>> if (chan->type == IIO_TEMP) >>> *val -= 273 * ad7192_get_temp_scale(unipolar); >>> + else if (st->aincom_mv && chan->channel2 == -1) >> >> I think the logic should be !chan->differential instead of >> chan->channel2 = -1 (more explanation on this below). >> >>> + *val += DIV_ROUND_CLOSEST_ULL((u64)st->aincom_mv * 1000000000, >>> + st->scale_avail[gain][1]); >>> return IIO_VAL_INT; > > Hi David, > > I am very grateful for your suggestions! > > case IIO_CHAN_INFO_OFFSET: > if (!unipolar) > *val = -(1 << (chan->scan_type.realbits - 1)); > else > *val = 0; > switch(chan->type) { > case IIO_VOLTAGE: > if (st->aincom_mv && !chan->differential) > *val += DIV_ROUND_CLOSEST_ULL((u64)st->aincom_mv * 1000000000, > st->scale_avail[gain][1]); > return IIO_VAL_INT; > /* Kelvin to Celsius */ > case IIO_TEMP: > *val -= 273 * ad7192_get_temp_scale(unipolar); > return IIO_VAL_INT; > default: > return -EINVAL; > } > > I added a switch because it looks neater indeed. But I would keep the if else for the unipolar in order not to have duplicate code. Is this alright? > I didn't notice before that the temperature channel could also be unipolor or bipolar, so yes this seems fine.