diff options
| author | Mark Brown <broonie@kernel.org> | 2024-09-30 22:05:51 +0100 |
|---|---|---|
| committer | Mark Brown <broonie@kernel.org> | 2024-09-30 22:05:51 +0100 |
| commit | dc16594d9967773ca891b3d9111f152e3c99d1cf (patch) | |
| tree | 809f757ed3c9fd1b8fa77a42ac6c95bd85e8337e /include/linux | |
| parent | 18be43aca2c0ec475037923a8086d0a29fcc9d16 (diff) | |
| parent | 36ec3f437227470568e5f460997f367f5446a34d (diff) | |
Add of_regulator_get_optional() and Fix MTK Power
Merge series from Chen-Yu Tsai <wenst@chromium.org>:
At ELCE, Sebastian told me about his recent work on adding regulator
supply support to the Rockchip power domain driver [2], how the MediaTek
driver has been using the existing devm_regulator_get() API and
reassigning different device nodes to the device doing the lookup, and
how the new of_regulator_get_optional() is the proper fit for this.
Patch 1 adds a new of_regulator_get_optional() function to look up
regulator supplies using device tree nodes.
Patch 2 adds a devres version of the aforementioned function at
Sebastian's request for the two power domain drivers.
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/regulator/consumer.h | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/include/linux/regulator/consumer.h b/include/linux/regulator/consumer.h index b9ce521910a0..8c3c372ad735 100644 --- a/include/linux/regulator/consumer.h +++ b/include/linux/regulator/consumer.h @@ -168,6 +168,29 @@ int devm_regulator_get_enable_read_voltage(struct device *dev, const char *id); void regulator_put(struct regulator *regulator); void devm_regulator_put(struct regulator *regulator); +#if IS_ENABLED(CONFIG_OF) +struct regulator *__must_check of_regulator_get_optional(struct device *dev, + struct device_node *node, + const char *id); +struct regulator *__must_check devm_of_regulator_get_optional(struct device *dev, + struct device_node *node, + const char *id); +#else +static inline struct regulator *__must_check of_regulator_get_optional(struct device *dev, + struct device_node *node, + const char *id) +{ + return ERR_PTR(-ENODEV); +} + +static inline struct regulator *__must_check devm_of_regulator_get_optional(struct device *dev, + struct device_node *node, + const char *id) +{ + return ERR_PTR(-ENODEV); +} +#endif + int regulator_register_supply_alias(struct device *dev, const char *id, struct device *alias_dev, const char *alias_id); @@ -350,6 +373,20 @@ devm_regulator_get_optional(struct device *dev, const char *id) return ERR_PTR(-ENODEV); } +static inline struct regulator *__must_check of_regulator_get_optional(struct device *dev, + struct device_node *node, + const char *id) +{ + return ERR_PTR(-ENODEV); +} + +static inline struct regulator *__must_check devm_of_regulator_get_optional(struct device *dev, + struct device_node *node, + const char *id) +{ + return ERR_PTR(-ENODEV); +} + static inline void regulator_put(struct regulator *regulator) { } |
