]> git.baikalelectronics.ru Git - kernel.git/commitdiff
iio: chemical: atlas-sensor: add RTD-SM module support
authorMatt Ranostay <matt.ranostay@konsulko.com>
Sat, 25 Apr 2020 07:25:20 +0000 (10:25 +0300)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sat, 25 Apr 2020 14:20:47 +0000 (15:20 +0100)
Atlas Scientific RTD-SM OEM sensor reads temperature using
resistance temperature detector technology.

Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/chemical/atlas-sensor.c

index 973cdb4f1e8343d65c3831ebdcb2bc672dc9e347..a6d996ab9a66272ebde8e4e7f7142f230cccf993 100644 (file)
@@ -53,6 +53,8 @@
 #define ATLAS_REG_DO_CALIB_STATUS_PRESSURE     BIT(0)
 #define ATLAS_REG_DO_CALIB_STATUS_DO           BIT(1)
 
+#define ATLAS_REG_RTD_DATA             0x0e
+
 #define ATLAS_REG_PH_TEMP_DATA         0x0e
 #define ATLAS_REG_PH_DATA              0x16
 
 #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 = 's',
+                       .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)
@@ -477,6 +503,7 @@ static int atlas_read_raw(struct iio_dev *indio_dev,
        struct atlas_data *data = iio_priv(indio_dev);
 
        switch (mask) {
+       case IIO_CHAN_INFO_PROCESSED:
        case IIO_CHAN_INFO_RAW: {
                int ret;
                __be32 reg;
@@ -565,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);
@@ -574,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);