public inbox for devicetree@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5 1/2] dt-bindings: iio: light: bh1750: Add reset-gpios property
@ 2025-03-21 16:16 Sergio Perez
  2025-03-21 16:16 ` [PATCH v5 2/2] iio: light: bh1750: Add hardware reset support via GPIO Sergio Perez
  2025-03-24  8:08 ` [PATCH v5 1/2] dt-bindings: iio: light: bh1750: Add reset-gpios property Krzysztof Kozlowski
  0 siblings, 2 replies; 4+ messages in thread
From: Sergio Perez @ 2025-03-21 16:16 UTC (permalink / raw)
  To: Tomasz Duszynski, Jonathan Cameron, Lars-Peter Clausen,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-iio,
	devicetree, linux-kernel
  Cc: Sergio Perez

Some BH1750 sensors require a hardware reset via GPIO before they can
be properly detected on the I2C bus. Add a new reset-gpios property
to the binding to support this functionality.

The reset-gpios property allows specifying a GPIO that will be toggled
during driver initialization to reset the sensor.

Signed-off-by: Sergio Perez <sergio@pereznus.es>
---
Revision history:
v4 => v5:
 - Update description to reflect "active low" on reset signal as indicated by Krzysztof Kozlowski
 - Update description to clarify what pin of sensor is used to do reset (DVI) as mentioned by Krzysztof Kozlowski
 - Edit example to be coherent with "active low" as informed by Krzysztof Kozlowski
 - Added necessary include on example
v3 => v4:
 - No changes
v2 => v3:
 - Split in two patches: dtbinding and code
 - Ensure list off mantainers following instructions by Krzysztof Kozlowski
 - Delete redundant details on description as suggested by Jonathan Cameron
 - Added related example to existing one as suggested by Jonathan Cameron
v1 => v2:
 - Ensure check tests as commented by Rob Herring
 - Fixes some whitespaces and end lines
---
 Documentation/devicetree/bindings/iio/light/bh1750.yaml | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/Documentation/devicetree/bindings/iio/light/bh1750.yaml b/Documentation/devicetree/bindings/iio/light/bh1750.yaml
index 1a88b3c253d5..e388610d3741 100644
--- a/Documentation/devicetree/bindings/iio/light/bh1750.yaml
+++ b/Documentation/devicetree/bindings/iio/light/bh1750.yaml
@@ -24,6 +24,10 @@ properties:
   reg:
     maxItems: 1
 
+  reset-gpios:
+    description: GPIO connected to the DVI reset pin (active low)
+    maxItems: 1
+
 required:
   - compatible
   - reg
@@ -36,9 +40,12 @@ examples:
       #address-cells = <1>;
       #size-cells = <0>;
 
+      #include <dt-bindings/gpio/gpio.h>
+
       light-sensor@23 {
         compatible = "rohm,bh1750";
         reg = <0x23>;
+        reset-gpios = <&gpio2 17 GPIO_ACTIVE_LOW>;
       };
     };
 
-- 
2.43.0


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

* [PATCH v5 2/2] iio: light: bh1750: Add hardware reset support via GPIO
  2025-03-21 16:16 [PATCH v5 1/2] dt-bindings: iio: light: bh1750: Add reset-gpios property Sergio Perez
@ 2025-03-21 16:16 ` Sergio Perez
  2025-03-24  8:08 ` [PATCH v5 1/2] dt-bindings: iio: light: bh1750: Add reset-gpios property Krzysztof Kozlowski
  1 sibling, 0 replies; 4+ messages in thread
From: Sergio Perez @ 2025-03-21 16:16 UTC (permalink / raw)
  To: Tomasz Duszynski, Jonathan Cameron, Lars-Peter Clausen,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-iio,
	devicetree, linux-kernel
  Cc: Sergio Perez

Some BH1750 sensors require a hardware reset before they can be
detected on the I2C bus. This implementation adds support for an
optional reset GPIO that can be specified in the device tree.

The reset sequence pulls the GPIO low and then high before initializing
the sensor, which enables proper detection with tools like i2cdetect.
This is particularly important for sensors that power on in an
undefined state.

Signed-off-by: Sergio Perez <sergio@pereznus.es>
---
Revision history:
v4 => v5:
 - Logic change to be coherent with dt-binding as mentioned by Krzysztof Kozlowski
 - Adjust indentation as commented by Krzysztof Kozlowski
v3 => v4:
 - No changes
v2 => v3:
 - Split in two patches: dtbinding and code
 - Ensure list on mantainers following instructions by Krzysztof Kozlowski
 - Fix check tests as explainned by Krzysztof Kozlowski
v1 => v2:
 - Fixes some whitespaces and end lines
 - Remove unnecessary include
 - Use of fsleep rather than usleep_range as suggested by Jonathan Cameron
 - Use of dev_dbg to reduce innecessary output as suggested by Jonathan Cameron
 - Delete an extra function implementing the functionality inline as suggested by Jonathan Cameron
---
 drivers/iio/light/bh1750.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/drivers/iio/light/bh1750.c b/drivers/iio/light/bh1750.c
index 4b869fa9e5b1..764f88826fcb 100644
--- a/drivers/iio/light/bh1750.c
+++ b/drivers/iio/light/bh1750.c
@@ -22,12 +22,16 @@
 #include <linux/iio/iio.h>
 #include <linux/iio/sysfs.h>
 #include <linux/module.h>
+#include <linux/gpio/consumer.h>
 
 #define BH1750_POWER_DOWN		0x00
 #define BH1750_ONE_TIME_H_RES_MODE	0x20 /* auto-mode for BH1721 */
 #define BH1750_CHANGE_INT_TIME_H_BIT	0x40
 #define BH1750_CHANGE_INT_TIME_L_BIT	0x60
 
+/* Define the reset delay time in microseconds */
+#define BH1750_RESET_DELAY_US 10000 /* 10ms */
+
 enum {
 	BH1710,
 	BH1721,
@@ -40,6 +44,7 @@ struct bh1750_data {
 	struct mutex lock;
 	const struct bh1750_chip_info *chip_info;
 	u16 mtreg;
+	struct gpio_desc *reset_gpio;
 };
 
 struct bh1750_chip_info {
@@ -248,6 +253,25 @@ static int bh1750_probe(struct i2c_client *client)
 	data->client = client;
 	data->chip_info = &bh1750_chip_info_tbl[id->driver_data];
 
+	/* Get reset GPIO from device tree */
+	data->reset_gpio = devm_gpiod_get_optional(&client->dev,
+						   "reset", GPIOD_OUT_HIGH);
+
+	if (IS_ERR(data->reset_gpio))
+		return dev_err_probe(&client->dev, PTR_ERR(data->reset_gpio),
+				     "Failed to get reset GPIO\n");
+
+	/* Perform hardware reset if GPIO is provided */
+	if (data->reset_gpio) {
+		/* Perform reset sequence: low-high */
+		gpiod_set_value_cansleep(data->reset_gpio, 1);
+		fsleep(BH1750_RESET_DELAY_US);
+		gpiod_set_value_cansleep(data->reset_gpio, 0);
+		fsleep(BH1750_RESET_DELAY_US);
+
+		dev_dbg(&client->dev, "BH1750 reset completed via GPIO\n");
+	}
+
 	usec = data->chip_info->mtreg_to_usec * data->chip_info->mtreg_default;
 	ret = bh1750_change_int_time(data, usec);
 	if (ret < 0)
-- 
2.43.0


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

* Re: [PATCH v5 1/2] dt-bindings: iio: light: bh1750: Add reset-gpios property
  2025-03-21 16:16 [PATCH v5 1/2] dt-bindings: iio: light: bh1750: Add reset-gpios property Sergio Perez
  2025-03-21 16:16 ` [PATCH v5 2/2] iio: light: bh1750: Add hardware reset support via GPIO Sergio Perez
@ 2025-03-24  8:08 ` Krzysztof Kozlowski
  2025-03-24 11:58   ` Sergio Pérez
  1 sibling, 1 reply; 4+ messages in thread
From: Krzysztof Kozlowski @ 2025-03-24  8:08 UTC (permalink / raw)
  To: Sergio Perez
  Cc: Tomasz Duszynski, Jonathan Cameron, Lars-Peter Clausen,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-iio,
	devicetree, linux-kernel

On Fri, Mar 21, 2025 at 05:16:08PM +0100, Sergio Perez wrote:
> +  reset-gpios:
> +    description: GPIO connected to the DVI reset pin (active low)
> +    maxItems: 1
> +
>  required:
>    - compatible
>    - reg
> @@ -36,9 +40,12 @@ examples:
>        #address-cells = <1>;
>        #size-cells = <0>;
>  
> +      #include <dt-bindings/gpio/gpio.h>

This goes upper. Please open any other bindings to see how it is done.

With fixed placement:

Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>

---

<form letter>
This is an automated instruction, just in case, because many review tags
are being ignored. If you know the process, you can skip it (please do
not feel offended by me posting it here - no bad intentions intended).
If you do not know the process, here is a short explanation:

Please add Acked-by/Reviewed-by/Tested-by tags when posting new
versions of patchset, under or above your Signed-off-by tag, unless
patch changed significantly (e.g. new properties added to the DT
bindings). Tag is "received", when provided in a message replied to you
on the mailing list. Tools like b4 can help here. However, there's no
need to repost patches *only* to add the tags. The upstream maintainer
will do that for tags received on the version they apply.

https://elixir.bootlin.com/linux/v6.12-rc3/source/Documentation/process/submitting-patches.rst#L577
</form letter>

Best regards,
Krzysztof


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

* Re: [PATCH v5 1/2] dt-bindings: iio: light: bh1750: Add reset-gpios property
  2025-03-24  8:08 ` [PATCH v5 1/2] dt-bindings: iio: light: bh1750: Add reset-gpios property Krzysztof Kozlowski
@ 2025-03-24 11:58   ` Sergio Pérez
  0 siblings, 0 replies; 4+ messages in thread
From: Sergio Pérez @ 2025-03-24 11:58 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: Tomasz Duszynski, Jonathan Cameron, Lars-Peter Clausen,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-iio,
	devicetree, linux-kernel


El 24/03/2025 a las 9:08, Krzysztof Kozlowski escribió:
> On Fri, Mar 21, 2025 at 05:16:08PM +0100, Sergio Perez wrote:
>> +  reset-gpios:
>> +    description: GPIO connected to the DVI reset pin (active low)
>> +    maxItems: 1
>> +
>>   required:
>>     - compatible
>>     - reg
>> @@ -36,9 +40,12 @@ examples:
>>         #address-cells = <1>;
>>         #size-cells = <0>;
>>   
>> +      #include <dt-bindings/gpio/gpio.h>
> This goes upper. Please open any other bindings to see how it is done.
>
> With fixed placement:
>
> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Thanks, I will fix the placement of include and send new version (v6).
> ---
>
> <form letter>
> This is an automated instruction, just in case, because many review tags
> are being ignored. If you know the process, you can skip it (please do
> not feel offended by me posting it here - no bad intentions intended).
> If you do not know the process, here is a short explanation:
>
> Please add Acked-by/Reviewed-by/Tested-by tags when posting new
> versions of patchset, under or above your Signed-off-by tag, unless
> patch changed significantly (e.g. new properties added to the DT
> bindings). Tag is "received", when provided in a message replied to you
> on the mailing list. Tools like b4 can help here. However, there's no
> need to repost patches *only* to add the tags. The upstream maintainer
> will do that for tags received on the version they apply.
>
> https://elixir.bootlin.com/linux/v6.12-rc3/source/Documentation/process/submitting-patches.rst#L577
> </form letter>
>
> Best regards,
> Krzysztof
>

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

end of thread, other threads:[~2025-03-24 11:58 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-21 16:16 [PATCH v5 1/2] dt-bindings: iio: light: bh1750: Add reset-gpios property Sergio Perez
2025-03-21 16:16 ` [PATCH v5 2/2] iio: light: bh1750: Add hardware reset support via GPIO Sergio Perez
2025-03-24  8:08 ` [PATCH v5 1/2] dt-bindings: iio: light: bh1750: Add reset-gpios property Krzysztof Kozlowski
2025-03-24 11:58   ` Sergio Pérez

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox