Lines Matching defs:rescale
3 * IIO rescale driver
20 struct rescale;
24 int (*props)(struct device *dev, struct rescale *rescale);
27 struct rescale {
40 struct rescale *rescale = iio_priv(indio_dev);
46 return iio_read_channel_raw(rescale->source, val);
49 ret = iio_read_channel_scale(rescale->source, val, val2);
52 *val *= rescale->numerator;
53 *val2 *= rescale->denominator;
56 *val *= rescale->numerator;
57 if (rescale->denominator == 1)
59 *val2 = rescale->denominator;
63 tmp = div_s64(tmp, rescale->denominator);
64 tmp *= rescale->numerator;
81 struct rescale *rescale = iio_priv(indio_dev);
86 return iio_read_avail_channel_raw(rescale->source,
103 struct rescale *rescale = iio_priv(indio_dev);
105 return iio_read_channel_ext_info(rescale->source,
106 rescale->ext_info[private].name,
115 struct rescale *rescale = iio_priv(indio_dev);
117 return iio_write_channel_ext_info(rescale->source,
118 rescale->ext_info[private].name,
123 struct rescale *rescale)
125 struct iio_chan_spec *chan = &rescale->chan;
126 struct iio_chan_spec const *schan = rescale->source->channel;
130 chan->ext_info = rescale->ext_info;
131 chan->type = rescale->cfg->type;
149 struct rescale *rescale)
173 rescale->numerator = 1000000 / factor;
174 rescale->denominator = sense / factor;
176 factor = gcd(rescale->numerator, gain_mult);
177 rescale->numerator /= factor;
178 rescale->denominator *= gain_mult / factor;
180 factor = gcd(rescale->denominator, gain_div);
181 rescale->numerator *= gain_div / factor;
182 rescale->denominator /= factor;
188 struct rescale *rescale)
202 rescale->numerator = 1000000 / factor;
203 rescale->denominator = shunt / factor;
209 struct rescale *rescale)
215 &rescale->denominator);
222 &rescale->numerator);
228 factor = gcd(rescale->numerator, rescale->denominator);
229 rescale->numerator /= factor;
230 rescale->denominator /= factor;
272 struct rescale *rescale;
286 sizeof_ext_info *= sizeof(*rescale->ext_info);
289 sizeof_priv = sizeof(*rescale) + sizeof_ext_info;
295 rescale = iio_priv(indio_dev);
297 rescale->cfg = of_device_get_match_data(dev);
298 rescale->numerator = 1;
299 rescale->denominator = 1;
301 ret = rescale->cfg->props(dev, rescale);
305 if (!rescale->numerator || !rescale->denominator) {
312 rescale->source = source;
317 indio_dev->channels = &rescale->chan;
320 rescale->ext_info = devm_kmemdup(dev,
323 if (!rescale->ext_info)
326 for (i = 0; rescale->ext_info[i].name; ++i) {
328 &rescale->ext_info[i];
338 ret = rescale_configure_channel(dev, rescale);
348 .name = "iio-rescale",
354 MODULE_DESCRIPTION("IIO rescale driver");