[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250528174426.3318110-3-dtokazaki@google.com>
Date: Wed, 28 May 2025 17:44:25 +0000
From: Daniel Okazaki <dtokazaki@...gle.com>
To: Liam Girdwood <lgirdwood@...il.com>, Mark Brown <broonie@...nel.org>,
Rob Herring <robh@...nel.org>, Krzysztof Kozlowski <krzk+dt@...nel.org>, Conor Dooley <conor+dt@...nel.org>,
Zev Weiss <zev@...ilderbeest.net>
Cc: Daniel Okazaki <dtokazaki@...gle.com>, kernel-team@...roid.com,
linux-kernel@...r.kernel.org, devicetree@...r.kernel.org
Subject: [PATCH v1 2/2] regulator: userspace-consumer add shared supply functionality
Add is_shared flag to indictae that regulator control is not
exclusive to this module.
Signed-off-by: Daniel Okazaki <dtokazaki@...gle.com>
---
drivers/regulator/userspace-consumer.c | 39 ++++++++++++++++----------
1 file changed, 24 insertions(+), 15 deletions(-)
diff --git a/drivers/regulator/userspace-consumer.c b/drivers/regulator/userspace-consumer.c
index 72bb5ffb49a8..4ab316d528fb 100644
--- a/drivers/regulator/userspace-consumer.c
+++ b/drivers/regulator/userspace-consumer.c
@@ -26,6 +26,7 @@ struct userspace_consumer_data {
struct mutex lock;
bool enabled;
bool no_autoswitch;
+ bool is_shared;
int num_supplies;
struct regulator_bulk_data *supplies;
@@ -156,8 +157,14 @@ static int regulator_userspace_consumer_probe(struct platform_device *pdev)
mutex_init(&drvdata->lock);
- ret = devm_regulator_bulk_get_exclusive(&pdev->dev, drvdata->num_supplies,
- drvdata->supplies);
+ drvdata->is_shared = of_property_read_bool(pdev->dev.of_node, "is_shared");
+ if (drvdata->is_shared) {
+ ret = devm_regulator_bulk_get(&pdev->dev, drvdata->num_supplies,
+ drvdata->supplies);
+ } else {
+ ret = devm_regulator_bulk_get_exclusive(&pdev->dev, drvdata->num_supplies,
+ drvdata->supplies);
+ }
if (ret)
return dev_err_probe(&pdev->dev, ret, "Failed to get supplies\n");
@@ -167,22 +174,24 @@ static int regulator_userspace_consumer_probe(struct platform_device *pdev)
if (ret != 0)
return ret;
- if (pdata->init_on && !pdata->no_autoswitch) {
- ret = regulator_bulk_enable(drvdata->num_supplies,
- drvdata->supplies);
- if (ret) {
- dev_err(&pdev->dev,
- "Failed to set initial state: %d\n", ret);
- goto err_enable;
+ if (!drvdata->is_shared) {
+ if (pdata->init_on && !pdata->no_autoswitch) {
+ ret = regulator_bulk_enable(drvdata->num_supplies,
+ drvdata->supplies);
+ if (ret) {
+ dev_err(&pdev->dev,
+ "Failed to set initial state: %d\n", ret);
+ goto err_enable;
+ }
}
- }
- ret = regulator_is_enabled(pdata->supplies[0].consumer);
- if (ret < 0) {
- dev_err(&pdev->dev, "Failed to get regulator status\n");
- goto err_enable;
+ ret = regulator_is_enabled(pdata->supplies[0].consumer);
+ if (ret < 0) {
+ dev_err(&pdev->dev, "Failed to get regulator status\n");
+ goto err_enable;
+ }
+ drvdata->enabled = !!ret;
}
- drvdata->enabled = !!ret;
return 0;
--
2.49.0.1204.g71687c7c1d-goog
Powered by blists - more mailing lists