Lines Matching refs:rescale

22 int rescale_process_scale(struct rescale *rescale, int scale_type,  in rescale_process_scale()  argument
33 *val *= rescale->numerator; in rescale_process_scale()
34 if (rescale->denominator == 1) in rescale_process_scale()
36 *val2 = rescale->denominator; in rescale_process_scale()
44 if (!check_mul_overflow(*val, rescale->numerator, &_val) && in rescale_process_scale()
45 !check_mul_overflow(*val2, rescale->denominator, &_val2)) { in rescale_process_scale()
53 tmp = div_s64(tmp, rescale->denominator); in rescale_process_scale()
54 tmp *= rescale->numerator; in rescale_process_scale()
86 tmp = (s64)abs(*val) * abs(rescale->numerator); in rescale_process_scale()
87 *val = div_s64_rem(tmp, abs(rescale->denominator), &rem); in rescale_process_scale()
89 tmp = (s64)rem * mult + (s64)abs(*val2) * abs(rescale->numerator); in rescale_process_scale()
90 tmp = div_s64(tmp, abs(rescale->denominator)); in rescale_process_scale()
98 if (neg ^ ((rescale->numerator < 0) ^ (rescale->denominator < 0))) { in rescale_process_scale()
112 int rescale_process_offset(struct rescale *rescale, int scale_type, in rescale_process_offset() argument
120 tmp = (s64)rescale->offset * scale2; in rescale_process_offset()
124 *val = div_s64(rescale->offset, scale) + schan_off; in rescale_process_offset()
127 tmp = (s64)rescale->offset * (1 << scale2); in rescale_process_offset()
131 tmp = (s64)rescale->offset * 1000000000LL; in rescale_process_offset()
136 tmp = (s64)rescale->offset * 1000000LL; in rescale_process_offset()
150 struct rescale *rescale = iio_priv(indio_dev); in rescale_read_raw() local
157 if (rescale->chan_processed) in rescale_read_raw()
163 return iio_read_channel_processed(rescale->source, val); in rescale_read_raw()
165 return iio_read_channel_raw(rescale->source, val); in rescale_read_raw()
168 if (rescale->chan_processed) { in rescale_read_raw()
176 ret = iio_read_channel_scale(rescale->source, val, val2); in rescale_read_raw()
178 return rescale_process_scale(rescale, ret, val, val2); in rescale_read_raw()
204 if (rescale->chan_processed) { in rescale_read_raw()
205 *val = rescale->offset; in rescale_read_raw()
209 if (iio_channel_has_info(rescale->source->channel, in rescale_read_raw()
211 ret = iio_read_channel_offset(rescale->source, in rescale_read_raw()
217 ret = iio_read_channel_scale(rescale->source, &scale, &scale2); in rescale_read_raw()
218 return rescale_process_offset(rescale, ret, scale, scale2, in rescale_read_raw()
230 struct rescale *rescale = iio_priv(indio_dev); in rescale_read_avail() local
235 return iio_read_avail_channel_raw(rescale->source, in rescale_read_avail()
252 struct rescale *rescale = iio_priv(indio_dev); in rescale_read_ext_info() local
254 return iio_read_channel_ext_info(rescale->source, in rescale_read_ext_info()
255 rescale->ext_info[private].name, in rescale_read_ext_info()
264 struct rescale *rescale = iio_priv(indio_dev); in rescale_write_ext_info() local
266 return iio_write_channel_ext_info(rescale->source, in rescale_write_ext_info()
267 rescale->ext_info[private].name, in rescale_write_ext_info()
272 struct rescale *rescale) in rescale_configure_channel() argument
274 struct iio_chan_spec *chan = &rescale->chan; in rescale_configure_channel()
275 struct iio_chan_spec const *schan = rescale->source->channel; in rescale_configure_channel()
279 chan->ext_info = rescale->ext_info; in rescale_configure_channel()
280 chan->type = rescale->cfg->type; in rescale_configure_channel()
287 rescale->chan_processed = true; in rescale_configure_channel()
296 if (rescale->offset) in rescale_configure_channel()
305 !rescale->chan_processed) in rescale_configure_channel()
312 struct rescale *rescale) in rescale_current_sense_amplifier_props() argument
336 rescale->numerator = 1000000 / factor; in rescale_current_sense_amplifier_props()
337 rescale->denominator = sense / factor; in rescale_current_sense_amplifier_props()
339 factor = gcd(rescale->numerator, gain_mult); in rescale_current_sense_amplifier_props()
340 rescale->numerator /= factor; in rescale_current_sense_amplifier_props()
341 rescale->denominator *= gain_mult / factor; in rescale_current_sense_amplifier_props()
343 factor = gcd(rescale->denominator, gain_div); in rescale_current_sense_amplifier_props()
344 rescale->numerator *= gain_div / factor; in rescale_current_sense_amplifier_props()
345 rescale->denominator /= factor; in rescale_current_sense_amplifier_props()
351 struct rescale *rescale) in rescale_current_sense_shunt_props() argument
365 rescale->numerator = 1000000 / factor; in rescale_current_sense_shunt_props()
366 rescale->denominator = shunt / factor; in rescale_current_sense_shunt_props()
372 struct rescale *rescale) in rescale_voltage_divider_props() argument
378 &rescale->denominator); in rescale_voltage_divider_props()
385 &rescale->numerator); in rescale_voltage_divider_props()
391 factor = gcd(rescale->numerator, rescale->denominator); in rescale_voltage_divider_props()
392 rescale->numerator /= factor; in rescale_voltage_divider_props()
393 rescale->denominator /= factor; in rescale_voltage_divider_props()
399 struct rescale *rescale) in rescale_temp_sense_rtd_props() argument
431 rescale->numerator = 1000000 / factor; in rescale_temp_sense_rtd_props()
432 rescale->denominator = tmp / factor; in rescale_temp_sense_rtd_props()
434 rescale->offset = -1 * ((r0 * iexc) / 1000); in rescale_temp_sense_rtd_props()
440 struct rescale *rescale) in rescale_temp_transducer_props() argument
455 rescale->numerator = 1000000; in rescale_temp_transducer_props()
456 rescale->denominator = alpha * sense; in rescale_temp_transducer_props()
458 rescale->offset = div_s64((s64)offset * rescale->denominator, in rescale_temp_transducer_props()
459 rescale->numerator); in rescale_temp_transducer_props()
515 struct rescale *rescale; in rescale_probe() local
529 sizeof_ext_info *= sizeof(*rescale->ext_info); in rescale_probe()
532 sizeof_priv = sizeof(*rescale) + sizeof_ext_info; in rescale_probe()
538 rescale = iio_priv(indio_dev); in rescale_probe()
540 rescale->cfg = device_get_match_data(dev); in rescale_probe()
541 rescale->numerator = 1; in rescale_probe()
542 rescale->denominator = 1; in rescale_probe()
543 rescale->offset = 0; in rescale_probe()
545 ret = rescale->cfg->props(dev, rescale); in rescale_probe()
549 if (!rescale->numerator || !rescale->denominator) { in rescale_probe()
556 rescale->source = source; in rescale_probe()
561 indio_dev->channels = &rescale->chan; in rescale_probe()
564 rescale->ext_info = devm_kmemdup(dev, in rescale_probe()
567 if (!rescale->ext_info) in rescale_probe()
570 for (i = 0; rescale->ext_info[i].name; ++i) { in rescale_probe()
572 &rescale->ext_info[i]; in rescale_probe()
582 ret = rescale_configure_channel(dev, rescale); in rescale_probe()