@@ -214,8 +214,18 @@ static int rescale_read_raw(struct iio_dev *indio_dev,
214
214
return ret < 0 ? ret : - EOPNOTSUPP ;
215
215
}
216
216
217
- ret = iio_read_channel_scale (rescale -> source , & scale , & scale2 );
218
- return rescale_process_offset (rescale , ret , scale , scale2 ,
217
+ if (iio_channel_has_info (rescale -> source -> channel ,
218
+ IIO_CHAN_INFO_SCALE )) {
219
+ ret = iio_read_channel_scale (rescale -> source , & scale , & scale2 );
220
+ return rescale_process_offset (rescale , ret , scale , scale2 ,
221
+ schan_off , val , val2 );
222
+ }
223
+
224
+ /*
225
+ * If we get here we have no scale so scale 1:1 but apply
226
+ * rescaler and offset, if any.
227
+ */
228
+ return rescale_process_offset (rescale , IIO_VAL_FRACTIONAL , 1 , 1 ,
219
229
schan_off , val , val2 );
220
230
default :
221
231
return - EINVAL ;
@@ -280,8 +290,9 @@ static int rescale_configure_channel(struct device *dev,
280
290
chan -> type = rescale -> cfg -> type ;
281
291
282
292
if (iio_channel_has_info (schan , IIO_CHAN_INFO_RAW ) &&
283
- iio_channel_has_info (schan , IIO_CHAN_INFO_SCALE )) {
284
- dev_info (dev , "using raw+scale source channel\n" );
293
+ (iio_channel_has_info (schan , IIO_CHAN_INFO_SCALE ) ||
294
+ iio_channel_has_info (schan , IIO_CHAN_INFO_OFFSET ))) {
295
+ dev_info (dev , "using raw+scale/offset source channel\n" );
285
296
} else if (iio_channel_has_info (schan , IIO_CHAN_INFO_PROCESSED )) {
286
297
dev_info (dev , "using processed channel\n" );
287
298
rescale -> chan_processed = true;
0 commit comments