1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
From: Sascha Hauer <s.hauer@pengutronix.de>
Date: Thu, 19 Dec 2019 19:27:58 +0100
Subject: [PATCH] regulator: add function to get regulator by its name
Useful for getting regulators that are not correctly associated with a
device.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
drivers/regulator/core.c | 30 +++++++++++++++++++++++++++++-
include/regulator.h | 1 +
2 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 4ca035ae9476..f0de7a52e391 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -327,6 +327,34 @@ struct regulator *regulator_get(struct device_d *dev, const char *supply)
return r;
}
+static struct regulator_internal *regulator_by_name(const char *name)
+{
+ struct regulator_internal *ri;
+
+ list_for_each_entry(ri, ®ulator_list, list)
+ if (ri->name && !strcmp(ri->name, name))
+ return ri;
+
+ return NULL;
+}
+
+struct regulator *regulator_get_name(const char *name)
+{
+ struct regulator_internal *ri;
+ struct regulator *r;
+
+ ri = regulator_by_name(name);
+ if (!ri)
+ return ERR_PTR(-ENODEV);
+
+ r = xzalloc(sizeof(*r));
+ r->ri = ri;
+
+ list_add_tail(&r->list, &ri->consumer_list);
+
+ return r;
+}
+
/*
* regulator_enable - enable a regulator.
* @r: the regulator to enable
@@ -379,7 +407,7 @@ static void regulator_print_one(struct regulator_internal *ri)
printf(" consumers:\n");
list_for_each_entry(r, &ri->consumer_list, list)
- printf(" %s\n", dev_name(r->dev));
+ printf(" %s\n", r->dev ? dev_name(r->dev) : "none");
}
}
diff --git a/include/regulator.h b/include/regulator.h
index 156acb82f8df..a445c5c3d10a 100644
--- a/include/regulator.h
+++ b/include/regulator.h
@@ -116,6 +116,7 @@ void regulators_print(void);
#ifdef CONFIG_REGULATOR
struct regulator *regulator_get(struct device_d *, const char *);
+struct regulator *regulator_get_name(const char *name);
int regulator_enable(struct regulator *);
int regulator_disable(struct regulator *);
int regulator_is_enabled_regmap(struct regulator_dev *);
|