All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v7 0/3] iio: chemical: atlas-sensor: add DO support
@ 2020-02-18  3:42 Matt Ranostay
  2020-02-18  3:42 ` [PATCH v7 1/3] iio: chemical: atlas-sensor: allow probe without interrupt line Matt Ranostay
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Matt Ranostay @ 2020-02-18  3:42 UTC (permalink / raw)
  To: linux-iio; +Cc: jic23, Matt Ranostay

Changes from v1:
* combined dt binding docs
* added making interrupt line is optional patchset
* broke out dt changes from DO-SM module patchset

Changes from v2:
* switch docs to YAML format

Changes from v3:
* fix up issues reported with dt-schema

Changes from v4:
* fix logic issue in optional interrupt patchset

Changes from v5:
* Update license on yaml conversion to GPLv2.0+ and BSD clause

Changes from v6:
* Don't set interrupt bits in buffer pre/postenable if no interrupt line
  is registered

Matt Ranostay (3):
  iio: chemical: atlas-sensor: allow probe without interrupt line
  iio: chemical: atlas-sensor: add DO-SM module support
  dt-bindings: iio: chemical: consolidate atlas-sensor docs

 .../bindings/iio/chemical/atlas,ec-sm.txt     | 21 ----
 .../bindings/iio/chemical/atlas,orp-sm.txt    | 21 ----
 .../bindings/iio/chemical/atlas,ph-sm.txt     | 21 ----
 .../bindings/iio/chemical/atlas,sensor.yaml   | 53 ++++++++++
 drivers/iio/chemical/atlas-sensor.c           | 97 +++++++++++++++----
 5 files changed, 131 insertions(+), 82 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/iio/chemical/atlas,ec-sm.txt
 delete mode 100644 Documentation/devicetree/bindings/iio/chemical/atlas,orp-sm.txt
 delete mode 100644 Documentation/devicetree/bindings/iio/chemical/atlas,ph-sm.txt
 create mode 100644 Documentation/devicetree/bindings/iio/chemical/atlas,sensor.yaml

-- 
2.25.0


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v7 1/3] iio: chemical: atlas-sensor: allow probe without interrupt line
  2020-02-18  3:42 [PATCH v7 0/3] iio: chemical: atlas-sensor: add DO support Matt Ranostay
@ 2020-02-18  3:42 ` Matt Ranostay
  2020-02-21 12:09   ` Jonathan Cameron
  2020-02-18  3:42 ` [PATCH v7 2/3] iio: chemical: atlas-sensor: add DO-SM module support Matt Ranostay
  2020-02-18  3:42 ` [PATCH v7 3/3] dt-bindings: iio: chemical: consolidate atlas-sensor docs Matt Ranostay
  2 siblings, 1 reply; 7+ messages in thread
From: Matt Ranostay @ 2020-02-18  3:42 UTC (permalink / raw)
  To: linux-iio; +Cc: jic23, Matt Ranostay

Sensors don't actually need a interrupt line to give valid readings,
and can triggered with CONFIG_IIO_HRTIMER_TRIGGER as well. Remove
the required check for interrupt, and continue along in the probe
function.

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

diff --git a/drivers/iio/chemical/atlas-sensor.c b/drivers/iio/chemical/atlas-sensor.c
index 2f0a6fed2589..d95818b74770 100644
--- a/drivers/iio/chemical/atlas-sensor.c
+++ b/drivers/iio/chemical/atlas-sensor.c
@@ -76,6 +76,7 @@ struct atlas_data {
 	struct atlas_device *chip;
 	struct regmap *regmap;
 	struct irq_work work;
+	unsigned int interrupt_enabled;
 
 	__be32 buffer[6]; /* 96-bit data + 32-bit pad + 64-bit timestamp */
 };
@@ -304,6 +305,9 @@ static int atlas_set_powermode(struct atlas_data *data, int on)
 
 static int atlas_set_interrupt(struct atlas_data *data, bool state)
 {
+	if (!data->interrupt_enabled)
+		return 0;
+
 	return regmap_update_bits(data->regmap, ATLAS_REG_INT_CONTROL,
 				  ATLAS_REG_INT_CONTROL_EN,
 				  state ? ATLAS_REG_INT_CONTROL_EN : 0);
@@ -572,11 +576,6 @@ static int atlas_probe(struct i2c_client *client,
 	if (ret)
 		return ret;
 
-	if (client->irq <= 0) {
-		dev_err(&client->dev, "no valid irq defined\n");
-		return -EINVAL;
-	}
-
 	ret = chip->calibration(data);
 	if (ret)
 		return ret;
@@ -596,16 +595,20 @@ static int atlas_probe(struct i2c_client *client,
 
 	init_irq_work(&data->work, atlas_work_handler);
 
-	/* interrupt pin toggles on new conversion */
-	ret = devm_request_threaded_irq(&client->dev, client->irq,
-					NULL, atlas_interrupt_handler,
-					IRQF_TRIGGER_RISING |
-					IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
-					"atlas_irq",
-					indio_dev);
-	if (ret) {
-		dev_err(&client->dev, "request irq (%d) failed\n", client->irq);
-		goto unregister_buffer;
+	if (client->irq > 0) {
+		/* interrupt pin toggles on new conversion */
+		ret = devm_request_threaded_irq(&client->dev, client->irq,
+				NULL, atlas_interrupt_handler,
+				IRQF_TRIGGER_RISING |
+				IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
+				"atlas_irq",
+				indio_dev);
+
+		if (ret)
+			dev_warn(&client->dev,
+				"request irq (%d) failed\n", client->irq);
+		else
+			data->interrupt_enabled = 1;
 	}
 
 	ret = atlas_set_powermode(data, 1);
-- 
2.25.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v7 2/3] iio: chemical: atlas-sensor: add DO-SM module support
  2020-02-18  3:42 [PATCH v7 0/3] iio: chemical: atlas-sensor: add DO support Matt Ranostay
  2020-02-18  3:42 ` [PATCH v7 1/3] iio: chemical: atlas-sensor: allow probe without interrupt line Matt Ranostay
@ 2020-02-18  3:42 ` Matt Ranostay
  2020-02-21 12:11   ` Jonathan Cameron
  2020-02-18  3:42 ` [PATCH v7 3/3] dt-bindings: iio: chemical: consolidate atlas-sensor docs Matt Ranostay
  2 siblings, 1 reply; 7+ messages in thread
From: Matt Ranostay @ 2020-02-18  3:42 UTC (permalink / raw)
  To: linux-iio; +Cc: jic23, Matt Ranostay

Atlas Scientific DO-SM OEM sensor reads disolved oxygen in
a solution. This is reported back as mg/L which maps directly
to ppm and so the IIO_CONCENTRATION channel type can be used.

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

diff --git a/drivers/iio/chemical/atlas-sensor.c b/drivers/iio/chemical/atlas-sensor.c
index d95818b74770..82d470561ad3 100644
--- a/drivers/iio/chemical/atlas-sensor.c
+++ b/drivers/iio/chemical/atlas-sensor.c
@@ -48,6 +48,11 @@
 #define ATLAS_REG_EC_CALIB_STATUS_LOW		BIT(2)
 #define ATLAS_REG_EC_CALIB_STATUS_HIGH		BIT(3)
 
+#define ATLAS_REG_DO_CALIB_STATUS		0x09
+#define ATLAS_REG_DO_CALIB_STATUS_MASK		0x03
+#define ATLAS_REG_DO_CALIB_STATUS_PRESSURE	BIT(0)
+#define ATLAS_REG_DO_CALIB_STATUS_DO		BIT(1)
+
 #define ATLAS_REG_PH_TEMP_DATA		0x0e
 #define ATLAS_REG_PH_DATA		0x16
 
@@ -60,14 +65,19 @@
 #define ATLAS_REG_ORP_CALIB_STATUS	0x0d
 #define ATLAS_REG_ORP_DATA		0x0e
 
+#define ATLAS_REG_DO_TEMP_DATA		0x12
+#define ATLAS_REG_DO_DATA		0x22
+
 #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
 
 enum {
 	ATLAS_PH_SM,
 	ATLAS_EC_SM,
 	ATLAS_ORP_SM,
+	ATLAS_DO_SM,
 };
 
 struct atlas_data {
@@ -122,7 +132,7 @@ static const struct iio_chan_spec atlas_ph_channels[] = {
 	},
 };
 
-#define ATLAS_EC_CHANNEL(_idx, _addr) \
+#define ATLAS_CONCENTRATION_CHANNEL(_idx, _addr) \
 	{\
 		.type = IIO_CONCENTRATION, \
 		.indexed = 1, \
@@ -153,8 +163,8 @@ static const struct iio_chan_spec atlas_ec_channels[] = {
 			.endianness = IIO_BE,
 		},
 	},
-	ATLAS_EC_CHANNEL(0, ATLAS_REG_TDS_DATA),
-	ATLAS_EC_CHANNEL(1, ATLAS_REG_PSS_DATA),
+	ATLAS_CONCENTRATION_CHANNEL(0, ATLAS_REG_TDS_DATA),
+	ATLAS_CONCENTRATION_CHANNEL(1, ATLAS_REG_PSS_DATA),
 	IIO_CHAN_SOFT_TIMESTAMP(3),
 	{
 		.type = IIO_TEMP,
@@ -183,6 +193,19 @@ static const struct iio_chan_spec atlas_orp_channels[] = {
 	IIO_CHAN_SOFT_TIMESTAMP(1),
 };
 
+static const struct iio_chan_spec atlas_do_channels[] = {
+	ATLAS_CONCENTRATION_CHANNEL(0, ATLAS_REG_DO_DATA),
+	IIO_CHAN_SOFT_TIMESTAMP(1),
+	{
+		.type = IIO_TEMP,
+		.address = ATLAS_REG_DO_TEMP_DATA,
+		.info_mask_separate =
+			BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),
+		.output = 1,
+		.scan_index = -1
+	},
+};
+
 static int atlas_check_ph_calibration(struct atlas_data *data)
 {
 	struct device *dev = &data->client->dev;
@@ -263,7 +286,31 @@ static int atlas_check_orp_calibration(struct atlas_data *data)
 		dev_warn(dev, "device has not been calibrated\n");
 
 	return 0;
-};
+}
+
+static int atlas_check_do_calibration(struct atlas_data *data)
+{
+	struct device *dev = &data->client->dev;
+	int ret;
+	unsigned int val;
+
+	ret = regmap_read(data->regmap, ATLAS_REG_DO_CALIB_STATUS, &val);
+	if (ret)
+		return ret;
+
+	if (!(val & ATLAS_REG_DO_CALIB_STATUS_MASK)) {
+		dev_warn(dev, "device has not been calibrated\n");
+		return 0;
+	}
+
+	if (!(val & ATLAS_REG_DO_CALIB_STATUS_PRESSURE))
+		dev_warn(dev, "device missing atmospheric pressure calibration\n");
+
+	if (!(val & ATLAS_REG_DO_CALIB_STATUS_DO))
+		dev_warn(dev, "device missing dissolved oxygen calibration\n");
+
+	return 0;
+}
 
 struct atlas_device {
 	const struct iio_chan_spec *channels;
@@ -296,6 +343,13 @@ static struct atlas_device atlas_devices[] = {
 				.calibration = &atlas_check_orp_calibration,
 				.delay = ATLAS_ORP_INT_TIME_IN_MS,
 	},
+	[ATLAS_DO_SM] = {
+				.channels = atlas_do_channels,
+				.num_channels = 3,
+				.data_reg = ATLAS_REG_DO_DATA,
+				.calibration = &atlas_check_do_calibration,
+				.delay = ATLAS_DO_INT_TIME_IN_MS,
+	},
 };
 
 static int atlas_set_powermode(struct atlas_data *data, int on)
@@ -511,6 +565,7 @@ static const struct i2c_device_id atlas_id[] = {
 	{ "atlas-ph-sm", ATLAS_PH_SM},
 	{ "atlas-ec-sm", ATLAS_EC_SM},
 	{ "atlas-orp-sm", ATLAS_ORP_SM},
+	{ "atlas-do-sm", ATLAS_DO_SM},
 	{}
 };
 MODULE_DEVICE_TABLE(i2c, atlas_id);
@@ -519,6 +574,7 @@ static const struct of_device_id atlas_dt_ids[] = {
 	{ .compatible = "atlas,ph-sm", .data = (void *)ATLAS_PH_SM, },
 	{ .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, },
 	{ }
 };
 MODULE_DEVICE_TABLE(of, atlas_dt_ids);
-- 
2.25.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v7 3/3] dt-bindings: iio: chemical: consolidate atlas-sensor docs
  2020-02-18  3:42 [PATCH v7 0/3] iio: chemical: atlas-sensor: add DO support Matt Ranostay
  2020-02-18  3:42 ` [PATCH v7 1/3] iio: chemical: atlas-sensor: allow probe without interrupt line Matt Ranostay
  2020-02-18  3:42 ` [PATCH v7 2/3] iio: chemical: atlas-sensor: add DO-SM module support Matt Ranostay
@ 2020-02-18  3:42 ` Matt Ranostay
  2020-02-21 12:13   ` Jonathan Cameron
  2 siblings, 1 reply; 7+ messages in thread
From: Matt Ranostay @ 2020-02-18  3:42 UTC (permalink / raw)
  To: linux-iio; +Cc: jic23, Matt Ranostay, Rob Herring

Since Atlas Scientific device support only varies from the compatible
string is ideal all the respective docs are merged into a single doc
named atlas,sensor.yaml

Reviewed-by: Rob Herring <robh@kernel.org>
Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
---
 .../bindings/iio/chemical/atlas,ec-sm.txt     | 21 --------
 .../bindings/iio/chemical/atlas,orp-sm.txt    | 21 --------
 .../bindings/iio/chemical/atlas,ph-sm.txt     | 21 --------
 .../bindings/iio/chemical/atlas,sensor.yaml   | 53 +++++++++++++++++++
 4 files changed, 53 insertions(+), 63 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/iio/chemical/atlas,ec-sm.txt
 delete mode 100644 Documentation/devicetree/bindings/iio/chemical/atlas,orp-sm.txt
 delete mode 100644 Documentation/devicetree/bindings/iio/chemical/atlas,ph-sm.txt
 create mode 100644 Documentation/devicetree/bindings/iio/chemical/atlas,sensor.yaml

diff --git a/Documentation/devicetree/bindings/iio/chemical/atlas,ec-sm.txt b/Documentation/devicetree/bindings/iio/chemical/atlas,ec-sm.txt
deleted file mode 100644
index f4320595b851..000000000000
--- a/Documentation/devicetree/bindings/iio/chemical/atlas,ec-sm.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-* Atlas Scientific EC-SM OEM sensor
-
-http://www.atlas-scientific.com/_files/_datasheets/_oem/EC_oem_datasheet.pdf
-
-Required properties:
-
-  - compatible: must be "atlas,ec-sm"
-  - reg: the I2C address of the sensor
-  - interrupts: the sole interrupt generated by the device
-
-  Refer to interrupt-controller/interrupts.txt for generic interrupt client
-  node bindings.
-
-Example:
-
-atlas@64 {
-	compatible = "atlas,ec-sm";
-	reg = <0x64>;
-	interrupt-parent = <&gpio1>;
-	interrupts = <16 2>;
-};
diff --git a/Documentation/devicetree/bindings/iio/chemical/atlas,orp-sm.txt b/Documentation/devicetree/bindings/iio/chemical/atlas,orp-sm.txt
deleted file mode 100644
index af1f5a9aa4da..000000000000
--- a/Documentation/devicetree/bindings/iio/chemical/atlas,orp-sm.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-* Atlas Scientific ORP-SM OEM sensor
-
-https://www.atlas-scientific.com/_files/_datasheets/_oem/ORP_oem_datasheet.pdf
-
-Required properties:
-
-  - compatible: must be "atlas,orp-sm"
-  - reg: the I2C address of the sensor
-  - interrupts: the sole interrupt generated by the device
-
-  Refer to interrupt-controller/interrupts.txt for generic interrupt client
-  node bindings.
-
-Example:
-
-atlas@66 {
-	compatible = "atlas,orp-sm";
-	reg = <0x66>;
-	interrupt-parent = <&gpio1>;
-	interrupts = <16 2>;
-};
diff --git a/Documentation/devicetree/bindings/iio/chemical/atlas,ph-sm.txt b/Documentation/devicetree/bindings/iio/chemical/atlas,ph-sm.txt
deleted file mode 100644
index 79d90f060327..000000000000
--- a/Documentation/devicetree/bindings/iio/chemical/atlas,ph-sm.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-* Atlas Scientific pH-SM OEM sensor
-
-http://www.atlas-scientific.com/_files/_datasheets/_oem/pH_oem_datasheet.pdf
-
-Required properties:
-
-  - compatible: must be "atlas,ph-sm"
-  - reg: the I2C address of the sensor
-  - interrupts: the sole interrupt generated by the device
-
-  Refer to interrupt-controller/interrupts.txt for generic interrupt client
-  node bindings.
-
-Example:
-
-atlas@65 {
-	compatible = "atlas,ph-sm";
-	reg = <0x65>;
-	interrupt-parent = <&gpio1>;
-	interrupts = <16 2>;
-};
diff --git a/Documentation/devicetree/bindings/iio/chemical/atlas,sensor.yaml b/Documentation/devicetree/bindings/iio/chemical/atlas,sensor.yaml
new file mode 100644
index 000000000000..edcd2904d50e
--- /dev/null
+++ b/Documentation/devicetree/bindings/iio/chemical/atlas,sensor.yaml
@@ -0,0 +1,53 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/iio/chemical/atlas,sensor.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Atlas Scientific OEM sensors
+
+maintainers:
+  - Matt Ranostay <matt.ranostay@konsulko.com>
+
+description: |
+  Atlas Scientific OEM sensors connected via I2C
+
+  Datasheets:
+    http://www.atlas-scientific.com/_files/_datasheets/_oem/DO_oem_datasheet.pdf
+    http://www.atlas-scientific.com/_files/_datasheets/_oem/EC_oem_datasheet.pdf
+    http://www.atlas-scientific.com/_files/_datasheets/_oem/ORP_oem_datasheet.pdf
+    http://www.atlas-scientific.com/_files/_datasheets/_oem/pH_oem_datasheet.pdf
+
+properties:
+  compatible:
+    enum:
+      - atlas,do-sm
+      - atlas,ec-sm
+      - atlas,orp-sm
+      - atlas,ph-sm
+
+  reg:
+     maxItems: 1
+
+  interrupts:
+     maxItems: 1
+
+required:
+  - compatible
+  - reg
+
+additionalProperties: false
+
+examples:
+  - |
+    i2c {
+      #address-cells = <1>;
+      #size-cells = <0>;
+
+      atlas@66 {
+        compatible = "atlas,orp-sm";
+        reg = <0x66>;
+        interrupt-parent = <&gpio1>;
+        interrupts = <16 2>;
+      };
+    };
-- 
2.25.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v7 1/3] iio: chemical: atlas-sensor: allow probe without interrupt line
  2020-02-18  3:42 ` [PATCH v7 1/3] iio: chemical: atlas-sensor: allow probe without interrupt line Matt Ranostay
@ 2020-02-21 12:09   ` Jonathan Cameron
  0 siblings, 0 replies; 7+ messages in thread
From: Jonathan Cameron @ 2020-02-21 12:09 UTC (permalink / raw)
  To: Matt Ranostay; +Cc: linux-iio

On Mon, 17 Feb 2020 19:42:37 -0800
Matt Ranostay <matt.ranostay@konsulko.com> wrote:

> Sensors don't actually need a interrupt line to give valid readings,
> and can triggered with CONFIG_IIO_HRTIMER_TRIGGER as well. Remove
> the required check for interrupt, and continue along in the probe
> function.
> 
> Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
Hmm. I'll apply this version, but I'm still not really happy with the logic.
That interrupt enable should occur in the trigger related callbacks (as it's
to do with the trigger) rather than in the buffer ones.  The boundary between
the two is blurred when a device is only used with it's own trigger so this
only becomes an issue once we have external triggers being supported.

This is a more minimal change so perhaps you can look at whether the logic
can be tidied up later.  

Applied to the togreg branch of iio.git and pushed out as testing for
the autobuilders to play with it.

Thanks,

Jonathan

> ---
>  drivers/iio/chemical/atlas-sensor.c | 33 ++++++++++++++++-------------
>  1 file changed, 18 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/iio/chemical/atlas-sensor.c b/drivers/iio/chemical/atlas-sensor.c
> index 2f0a6fed2589..d95818b74770 100644
> --- a/drivers/iio/chemical/atlas-sensor.c
> +++ b/drivers/iio/chemical/atlas-sensor.c
> @@ -76,6 +76,7 @@ struct atlas_data {
>  	struct atlas_device *chip;
>  	struct regmap *regmap;
>  	struct irq_work work;
> +	unsigned int interrupt_enabled;
>  
>  	__be32 buffer[6]; /* 96-bit data + 32-bit pad + 64-bit timestamp */
>  };
> @@ -304,6 +305,9 @@ static int atlas_set_powermode(struct atlas_data *data, int on)
>  
>  static int atlas_set_interrupt(struct atlas_data *data, bool state)
>  {
> +	if (!data->interrupt_enabled)
> +		return 0;
> +
>  	return regmap_update_bits(data->regmap, ATLAS_REG_INT_CONTROL,
>  				  ATLAS_REG_INT_CONTROL_EN,
>  				  state ? ATLAS_REG_INT_CONTROL_EN : 0);
> @@ -572,11 +576,6 @@ static int atlas_probe(struct i2c_client *client,
>  	if (ret)
>  		return ret;
>  
> -	if (client->irq <= 0) {
> -		dev_err(&client->dev, "no valid irq defined\n");
> -		return -EINVAL;
> -	}
> -
>  	ret = chip->calibration(data);
>  	if (ret)
>  		return ret;
> @@ -596,16 +595,20 @@ static int atlas_probe(struct i2c_client *client,
>  
>  	init_irq_work(&data->work, atlas_work_handler);
>  
> -	/* interrupt pin toggles on new conversion */
> -	ret = devm_request_threaded_irq(&client->dev, client->irq,
> -					NULL, atlas_interrupt_handler,
> -					IRQF_TRIGGER_RISING |
> -					IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
> -					"atlas_irq",
> -					indio_dev);
> -	if (ret) {
> -		dev_err(&client->dev, "request irq (%d) failed\n", client->irq);
> -		goto unregister_buffer;
> +	if (client->irq > 0) {
> +		/* interrupt pin toggles on new conversion */
> +		ret = devm_request_threaded_irq(&client->dev, client->irq,
> +				NULL, atlas_interrupt_handler,
> +				IRQF_TRIGGER_RISING |
> +				IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
> +				"atlas_irq",
> +				indio_dev);
> +
> +		if (ret)
> +			dev_warn(&client->dev,
> +				"request irq (%d) failed\n", client->irq);
> +		else
> +			data->interrupt_enabled = 1;
>  	}
>  
>  	ret = atlas_set_powermode(data, 1);


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v7 2/3] iio: chemical: atlas-sensor: add DO-SM module support
  2020-02-18  3:42 ` [PATCH v7 2/3] iio: chemical: atlas-sensor: add DO-SM module support Matt Ranostay
@ 2020-02-21 12:11   ` Jonathan Cameron
  0 siblings, 0 replies; 7+ messages in thread
From: Jonathan Cameron @ 2020-02-21 12:11 UTC (permalink / raw)
  To: Matt Ranostay; +Cc: linux-iio

On Mon, 17 Feb 2020 19:42:38 -0800
Matt Ranostay <matt.ranostay@konsulko.com> wrote:

> Atlas Scientific DO-SM OEM sensor reads disolved oxygen in
> a solution. This is reported back as mg/L which maps directly
> to ppm and so the IIO_CONCENTRATION channel type can be used.
> 
> Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
Applied to the togreg branch of iio.git and pushed out as testing
for the autobuilders to play with it.

Thanks,

Jonathan

> ---
>  drivers/iio/chemical/atlas-sensor.c | 64 +++++++++++++++++++++++++++--
>  1 file changed, 60 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/iio/chemical/atlas-sensor.c b/drivers/iio/chemical/atlas-sensor.c
> index d95818b74770..82d470561ad3 100644
> --- a/drivers/iio/chemical/atlas-sensor.c
> +++ b/drivers/iio/chemical/atlas-sensor.c
> @@ -48,6 +48,11 @@
>  #define ATLAS_REG_EC_CALIB_STATUS_LOW		BIT(2)
>  #define ATLAS_REG_EC_CALIB_STATUS_HIGH		BIT(3)
>  
> +#define ATLAS_REG_DO_CALIB_STATUS		0x09
> +#define ATLAS_REG_DO_CALIB_STATUS_MASK		0x03
> +#define ATLAS_REG_DO_CALIB_STATUS_PRESSURE	BIT(0)
> +#define ATLAS_REG_DO_CALIB_STATUS_DO		BIT(1)
> +
>  #define ATLAS_REG_PH_TEMP_DATA		0x0e
>  #define ATLAS_REG_PH_DATA		0x16
>  
> @@ -60,14 +65,19 @@
>  #define ATLAS_REG_ORP_CALIB_STATUS	0x0d
>  #define ATLAS_REG_ORP_DATA		0x0e
>  
> +#define ATLAS_REG_DO_TEMP_DATA		0x12
> +#define ATLAS_REG_DO_DATA		0x22
> +
>  #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
>  
>  enum {
>  	ATLAS_PH_SM,
>  	ATLAS_EC_SM,
>  	ATLAS_ORP_SM,
> +	ATLAS_DO_SM,
>  };
>  
>  struct atlas_data {
> @@ -122,7 +132,7 @@ static const struct iio_chan_spec atlas_ph_channels[] = {
>  	},
>  };
>  
> -#define ATLAS_EC_CHANNEL(_idx, _addr) \
> +#define ATLAS_CONCENTRATION_CHANNEL(_idx, _addr) \
>  	{\
>  		.type = IIO_CONCENTRATION, \
>  		.indexed = 1, \
> @@ -153,8 +163,8 @@ static const struct iio_chan_spec atlas_ec_channels[] = {
>  			.endianness = IIO_BE,
>  		},
>  	},
> -	ATLAS_EC_CHANNEL(0, ATLAS_REG_TDS_DATA),
> -	ATLAS_EC_CHANNEL(1, ATLAS_REG_PSS_DATA),
> +	ATLAS_CONCENTRATION_CHANNEL(0, ATLAS_REG_TDS_DATA),
> +	ATLAS_CONCENTRATION_CHANNEL(1, ATLAS_REG_PSS_DATA),
>  	IIO_CHAN_SOFT_TIMESTAMP(3),
>  	{
>  		.type = IIO_TEMP,
> @@ -183,6 +193,19 @@ static const struct iio_chan_spec atlas_orp_channels[] = {
>  	IIO_CHAN_SOFT_TIMESTAMP(1),
>  };
>  
> +static const struct iio_chan_spec atlas_do_channels[] = {
> +	ATLAS_CONCENTRATION_CHANNEL(0, ATLAS_REG_DO_DATA),
> +	IIO_CHAN_SOFT_TIMESTAMP(1),
> +	{
> +		.type = IIO_TEMP,
> +		.address = ATLAS_REG_DO_TEMP_DATA,
> +		.info_mask_separate =
> +			BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),
> +		.output = 1,
> +		.scan_index = -1
> +	},
> +};
> +
>  static int atlas_check_ph_calibration(struct atlas_data *data)
>  {
>  	struct device *dev = &data->client->dev;
> @@ -263,7 +286,31 @@ static int atlas_check_orp_calibration(struct atlas_data *data)
>  		dev_warn(dev, "device has not been calibrated\n");
>  
>  	return 0;
> -};
> +}
> +
> +static int atlas_check_do_calibration(struct atlas_data *data)
> +{
> +	struct device *dev = &data->client->dev;
> +	int ret;
> +	unsigned int val;
> +
> +	ret = regmap_read(data->regmap, ATLAS_REG_DO_CALIB_STATUS, &val);
> +	if (ret)
> +		return ret;
> +
> +	if (!(val & ATLAS_REG_DO_CALIB_STATUS_MASK)) {
> +		dev_warn(dev, "device has not been calibrated\n");
> +		return 0;
> +	}
> +
> +	if (!(val & ATLAS_REG_DO_CALIB_STATUS_PRESSURE))
> +		dev_warn(dev, "device missing atmospheric pressure calibration\n");
> +
> +	if (!(val & ATLAS_REG_DO_CALIB_STATUS_DO))
> +		dev_warn(dev, "device missing dissolved oxygen calibration\n");
> +
> +	return 0;
> +}
>  
>  struct atlas_device {
>  	const struct iio_chan_spec *channels;
> @@ -296,6 +343,13 @@ static struct atlas_device atlas_devices[] = {
>  				.calibration = &atlas_check_orp_calibration,
>  				.delay = ATLAS_ORP_INT_TIME_IN_MS,
>  	},
> +	[ATLAS_DO_SM] = {
> +				.channels = atlas_do_channels,
> +				.num_channels = 3,
> +				.data_reg = ATLAS_REG_DO_DATA,
> +				.calibration = &atlas_check_do_calibration,
> +				.delay = ATLAS_DO_INT_TIME_IN_MS,
> +	},
>  };
>  
>  static int atlas_set_powermode(struct atlas_data *data, int on)
> @@ -511,6 +565,7 @@ static const struct i2c_device_id atlas_id[] = {
>  	{ "atlas-ph-sm", ATLAS_PH_SM},
>  	{ "atlas-ec-sm", ATLAS_EC_SM},
>  	{ "atlas-orp-sm", ATLAS_ORP_SM},
> +	{ "atlas-do-sm", ATLAS_DO_SM},
>  	{}
>  };
>  MODULE_DEVICE_TABLE(i2c, atlas_id);
> @@ -519,6 +574,7 @@ static const struct of_device_id atlas_dt_ids[] = {
>  	{ .compatible = "atlas,ph-sm", .data = (void *)ATLAS_PH_SM, },
>  	{ .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, },
>  	{ }
>  };
>  MODULE_DEVICE_TABLE(of, atlas_dt_ids);


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v7 3/3] dt-bindings: iio: chemical: consolidate atlas-sensor docs
  2020-02-18  3:42 ` [PATCH v7 3/3] dt-bindings: iio: chemical: consolidate atlas-sensor docs Matt Ranostay
@ 2020-02-21 12:13   ` Jonathan Cameron
  0 siblings, 0 replies; 7+ messages in thread
From: Jonathan Cameron @ 2020-02-21 12:13 UTC (permalink / raw)
  To: Matt Ranostay; +Cc: linux-iio, Rob Herring

On Mon, 17 Feb 2020 19:42:39 -0800
Matt Ranostay <matt.ranostay@konsulko.com> wrote:

> Since Atlas Scientific device support only varies from the compatible
> string is ideal all the respective docs are merged into a single doc
> named atlas,sensor.yaml
> 
> Reviewed-by: Rob Herring <robh@kernel.org>
> Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>

Great.  Appiled to the togreg branch of iio.git and pushed out as testing
for the autobuilders to play with it.

Thanks,

Jonathan

> ---
>  .../bindings/iio/chemical/atlas,ec-sm.txt     | 21 --------
>  .../bindings/iio/chemical/atlas,orp-sm.txt    | 21 --------
>  .../bindings/iio/chemical/atlas,ph-sm.txt     | 21 --------
>  .../bindings/iio/chemical/atlas,sensor.yaml   | 53 +++++++++++++++++++
>  4 files changed, 53 insertions(+), 63 deletions(-)
>  delete mode 100644 Documentation/devicetree/bindings/iio/chemical/atlas,ec-sm.txt
>  delete mode 100644 Documentation/devicetree/bindings/iio/chemical/atlas,orp-sm.txt
>  delete mode 100644 Documentation/devicetree/bindings/iio/chemical/atlas,ph-sm.txt
>  create mode 100644 Documentation/devicetree/bindings/iio/chemical/atlas,sensor.yaml
> 
> diff --git a/Documentation/devicetree/bindings/iio/chemical/atlas,ec-sm.txt b/Documentation/devicetree/bindings/iio/chemical/atlas,ec-sm.txt
> deleted file mode 100644
> index f4320595b851..000000000000
> --- a/Documentation/devicetree/bindings/iio/chemical/atlas,ec-sm.txt
> +++ /dev/null
> @@ -1,21 +0,0 @@
> -* Atlas Scientific EC-SM OEM sensor
> -
> -http://www.atlas-scientific.com/_files/_datasheets/_oem/EC_oem_datasheet.pdf
> -
> -Required properties:
> -
> -  - compatible: must be "atlas,ec-sm"
> -  - reg: the I2C address of the sensor
> -  - interrupts: the sole interrupt generated by the device
> -
> -  Refer to interrupt-controller/interrupts.txt for generic interrupt client
> -  node bindings.
> -
> -Example:
> -
> -atlas@64 {
> -	compatible = "atlas,ec-sm";
> -	reg = <0x64>;
> -	interrupt-parent = <&gpio1>;
> -	interrupts = <16 2>;
> -};
> diff --git a/Documentation/devicetree/bindings/iio/chemical/atlas,orp-sm.txt b/Documentation/devicetree/bindings/iio/chemical/atlas,orp-sm.txt
> deleted file mode 100644
> index af1f5a9aa4da..000000000000
> --- a/Documentation/devicetree/bindings/iio/chemical/atlas,orp-sm.txt
> +++ /dev/null
> @@ -1,21 +0,0 @@
> -* Atlas Scientific ORP-SM OEM sensor
> -
> -https://www.atlas-scientific.com/_files/_datasheets/_oem/ORP_oem_datasheet.pdf
> -
> -Required properties:
> -
> -  - compatible: must be "atlas,orp-sm"
> -  - reg: the I2C address of the sensor
> -  - interrupts: the sole interrupt generated by the device
> -
> -  Refer to interrupt-controller/interrupts.txt for generic interrupt client
> -  node bindings.
> -
> -Example:
> -
> -atlas@66 {
> -	compatible = "atlas,orp-sm";
> -	reg = <0x66>;
> -	interrupt-parent = <&gpio1>;
> -	interrupts = <16 2>;
> -};
> diff --git a/Documentation/devicetree/bindings/iio/chemical/atlas,ph-sm.txt b/Documentation/devicetree/bindings/iio/chemical/atlas,ph-sm.txt
> deleted file mode 100644
> index 79d90f060327..000000000000
> --- a/Documentation/devicetree/bindings/iio/chemical/atlas,ph-sm.txt
> +++ /dev/null
> @@ -1,21 +0,0 @@
> -* Atlas Scientific pH-SM OEM sensor
> -
> -http://www.atlas-scientific.com/_files/_datasheets/_oem/pH_oem_datasheet.pdf
> -
> -Required properties:
> -
> -  - compatible: must be "atlas,ph-sm"
> -  - reg: the I2C address of the sensor
> -  - interrupts: the sole interrupt generated by the device
> -
> -  Refer to interrupt-controller/interrupts.txt for generic interrupt client
> -  node bindings.
> -
> -Example:
> -
> -atlas@65 {
> -	compatible = "atlas,ph-sm";
> -	reg = <0x65>;
> -	interrupt-parent = <&gpio1>;
> -	interrupts = <16 2>;
> -};
> diff --git a/Documentation/devicetree/bindings/iio/chemical/atlas,sensor.yaml b/Documentation/devicetree/bindings/iio/chemical/atlas,sensor.yaml
> new file mode 100644
> index 000000000000..edcd2904d50e
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/iio/chemical/atlas,sensor.yaml
> @@ -0,0 +1,53 @@
> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/iio/chemical/atlas,sensor.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Atlas Scientific OEM sensors
> +
> +maintainers:
> +  - Matt Ranostay <matt.ranostay@konsulko.com>
> +
> +description: |
> +  Atlas Scientific OEM sensors connected via I2C
> +
> +  Datasheets:
> +    http://www.atlas-scientific.com/_files/_datasheets/_oem/DO_oem_datasheet.pdf
> +    http://www.atlas-scientific.com/_files/_datasheets/_oem/EC_oem_datasheet.pdf
> +    http://www.atlas-scientific.com/_files/_datasheets/_oem/ORP_oem_datasheet.pdf
> +    http://www.atlas-scientific.com/_files/_datasheets/_oem/pH_oem_datasheet.pdf
> +
> +properties:
> +  compatible:
> +    enum:
> +      - atlas,do-sm
> +      - atlas,ec-sm
> +      - atlas,orp-sm
> +      - atlas,ph-sm
> +
> +  reg:
> +     maxItems: 1
> +
> +  interrupts:
> +     maxItems: 1
> +
> +required:
> +  - compatible
> +  - reg
> +
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    i2c {
> +      #address-cells = <1>;
> +      #size-cells = <0>;
> +
> +      atlas@66 {
> +        compatible = "atlas,orp-sm";
> +        reg = <0x66>;
> +        interrupt-parent = <&gpio1>;
> +        interrupts = <16 2>;
> +      };
> +    };


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2020-02-21 12:13 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-18  3:42 [PATCH v7 0/3] iio: chemical: atlas-sensor: add DO support Matt Ranostay
2020-02-18  3:42 ` [PATCH v7 1/3] iio: chemical: atlas-sensor: allow probe without interrupt line Matt Ranostay
2020-02-21 12:09   ` Jonathan Cameron
2020-02-18  3:42 ` [PATCH v7 2/3] iio: chemical: atlas-sensor: add DO-SM module support Matt Ranostay
2020-02-21 12:11   ` Jonathan Cameron
2020-02-18  3:42 ` [PATCH v7 3/3] dt-bindings: iio: chemical: consolidate atlas-sensor docs Matt Ranostay
2020-02-21 12:13   ` Jonathan Cameron

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.