@@ -214,8 +214,18 @@ static int rescale_read_raw(struct iio_dev *indio_dev,
214214 return ret < 0 ? ret : - EOPNOTSUPP ;
215215 }
216216
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 ,
219229 schan_off , val , val2 );
220230 default :
221231 return - EINVAL ;
@@ -280,8 +290,9 @@ static int rescale_configure_channel(struct device *dev,
280290 chan -> type = rescale -> cfg -> type ;
281291
282292 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" );
285296 } else if (iio_channel_has_info (schan , IIO_CHAN_INFO_PROCESSED )) {
286297 dev_info (dev , "using processed channel\n" );
287298 rescale -> chan_processed = true;
0 commit comments