The original Linux code calls regulator_get_optional and handles its -ENODEV return code, which morphed into regulator_get when ported to barebox. The error handling stayed as-is leading to causing supplies to trigger errors instead of being silently ignored. As we use NULL to describe the dummy regulator in barebox, we can add a trivial regulator_get_optional implementation and use it to fix the I/O domain driver. Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> --- drivers/soc/rockchip/io-domain.c | 2 +- include/regulator.h | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/soc/rockchip/io-domain.c b/drivers/soc/rockchip/io-domain.c index 9f60b6eb4c28..453d393cb09f 100644 --- a/drivers/soc/rockchip/io-domain.c +++ b/drivers/soc/rockchip/io-domain.c @@ -165,7 +165,7 @@ static int rockchip_iodomain_probe(struct device *dev) if (!supply_name) continue; - reg = regulator_get(dev, supply_name); + reg = regulator_get_optional(dev, supply_name); if (IS_ERR(reg)) { ret = PTR_ERR(reg); diff --git a/include/regulator.h b/include/regulator.h index 135fe6d91fd3..305da0d774ba 100644 --- a/include/regulator.h +++ b/include/regulator.h @@ -3,6 +3,7 @@ #define __REGULATOR_H #include <linux/bitops.h> +#include <linux/err.h> struct device; @@ -284,4 +285,11 @@ static inline int regulator_get_voltage(struct regulator *regulator) #endif +static inline struct regulator *regulator_get_optional(struct device *dev, + const char *id) +{ + return regulator_get(dev, id) ?: ERR_PTR(-ENODEV); +} + + #endif /* __REGULATOR_H */ -- 2.39.2