[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20241115-ds2482-add-reg-v1-1-cc84b9aba126@gmail.com>
Date: Fri, 15 Nov 2024 15:58:04 +0100
From: Kryštof Černý via B4 Relay <devnull+cleverline1mc.gmail.com@...nel.org>
To: Krzysztof Kozlowski <krzk@...nel.org>, Rob Herring <robh@...nel.org>,
Conor Dooley <conor+dt@...nel.org>,
Stefan Wahren <stefan.wahren@...rgebyte.com>
Cc: Ben Gardner <bgardner@...tec.com>, linux-kernel@...r.kernel.org,
devicetree@...r.kernel.org,
Kryštof Černý <cleverline1mc@...il.com>
Subject: [PATCH 1/3] w1: ds2482: Add regulator support
From: Kryštof Černý <cleverline1mc@...il.com>
Adds a support for attaching a supply regulator.
Signed-off-by: Kryštof Černý <cleverline1mc@...il.com>
---
drivers/w1/masters/ds2482.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/drivers/w1/masters/ds2482.c b/drivers/w1/masters/ds2482.c
index a2ecbb863c57f38bffc8e3cd463db1940e603179..3fb35e92fc1587dc4e609c0061fa5057e0027a80 100644
--- a/drivers/w1/masters/ds2482.c
+++ b/drivers/w1/masters/ds2482.c
@@ -15,6 +15,7 @@
#include <linux/slab.h>
#include <linux/i2c.h>
#include <linux/delay.h>
+#include <linux/regulator/consumer.h>
#include <linux/w1.h>
@@ -117,6 +118,9 @@ struct ds2482_data {
u8 channel;
u8 read_prt; /* see DS2482_PTR_CODE_xxx */
u8 reg_config;
+
+ /* reference to the optional regulator */
+ struct regulator *vcc_reg;
};
@@ -445,6 +449,7 @@ static int ds2482_probe(struct i2c_client *client)
int err = -ENODEV;
int temp1;
int idx;
+ int ret;
if (!i2c_check_functionality(client->adapter,
I2C_FUNC_SMBUS_WRITE_BYTE_DATA |
@@ -457,6 +462,18 @@ static int ds2482_probe(struct i2c_client *client)
goto exit;
}
+ /* Get the vcc regulator */
+ data->vcc_reg = devm_regulator_get(&client->dev, "vcc");
+ if (IS_ERR(data->vcc_reg))
+ return PTR_ERR(data->vcc_reg);
+
+ /* Enable the vcc regulator */
+ ret = regulator_enable(data->vcc_reg);
+ if (ret) {
+ dev_err(&client->dev, "Fail to enable regulator\n");
+ return ret;
+ }
+
data->client = client;
i2c_set_clientdata(client, data);
@@ -517,6 +534,7 @@ static int ds2482_probe(struct i2c_client *client)
w1_remove_master_device(&data->w1_ch[idx].w1_bm);
}
exit_free:
+ regulator_disable(data->vcc_reg);
kfree(data);
exit:
return err;
@@ -533,6 +551,9 @@ static void ds2482_remove(struct i2c_client *client)
w1_remove_master_device(&data->w1_ch[idx].w1_bm);
}
+ /* Disable the vcc regulator */
+ regulator_disable(data->vcc_reg);
+
/* Free the memory */
kfree(data);
}
--
2.39.5
Powered by blists - more mailing lists