Message ID | 20200904094347.188834-1-cmo@melexis.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | iio: temperature: mlx90632: Interface to change object ambient temperature | expand |
On Fri, Sep 4, 2020 at 12:45 PM Crt Mori <cmo@melexis.com> wrote: > > Since object temperature might be different than the sensor temperature > the infra red sensors should provide an interface to inject ambient infrared > temperature. This was in past done via write to ambient temperature > interface (in_temp_ambient_raw), but I think most people did not know > about it. This solution introduces a new iio type of the CALIBAMBIENT > which is hopefully more descriptive and more explicit about the purpose > and capabilities of the sensors. After addressing above and below, FWIW, Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> > > Signed-off-by: Crt Mori <cmo@melexis.com> > --- > drivers/iio/industrialio-core.c | 2 ++ > drivers/iio/temperature/mlx90632.c | 10 ++++++++-- > include/linux/iio/types.h | 1 + > 3 files changed, 11 insertions(+), 2 deletions(-) > > diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c > index 606d5e61c575..754597f087d1 100644 > --- a/drivers/iio/industrialio-core.c > +++ b/drivers/iio/industrialio-core.c > @@ -165,6 +165,8 @@ static const char * const iio_chan_info_postfix[] = { > [IIO_CHAN_INFO_CALIBEMISSIVITY] = "calibemissivity", > [IIO_CHAN_INFO_OVERSAMPLING_RATIO] = "oversampling_ratio", > [IIO_CHAN_INFO_THERMOCOUPLE_TYPE] = "thermocouple_type", > + [IIO_CHAN_INFO_CALIBAMBIENT] = "calibambient", > + Unrelated. > }; > > #if defined(CONFIG_DEBUG_FS) > diff --git a/drivers/iio/temperature/mlx90632.c b/drivers/iio/temperature/mlx90632.c > index 94bca2b2866a..67bf9f000122 100644 > --- a/drivers/iio/temperature/mlx90632.c > +++ b/drivers/iio/temperature/mlx90632.c > @@ -761,7 +761,9 @@ static int mlx90632_read_raw(struct iio_dev *indio_dev, > *val2 = data->emissivity * 1000; > } > return IIO_VAL_INT_PLUS_MICRO; > - Unrelated... > + case IIO_CHAN_INFO_CALIBAMBIENT: > + *val = data->object_ambient_temperature; > + return IIO_VAL_INT; ...and thus missed the blank line here. > default: > return -EINVAL; > } > @@ -781,6 +783,9 @@ static int mlx90632_write_raw(struct iio_dev *indio_dev, > return -EINVAL; > data->emissivity = val * 1000 + val2 / 1000; > return 0; > + case IIO_CHAN_INFO_CALIBAMBIENT: > + data->object_ambient_temperature = val; > + return 0; > default: > return -EINVAL; > } > @@ -798,7 +803,8 @@ static const struct iio_chan_spec mlx90632_channels[] = { > .modified = 1, > .channel2 = IIO_MOD_TEMP_OBJECT, > .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) | > - BIT(IIO_CHAN_INFO_CALIBEMISSIVITY), > + BIT(IIO_CHAN_INFO_CALIBEMISSIVITY) | > + BIT(IIO_CHAN_INFO_CALIBAMBIENT), You can squeeze it in between to reduce churn in this change. > }, > }; > > diff --git a/include/linux/iio/types.h b/include/linux/iio/types.h > index e6fd3645963c..1e3ed6f55bca 100644 > --- a/include/linux/iio/types.h > +++ b/include/linux/iio/types.h > @@ -59,6 +59,7 @@ enum iio_chan_info_enum { > IIO_CHAN_INFO_CALIBEMISSIVITY, > IIO_CHAN_INFO_OVERSAMPLING_RATIO, > IIO_CHAN_INFO_THERMOCOUPLE_TYPE, > + IIO_CHAN_INFO_CALIBAMBIENT, > }; > > #endif /* _IIO_TYPES_H_ */ > -- > 2.25.1 >
diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c index 606d5e61c575..754597f087d1 100644 --- a/drivers/iio/industrialio-core.c +++ b/drivers/iio/industrialio-core.c @@ -165,6 +165,8 @@ static const char * const iio_chan_info_postfix[] = { [IIO_CHAN_INFO_CALIBEMISSIVITY] = "calibemissivity", [IIO_CHAN_INFO_OVERSAMPLING_RATIO] = "oversampling_ratio", [IIO_CHAN_INFO_THERMOCOUPLE_TYPE] = "thermocouple_type", + [IIO_CHAN_INFO_CALIBAMBIENT] = "calibambient", + }; #if defined(CONFIG_DEBUG_FS) diff --git a/drivers/iio/temperature/mlx90632.c b/drivers/iio/temperature/mlx90632.c index 94bca2b2866a..67bf9f000122 100644 --- a/drivers/iio/temperature/mlx90632.c +++ b/drivers/iio/temperature/mlx90632.c @@ -761,7 +761,9 @@ static int mlx90632_read_raw(struct iio_dev *indio_dev, *val2 = data->emissivity * 1000; } return IIO_VAL_INT_PLUS_MICRO; - + case IIO_CHAN_INFO_CALIBAMBIENT: + *val = data->object_ambient_temperature; + return IIO_VAL_INT; default: return -EINVAL; } @@ -781,6 +783,9 @@ static int mlx90632_write_raw(struct iio_dev *indio_dev, return -EINVAL; data->emissivity = val * 1000 + val2 / 1000; return 0; + case IIO_CHAN_INFO_CALIBAMBIENT: + data->object_ambient_temperature = val; + return 0; default: return -EINVAL; } @@ -798,7 +803,8 @@ static const struct iio_chan_spec mlx90632_channels[] = { .modified = 1, .channel2 = IIO_MOD_TEMP_OBJECT, .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) | - BIT(IIO_CHAN_INFO_CALIBEMISSIVITY), + BIT(IIO_CHAN_INFO_CALIBEMISSIVITY) | + BIT(IIO_CHAN_INFO_CALIBAMBIENT), }, }; diff --git a/include/linux/iio/types.h b/include/linux/iio/types.h index e6fd3645963c..1e3ed6f55bca 100644 --- a/include/linux/iio/types.h +++ b/include/linux/iio/types.h @@ -59,6 +59,7 @@ enum iio_chan_info_enum { IIO_CHAN_INFO_CALIBEMISSIVITY, IIO_CHAN_INFO_OVERSAMPLING_RATIO, IIO_CHAN_INFO_THERMOCOUPLE_TYPE, + IIO_CHAN_INFO_CALIBAMBIENT, }; #endif /* _IIO_TYPES_H_ */
Since object temperature might be different than the sensor temperature the infra red sensors should provide an interface to inject ambient temperature. This was in past done via write to ambient temperature interface (in_temp_ambient_raw), but I think most people did not know about it. This solution introduces a new iio type of the CALIBAMBIENT which is hopefully more descriptive and more explicit about the purpose and capabilities of the sensors. Signed-off-by: Crt Mori <cmo@melexis.com> --- drivers/iio/industrialio-core.c | 2 ++ drivers/iio/temperature/mlx90632.c | 10 ++++++++-- include/linux/iio/types.h | 1 + 3 files changed, 11 insertions(+), 2 deletions(-)