diff options
Diffstat (limited to 'configs/platform-v7a/patches/barebox-2020.01.0/0007-regulator-add-function-to-get-regulator-by-its-name.patch')
-rw-r--r-- | configs/platform-v7a/patches/barebox-2020.01.0/0007-regulator-add-function-to-get-regulator-by-its-name.patch | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/configs/platform-v7a/patches/barebox-2020.01.0/0007-regulator-add-function-to-get-regulator-by-its-name.patch b/configs/platform-v7a/patches/barebox-2020.01.0/0007-regulator-add-function-to-get-regulator-by-its-name.patch new file mode 100644 index 0000000..0ccafda --- /dev/null +++ b/configs/platform-v7a/patches/barebox-2020.01.0/0007-regulator-add-function-to-get-regulator-by-its-name.patch @@ -0,0 +1,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 *); |