diff mbox series

[v2,2/2] iio: chemical: atlas-sensor: add RTD-SM module support

Message ID 20200419060555.14433-3-matt.ranostay@konsulko.com (mailing list archive)
State New, archived
Headers show
Series iio: chemical: atlas-sensor: add RTD-SM module support | expand

Commit Message

Matt Ranostay April 19, 2020, 6:05 a.m. UTC
Atlas Scientific RTD-SM OEM sensor reads temperate using
resistance temperature detector technology.

Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
---
 drivers/iio/chemical/atlas-sensor.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

Comments

Peter Meerwald-Stadler April 19, 2020, 9:18 a.m. UTC | #1
On Sun, 19 Apr 2020, Matt Ranostay wrote:

> Atlas Scientific RTD-SM OEM sensor reads temperate using

reads temperature?

> resistance temperature detector technology.
> 
> Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
> ---
>  drivers/iio/chemical/atlas-sensor.c | 28 ++++++++++++++++++++++++++++
>  1 file changed, 28 insertions(+)
> 
> diff --git a/drivers/iio/chemical/atlas-sensor.c b/drivers/iio/chemical/atlas-sensor.c
> index 82d470561ad3..c7ed9004cf82 100644
> --- a/drivers/iio/chemical/atlas-sensor.c
> +++ b/drivers/iio/chemical/atlas-sensor.c
> @@ -68,16 +68,20 @@
>  #define ATLAS_REG_DO_TEMP_DATA		0x12
>  #define ATLAS_REG_DO_DATA		0x22
>  
> +#define ATLAS_REG_RTD_DATA		0x0e

maybe keep registers in ascending order

> +
>  #define ATLAS_PH_INT_TIME_IN_MS		450
>  #define ATLAS_EC_INT_TIME_IN_MS		650
>  #define ATLAS_ORP_INT_TIME_IN_MS	450
>  #define ATLAS_DO_INT_TIME_IN_MS		450
> +#define ATLAS_RTD_INT_TIME_IN_MS	450
>  
>  enum {
>  	ATLAS_PH_SM,
>  	ATLAS_EC_SM,
>  	ATLAS_ORP_SM,
>  	ATLAS_DO_SM,
> +	ATLAS_RTD_SM,
>  };
>  
>  struct atlas_data {
> @@ -206,6 +210,22 @@ static const struct iio_chan_spec atlas_do_channels[] = {
>  	},
>  };
>  
> +static const struct iio_chan_spec atlas_rtd_channels[] = {
> +	{
> +		.type = IIO_TEMP,
> +		.address = ATLAS_REG_RTD_DATA,
> +		.info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED),
> +		.scan_index = 0,
> +		.scan_type = {
> +			.sign = 'u',

so this thing can't read negative temperature?

> +			.realbits = 32,
> +			.storagebits = 32,
> +			.endianness = IIO_BE,

_PROCESSED, but still stored as big endian? hm

> +		},
> +	},
> +	IIO_CHAN_SOFT_TIMESTAMP(1),
> +};
> +
>  static int atlas_check_ph_calibration(struct atlas_data *data)
>  {
>  	struct device *dev = &data->client->dev;
> @@ -350,6 +370,12 @@ static struct atlas_device atlas_devices[] = {
>  				.calibration = &atlas_check_do_calibration,
>  				.delay = ATLAS_DO_INT_TIME_IN_MS,
>  	},
> +	[ATLAS_RTD_SM] = {
> +				.channels = atlas_rtd_channels,
> +				.num_channels = 2,
> +				.data_reg = ATLAS_REG_RTD_DATA,
> +				.delay = ATLAS_RTD_INT_TIME_IN_MS,
> +	},
>  };
>  
>  static int atlas_set_powermode(struct atlas_data *data, int on)
> @@ -566,6 +592,7 @@ static const struct i2c_device_id atlas_id[] = {
>  	{ "atlas-ec-sm", ATLAS_EC_SM},
>  	{ "atlas-orp-sm", ATLAS_ORP_SM},
>  	{ "atlas-do-sm", ATLAS_DO_SM},
> +	{ "atlas-rtd-sm", ATLAS_RTD_SM},
>  	{}
>  };
>  MODULE_DEVICE_TABLE(i2c, atlas_id);
> @@ -575,6 +602,7 @@ static const struct of_device_id atlas_dt_ids[] = {
>  	{ .compatible = "atlas,ec-sm", .data = (void *)ATLAS_EC_SM, },
>  	{ .compatible = "atlas,orp-sm", .data = (void *)ATLAS_ORP_SM, },
>  	{ .compatible = "atlas,do-sm", .data = (void *)ATLAS_DO_SM, },
> +	{ .compatible = "atlas,rtd-sm", .data = (void *)ATLAS_RTD_SM, },
>  	{ }
>  };
>  MODULE_DEVICE_TABLE(of, atlas_dt_ids);
>
Matt Ranostay April 19, 2020, 6:54 p.m. UTC | #2
On Sun, Apr 19, 2020 at 2:18 AM Peter Meerwald-Stadler
<pmeerw@pmeerw.net> wrote:
>
> On Sun, 19 Apr 2020, Matt Ranostay wrote:
>
> > Atlas Scientific RTD-SM OEM sensor reads temperate using
>
> reads temperature?
Typo, will fix.

>
> > resistance temperature detector technology.
> >
> > Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
> > ---
> >  drivers/iio/chemical/atlas-sensor.c | 28 ++++++++++++++++++++++++++++
> >  1 file changed, 28 insertions(+)
> >
> > diff --git a/drivers/iio/chemical/atlas-sensor.c b/drivers/iio/chemical/atlas-sensor.c
> > index 82d470561ad3..c7ed9004cf82 100644
> > --- a/drivers/iio/chemical/atlas-sensor.c
> > +++ b/drivers/iio/chemical/atlas-sensor.c
> > @@ -68,16 +68,20 @@
> >  #define ATLAS_REG_DO_TEMP_DATA               0x12
> >  #define ATLAS_REG_DO_DATA            0x22
> >
> > +#define ATLAS_REG_RTD_DATA           0x0e
>
> maybe keep registers in ascending order
>
> > +
> >  #define ATLAS_PH_INT_TIME_IN_MS              450
> >  #define ATLAS_EC_INT_TIME_IN_MS              650
> >  #define ATLAS_ORP_INT_TIME_IN_MS     450
> >  #define ATLAS_DO_INT_TIME_IN_MS              450
> > +#define ATLAS_RTD_INT_TIME_IN_MS     450
> >
> >  enum {
> >       ATLAS_PH_SM,
> >       ATLAS_EC_SM,
> >       ATLAS_ORP_SM,
> >       ATLAS_DO_SM,
> > +     ATLAS_RTD_SM,
> >  };
> >
> >  struct atlas_data {
> > @@ -206,6 +210,22 @@ static const struct iio_chan_spec atlas_do_channels[] = {
> >       },
> >  };
> >
> > +static const struct iio_chan_spec atlas_rtd_channels[] = {
> > +     {
> > +             .type = IIO_TEMP,
> > +             .address = ATLAS_REG_RTD_DATA,
> > +             .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED),
> > +             .scan_index = 0,
> > +             .scan_type = {
> > +                     .sign = 'u',
>
> so this thing can't read negative temperature?

Hmm good question. I'll ask Atlas since the datasheet says to -126 C
but doesn't note if it
is in two's complement or not

>
> > +                     .realbits = 32,
> > +                     .storagebits = 32,
> > +                     .endianness = IIO_BE,
>
> _PROCESSED, but still stored as big endian? hm

Ah should be _PROCESSED, but still need a entry in atlas_read_raw i
just noted to
read the value and be16_to_cpu

- Matt

>
> > +             },
> > +     },
> > +     IIO_CHAN_SOFT_TIMESTAMP(1),
> > +};
> > +
> >  static int atlas_check_ph_calibration(struct atlas_data *data)
> >  {
> >       struct device *dev = &data->client->dev;
> > @@ -350,6 +370,12 @@ static struct atlas_device atlas_devices[] = {
> >                               .calibration = &atlas_check_do_calibration,
> >                               .delay = ATLAS_DO_INT_TIME_IN_MS,
> >       },
> > +     [ATLAS_RTD_SM] = {
> > +                             .channels = atlas_rtd_channels,
> > +                             .num_channels = 2,
> > +                             .data_reg = ATLAS_REG_RTD_DATA,
> > +                             .delay = ATLAS_RTD_INT_TIME_IN_MS,
> > +     },
> >  };
> >
> >  static int atlas_set_powermode(struct atlas_data *data, int on)
> > @@ -566,6 +592,7 @@ static const struct i2c_device_id atlas_id[] = {
> >       { "atlas-ec-sm", ATLAS_EC_SM},
> >       { "atlas-orp-sm", ATLAS_ORP_SM},
> >       { "atlas-do-sm", ATLAS_DO_SM},
> > +     { "atlas-rtd-sm", ATLAS_RTD_SM},
> >       {}
> >  };
> >  MODULE_DEVICE_TABLE(i2c, atlas_id);
> > @@ -575,6 +602,7 @@ static const struct of_device_id atlas_dt_ids[] = {
> >       { .compatible = "atlas,ec-sm", .data = (void *)ATLAS_EC_SM, },
> >       { .compatible = "atlas,orp-sm", .data = (void *)ATLAS_ORP_SM, },
> >       { .compatible = "atlas,do-sm", .data = (void *)ATLAS_DO_SM, },
> > +     { .compatible = "atlas,rtd-sm", .data = (void *)ATLAS_RTD_SM, },
> >       { }
> >  };
> >  MODULE_DEVICE_TABLE(of, atlas_dt_ids);
> >
>
> --
>
> Peter Meerwald-Stadler
> Mobile: +43 664 24 44 418
diff mbox series

Patch

diff --git a/drivers/iio/chemical/atlas-sensor.c b/drivers/iio/chemical/atlas-sensor.c
index 82d470561ad3..c7ed9004cf82 100644
--- a/drivers/iio/chemical/atlas-sensor.c
+++ b/drivers/iio/chemical/atlas-sensor.c
@@ -68,16 +68,20 @@ 
 #define ATLAS_REG_DO_TEMP_DATA		0x12
 #define ATLAS_REG_DO_DATA		0x22
 
+#define ATLAS_REG_RTD_DATA		0x0e
+
 #define ATLAS_PH_INT_TIME_IN_MS		450
 #define ATLAS_EC_INT_TIME_IN_MS		650
 #define ATLAS_ORP_INT_TIME_IN_MS	450
 #define ATLAS_DO_INT_TIME_IN_MS		450
+#define ATLAS_RTD_INT_TIME_IN_MS	450
 
 enum {
 	ATLAS_PH_SM,
 	ATLAS_EC_SM,
 	ATLAS_ORP_SM,
 	ATLAS_DO_SM,
+	ATLAS_RTD_SM,
 };
 
 struct atlas_data {
@@ -206,6 +210,22 @@  static const struct iio_chan_spec atlas_do_channels[] = {
 	},
 };
 
+static const struct iio_chan_spec atlas_rtd_channels[] = {
+	{
+		.type = IIO_TEMP,
+		.address = ATLAS_REG_RTD_DATA,
+		.info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED),
+		.scan_index = 0,
+		.scan_type = {
+			.sign = 'u',
+			.realbits = 32,
+			.storagebits = 32,
+			.endianness = IIO_BE,
+		},
+	},
+	IIO_CHAN_SOFT_TIMESTAMP(1),
+};
+
 static int atlas_check_ph_calibration(struct atlas_data *data)
 {
 	struct device *dev = &data->client->dev;
@@ -350,6 +370,12 @@  static struct atlas_device atlas_devices[] = {
 				.calibration = &atlas_check_do_calibration,
 				.delay = ATLAS_DO_INT_TIME_IN_MS,
 	},
+	[ATLAS_RTD_SM] = {
+				.channels = atlas_rtd_channels,
+				.num_channels = 2,
+				.data_reg = ATLAS_REG_RTD_DATA,
+				.delay = ATLAS_RTD_INT_TIME_IN_MS,
+	},
 };
 
 static int atlas_set_powermode(struct atlas_data *data, int on)
@@ -566,6 +592,7 @@  static const struct i2c_device_id atlas_id[] = {
 	{ "atlas-ec-sm", ATLAS_EC_SM},
 	{ "atlas-orp-sm", ATLAS_ORP_SM},
 	{ "atlas-do-sm", ATLAS_DO_SM},
+	{ "atlas-rtd-sm", ATLAS_RTD_SM},
 	{}
 };
 MODULE_DEVICE_TABLE(i2c, atlas_id);
@@ -575,6 +602,7 @@  static const struct of_device_id atlas_dt_ids[] = {
 	{ .compatible = "atlas,ec-sm", .data = (void *)ATLAS_EC_SM, },
 	{ .compatible = "atlas,orp-sm", .data = (void *)ATLAS_ORP_SM, },
 	{ .compatible = "atlas,do-sm", .data = (void *)ATLAS_DO_SM, },
+	{ .compatible = "atlas,rtd-sm", .data = (void *)ATLAS_RTD_SM, },
 	{ }
 };
 MODULE_DEVICE_TABLE(of, atlas_dt_ids);