On 19/03/2025 17:11, Sergio Perez wrote:Regarding indentation, I'll fix it in the next version to ensure consistency with kernel style guidelines.
struct bh1750_chip_info {
@@ -248,6 +253,24 @@ 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);
Mess indentation.
The BH1750 reset pin (DVI) is "active low", meaning the device is in reset state when the pin is at 0V. When the pin is at high level, the device exits reset and operates normally.
+ 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, 0);
+ fsleep(BH1750_RESET_DELAY_US);
+ gpiod_set_value_cansleep(data->reset_gpio, 1);
So you keep device at reset state. This wasn't tested or your DTS is wrong.
I expect to acknowledge/respond to each of this comments above. Next
version, which is supposed to be v5, should fix them.
Best regards,
Krzysztof