Commit 03e7d21e authored by Liam Beguin's avatar Liam Beguin Committed by Jonathan Cameron

iio: afe: rescale: add temperature transducers

A temperature transducer is a device that converts a thermal quantity
into any other physical quantity. This patch adds support for
temperature to voltage (like the LTC2997) and temperature to current
(like the AD590) linear transducers.
In both cases these are assumed to be connected to a voltage ADC.
Signed-off-by: default avatarLiam Beguin <liambeguin@gmail.com>
Reviewed-by: default avatarPeter Rosin <peda@axentia.se>
Reviewed-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
Link: https://lore.kernel.org/r/20220213025739.2561834-9-liambeguin@gmail.comSigned-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 278fe1d2
......@@ -435,11 +435,37 @@ static int rescale_temp_sense_rtd_props(struct device *dev,
return 0;
}
static int rescale_temp_transducer_props(struct device *dev,
struct rescale *rescale)
{
s32 offset = 0;
s32 sense = 1;
s32 alpha;
int ret;
device_property_read_u32(dev, "sense-offset-millicelsius", &offset);
device_property_read_u32(dev, "sense-resistor-ohms", &sense);
ret = device_property_read_u32(dev, "alpha-ppm-per-celsius", &alpha);
if (ret) {
dev_err(dev, "failed to read alpha-ppm-per-celsius: %d\n", ret);
return ret;
}
rescale->numerator = 1000000;
rescale->denominator = alpha * sense;
rescale->offset = div_s64((s64)offset * rescale->denominator,
rescale->numerator);
return 0;
}
enum rescale_variant {
CURRENT_SENSE_AMPLIFIER,
CURRENT_SENSE_SHUNT,
VOLTAGE_DIVIDER,
TEMP_SENSE_RTD,
TEMP_TRANSDUCER,
};
static const struct rescale_cfg rescale_cfg[] = {
......@@ -459,6 +485,10 @@ static const struct rescale_cfg rescale_cfg[] = {
.type = IIO_TEMP,
.props = rescale_temp_sense_rtd_props,
},
[TEMP_TRANSDUCER] = {
.type = IIO_TEMP,
.props = rescale_temp_transducer_props,
},
};
static const struct of_device_id rescale_match[] = {
......@@ -470,6 +500,8 @@ static const struct of_device_id rescale_match[] = {
.data = &rescale_cfg[VOLTAGE_DIVIDER], },
{ .compatible = "temperature-sense-rtd",
.data = &rescale_cfg[TEMP_SENSE_RTD], },
{ .compatible = "temperature-transducer",
.data = &rescale_cfg[TEMP_TRANSDUCER], },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, rescale_match);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment