[PATCH v2 2/3] iio: light: vcnl4000: add support for regulators
From: Erikas Bitovtas
Date: Thu Mar 12 2026 - 07:55:11 EST
Add supply, I2C and cathode voltage regulators to the sensor and enable
them. This keeps the sensor powered on even after its only supply shared
by another device shuts down.
This bug was reported outside of LKML, so no Closes: tag can be
attached.
Signed-off-by: Erikas Bitovtas <xerikasxx@xxxxxxxxx>
Reported-by: Raymond Hackley <raymondhackley@xxxxxxxxxxxxxx>
---
drivers/iio/light/vcnl4000.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/drivers/iio/light/vcnl4000.c b/drivers/iio/light/vcnl4000.c
index 5e03c3d8874b..04bde498aec4 100644
--- a/drivers/iio/light/vcnl4000.c
+++ b/drivers/iio/light/vcnl4000.c
@@ -18,12 +18,13 @@
*/
#include <linux/bitfield.h>
-#include <linux/module.h>
-#include <linux/i2c.h>
-#include <linux/err.h>
#include <linux/delay.h>
-#include <linux/pm_runtime.h>
+#include <linux/err.h>
+#include <linux/i2c.h>
#include <linux/interrupt.h>
+#include <linux/module.h>
+#include <linux/pm_runtime.h>
+#include <linux/regulator/consumer.h>
#include <linux/units.h>
#include <linux/iio/buffer.h>
@@ -1983,6 +1984,7 @@ static int vcnl4010_probe_trigger(struct iio_dev *indio_dev)
static int vcnl4000_probe(struct i2c_client *client)
{
const struct i2c_device_id *id = i2c_client_get_device_id(client);
+ const char * const regulator_names[] = { "vdd", "vddio", "vled" };
struct vcnl4000_data *data;
struct iio_dev *indio_dev;
int ret;
@@ -1997,6 +1999,12 @@ static int vcnl4000_probe(struct i2c_client *client)
data->id = id->driver_data;
data->chip_spec = &vcnl4000_chip_spec_cfg[data->id];
+ ret = devm_regulator_bulk_get_enable(&client->dev,
+ ARRAY_SIZE(regulator_names),
+ regulator_names);
+ if (ret < 0)
+ return ret;
+
mutex_init(&data->vcnl4000_lock);
ret = data->chip_spec->init(data);
--
2.53.0