From patchwork Fri Mar 21 16:16:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Sergio_P=C3=A9rez?= X-Patchwork-Id: 14025745 Received: from p00-icloudmta-asmtp-us-central-1k-100-percent-8.p00-icloudmta-asmtp-vip.icloud-mail-production.svc.kube.us-central-1k.k8s.cloud.apple.com (p-east1-cluster2-host7-snip4-2.eps.apple.com [57.103.88.193]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C410E22ACC6 for ; Fri, 21 Mar 2025 16:17:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=57.103.88.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742573849; cv=none; b=fFgqNIzkHtRsFAmzaQwAnT45fbHYW0WSjaJ+FutkxY03IxB/pkMcUi3Epxh3PqvRQrQhUXOSt+sYFbgZCnagM/iAX+wUeF0Rd+ojMict91YT15arhQ5R44RHiuLCrVsJNLw1aPnaEkVludL/rrDEwJ90cAtaR69fhheVos9DYlA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742573849; c=relaxed/simple; bh=OeIjux2L+VD6vXxq8q41IkwVOrxAsgrjCtTRW+6pDr4=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=hKeZ3iKtdSTjkocz7USI3hbI2mXhRWmAklmLwO5R/b0oGea15vL6/R+3cV8Fs6MGSZoLLO2g5dES1gb+ofjwiQLn3Eh4LSelK2bQly9EIV3gLtKb6/IyVUD9RAx41kxO33AbJNcyLhshtilUAabYaDA/qWrDmbUqsMEh4hg9jP0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pereznus.es; spf=pass smtp.mailfrom=pereznus.es; dkim=pass (2048-bit key) header.d=pereznus.es header.i=@pereznus.es header.b=RIEU0z+p; arc=none smtp.client-ip=57.103.88.193 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pereznus.es Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pereznus.es Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pereznus.es header.i=@pereznus.es header.b="RIEU0z+p" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pereznus.es; s=sig1; bh=YVvZ4UL0bFTiJFwO9+ZDas4+KDymXBDJvT0ZeYG903g=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=RIEU0z+pvlB1ltSuS8t3rOQ6U13ryJA9kAqfq8LoV3H1i0Bm4BEngIec1m2AkJLAQ v4KeIagjFybg48sxu1/dNpDGypCCtN0NiTxL8aKyNbbu6kf1cOaOV3IQtZKHGpgQf5 lh8BFvIiYUgGL7luc6Ou7i+i2TbmgyMerFZ7A4TopqBciRRKL/UwWC2x3c+W+Gezot CpvNs7UC3urWXE1S3kb0nwuTMsoYHmtEl4kD/HDbdiOt7ql0/kJgs1o7hTOKzYnb4G C1ZiTtWy3wWV4BWNxxv6qrrmzCTgQeAqayXN5cMWT5Aha5CQte0gQUBBJRB7NcPm5e 88ksjTGgWHdPQ== Received: from localhost.localdomain (ci-asmtp-me-k8s.p00.prod.me.com [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-100-percent-8.p00-icloudmta-asmtp-vip.icloud-mail-production.svc.kube.us-central-1k.k8s.cloud.apple.com (Postfix) with ESMTPSA id 131D618004B3; Fri, 21 Mar 2025 16:17:22 +0000 (UTC) From: Sergio Perez To: Tomasz Duszynski , Jonathan Cameron , Lars-Peter Clausen , Rob Herring , Krzysztof Kozlowski , Conor Dooley , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Sergio Perez Subject: [PATCH v5 1/2] dt-bindings: iio: light: bh1750: Add reset-gpios property Date: Fri, 21 Mar 2025 17:16:08 +0100 Message-ID: <20250321161609.3662-1-sergio@pereznus.es> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-iio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Proofpoint-GUID: 5VrYs6qDqU4-cOfEbqjs0JNSdM9txB9Q X-Proofpoint-ORIG-GUID: 5VrYs6qDqU4-cOfEbqjs0JNSdM9txB9Q X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-21_05,2025-03-21_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxscore=0 mlxlogscore=999 malwarescore=0 bulkscore=0 spamscore=0 adultscore=0 suspectscore=0 clxscore=1030 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2308100000 definitions=main-2503210119 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 Reviewed-by: Krzysztof Kozlowski --- 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 + light-sensor@23 { compatible = "rohm,bh1750"; reg = <0x23>; + reset-gpios = <&gpio2 17 GPIO_ACTIVE_LOW>; }; }; From patchwork Fri Mar 21 16:16:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Sergio_P=C3=A9rez?= X-Patchwork-Id: 14025746 Received: from p00-icloudmta-asmtp-us-central-1k-100-percent-8.p00-icloudmta-asmtp-vip.icloud-mail-production.svc.kube.us-central-1k.k8s.cloud.apple.com (p-east1-cluster5-host6-snip4-2.eps.apple.com [57.103.89.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 29F8C19938D for ; Fri, 21 Mar 2025 16:18:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=57.103.89.183 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742573891; cv=none; b=pRXH6C17l/B0jBGgeetm6btIDTcTe2XA4qsKIKtX+zOQ0mGrws8FrvA/ttGdv4GF2K9K/iOvqxKcSGHoDbPXdqMxiBr5fdi3K4Ahnes0fx64ZvYyljmvuKnByVIckEfvcUnVsQE6AuYSVBPpWHRYieoIvUKP1Vrz5mrBQ1I0tCs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742573891; c=relaxed/simple; bh=H6o9I3+v4AZcYviKhQH6WKRTfrGF8tG7acbR4GpB+ss=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aKYsk+TurXVFzaQsvpxE+OrFGNMDSxm9s4clltyoGOgFlQNitwmAF8nY90vSPOyK7sl/fRegbOo/DPpFCjZQehMDcGoTfxVfy8SfAIjjbzsbhBRlv3Yo3tzsaBgT6SDi7T+uG6LUvR3UhKQ97akkRad1RDhVOxS0TD4+AtdN+vU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pereznus.es; spf=pass smtp.mailfrom=pereznus.es; dkim=pass (2048-bit key) header.d=pereznus.es header.i=@pereznus.es header.b=h3zSnoO3; arc=none smtp.client-ip=57.103.89.183 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pereznus.es Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pereznus.es Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pereznus.es header.i=@pereznus.es header.b="h3zSnoO3" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pereznus.es; s=sig1; bh=oLL6xqfVSwrgkY0J2aQo0YZdH5erYvY/+9P5IAuUfq4=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=h3zSnoO3Nx0O28k5Jr45zo28oAFo3+6T0L3eu7YW4D7GJfz7WfMdjm//HfeYOdEAP o2lAKDBZr3fhTzzBIAwYEZRr9wwD9PJGfliHN7rtLrqJESjATP4oJI7oyzBv98G/0V x+hVNreddiRbHFlC5s/Xn4tZczFJ+zsrb+5bq7vtjHlMRClV4rI8orsExumk+fKFDf f7u2Lu2A2gBbhOew51GqAMfFyDYzgRlzklnBLxIXoC3cVXU2l4f60P4IIj46L6Rch8 z1xmi/tKpMLP4neGfn0YBHhMaMhrukUoACXIQYdDKaoPCO//6ZEQBYxzpcxZo2QsIt +ei0dI3tRIwWA== Received: from localhost.localdomain (ci-asmtp-me-k8s.p00.prod.me.com [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-100-percent-8.p00-icloudmta-asmtp-vip.icloud-mail-production.svc.kube.us-central-1k.k8s.cloud.apple.com (Postfix) with ESMTPSA id 985DB18009A1; Fri, 21 Mar 2025 16:18:04 +0000 (UTC) From: Sergio Perez To: Tomasz Duszynski , Jonathan Cameron , Lars-Peter Clausen , Rob Herring , Krzysztof Kozlowski , Conor Dooley , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Sergio Perez Subject: [PATCH v5 2/2] iio: light: bh1750: Add hardware reset support via GPIO Date: Fri, 21 Mar 2025 17:16:09 +0100 Message-ID: <20250321161609.3662-2-sergio@pereznus.es> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250321161609.3662-1-sergio@pereznus.es> References: <20250321161609.3662-1-sergio@pereznus.es> Precedence: bulk X-Mailing-List: linux-iio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Proofpoint-GUID: ke2n7Kj045EMxJlpwH9li30QTXsRpBMC X-Proofpoint-ORIG-GUID: ke2n7Kj045EMxJlpwH9li30QTXsRpBMC X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-21_05,2025-03-21_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxscore=0 mlxlogscore=999 malwarescore=0 bulkscore=0 spamscore=0 adultscore=0 suspectscore=0 clxscore=1030 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2308100000 definitions=main-2503210120 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 --- 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 #include #include +#include #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)