On Mon, 12 Feb 2018, Linus Walleij wrote: > Instead of passing a global GPIO number for the enable GPIO, pass > a descriptor looked up from the device tree node for the > regulator. > > This regulator supports passing platform data, but enable/sleep > regulators are looked up from the device tree exclusively, so > we can need not touch other files. > > Cc: Lee Jones <lee.jones@xxxxxxxxxx> > Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx> > --- > Lee: would be nice if you could ACK this smallish patch to > the MFD header. Fine, but any sign of a conflict and I'll need a PR. Acked-by: Lee Jones <lee.jones@xxxxxxxxxx> > --- > drivers/regulator/s5m8767.c | 26 +++++++++++++++----------- > include/linux/mfd/samsung/core.h | 4 +++- > 2 files changed, 18 insertions(+), 12 deletions(-) > > diff --git a/drivers/regulator/s5m8767.c b/drivers/regulator/s5m8767.c > index 4836947e1521..b8443a360646 100644 > --- a/drivers/regulator/s5m8767.c > +++ b/drivers/regulator/s5m8767.c > @@ -13,6 +13,7 @@ > > #include <linux/err.h> > #include <linux/of_gpio.h> > +#include <linux/gpio/consumer.h> > #include <linux/module.h> > #include <linux/platform_device.h> > #include <linux/regulator/driver.h> > @@ -459,15 +460,14 @@ static void s5m8767_regulator_config_ext_control(struct s5m8767_info *s5m8767, > return; > } > > - if (!gpio_is_valid(rdata->ext_control_gpio)) { > + if (!rdata->ext_control_gpiod) { > dev_warn(s5m8767->dev, > "ext-control for %s: GPIO not valid, ignoring\n", > - rdata->reg_node->name); > + rdata->reg_node->name); > return; > } > > - config->ena_gpio = rdata->ext_control_gpio; > - config->ena_gpio_flags = GPIOF_OUT_INIT_HIGH; > + config->ena_gpiod = rdata->ext_control_gpiod; > } > > /* > @@ -577,8 +577,14 @@ static int s5m8767_pmic_dt_parse_pdata(struct platform_device *pdev, > continue; > } > > - rdata->ext_control_gpio = of_get_named_gpio(reg_np, > - "s5m8767,pmic-ext-control-gpios", 0); > + rdata->ext_control_gpiod = devm_gpiod_get_from_of_node(&pdev->dev, > + reg_np, > + "s5m8767,pmic-ext-control-gpios", > + 0, > + GPIOD_OUT_HIGH, > + "s5m8767"); > + if (IS_ERR(rdata->ext_control_gpiod)) > + return PTR_ERR(rdata->ext_control_gpiod); > > rdata->id = i; > rdata->initdata = of_get_regulator_init_data( > @@ -954,10 +960,8 @@ static int s5m8767_pmic_probe(struct platform_device *pdev) > config.driver_data = s5m8767; > config.regmap = iodev->regmap_pmic; > config.of_node = pdata->regulators[i].reg_node; > - config.ena_gpio = -EINVAL; > - config.ena_gpio_flags = 0; > - config.ena_gpio_initialized = true; > - if (gpio_is_valid(pdata->regulators[i].ext_control_gpio)) > + config.ena_gpiod = NULL; > + if (pdata->regulators[i].ext_control_gpiod) > s5m8767_regulator_config_ext_control(s5m8767, > &pdata->regulators[i], &config); > > @@ -970,7 +974,7 @@ static int s5m8767_pmic_probe(struct platform_device *pdev) > return ret; > } > > - if (gpio_is_valid(pdata->regulators[i].ext_control_gpio)) { > + if (pdata->regulators[i].ext_control_gpiod) { > ret = s5m8767_enable_ext_control(s5m8767, rdev); > if (ret < 0) { > dev_err(s5m8767->dev, > diff --git a/include/linux/mfd/samsung/core.h b/include/linux/mfd/samsung/core.h > index 5a23dd4df432..28f4ae76271d 100644 > --- a/include/linux/mfd/samsung/core.h > +++ b/include/linux/mfd/samsung/core.h > @@ -39,6 +39,8 @@ > #define STEP_12_5_MV 12500 > #define STEP_6_25_MV 6250 > > +struct gpio_desc; > + > enum sec_device_type { > S5M8751X, > S5M8763X, > @@ -151,7 +153,7 @@ struct sec_regulator_data { > int id; > struct regulator_init_data *initdata; > struct device_node *reg_node; > - int ext_control_gpio; > + struct gpio_desc *ext_control_gpiod; > }; > > /* -- Lee Jones Linaro Services Technical Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog -- To unsubscribe from this list: send the line "unsubscribe linux-gpio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html