If regulator init data is not specified in the parent mfd device's platform data, attempt to retrieve it from the devicetree node. Example: i2c0 { tps61052@33 { compatible = "ti,tps61052"; reg = <0x33>; regulator { compatible = "ti,tps6105x-regulator"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; regulator-always-on; }; }; }; Tree: next-20191118 Signed-off-by: Sven Van Asbroeck <TheSven73@xxxxxxxxx> --- drivers/regulator/tps6105x-regulator.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/regulator/tps6105x-regulator.c b/drivers/regulator/tps6105x-regulator.c index 06059a94f7c6..9bc4e869fc4c 100644 --- a/drivers/regulator/tps6105x-regulator.c +++ b/drivers/regulator/tps6105x-regulator.c @@ -18,6 +18,7 @@ #include <linux/regulator/driver.h> #include <linux/mfd/core.h> #include <linux/mfd/tps6105x.h> +#include <linux/regulator/of_regulator.h> static const unsigned int tps6105x_voltages[] = { 4500000, @@ -58,6 +59,7 @@ static int tps6105x_regulator_probe(struct platform_device *pdev) { struct tps6105x *tps6105x = dev_get_platdata(&pdev->dev); struct tps6105x_platform_data *pdata = tps6105x->pdata; + struct regulator_init_data *init_data = pdata->regulator_data; struct regulator_config config = { }; int ret; @@ -68,8 +70,14 @@ static int tps6105x_regulator_probe(struct platform_device *pdev) return 0; } + if (!init_data) + init_data = of_get_regulator_init_data( + &pdev->dev, pdev->dev.of_node, + &tps6105x_regulator_desc); + if (!init_data) + return -EINVAL; config.dev = &tps6105x->client->dev; - config.init_data = pdata->regulator_data; + config.init_data = init_data; config.driver_data = tps6105x; config.regmap = tps6105x->regmap; -- 2.17.1