linux-iio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/9] iio: adc: ad7606: Improvements
@ 2024-06-18 14:02 Guillaume Stols
  2024-06-18 14:02 ` [PATCH 1/9] dt-bindings: iio: adc: adi,ad7606: add missing datasheet link Guillaume Stols
                   ` (8 more replies)
  0 siblings, 9 replies; 27+ messages in thread
From: Guillaume Stols @ 2024-06-18 14:02 UTC (permalink / raw)
  To: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Beniamin Bia,
	Stefan Popa
  Cc: linux-iio, linux-kernel, Michael Hennerich, linux-fbdev,
	devicetree, Jonathan Cameron, Guillaume Stols, jstephan, dlechner

This series adds the following improvements over the current AD7606's
driver implementation:

- Fix wrong usage of gpio array
- Fix standby that was documented as ACTIVE_LOW but handled in the
  driver as if it was ACTIVE_HIGH
- Improve dt-bindings documentation
- Switch mutex lock to scoped guard

Signed-off-by: Guillaume Stols <gstols@baylibre.com>
---
Guillaume Stols (9):
      dt-bindings: iio: adc: adi,ad7606: add missing datasheet link
      dt-bindings: iio: adc: adi,ad7606: comment and sort the compatible names
      dt-bindings: iio: adc: adi,ad7606: improve descriptions
      dt-bindings: iio: adc: adi,ad7606: add supply properties
      dt-bindings: iio: adc: adi,ad7606: add conditions
      dt-bindings: iio: adc: adi,ad7606: fix example
      iio: adc: ad7606: switch mutexes to scoped_guard
      iio: adc: ad7606: fix oversampling gpio array
      iio: adc: ad7606: fix standby gpio state to match the documentation

 .../devicetree/bindings/iio/adc/adi,ad7606.yaml    | 126 +++++++++++++++------
 drivers/iio/adc/ad7606.c                           |  79 ++++++-------
 drivers/iio/adc/ad7606_spi.c                       |   5 +-
 3 files changed, 134 insertions(+), 76 deletions(-)
---
base-commit: 07d4d0bb4a8ddcc463ed599b22f510d5926c2495
change-id: 20240416-cleanup-ad7606-161e2ed9818b

Best regards,
-- 
Guillaume Stols <gstols@baylibre.com>


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

* [PATCH 1/9] dt-bindings: iio: adc: adi,ad7606: add missing datasheet link
  2024-06-18 14:02 [PATCH 0/9] iio: adc: ad7606: Improvements Guillaume Stols
@ 2024-06-18 14:02 ` Guillaume Stols
  2024-06-27 20:30   ` Rob Herring (Arm)
  2024-06-18 14:02 ` [PATCH 2/9] dt-bindings: iio: adc: adi,ad7606: comment and sort the compatible names Guillaume Stols
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 27+ messages in thread
From: Guillaume Stols @ 2024-06-18 14:02 UTC (permalink / raw)
  To: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Beniamin Bia,
	Stefan Popa
  Cc: linux-iio, linux-kernel, Michael Hennerich, linux-fbdev,
	devicetree, Jonathan Cameron, Guillaume Stols, jstephan, dlechner

Add AD7606-5 datasheet link.

Signed-off-by: Guillaume Stols <gstols@baylibre.com>
---
 Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
index 7fa46df1f4fb..d55c58400df5 100644
--- a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
+++ b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
@@ -11,6 +11,7 @@ maintainers:
 
 description: |
   Analog Devices AD7606 Simultaneous Sampling ADC
+  https://www.analog.com/media/en/technical-documentation/data-sheets/AD7605-4.pdf
   https://www.analog.com/media/en/technical-documentation/data-sheets/ad7606_7606-6_7606-4.pdf
   https://www.analog.com/media/en/technical-documentation/data-sheets/AD7606B.pdf
   https://www.analog.com/media/en/technical-documentation/data-sheets/AD7616.pdf

-- 
2.34.1


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

* [PATCH 2/9] dt-bindings: iio: adc: adi,ad7606: comment and sort the compatible names
  2024-06-18 14:02 [PATCH 0/9] iio: adc: ad7606: Improvements Guillaume Stols
  2024-06-18 14:02 ` [PATCH 1/9] dt-bindings: iio: adc: adi,ad7606: add missing datasheet link Guillaume Stols
@ 2024-06-18 14:02 ` Guillaume Stols
  2024-06-27 20:32   ` Rob Herring (Arm)
  2024-06-18 14:02 ` [PATCH 3/9] dt-bindings: iio: adc: adi,ad7606: improve descriptions Guillaume Stols
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 27+ messages in thread
From: Guillaume Stols @ 2024-06-18 14:02 UTC (permalink / raw)
  To: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Beniamin Bia,
	Stefan Popa
  Cc: linux-iio, linux-kernel, Michael Hennerich, linux-fbdev,
	devicetree, Jonathan Cameron, Guillaume Stols, jstephan, dlechner

AD7606-8 is referred to as AD7606 by Analog Devices. This comment aims
to avoid confusion. Also the compatible names were not sorted by
alphabetical order.

Signed-off-by: Guillaume Stols <gstols@baylibre.com>
---
 Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
index d55c58400df5..00fdaed11cbd 100644
--- a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
+++ b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
@@ -20,9 +20,9 @@ properties:
   compatible:
     enum:
       - adi,ad7605-4
-      - adi,ad7606-8
-      - adi,ad7606-6
       - adi,ad7606-4
+      - adi,ad7606-6
+      - adi,ad7606-8  # Referred to as AD7606 (without -8) in the datasheet
       - adi,ad7606b
       - adi,ad7616
 

-- 
2.34.1


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

* [PATCH 3/9] dt-bindings: iio: adc: adi,ad7606: improve descriptions
  2024-06-18 14:02 [PATCH 0/9] iio: adc: ad7606: Improvements Guillaume Stols
  2024-06-18 14:02 ` [PATCH 1/9] dt-bindings: iio: adc: adi,ad7606: add missing datasheet link Guillaume Stols
  2024-06-18 14:02 ` [PATCH 2/9] dt-bindings: iio: adc: adi,ad7606: comment and sort the compatible names Guillaume Stols
@ 2024-06-18 14:02 ` Guillaume Stols
  2024-06-23 15:28   ` Jonathan Cameron
  2024-06-18 14:02 ` [PATCH 4/9] dt-bindings: iio: adc: adi,ad7606: add supply properties Guillaume Stols
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 27+ messages in thread
From: Guillaume Stols @ 2024-06-18 14:02 UTC (permalink / raw)
  To: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Beniamin Bia,
	Stefan Popa
  Cc: linux-iio, linux-kernel, Michael Hennerich, linux-fbdev,
	devicetree, Jonathan Cameron, Guillaume Stols, jstephan, dlechner

Reword a few descriptions, and normalize the text width to 80 characters.

Signed-off-by: Guillaume Stols <gstols@baylibre.com>
---
 .../devicetree/bindings/iio/adc/adi,ad7606.yaml    | 61 ++++++++++++----------
 1 file changed, 34 insertions(+), 27 deletions(-)

diff --git a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
index 00fdaed11cbd..80866940123c 100644
--- a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
+++ b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
@@ -36,64 +36,71 @@ properties:
   avcc-supply: true
 
   interrupts:
+    description:
+      The BUSY pin falling edge indicates that the conversion is over, and thus
+      new data is available.
     maxItems: 1
 
   adi,conversion-start-gpios:
     description:
-      Must be the device tree identifier of the CONVST pin.
-      This logic input is used to initiate conversions on the analog
-      input channels. As the line is active high, it should be marked
-      GPIO_ACTIVE_HIGH.
+      Must be the device tree identifier of the CONVST pin(s). This logic input
+      is used to initiate conversions on the analog input channels. As the line
+      is active high, it should be marked GPIO_ACTIVE_HIGH.
     maxItems: 1
 
   reset-gpios:
     description:
-      Must be the device tree identifier of the RESET pin. If specified,
-      it will be asserted during driver probe. As the line is active high,
-      it should be marked GPIO_ACTIVE_HIGH.
+      Must be the device tree identifier of the RESET pin. If specified, it will
+      be asserted during driver probe. On the AD7606x, as the line is active
+      high, it should be marked GPIO_ACTIVE_HIGH. On the AD7616, as the line is
+      active low, it should be marked GPIO_ACTIVE_LOW.
     maxItems: 1
 
   standby-gpios:
     description:
-      Must be the device tree identifier of the STBY pin. This pin is used
-      to place the AD7606 into one of two power-down modes, Standby mode or
+      Must be the device tree identifier of the STBY pin. This pin is used to
+      place the AD7606 into one of two power-down modes, Standby mode or
       Shutdown mode. As the line is active low, it should be marked
       GPIO_ACTIVE_LOW.
     maxItems: 1
 
   adi,first-data-gpios:
     description:
-      Must be the device tree identifier of the FRSTDATA pin.
-      The FRSTDATA output indicates when the first channel, V1, is
-      being read back on either the parallel, byte or serial interface.
-      As the line is active high, it should be marked GPIO_ACTIVE_HIGH.
+      Must be the device tree identifier of the FRSTDATA pin. The FRSTDATA
+      output indicates when the first channel, V1, is being read back on either
+      the parallel, byte or serial interface. As the line is active
+      high, it should be marked GPIO_ACTIVE_HIGH.
     maxItems: 1
 
   adi,range-gpios:
     description:
-      Must be the device tree identifier of the RANGE pin. The polarity on
-      this pin determines the input range of the analog input channels. If
-      this pin is tied to a logic high, the analog input range is ±10V for
-      all channels. If this pin is tied to a logic low, the analog input range
+      Must be the device tree identifier of the RANGE pin. The state on this
+      pin determines the input range of the analog input channels. If this pin
+      is tied to a logic high, the analog input range is ±10V for all channels.
+      On the AD760X, if this pin is tied to a logic low, the analog input range
       is ±5V for all channels. As the line is active high, it should be marked
-      GPIO_ACTIVE_HIGH.
+      GPIO_ACTIVE_HIGH. On the AD7616, there are 2 pins, and if the 2 pins are
+      tied to a logic high, software mode is enabled, otherwise one of the 3
+      possible range values is selected.
     maxItems: 1
 
   adi,oversampling-ratio-gpios:
     description:
-      Must be the device tree identifier of the over-sampling
-      mode pins. As the line is active high, it should be marked
-      GPIO_ACTIVE_HIGH.
+      Must be the device tree identifier of the over-sampling mode pins. As the
+      line is active high, it should be marked GPIO_ACTIVE_HIGH. On the AD7606X
+      parts that support it, if all 3 pins are tied to a logic high, software
+      mode is enabled.
     maxItems: 3
 
   adi,sw-mode:
     description:
-      Software mode of operation, so far available only for ad7616 and ad7606b.
-      It is enabled when all three oversampling mode pins are connected to
-      high level. The device is configured by the corresponding registers. If the
-      adi,oversampling-ratio-gpios property is defined, then the driver will set the
-      oversampling gpios to high. Otherwise, it is assumed that the pins are hardwired
-      to VDD.
+      Software mode of operation, so far available only for AD7616 and AD7606b.
+      It is enabled when all three oversampling mode pins are connected to high
+      level for the AD7606B, or all two range selection pins are connected to
+      high level for the AD7616. The device is configured by the corresponding
+      registers. If the adi,oversampling-ratio-gpios property is defined, then
+      the driver will set the oversampling gpios to high. Otherwise, it is
+      assumed that the pins are hardwired to VDD.
     type: boolean
 
 required:

-- 
2.34.1


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

* [PATCH 4/9] dt-bindings: iio: adc: adi,ad7606: add supply properties
  2024-06-18 14:02 [PATCH 0/9] iio: adc: ad7606: Improvements Guillaume Stols
                   ` (2 preceding siblings ...)
  2024-06-18 14:02 ` [PATCH 3/9] dt-bindings: iio: adc: adi,ad7606: improve descriptions Guillaume Stols
@ 2024-06-18 14:02 ` Guillaume Stols
  2024-06-18 15:12   ` Conor Dooley
  2024-06-18 14:02 ` [PATCH 5/9] dt-bindings: iio: adc: adi,ad7606: add conditions Guillaume Stols
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 27+ messages in thread
From: Guillaume Stols @ 2024-06-18 14:02 UTC (permalink / raw)
  To: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Beniamin Bia,
	Stefan Popa
  Cc: linux-iio, linux-kernel, Michael Hennerich, linux-fbdev,
	devicetree, Jonathan Cameron, Guillaume Stols, jstephan, dlechner

Add voltage supplies

Signed-off-by: Guillaume Stols <gstols@baylibre.com>
---
 Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
index 80866940123c..e480c9a7c7ca 100644
--- a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
+++ b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
@@ -35,6 +35,15 @@ properties:
 
   avcc-supply: true
 
+  vdrive-supply:
+    description:
+      Determines the voltage level at which the interface logic pins will
+      operate.
+
+  refin-supply:
+    description:
+      The voltage supply for optional external reference voltage.
+
   interrupts:
     description:
       The BUSY pin falling edge indicates that the conversion is over, and thus

-- 
2.34.1


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

* [PATCH 5/9] dt-bindings: iio: adc: adi,ad7606: add conditions
  2024-06-18 14:02 [PATCH 0/9] iio: adc: ad7606: Improvements Guillaume Stols
                   ` (3 preceding siblings ...)
  2024-06-18 14:02 ` [PATCH 4/9] dt-bindings: iio: adc: adi,ad7606: add supply properties Guillaume Stols
@ 2024-06-18 14:02 ` Guillaume Stols
  2024-06-18 15:13   ` Conor Dooley
                     ` (2 more replies)
  2024-06-18 14:02 ` [PATCH 6/9] dt-bindings: iio: adc: adi,ad7606: fix example Guillaume Stols
                   ` (3 subsequent siblings)
  8 siblings, 3 replies; 27+ messages in thread
From: Guillaume Stols @ 2024-06-18 14:02 UTC (permalink / raw)
  To: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Beniamin Bia,
	Stefan Popa
  Cc: linux-iio, linux-kernel, Michael Hennerich, linux-fbdev,
	devicetree, Jonathan Cameron, Guillaume Stols, jstephan, dlechner

Since the driver supports several parts that present differences in
their layout and behaviour, it is necessary to describe the differences
from one chip to another.

Signed-off-by: Guillaume Stols <gstols@baylibre.com>
---
 .../devicetree/bindings/iio/adc/adi,ad7606.yaml    | 50 +++++++++++++++++++++-
 1 file changed, 48 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
index e480c9a7c7ca..65d6ca5843d7 100644
--- a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
+++ b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
@@ -55,7 +55,8 @@ properties:
       Must be the device tree identifier of the CONVST pin(s). This logic input
       is used to initiate conversions on the analog input channels. As the line
       is active high, it should be marked GPIO_ACTIVE_HIGH.
-    maxItems: 1
+    minItems: 1
+    maxItems: 2
 
   reset-gpios:
     description:
@@ -91,7 +92,8 @@ properties:
       GPIO_ACTIVE_HIGH. On the AD7616, there are 2 pins, and if the 2 pins are
       tied to a logic high, software mode is enabled, otherwise one of the 3
       possible range values is selected.
-    maxItems: 1
+    minItems: 1
+    maxItems: 2
 
   adi,oversampling-ratio-gpios:
     description:
@@ -123,6 +125,50 @@ required:
 allOf:
   - $ref: /schemas/spi/spi-peripheral-props.yaml#
 
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: adi,ad7616
+    then:
+      properties:
+        adi,first-data-gpios: false
+        standby-gpios: false
+        adi,range-gpios:
+          maxItems: 2
+    else:
+      properties:
+        adi,range-gpios:
+          maxItems: 1
+
+  - if:
+      properties:
+        compatible:
+          contains:
+            enum:
+              - adi,ad7605-4
+              - adi,ad7616
+    then:
+      properties:
+        adi,oversampling-ratio-gpios: false
+
+  - if:
+      properties:
+        compatible:
+          contains:
+            enum:
+              - adi,ad7605-4
+              - adi,ad7606-4
+              - adi,ad7606-6
+              - adi,ad7606-8
+    then:
+      properties:
+        adi,sw-mode: false
+    else:
+      properties:
+        adi,conversion-start-gpios:
+          maxItems: 1
+
 unevaluatedProperties: false
 
 examples:

-- 
2.34.1


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

* [PATCH 6/9] dt-bindings: iio: adc: adi,ad7606: fix example
  2024-06-18 14:02 [PATCH 0/9] iio: adc: ad7606: Improvements Guillaume Stols
                   ` (4 preceding siblings ...)
  2024-06-18 14:02 ` [PATCH 5/9] dt-bindings: iio: adc: adi,ad7606: add conditions Guillaume Stols
@ 2024-06-18 14:02 ` Guillaume Stols
  2024-06-18 15:10   ` Conor Dooley
  2024-06-18 14:02 ` [PATCH 7/9] iio: adc: ad7606: switch mutexes to scoped_guard Guillaume Stols
                   ` (2 subsequent siblings)
  8 siblings, 1 reply; 27+ messages in thread
From: Guillaume Stols @ 2024-06-18 14:02 UTC (permalink / raw)
  To: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Beniamin Bia,
	Stefan Popa
  Cc: linux-iio, linux-kernel, Michael Hennerich, linux-fbdev,
	devicetree, Jonathan Cameron, Guillaume Stols, jstephan, dlechner

Example uses adi,ad7606-8 as compatible, but adi,sw-mode is not
available for it. So remove this property from example.

Signed-off-by: Guillaume Stols <gstols@baylibre.com>
---
 Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
index 65d6ca5843d7..a8fb0d926859 100644
--- a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
+++ b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
@@ -198,7 +198,6 @@ examples:
                                            <&gpio 23 GPIO_ACTIVE_HIGH>,
                                            <&gpio 26 GPIO_ACTIVE_HIGH>;
             standby-gpios = <&gpio 24 GPIO_ACTIVE_LOW>;
-            adi,sw-mode;
         };
     };
 ...

-- 
2.34.1


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

* [PATCH 7/9] iio: adc: ad7606: switch mutexes to scoped_guard
  2024-06-18 14:02 [PATCH 0/9] iio: adc: ad7606: Improvements Guillaume Stols
                   ` (5 preceding siblings ...)
  2024-06-18 14:02 ` [PATCH 6/9] dt-bindings: iio: adc: adi,ad7606: fix example Guillaume Stols
@ 2024-06-18 14:02 ` Guillaume Stols
  2024-06-19  3:15   ` kernel test robot
  2024-06-23 15:41   ` Jonathan Cameron
  2024-06-18 14:02 ` [PATCH 8/9] iio: adc: ad7606: fix oversampling gpio array Guillaume Stols
  2024-06-18 14:02 ` [PATCH 9/9] iio: adc: ad7606: fix standby gpio state to match the documentation Guillaume Stols
  8 siblings, 2 replies; 27+ messages in thread
From: Guillaume Stols @ 2024-06-18 14:02 UTC (permalink / raw)
  To: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Beniamin Bia,
	Stefan Popa
  Cc: linux-iio, linux-kernel, Michael Hennerich, linux-fbdev,
	devicetree, Jonathan Cameron, Guillaume Stols, jstephan, dlechner

Switching to scoped_guard simplifies the code and avoids to take care to
unlock the mutex in case of premature return.

Signed-off-by: Guillaume Stols <gstols@baylibre.com>
---
 drivers/iio/adc/ad7606.c | 71 ++++++++++++++++++++++--------------------------
 1 file changed, 33 insertions(+), 38 deletions(-)

diff --git a/drivers/iio/adc/ad7606.c b/drivers/iio/adc/ad7606.c
index 3a417595294f..e3426287edf6 100644
--- a/drivers/iio/adc/ad7606.c
+++ b/drivers/iio/adc/ad7606.c
@@ -69,19 +69,18 @@ static int ad7606_reg_access(struct iio_dev *indio_dev,
 	struct ad7606_state *st = iio_priv(indio_dev);
 	int ret;
 
-	mutex_lock(&st->lock);
-	if (readval) {
-		ret = st->bops->reg_read(st, reg);
-		if (ret < 0)
-			goto err_unlock;
-		*readval = ret;
-		ret = 0;
-	} else {
-		ret = st->bops->reg_write(st, reg, writeval);
+	scoped_guard(mutex, &st->lock) {
+		if (readval) {
+			ret = st->bops->reg_read(st, reg);
+			if (ret < 0)
+				return ret;
+			*readval = ret;
+			return 0;
+		} else {
+			return st->bops->reg_write(st, reg, writeval);
+		}
 	}
-err_unlock:
-	mutex_unlock(&st->lock);
-	return ret;
+	unreachable();
 }
 
 static int ad7606_read_samples(struct ad7606_state *st)
@@ -124,18 +123,18 @@ static irqreturn_t ad7606_trigger_handler(int irq, void *p)
 	struct ad7606_state *st = iio_priv(indio_dev);
 	int ret;
 
-	mutex_lock(&st->lock);
+	scoped_guard(mutex, &st->lock) {
+		ret = ad7606_read_samples(st);
+		if (ret)
+			goto error_ret;
 
-	ret = ad7606_read_samples(st);
-	if (ret == 0)
 		iio_push_to_buffers_with_timestamp(indio_dev, st->data,
 						   iio_get_time_ns(indio_dev));
-
-	iio_trigger_notify_done(indio_dev->trig);
-	/* The rising edge of the CONVST signal starts a new conversion. */
-	gpiod_set_value(st->gpio_convst, 1);
-
-	mutex_unlock(&st->lock);
+error_ret:
+		iio_trigger_notify_done(indio_dev->trig);
+		/* The rising edge of the CONVST signal starts a new conversion. */
+		gpiod_set_value(st->gpio_convst, 1);
+	}
 
 	return IRQ_HANDLED;
 }
@@ -259,17 +258,15 @@ static int ad7606_write_raw(struct iio_dev *indio_dev,
 
 	switch (mask) {
 	case IIO_CHAN_INFO_SCALE:
-		mutex_lock(&st->lock);
-		i = find_closest(val2, st->scale_avail, st->num_scales);
-		if (st->sw_mode_en)
-			ch = chan->address;
-		ret = st->write_scale(indio_dev, ch, i);
-		if (ret < 0) {
-			mutex_unlock(&st->lock);
-			return ret;
+		scoped_guard(mutex, &st->lock) {
+			i = find_closest(val2, st->scale_avail, st->num_scales);
+			if (st->sw_mode_en)
+				ch = chan->address;
+			ret = st->write_scale(indio_dev, ch, i);
+			if (ret < 0)
+				return ret;
+			st->range[ch] = i;
 		}
-		st->range[ch] = i;
-		mutex_unlock(&st->lock);
 
 		return 0;
 	case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
@@ -277,14 +274,12 @@ static int ad7606_write_raw(struct iio_dev *indio_dev,
 			return -EINVAL;
 		i = find_closest(val, st->oversampling_avail,
 				 st->num_os_ratios);
-		mutex_lock(&st->lock);
-		ret = st->write_os(indio_dev, i);
-		if (ret < 0) {
-			mutex_unlock(&st->lock);
-			return ret;
+		scoped_guard(mutex, &st->lock) {
+			ret = st->write_os(indio_dev, i);
+			if (ret < 0)
+				return ret;
+			st->oversampling = st->oversampling_avail[i];
 		}
-		st->oversampling = st->oversampling_avail[i];
-		mutex_unlock(&st->lock);
 
 		return 0;
 	default:

-- 
2.34.1


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

* [PATCH 8/9] iio: adc: ad7606: fix oversampling gpio array
  2024-06-18 14:02 [PATCH 0/9] iio: adc: ad7606: Improvements Guillaume Stols
                   ` (6 preceding siblings ...)
  2024-06-18 14:02 ` [PATCH 7/9] iio: adc: ad7606: switch mutexes to scoped_guard Guillaume Stols
@ 2024-06-18 14:02 ` Guillaume Stols
  2024-06-23 15:45   ` Jonathan Cameron
  2024-06-18 14:02 ` [PATCH 9/9] iio: adc: ad7606: fix standby gpio state to match the documentation Guillaume Stols
  8 siblings, 1 reply; 27+ messages in thread
From: Guillaume Stols @ 2024-06-18 14:02 UTC (permalink / raw)
  To: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Beniamin Bia,
	Stefan Popa
  Cc: linux-iio, linux-kernel, Michael Hennerich, linux-fbdev,
	devicetree, Jonathan Cameron, Guillaume Stols, jstephan, dlechner

gpiod_set_array_value was misused here: the implementation relied on the
assumption that an unsigned long was required for each gpio, while the
function expects a bit array stored in "as much unsigned long as needed
for storing one bit per GPIO", i.e it is using a bit field.

Fixes: d2a415c86c6b ("iio: adc: ad7606: Add support for AD7606B ADC")
Signed-off-by: Guillaume Stols <gstols@baylibre.com>
---
 drivers/iio/adc/ad7606.c     | 4 ++--
 drivers/iio/adc/ad7606_spi.c | 5 +++--
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/iio/adc/ad7606.c b/drivers/iio/adc/ad7606.c
index e3426287edf6..502344e019e0 100644
--- a/drivers/iio/adc/ad7606.c
+++ b/drivers/iio/adc/ad7606.c
@@ -235,9 +235,9 @@ static int ad7606_write_os_hw(struct iio_dev *indio_dev, int val)
 	struct ad7606_state *st = iio_priv(indio_dev);
 	DECLARE_BITMAP(values, 3);
 
-	values[0] = val;
+	values[0] = val & GENMASK(2, 0);
 
-	gpiod_set_array_value(ARRAY_SIZE(values), st->gpio_os->desc,
+	gpiod_set_array_value(st->gpio_os->ndescs, st->gpio_os->desc,
 			      st->gpio_os->info, values);
 
 	/* AD7616 requires a reset to update value */
diff --git a/drivers/iio/adc/ad7606_spi.c b/drivers/iio/adc/ad7606_spi.c
index 263a778bcf25..287a0591533b 100644
--- a/drivers/iio/adc/ad7606_spi.c
+++ b/drivers/iio/adc/ad7606_spi.c
@@ -249,8 +249,9 @@ static int ad7616_sw_mode_config(struct iio_dev *indio_dev)
 static int ad7606B_sw_mode_config(struct iio_dev *indio_dev)
 {
 	struct ad7606_state *st = iio_priv(indio_dev);
-	unsigned long os[3] = {1};
+	DECLARE_BITMAP(os, 3);
 
+	bitmap_fill(os, 3);
 	/*
 	 * Software mode is enabled when all three oversampling
 	 * pins are set to high. If oversampling gpios are defined
@@ -258,7 +259,7 @@ static int ad7606B_sw_mode_config(struct iio_dev *indio_dev)
 	 * otherwise, they must be hardwired to VDD
 	 */
 	if (st->gpio_os) {
-		gpiod_set_array_value(ARRAY_SIZE(os),
+		gpiod_set_array_value(st->gpio_os->ndescs,
 				      st->gpio_os->desc, st->gpio_os->info, os);
 	}
 	/* OS of 128 and 256 are available only in software mode */

-- 
2.34.1


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

* [PATCH 9/9] iio: adc: ad7606: fix standby gpio state to match the documentation
  2024-06-18 14:02 [PATCH 0/9] iio: adc: ad7606: Improvements Guillaume Stols
                   ` (7 preceding siblings ...)
  2024-06-18 14:02 ` [PATCH 8/9] iio: adc: ad7606: fix oversampling gpio array Guillaume Stols
@ 2024-06-18 14:02 ` Guillaume Stols
  2024-06-23 15:49   ` Jonathan Cameron
  8 siblings, 1 reply; 27+ messages in thread
From: Guillaume Stols @ 2024-06-18 14:02 UTC (permalink / raw)
  To: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Beniamin Bia,
	Stefan Popa
  Cc: linux-iio, linux-kernel, Michael Hennerich, linux-fbdev,
	devicetree, Jonathan Cameron, Guillaume Stols, jstephan, dlechner

The binding's documentation specifies that "As the line is active low, it
should be marked GPIO_ACTIVE_LOW". However, in the driver, it was handled
the opposite way. This commit sets the driver's behaviour in sync with the
documentation

Fixes: 722407a4e8c0 ("staging:iio:ad7606: Use GPIO descriptor API")
Signed-off-by: Guillaume Stols <gstols@baylibre.com>
---
 drivers/iio/adc/ad7606.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/iio/adc/ad7606.c b/drivers/iio/adc/ad7606.c
index 502344e019e0..05addea105f0 100644
--- a/drivers/iio/adc/ad7606.c
+++ b/drivers/iio/adc/ad7606.c
@@ -438,7 +438,7 @@ static int ad7606_request_gpios(struct ad7606_state *st)
 		return PTR_ERR(st->gpio_range);
 
 	st->gpio_standby = devm_gpiod_get_optional(dev, "standby",
-						   GPIOD_OUT_HIGH);
+						   GPIOD_OUT_LOW);
 	if (IS_ERR(st->gpio_standby))
 		return PTR_ERR(st->gpio_standby);
 
@@ -681,7 +681,7 @@ static int ad7606_suspend(struct device *dev)
 
 	if (st->gpio_standby) {
 		gpiod_set_value(st->gpio_range, 1);
-		gpiod_set_value(st->gpio_standby, 0);
+		gpiod_set_value(st->gpio_standby, 1);
 	}
 
 	return 0;

-- 
2.34.1


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

* Re: [PATCH 6/9] dt-bindings: iio: adc: adi,ad7606: fix example
  2024-06-18 14:02 ` [PATCH 6/9] dt-bindings: iio: adc: adi,ad7606: fix example Guillaume Stols
@ 2024-06-18 15:10   ` Conor Dooley
  2024-06-23 15:35     ` Jonathan Cameron
  0 siblings, 1 reply; 27+ messages in thread
From: Conor Dooley @ 2024-06-18 15:10 UTC (permalink / raw)
  To: Guillaume Stols
  Cc: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Beniamin Bia,
	Stefan Popa, linux-iio, linux-kernel, linux-fbdev, devicetree,
	Jonathan Cameron, jstephan, dlechner

[-- Attachment #1: Type: text/plain, Size: 307 bytes --]

On Tue, Jun 18, 2024 at 02:02:38PM +0000, Guillaume Stols wrote:
> Example uses adi,ad7606-8 as compatible, but adi,sw-mode is not
> available for it. So remove this property from example.
> 
> Signed-off-by: Guillaume Stols <gstols@baylibre.com>

Acked-by: Conor Dooley <conor.dooley@microchip.com>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

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

* Re: [PATCH 4/9] dt-bindings: iio: adc: adi,ad7606: add supply properties
  2024-06-18 14:02 ` [PATCH 4/9] dt-bindings: iio: adc: adi,ad7606: add supply properties Guillaume Stols
@ 2024-06-18 15:12   ` Conor Dooley
  2024-06-18 15:33     ` Guillaume Stols
  0 siblings, 1 reply; 27+ messages in thread
From: Conor Dooley @ 2024-06-18 15:12 UTC (permalink / raw)
  To: Guillaume Stols
  Cc: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Beniamin Bia,
	Stefan Popa, linux-iio, linux-kernel, linux-fbdev, devicetree,
	Jonathan Cameron, jstephan, dlechner

[-- Attachment #1: Type: text/plain, Size: 1101 bytes --]

On Tue, Jun 18, 2024 at 02:02:36PM +0000, Guillaume Stols wrote:
> Add voltage supplies

Are these available on all devices?

> 
> Signed-off-by: Guillaume Stols <gstols@baylibre.com>
> ---
>  Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
> index 80866940123c..e480c9a7c7ca 100644
> --- a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
> +++ b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
> @@ -35,6 +35,15 @@ properties:
>  
>    avcc-supply: true
>  
> +  vdrive-supply:
> +    description:
> +      Determines the voltage level at which the interface logic pins will
> +      operate.
> +
> +  refin-supply:
> +    description:
> +      The voltage supply for optional external reference voltage.
> +
>    interrupts:
>      description:
>        The BUSY pin falling edge indicates that the conversion is over, and thus
> 
> -- 
> 2.34.1
> 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

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

* Re: [PATCH 5/9] dt-bindings: iio: adc: adi,ad7606: add conditions
  2024-06-18 14:02 ` [PATCH 5/9] dt-bindings: iio: adc: adi,ad7606: add conditions Guillaume Stols
@ 2024-06-18 15:13   ` Conor Dooley
  2024-06-18 15:53   ` Rob Herring (Arm)
  2024-06-23 15:33   ` Jonathan Cameron
  2 siblings, 0 replies; 27+ messages in thread
From: Conor Dooley @ 2024-06-18 15:13 UTC (permalink / raw)
  To: Guillaume Stols
  Cc: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Beniamin Bia,
	Stefan Popa, linux-iio, linux-kernel, linux-fbdev, devicetree,
	Jonathan Cameron, jstephan, dlechner

[-- Attachment #1: Type: text/plain, Size: 418 bytes --]

On Tue, Jun 18, 2024 at 02:02:37PM +0000, Guillaume Stols wrote:
> Since the driver supports several parts that present differences in
> their layout and behaviour, it is necessary to describe the differences
> from one chip to another.
> 
> Signed-off-by: Guillaume Stols <gstols@baylibre.com>

Didn't check the datasheets etc, but the idea seems fine.
Reviewed-by: Conor Dooley <conor.dooley@microchip.com>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

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

* Re: [PATCH 4/9] dt-bindings: iio: adc: adi,ad7606: add supply properties
  2024-06-18 15:12   ` Conor Dooley
@ 2024-06-18 15:33     ` Guillaume Stols
  2024-06-18 17:32       ` Conor Dooley
  0 siblings, 1 reply; 27+ messages in thread
From: Guillaume Stols @ 2024-06-18 15:33 UTC (permalink / raw)
  To: Conor Dooley
  Cc: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Beniamin Bia,
	Stefan Popa, linux-iio, linux-kernel, linux-fbdev, devicetree,
	Jonathan Cameron, jstephan, dlechner


On 6/18/24 17:12, Conor Dooley wrote:
> On Tue, Jun 18, 2024 at 02:02:36PM +0000, Guillaume Stols wrote:
>> Add voltage supplies
> Are these available on all devices?

Yes all chips from  AD7606 series (including AD7606B, AD7606C(-16,-18),
AD7605-4, AD7606 (-4,-8,-6), AD7607, AD7608, AD7609), as well as AD7616
have a VDrive pin, as well as a RefSelect + RefIn/RefOut pin that takes
an input voltage in case RefSelect is high, or outputs the internal
reference voltage if RefSelect is low.

>
>> Signed-off-by: Guillaume Stols <gstols@baylibre.com>
>> ---
>>   Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml | 9 +++++++++
>>   1 file changed, 9 insertions(+)
>>
>> diff --git a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
>> index 80866940123c..e480c9a7c7ca 100644
>> --- a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
>> +++ b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
>> @@ -35,6 +35,15 @@ properties:
>>   
>>     avcc-supply: true
>>   
>> +  vdrive-supply:
>> +    description:
>> +      Determines the voltage level at which the interface logic pins will
>> +      operate.
>> +
>> +  refin-supply:
>> +    description:
>> +      The voltage supply for optional external reference voltage.
>> +
>>     interrupts:
>>       description:
>>         The BUSY pin falling edge indicates that the conversion is over, and thus
>>
>> -- 
>> 2.34.1
>>

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

* Re: [PATCH 5/9] dt-bindings: iio: adc: adi,ad7606: add conditions
  2024-06-18 14:02 ` [PATCH 5/9] dt-bindings: iio: adc: adi,ad7606: add conditions Guillaume Stols
  2024-06-18 15:13   ` Conor Dooley
@ 2024-06-18 15:53   ` Rob Herring (Arm)
  2024-06-23 15:33   ` Jonathan Cameron
  2 siblings, 0 replies; 27+ messages in thread
From: Rob Herring (Arm) @ 2024-06-18 15:53 UTC (permalink / raw)
  To: Guillaume Stols
  Cc: Conor Dooley, Lars-Peter Clausen, Michael Hennerich, linux-fbdev,
	jstephan, Jonathan Cameron, linux-iio, devicetree,
	Jonathan Cameron, dlechner, Beniamin Bia, Stefan Popa,
	Krzysztof Kozlowski, linux-kernel, Michael Hennerich


On Tue, 18 Jun 2024 14:02:37 +0000, Guillaume Stols wrote:
> Since the driver supports several parts that present differences in
> their layout and behaviour, it is necessary to describe the differences
> from one chip to another.
> 
> Signed-off-by: Guillaume Stols <gstols@baylibre.com>
> ---
>  .../devicetree/bindings/iio/adc/adi,ad7606.yaml    | 50 +++++++++++++++++++++-
>  1 file changed, 48 insertions(+), 2 deletions(-)
> 

My bot found errors running 'make dt_binding_check' on your patch:

yamllint warnings/errors:

dtschema/dtc warnings/errors:
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/iio/adc/adi,ad7606.example.dtb: adc@0: adi,sw-mode: False schema does not allow True
	from schema $id: http://devicetree.org/schemas/iio/adc/adi,ad7606.yaml#

doc reference errors (make refcheckdocs):

See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20240618-cleanup-ad7606-v1-5-f1854d5c779d@baylibre.com

The base for the series is generally the latest rc1. A different dependency
should be noted in *this* patch.

If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:

pip3 install dtschema --upgrade

Please check and re-submit after running the above command yourself. Note
that DT_SCHEMA_FILES can be set to your schema file to speed up checking
your schema. However, it must be unset to test all examples with your schema.


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

* Re: [PATCH 4/9] dt-bindings: iio: adc: adi,ad7606: add supply properties
  2024-06-18 15:33     ` Guillaume Stols
@ 2024-06-18 17:32       ` Conor Dooley
  2024-06-23 15:31         ` Jonathan Cameron
  0 siblings, 1 reply; 27+ messages in thread
From: Conor Dooley @ 2024-06-18 17:32 UTC (permalink / raw)
  To: Guillaume Stols
  Cc: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Beniamin Bia,
	Stefan Popa, linux-iio, linux-kernel, linux-fbdev, devicetree,
	Jonathan Cameron, jstephan, dlechner

[-- Attachment #1: Type: text/plain, Size: 1817 bytes --]

On Tue, Jun 18, 2024 at 05:33:16PM +0200, Guillaume Stols wrote:
> 
> On 6/18/24 17:12, Conor Dooley wrote:
> > On Tue, Jun 18, 2024 at 02:02:36PM +0000, Guillaume Stols wrote:
> > > Add voltage supplies
> > Are these available on all devices?
> 
> Yes all chips from  AD7606 series (including AD7606B, AD7606C(-16,-18),
> AD7605-4, AD7606 (-4,-8,-6), AD7607, AD7608, AD7609), as well as AD7616
> have a VDrive pin, as well as a RefSelect + RefIn/RefOut pin that takes
> an input voltage in case RefSelect is high, or outputs the internal
> reference voltage if RefSelect is low.

Okay,
Acked-by: Conor Dooley <conor.dooley@microchip.com>
provided that...

> 
> > 
> > > Signed-off-by: Guillaume Stols <gstols@baylibre.com>
> > > ---
> > >   Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml | 9 +++++++++
> > >   1 file changed, 9 insertions(+)
> > > 
> > > diff --git a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
> > > index 80866940123c..e480c9a7c7ca 100644
> > > --- a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
> > > +++ b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
> > > @@ -35,6 +35,15 @@ properties:
> > >     avcc-supply: true
> > > +  vdrive-supply:

The lack of a blank line here is an artifact of the reply

> > > +    description:
> > > +      Determines the voltage level at which the interface logic pins will
> > > +      operate.
> > > +
> > > +  refin-supply:
> > > +    description:
> > > +      The voltage supply for optional external reference voltage.
> > > +
> > >     interrupts:
> > >       description:
> > >         The BUSY pin falling edge indicates that the conversion is over, and thus
> > > 
> > > -- 
> > > 2.34.1
> > > 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

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

* Re: [PATCH 7/9] iio: adc: ad7606: switch mutexes to scoped_guard
  2024-06-18 14:02 ` [PATCH 7/9] iio: adc: ad7606: switch mutexes to scoped_guard Guillaume Stols
@ 2024-06-19  3:15   ` kernel test robot
  2024-06-23 15:41   ` Jonathan Cameron
  1 sibling, 0 replies; 27+ messages in thread
From: kernel test robot @ 2024-06-19  3:15 UTC (permalink / raw)
  To: Guillaume Stols, Lars-Peter Clausen, Michael Hennerich,
	Jonathan Cameron, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Beniamin Bia, Stefan Popa
  Cc: oe-kbuild-all, linux-iio, linux-kernel, linux-fbdev, devicetree,
	Guillaume Stols, jstephan, dlechner

Hi Guillaume,

kernel test robot noticed the following build warnings:

[auto build test WARNING on 07d4d0bb4a8ddcc463ed599b22f510d5926c2495]

url:    https://github.com/intel-lab-lkp/linux/commits/Guillaume-Stols/dt-bindings-iio-adc-adi-ad7606-add-missing-datasheet-link/20240618-223010
base:   07d4d0bb4a8ddcc463ed599b22f510d5926c2495
patch link:    https://lore.kernel.org/r/20240618-cleanup-ad7606-v1-7-f1854d5c779d%40baylibre.com
patch subject: [PATCH 7/9] iio: adc: ad7606: switch mutexes to scoped_guard
config: x86_64-randconfig-101-20240619 (https://download.01.org/0day-ci/archive/20240619/202406191142.rs8moLqC-lkp@intel.com/config)
compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240619/202406191142.rs8moLqC-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202406191142.rs8moLqC-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> drivers/iio/adc/ad7606.o: warning: objtool: ad7606_reg_access+0x5a: sibling call from callable instruction with modified stack frame

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

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

* Re: [PATCH 3/9] dt-bindings: iio: adc: adi,ad7606: improve descriptions
  2024-06-18 14:02 ` [PATCH 3/9] dt-bindings: iio: adc: adi,ad7606: improve descriptions Guillaume Stols
@ 2024-06-23 15:28   ` Jonathan Cameron
  0 siblings, 0 replies; 27+ messages in thread
From: Jonathan Cameron @ 2024-06-23 15:28 UTC (permalink / raw)
  To: Guillaume Stols
  Cc: Lars-Peter Clausen, Michael Hennerich, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Beniamin Bia, Stefan Popa,
	linux-iio, linux-kernel, linux-fbdev, devicetree,
	Jonathan Cameron, jstephan, dlechner

On Tue, 18 Jun 2024 14:02:35 +0000
Guillaume Stols <gstols@baylibre.com> wrote:

> Reword a few descriptions, and normalize the text width to 80 characters.

Don't rewrap text in a patch that does anything else as those real
changes are hidden.

Even if you are changing the text, minimise rewraps to those necessary
to avoid lines getting too long and fix them up in a follow up patch
that just rewraps.

I think most of the changes are fine, but it's really hard to spot
the real changes in here!

> 
> Signed-off-by: Guillaume Stols <gstols@baylibre.com>
> ---
>  .../devicetree/bindings/iio/adc/adi,ad7606.yaml    | 61 ++++++++++++----------
>  1 file changed, 34 insertions(+), 27 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
> index 00fdaed11cbd..80866940123c 100644
> --- a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
> +++ b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
> @@ -36,64 +36,71 @@ properties:
>    avcc-supply: true
>  
>    interrupts:
> +    description:
> +      The BUSY pin falling edge indicates that the conversion is over, and thus
> +      new data is available.
>      maxItems: 1
>  
>    adi,conversion-start-gpios:
>      description:
> -      Must be the device tree identifier of the CONVST pin.
> -      This logic input is used to initiate conversions on the analog
> -      input channels. As the line is active high, it should be marked
> -      GPIO_ACTIVE_HIGH.
> +      Must be the device tree identifier of the CONVST pin(s). This logic input

Why plural when it has maxitems 1?

> +      is used to initiate conversions on the analog input channels. As the line
> +      is active high, it should be marked GPIO_ACTIVE_HIGH.

If you drop the plural change don't rewrap this in v2, it is unnecessary noise
that takes away from the real improvements.
>      maxItems: 1
>  
>    reset-gpios:
>      description:
> -      Must be the device tree identifier of the RESET pin. If specified,
> -      it will be asserted during driver probe. As the line is active high,
> -      it should be marked GPIO_ACTIVE_HIGH.
> +      Must be the device tree identifier of the RESET pin. If specified, it will
> +      be asserted during driver probe. On the AD7606x, as the line is active
> +      high, it should be marked GPIO_ACTIVE_HIGH. On the AD7616, as the line is
> +      active low, it should be marked GPIO_ACTIVE_LOW.
>      maxItems: 1


>  
>    adi,range-gpios:
>      description:
> -      Must be the device tree identifier of the RANGE pin. The polarity on
> -      this pin determines the input range of the analog input channels. If
> -      this pin is tied to a logic high, the analog input range is ±10V for
> -      all channels. If this pin is tied to a logic low, the analog input range
> +      Must be the device tree identifier of the RANGE pin. The state on this
> +      pin determines the input range of the analog input channels. If this pin
> +      is tied to a logic high, the analog input range is ±10V for all channels.
> +      On the AD760X, if this pin is tied to a logic low, the analog input range
>        is ±5V for all channels. As the line is active high, it should be marked
> -      GPIO_ACTIVE_HIGH.
> +      GPIO_ACTIVE_HIGH. On the AD7616, there are 2 pins, and if the 2 pins are
> +      tied to a logic high, software mode is enabled, otherwise one of the 3
> +      possible range values is selected.

With max items 1 how do we have 2?

>      maxItems: 1
>  
>    adi,oversampling-ratio-gpios:
>      description:
> -      Must be the device tree identifier of the over-sampling
> -      mode pins. As the line is active high, it should be marked
> -      GPIO_ACTIVE_HIGH.
> +      Must be the device tree identifier of the over-sampling mode pins. As the
> +      line is active high, it should be marked GPIO_ACTIVE_HIGH. On the AD7606X
> +      parts that support it, if all 3 pins are tied to a logic high, software
> +      mode is enabled.
>      maxItems: 3



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

* Re: [PATCH 4/9] dt-bindings: iio: adc: adi,ad7606: add supply properties
  2024-06-18 17:32       ` Conor Dooley
@ 2024-06-23 15:31         ` Jonathan Cameron
  0 siblings, 0 replies; 27+ messages in thread
From: Jonathan Cameron @ 2024-06-23 15:31 UTC (permalink / raw)
  To: Conor Dooley
  Cc: Guillaume Stols, Lars-Peter Clausen, Michael Hennerich,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Beniamin Bia,
	Stefan Popa, linux-iio, linux-kernel, linux-fbdev, devicetree,
	Jonathan Cameron, jstephan, dlechner

On Tue, 18 Jun 2024 18:32:20 +0100
Conor Dooley <conor@kernel.org> wrote:

> On Tue, Jun 18, 2024 at 05:33:16PM +0200, Guillaume Stols wrote:
> > 
> > On 6/18/24 17:12, Conor Dooley wrote:  
> > > On Tue, Jun 18, 2024 at 02:02:36PM +0000, Guillaume Stols wrote:  
> > > > Add voltage supplies  
> > > Are these available on all devices?  
> > 
> > Yes all chips from  AD7606 series (including AD7606B, AD7606C(-16,-18),
> > AD7605-4, AD7606 (-4,-8,-6), AD7607, AD7608, AD7609), as well as AD7616
> > have a VDrive pin, as well as a RefSelect + RefIn/RefOut pin that takes
> > an input voltage in case RefSelect is high, or outputs the internal
> > reference voltage if RefSelect is low.  
> 
> Okay,
> Acked-by: Conor Dooley <conor.dooley@microchip.com>
> provided that...

Sounds like vdrive-supply is a requirement for the device to function but
refin may be optional.

So add vdrive-supply to the required property list.

Note the binding for supplies reflects what must be wired and ignores
the ability of the linux regulator framework to get fake supplies when
they are not provided in DT.

> 
> >   
> > >   
> > > > Signed-off-by: Guillaume Stols <gstols@baylibre.com>
> > > > ---
> > > >   Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml | 9 +++++++++
> > > >   1 file changed, 9 insertions(+)
> > > > 
> > > > diff --git a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
> > > > index 80866940123c..e480c9a7c7ca 100644
> > > > --- a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
> > > > +++ b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
> > > > @@ -35,6 +35,15 @@ properties:
> > > >     avcc-supply: true
> > > > +  vdrive-supply:  
> 
> The lack of a blank line here is an artifact of the reply
> 
> > > > +    description:
> > > > +      Determines the voltage level at which the interface logic pins will
> > > > +      operate.
> > > > +
> > > > +  refin-supply:
> > > > +    description:
> > > > +      The voltage supply for optional external reference voltage.
> > > > +
> > > >     interrupts:
> > > >       description:
> > > >         The BUSY pin falling edge indicates that the conversion is over, and thus
> > > > 
> > > > -- 
> > > > 2.34.1
> > > >   


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

* Re: [PATCH 5/9] dt-bindings: iio: adc: adi,ad7606: add conditions
  2024-06-18 14:02 ` [PATCH 5/9] dt-bindings: iio: adc: adi,ad7606: add conditions Guillaume Stols
  2024-06-18 15:13   ` Conor Dooley
  2024-06-18 15:53   ` Rob Herring (Arm)
@ 2024-06-23 15:33   ` Jonathan Cameron
  2 siblings, 0 replies; 27+ messages in thread
From: Jonathan Cameron @ 2024-06-23 15:33 UTC (permalink / raw)
  To: Guillaume Stols
  Cc: Lars-Peter Clausen, Michael Hennerich, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Beniamin Bia, Stefan Popa,
	linux-iio, linux-kernel, linux-fbdev, devicetree,
	Jonathan Cameron, jstephan, dlechner

On Tue, 18 Jun 2024 14:02:37 +0000
Guillaume Stols <gstols@baylibre.com> wrote:

> Since the driver supports several parts that present differences in
> their layout and behaviour, it is necessary to describe the differences
> from one chip to another.
> 
> Signed-off-by: Guillaume Stols <gstols@baylibre.com>
I'd rather see the numbers / descriptions changed in this patch so
that it is clear why instead of the earlier documentation only patch.

If that is really hard to do, just make sure that patch description calls
out that it will briefly be inconsistent.

Otherwise LGTM
> ---
>  .../devicetree/bindings/iio/adc/adi,ad7606.yaml    | 50 +++++++++++++++++++++-
>  1 file changed, 48 insertions(+), 2 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
> index e480c9a7c7ca..65d6ca5843d7 100644
> --- a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
> +++ b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
> @@ -55,7 +55,8 @@ properties:
>        Must be the device tree identifier of the CONVST pin(s). This logic input
>        is used to initiate conversions on the analog input channels. As the line
>        is active high, it should be marked GPIO_ACTIVE_HIGH.
> -    maxItems: 1
> +    minItems: 1
> +    maxItems: 2
>  
>    reset-gpios:
>      description:
> @@ -91,7 +92,8 @@ properties:
>        GPIO_ACTIVE_HIGH. On the AD7616, there are 2 pins, and if the 2 pins are
>        tied to a logic high, software mode is enabled, otherwise one of the 3
>        possible range values is selected.
> -    maxItems: 1
> +    minItems: 1
> +    maxItems: 2
>  
>    adi,oversampling-ratio-gpios:
>      description:
> @@ -123,6 +125,50 @@ required:
>  allOf:
>    - $ref: /schemas/spi/spi-peripheral-props.yaml#
>  
> +  - if:
> +      properties:
> +        compatible:
> +          contains:
> +            const: adi,ad7616
> +    then:
> +      properties:
> +        adi,first-data-gpios: false
> +        standby-gpios: false
> +        adi,range-gpios:
> +          maxItems: 2
> +    else:
> +      properties:
> +        adi,range-gpios:
> +          maxItems: 1
> +
> +  - if:
> +      properties:
> +        compatible:
> +          contains:
> +            enum:
> +              - adi,ad7605-4
> +              - adi,ad7616
> +    then:
> +      properties:
> +        adi,oversampling-ratio-gpios: false
> +
> +  - if:
> +      properties:
> +        compatible:
> +          contains:
> +            enum:
> +              - adi,ad7605-4
> +              - adi,ad7606-4
> +              - adi,ad7606-6
> +              - adi,ad7606-8
> +    then:
> +      properties:
> +        adi,sw-mode: false
> +    else:
> +      properties:
> +        adi,conversion-start-gpios:
> +          maxItems: 1
> +
>  unevaluatedProperties: false
>  
>  examples:
> 


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

* Re: [PATCH 6/9] dt-bindings: iio: adc: adi,ad7606: fix example
  2024-06-18 15:10   ` Conor Dooley
@ 2024-06-23 15:35     ` Jonathan Cameron
  0 siblings, 0 replies; 27+ messages in thread
From: Jonathan Cameron @ 2024-06-23 15:35 UTC (permalink / raw)
  To: Conor Dooley
  Cc: Guillaume Stols, Lars-Peter Clausen, Michael Hennerich,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Beniamin Bia,
	Stefan Popa, linux-iio, linux-kernel, linux-fbdev, devicetree,
	Jonathan Cameron, jstephan, dlechner

On Tue, 18 Jun 2024 16:10:15 +0100
Conor Dooley <conor@kernel.org> wrote:

> On Tue, Jun 18, 2024 at 02:02:38PM +0000, Guillaume Stols wrote:
> > Example uses adi,ad7606-8 as compatible, but adi,sw-mode is not
> > available for it. So remove this property from example.
> > 
> > Signed-off-by: Guillaume Stols <gstols@baylibre.com>  
> 
> Acked-by: Conor Dooley <conor.dooley@microchip.com>

Perhaps just squash with previous patch to avoid a bisection issue
and Rob's bot failing because of this.

Jonathan

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

* Re: [PATCH 7/9] iio: adc: ad7606: switch mutexes to scoped_guard
  2024-06-18 14:02 ` [PATCH 7/9] iio: adc: ad7606: switch mutexes to scoped_guard Guillaume Stols
  2024-06-19  3:15   ` kernel test robot
@ 2024-06-23 15:41   ` Jonathan Cameron
  1 sibling, 0 replies; 27+ messages in thread
From: Jonathan Cameron @ 2024-06-23 15:41 UTC (permalink / raw)
  To: Guillaume Stols
  Cc: Lars-Peter Clausen, Michael Hennerich, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Beniamin Bia, Stefan Popa,
	linux-iio, linux-kernel, linux-fbdev, devicetree,
	Jonathan Cameron, jstephan, dlechner

On Tue, 18 Jun 2024 14:02:39 +0000
Guillaume Stols <gstols@baylibre.com> wrote:

> Switching to scoped_guard simplifies the code and avoids to take care to
> unlock the mutex in case of premature return.
> 
> Signed-off-by: Guillaume Stols <gstols@baylibre.com>
> ---
>  drivers/iio/adc/ad7606.c | 71 ++++++++++++++++++++++--------------------------
>  1 file changed, 33 insertions(+), 38 deletions(-)
> 
> diff --git a/drivers/iio/adc/ad7606.c b/drivers/iio/adc/ad7606.c
> index 3a417595294f..e3426287edf6 100644
> --- a/drivers/iio/adc/ad7606.c
> +++ b/drivers/iio/adc/ad7606.c
> @@ -69,19 +69,18 @@ static int ad7606_reg_access(struct iio_dev *indio_dev,
>  	struct ad7606_state *st = iio_priv(indio_dev);
>  	int ret;
>  
> -	mutex_lock(&st->lock);
> -	if (readval) {
> -		ret = st->bops->reg_read(st, reg);
> -		if (ret < 0)
> -			goto err_unlock;
> -		*readval = ret;
> -		ret = 0;
> -	} else {
> -		ret = st->bops->reg_write(st, reg, writeval);
> +	scoped_guard(mutex, &st->lock) {
> +		if (readval) {
> +			ret = st->bops->reg_read(st, reg);
> +			if (ret < 0)
> +				return ret;
> +			*readval = ret;
> +			return 0;
> +		} else {
> +			return st->bops->reg_write(st, reg, writeval);
> +		}
>  	}
> -err_unlock:
> -	mutex_unlock(&st->lock);
> -	return ret;
> +	unreachable();

Unless you are going to add more code in this function later in the series
then a
	guard(mutex)(&st->lock); is more appropriate in this function
as the scope is effectively the whole function.  Also avoids the always
ugly need for an unreachable() marking.

I'm not sure what the build bot warning means though.

Otherwise looks good to me

J

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

* Re: [PATCH 8/9] iio: adc: ad7606: fix oversampling gpio array
  2024-06-18 14:02 ` [PATCH 8/9] iio: adc: ad7606: fix oversampling gpio array Guillaume Stols
@ 2024-06-23 15:45   ` Jonathan Cameron
  2024-06-24 15:08     ` Guillaume Stols
  0 siblings, 1 reply; 27+ messages in thread
From: Jonathan Cameron @ 2024-06-23 15:45 UTC (permalink / raw)
  To: Guillaume Stols
  Cc: Lars-Peter Clausen, Michael Hennerich, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Beniamin Bia, Stefan Popa,
	linux-iio, linux-kernel, linux-fbdev, devicetree,
	Jonathan Cameron, jstephan, dlechner

On Tue, 18 Jun 2024 14:02:40 +0000
Guillaume Stols <gstols@baylibre.com> wrote:

> gpiod_set_array_value was misused here: the implementation relied on the
> assumption that an unsigned long was required for each gpio, while the
> function expects a bit array stored in "as much unsigned long as needed
> for storing one bit per GPIO", i.e it is using a bit field.
> 
> Fixes: d2a415c86c6b ("iio: adc: ad7606: Add support for AD7606B ADC")
> Signed-off-by: Guillaume Stols <gstols@baylibre.com>
Always drag fixes to the start of a series.  Probably doesn't matter
in this case but we want it to be obvious there are no necessary precursors
in this series for anyone backporting.

What is the user visible outcome of this bug?  Superficially the numbers
all end up the same I think even though the code is clearly working
mostly by luck.  So might not warrant a fixes tag?


> ---
>  drivers/iio/adc/ad7606.c     | 4 ++--
>  drivers/iio/adc/ad7606_spi.c | 5 +++--
>  2 files changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/iio/adc/ad7606.c b/drivers/iio/adc/ad7606.c
> index e3426287edf6..502344e019e0 100644
> --- a/drivers/iio/adc/ad7606.c
> +++ b/drivers/iio/adc/ad7606.c
> @@ -235,9 +235,9 @@ static int ad7606_write_os_hw(struct iio_dev *indio_dev, int val)
>  	struct ad7606_state *st = iio_priv(indio_dev);
>  	DECLARE_BITMAP(values, 3);
>  
> -	values[0] = val;
> +	values[0] = val & GENMASK(2, 0);
>  
> -	gpiod_set_array_value(ARRAY_SIZE(values), st->gpio_os->desc,
> +	gpiod_set_array_value(st->gpio_os->ndescs, st->gpio_os->desc,
>  			      st->gpio_os->info, values);
>  
>  	/* AD7616 requires a reset to update value */
> diff --git a/drivers/iio/adc/ad7606_spi.c b/drivers/iio/adc/ad7606_spi.c
> index 263a778bcf25..287a0591533b 100644
> --- a/drivers/iio/adc/ad7606_spi.c
> +++ b/drivers/iio/adc/ad7606_spi.c
> @@ -249,8 +249,9 @@ static int ad7616_sw_mode_config(struct iio_dev *indio_dev)
>  static int ad7606B_sw_mode_config(struct iio_dev *indio_dev)
>  {
>  	struct ad7606_state *st = iio_priv(indio_dev);
> -	unsigned long os[3] = {1};
> +	DECLARE_BITMAP(os, 3);
>  
> +	bitmap_fill(os, 3);
>  	/*
>  	 * Software mode is enabled when all three oversampling
>  	 * pins are set to high. If oversampling gpios are defined
> @@ -258,7 +259,7 @@ static int ad7606B_sw_mode_config(struct iio_dev *indio_dev)
>  	 * otherwise, they must be hardwired to VDD
>  	 */
>  	if (st->gpio_os) {
> -		gpiod_set_array_value(ARRAY_SIZE(os),
> +		gpiod_set_array_value(st->gpio_os->ndescs,
>  				      st->gpio_os->desc, st->gpio_os->info, os);
>  	}
>  	/* OS of 128 and 256 are available only in software mode */
> 


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

* Re: [PATCH 9/9] iio: adc: ad7606: fix standby gpio state to match the documentation
  2024-06-18 14:02 ` [PATCH 9/9] iio: adc: ad7606: fix standby gpio state to match the documentation Guillaume Stols
@ 2024-06-23 15:49   ` Jonathan Cameron
  0 siblings, 0 replies; 27+ messages in thread
From: Jonathan Cameron @ 2024-06-23 15:49 UTC (permalink / raw)
  To: Guillaume Stols
  Cc: Lars-Peter Clausen, Michael Hennerich, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Beniamin Bia, Stefan Popa,
	linux-iio, linux-kernel, linux-fbdev, devicetree,
	Jonathan Cameron, jstephan, dlechner

On Tue, 18 Jun 2024 14:02:41 +0000
Guillaume Stols <gstols@baylibre.com> wrote:

> The binding's documentation specifies that "As the line is active low, it
> should be marked GPIO_ACTIVE_LOW". However, in the driver, it was handled
> the opposite way. This commit sets the driver's behaviour in sync with the
> documentation
> 
> Fixes: 722407a4e8c0 ("staging:iio:ad7606: Use GPIO descriptor API")
> Signed-off-by: Guillaume Stols <gstols@baylibre.com>

This sound dangerous.  If anyone is using the driver before this an it's
working they indeed have the pin inverted wrt to the docs, but
as it works for them this will be a regression.

So messy corner - do we fix the docs or the driver?  I'm not sure which
is more painful. In theory the DT binding might be in use by another
OS or similar which might have a non broken driver, but I suspect it isn't.
Whereas perhaps the driver as it stands is in use on Linux.

AD folk: You will get the support calls, do you want to risk them or
should we change the docs (and maybe add a note on it being 'odd' wrt
to the documentation as we are treating it as an active !standy pin)
> ---
>  drivers/iio/adc/ad7606.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/iio/adc/ad7606.c b/drivers/iio/adc/ad7606.c
> index 502344e019e0..05addea105f0 100644
> --- a/drivers/iio/adc/ad7606.c
> +++ b/drivers/iio/adc/ad7606.c
> @@ -438,7 +438,7 @@ static int ad7606_request_gpios(struct ad7606_state *st)
>  		return PTR_ERR(st->gpio_range);
>  
>  	st->gpio_standby = devm_gpiod_get_optional(dev, "standby",
> -						   GPIOD_OUT_HIGH);
> +						   GPIOD_OUT_LOW);
>  	if (IS_ERR(st->gpio_standby))
>  		return PTR_ERR(st->gpio_standby);
>  
> @@ -681,7 +681,7 @@ static int ad7606_suspend(struct device *dev)
>  
>  	if (st->gpio_standby) {
>  		gpiod_set_value(st->gpio_range, 1);
> -		gpiod_set_value(st->gpio_standby, 0);
> +		gpiod_set_value(st->gpio_standby, 1);
>  	}
>  
>  	return 0;
> 


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

* Re: [PATCH 8/9] iio: adc: ad7606: fix oversampling gpio array
  2024-06-23 15:45   ` Jonathan Cameron
@ 2024-06-24 15:08     ` Guillaume Stols
  0 siblings, 0 replies; 27+ messages in thread
From: Guillaume Stols @ 2024-06-24 15:08 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: Lars-Peter Clausen, Michael Hennerich, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Beniamin Bia, Stefan Popa,
	linux-iio, linux-kernel, linux-fbdev, devicetree,
	Jonathan Cameron, jstephan, dlechner

Resend, previous mail was erroneously sent in HTML. I apologize for the 
spamming.

On 6/23/24 17:45, Jonathan Cameron wrote:

 > On Tue, 18 Jun 2024 14:02:40 +0000
 > Guillaume Stols <gstols@baylibre.com> wrote:
 >> gpiod_set_array_value was misused here: the implementation relied on the
 >> assumption that an unsigned long was required for each gpio, while the
 >> function expects a bit array stored in "as much unsigned long as needed
 >> for storing one bit per GPIO", i.e it is using a bit field.
 >>
 >> Fixes: d2a415c86c6b ("iio: adc: ad7606: Add support for AD7606B ADC")
 >> Signed-off-by: Guillaume Stols <gstols@baylibre.com>
 > Always drag fixes to the start of a series.  Probably doesn't matter
 > in this case but we want it to be obvious there are no necessary 
precursors
 > in this series for anyone backporting.

OK will do this change in the next version.

 >
 > What is the user visible outcome of this bug?  Superficially the numbers
 > all end up the same I think even though the code is clearly working
 > mostly by luck.  So might not warrant a fixes tag?

This is leading into some issues I should maybe have better documented 
in the commit message.

See below

 >
 >> ---
 >>   drivers/iio/adc/ad7606.c     | 4 ++--
 >>   drivers/iio/adc/ad7606_spi.c | 5 +++--
 >>   2 files changed, 5 insertions(+), 4 deletions(-)
 >>
 >> diff --git a/drivers/iio/adc/ad7606.c b/drivers/iio/adc/ad7606.c
 >> index e3426287edf6..502344e019e0 100644
 >> --- a/drivers/iio/adc/ad7606.c
 >> +++ b/drivers/iio/adc/ad7606.c
 >> @@ -235,9 +235,9 @@ static int ad7606_write_os_hw(struct iio_dev 
*indio_dev, int val)
 >>       struct ad7606_state *st = iio_priv(indio_dev);
 >>       DECLARE_BITMAP(values, 3);
 >>   -    values[0] = val;
 >> +    values[0] = val & GENMASK(2, 0);
 >>   -    gpiod_set_array_value(ARRAY_SIZE(values), st->gpio_os->desc,
 >> +    gpiod_set_array_value(st->gpio_os->ndescs, st->gpio_os->desc,
 >>                     st->gpio_os->info, values);

ARRAY_SIZE(values) is 1 because DECLARE_BITMAP will declare a dimension 
1 unsigned long array (more than enough for 3 bits !).
We want to set 3 bits in gpiod_set_array_value, thus the first parameter 
should be 3, not 1.

 >>         /* AD7616 requires a reset to update value */
 >> diff --git a/drivers/iio/adc/ad7606_spi.c b/drivers/iio/adc/ad7606_spi.c
 >> index 263a778bcf25..287a0591533b 100644
 >> --- a/drivers/iio/adc/ad7606_spi.c
 >> +++ b/drivers/iio/adc/ad7606_spi.c
 >> @@ -249,8 +249,9 @@ static int ad7616_sw_mode_config(struct iio_dev 
*indio_dev)
 >>   static int ad7606B_sw_mode_config(struct iio_dev *indio_dev)
 >>   {
 >>       struct ad7606_state *st = iio_priv(indio_dev);
 >> -    unsigned long os[3] = {1};
 >> +    DECLARE_BITMAP(os, 3);
 >>   +    bitmap_fill(os, 3);

Here we need 3 bits set HIGH in one unsigned long (i.e 0x07) and we get 
3 times 0x01 instead.

Thus, it will not switch to software mode if OS pins are not hardwired 
(which is I must admit, rather unlikely).

 >>       /*
 >>        * Software mode is enabled when all three oversampling
 >>        * pins are set to high. If oversampling gpios are defined
 >> @@ -258,7 +259,7 @@ static int ad7606B_sw_mode_config(struct iio_dev 
*indio_dev)
 >>        * otherwise, they must be hardwired to VDD
 >>        */
 >>       if (st->gpio_os) {
 >> -        gpiod_set_array_value(ARRAY_SIZE(os),
 >> +        gpiod_set_array_value(st->gpio_os->ndescs,
 >>                         st->gpio_os->desc, st->gpio_os->info, os);
 >>       }
 >>       /* OS of 128 and 256 are available only in software mode */
 >>

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

* Re: [PATCH 1/9] dt-bindings: iio: adc: adi,ad7606: add missing datasheet link
  2024-06-18 14:02 ` [PATCH 1/9] dt-bindings: iio: adc: adi,ad7606: add missing datasheet link Guillaume Stols
@ 2024-06-27 20:30   ` Rob Herring (Arm)
  0 siblings, 0 replies; 27+ messages in thread
From: Rob Herring (Arm) @ 2024-06-27 20:30 UTC (permalink / raw)
  To: Guillaume Stols
  Cc: Michael Hennerich, Jonathan Cameron, jstephan, dlechner,
	devicetree, Krzysztof Kozlowski, Jonathan Cameron, Beniamin Bia,
	linux-iio, Michael Hennerich, Lars-Peter Clausen, linux-kernel,
	linux-fbdev, Conor Dooley, Stefan Popa


On Tue, 18 Jun 2024 14:02:33 +0000, Guillaume Stols wrote:
> Add AD7606-5 datasheet link.
> 
> Signed-off-by: Guillaume Stols <gstols@baylibre.com>
> ---
>  Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml | 1 +
>  1 file changed, 1 insertion(+)
> 

Acked-by: Rob Herring (Arm) <robh@kernel.org>


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

* Re: [PATCH 2/9] dt-bindings: iio: adc: adi,ad7606: comment and sort the compatible names
  2024-06-18 14:02 ` [PATCH 2/9] dt-bindings: iio: adc: adi,ad7606: comment and sort the compatible names Guillaume Stols
@ 2024-06-27 20:32   ` Rob Herring (Arm)
  0 siblings, 0 replies; 27+ messages in thread
From: Rob Herring (Arm) @ 2024-06-27 20:32 UTC (permalink / raw)
  To: Guillaume Stols
  Cc: linux-iio, Michael Hennerich, Beniamin Bia, Lars-Peter Clausen,
	Michael Hennerich, Stefan Popa, Jonathan Cameron, dlechner,
	linux-kernel, linux-fbdev, jstephan, Jonathan Cameron, devicetree,
	Krzysztof Kozlowski, Conor Dooley


On Tue, 18 Jun 2024 14:02:34 +0000, Guillaume Stols wrote:
> AD7606-8 is referred to as AD7606 by Analog Devices. This comment aims
> to avoid confusion. Also the compatible names were not sorted by
> alphabetical order.
> 
> Signed-off-by: Guillaume Stols <gstols@baylibre.com>
> ---
>  Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 

Acked-by: Rob Herring (Arm) <robh@kernel.org>


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

end of thread, other threads:[~2024-06-27 20:32 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-18 14:02 [PATCH 0/9] iio: adc: ad7606: Improvements Guillaume Stols
2024-06-18 14:02 ` [PATCH 1/9] dt-bindings: iio: adc: adi,ad7606: add missing datasheet link Guillaume Stols
2024-06-27 20:30   ` Rob Herring (Arm)
2024-06-18 14:02 ` [PATCH 2/9] dt-bindings: iio: adc: adi,ad7606: comment and sort the compatible names Guillaume Stols
2024-06-27 20:32   ` Rob Herring (Arm)
2024-06-18 14:02 ` [PATCH 3/9] dt-bindings: iio: adc: adi,ad7606: improve descriptions Guillaume Stols
2024-06-23 15:28   ` Jonathan Cameron
2024-06-18 14:02 ` [PATCH 4/9] dt-bindings: iio: adc: adi,ad7606: add supply properties Guillaume Stols
2024-06-18 15:12   ` Conor Dooley
2024-06-18 15:33     ` Guillaume Stols
2024-06-18 17:32       ` Conor Dooley
2024-06-23 15:31         ` Jonathan Cameron
2024-06-18 14:02 ` [PATCH 5/9] dt-bindings: iio: adc: adi,ad7606: add conditions Guillaume Stols
2024-06-18 15:13   ` Conor Dooley
2024-06-18 15:53   ` Rob Herring (Arm)
2024-06-23 15:33   ` Jonathan Cameron
2024-06-18 14:02 ` [PATCH 6/9] dt-bindings: iio: adc: adi,ad7606: fix example Guillaume Stols
2024-06-18 15:10   ` Conor Dooley
2024-06-23 15:35     ` Jonathan Cameron
2024-06-18 14:02 ` [PATCH 7/9] iio: adc: ad7606: switch mutexes to scoped_guard Guillaume Stols
2024-06-19  3:15   ` kernel test robot
2024-06-23 15:41   ` Jonathan Cameron
2024-06-18 14:02 ` [PATCH 8/9] iio: adc: ad7606: fix oversampling gpio array Guillaume Stols
2024-06-23 15:45   ` Jonathan Cameron
2024-06-24 15:08     ` Guillaume Stols
2024-06-18 14:02 ` [PATCH 9/9] iio: adc: ad7606: fix standby gpio state to match the documentation Guillaume Stols
2024-06-23 15:49   ` Jonathan Cameron

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).