Commit b101c93c authored by Matt Ranostay's avatar Matt Ranostay Committed by Jonathan Cameron
Browse files

iio: chemical: atlas-sensor: add RTD-SM module support



Atlas Scientific RTD-SM OEM sensor reads temperature using
resistance temperature detector technology.

Signed-off-by: default avatarMatt Ranostay <matt.ranostay@konsulko.com>
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 1e8f99ed
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -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

@@ -72,12 +74,14 @@
#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);