static int ntc_adc_iio_read(struct ntc_thermistor_platform_data *pdata)
 {
        struct iio_channel *channel = pdata->chan;
-       int raw, uv, ret;
+       int uv, ret;
 
-       ret = iio_read_channel_raw(channel, &raw);
+       ret = iio_read_channel_processed_scale(channel, &uv, 1000);
        if (ret < 0) {
-               pr_err("read channel() error: %d\n", ret);
-               return ret;
-       }
+               int raw;
 
-       ret = iio_convert_raw_to_processed(channel, raw, &uv, 1000);
-       if (ret < 0) {
-               /* Assume 12 bit ADC with vref at pullup_uv */
-               uv = (pdata->pullup_uv * (s64)raw) >> 12;
+               /*
+                * This fallback uses a raw read and then
+                * assumes the ADC is 12 bits, scaling with
+                * a factor 1000 to get to microvolts.
+                */
+               ret = iio_read_channel_raw(channel, &raw);
+               if (ret < 0) {
+                       pr_err("read channel() error: %d\n", ret);
+                       return ret;
+               }
+               ret = iio_convert_raw_to_processed(channel, raw, &uv, 1000);
+               if (ret < 0) {
+                       /* Assume 12 bit ADC with vref at pullup_uv */
+                       uv = (pdata->pullup_uv * (s64)raw) >> 12;
+               }
        }
 
        return uv;