On Thu, Dec 24, 2020 at 4:15 AM Chris Lesiak <chris.lesiak@xxxxxxxxx> wrote: > A closer reading of the "iio: inkern: pass through raw values if no scaling" > commit leads me to believe that even when the sensor provides no scale, > the returned value is expected to be in the correct units. > > If that is true, there was a bug in the commit. > It failed to apply the caller supplied scale that ntc_thermistor.c relies on > to convert from milliVolts to microVolts. > > Linus, would this change address your original problem? > > diff --git a/drivers/iio/inkern.c b/drivers/iio/inkern.c > index fe30bcb6a57b..79787474d511 100644 > --- a/drivers/iio/inkern.c > +++ b/drivers/iio/inkern.c > @@ -587,7 +587,7 @@ static int iio_convert_raw_to_processed_unlocked(struct iio_channel *chan, > * Just pass raw values as processed if no scaling is > * available. > */ > - *processed = raw; > + *processed = raw * scale; > return 0; > } I do not think the raw values have any obligation to be in e.g. millivolts. They may be, by chance. In my case, it is just an unscaled byte [0..255]. So it unfortunately does not solve my problem, because in my driver, that does not support scaling, the result will be the raw value * 1000 which is not going to be microvolts at all, because the raw values are not millivolts, rather a value 0..255. However if I used the processed values, the value will be adjusted non-linearly to millivolts. Yours, Linus Walleij