On Wed, Dec 11, 2024 at 6:10 AM Song Chen <chensong_2000@xxxxxx> wrote: > > This converts s5m8767 regulator driver to use GPIO descriptors. > > --- > v1 - v2: > 1, reedit commit message. > 2, remove development code. > 3, print error msg in dev_err_probe. > 4, doesn't set gpiod directions until successfully requesting > all gpiods. It's pretty much equivalent with original code. > > Signed-off-by: Song Chen <chensong_2000@xxxxxx> > --- > drivers/regulator/s5m8767.c | 106 ++++++++++++++----------------- > include/linux/mfd/samsung/core.h | 4 +- > 2 files changed, 48 insertions(+), 62 deletions(-) > > diff --git a/drivers/regulator/s5m8767.c b/drivers/regulator/s5m8767.c > index d25cd81e3f36..b23df037336b 100644 > --- a/drivers/regulator/s5m8767.c > +++ b/drivers/regulator/s5m8767.c > @@ -5,7 +5,7 @@ > > #include <linux/cleanup.h> > #include <linux/err.h> > -#include <linux/of_gpio.h> > +#include <linux/of.h> > #include <linux/gpio/consumer.h> > #include <linux/module.h> > #include <linux/platform_device.h> > @@ -35,8 +35,8 @@ struct s5m8767_info { > u8 buck2_vol[8]; > u8 buck3_vol[8]; > u8 buck4_vol[8]; > - int buck_gpios[3]; > - int buck_ds[3]; > + struct gpio_desc *buck_gpios[3]; > + struct gpio_desc *buck_ds[3]; > int buck_gpioindex; > }; > > @@ -272,9 +272,9 @@ static inline int s5m8767_set_high(struct s5m8767_info *s5m8767) > { > int temp_index = s5m8767->buck_gpioindex; > > - gpio_set_value(s5m8767->buck_gpios[0], (temp_index >> 2) & 0x1); > - gpio_set_value(s5m8767->buck_gpios[1], (temp_index >> 1) & 0x1); > - gpio_set_value(s5m8767->buck_gpios[2], temp_index & 0x1); > + gpiod_set_value(s5m8767->buck_gpios[0], (temp_index >> 2) & 0x1); > + gpiod_set_value(s5m8767->buck_gpios[1], (temp_index >> 1) & 0x1); > + gpiod_set_value(s5m8767->buck_gpios[2], temp_index & 0x1); > It seems to me that these GPIOs are always manipulated at once. Maybe consider adding fwnode_gpiod_get_index_array() to GPIO core and using it here to shrink the code a bit more? Bart