Linus Walleij <linus.walleij@xxxxxxxxxx>wrote: > I have to do this change because my ADC driver only provides processed > channels (drivers/iio/adc/ab8500-gpadc.c). It provides raw values and > it provides processed values but no scale. That means your code will > not work, sadly. It will result in the raw value being used without scaling. > The reason that the ADC cannot provide scaling is that the scale is not > linear and based on calibration. IIO scaling is only linear. I haven't been able to find detailed documentation on the ab8500-gpadc, so I have a couple of questions / comments: 1. The driver appears to support temperature output directly. Why do you need ntc_thermistor? 2. I don't understand how the ab8500_gpadc_read_raw output of processed data could possibly be correct. if (mask == IIO_CHAN_INFO_PROCESSED) { processed = ab8500_gpadc_ad_to_voltage(gpadc, ch->id, raw_val); if (processed < 0) return processed; /* Return millivolt or milliamps or millicentigrades */ *val = processed * 1000; return IIO_VAL_INT; } Note that both processed and *val are both of type int. If *val really does end up with milliVolt units, then processed must have had Volt units. And you only have single Volt resolution. Either you are working with a lot higher voltages than I usually see, or something must be wrong.