From: Marek Vasut [mailto:marex@xxxxxxx] Sent: Monday, November 7, 2022 1:32 AM > Each gpio-leds DT node DT subnode can have a pinctrl property assigned > to it, parse the DT subnode pinctrl properties and configure each pin > accordingly. > > Signed-off-by: Marek Vasut <marex@xxxxxxx> > --- > Cc: Christoph Niedermaier <cniedermaier@xxxxxxxxxxxxxxxxxx> > Cc: Pavel Machek <pavel@xxxxxx> > To: linux-leds@xxxxxxxxxxxxxxx > --- > drivers/leds/leds-gpio.c | 18 ++++++++++++++++++ > 1 file changed, 18 insertions(+) > > diff --git a/drivers/leds/leds-gpio.c b/drivers/leds/leds-gpio.c > index 092eb59a7d325..01ca88876f008 100644 > --- a/drivers/leds/leds-gpio.c > +++ b/drivers/leds/leds-gpio.c > @@ -13,6 +13,7 @@ > #include <linux/leds.h> > #include <linux/module.h> > #include <linux/of.h> > +#include <linux/pinctrl/consumer.h> > #include <linux/platform_device.h> > #include <linux/property.h> > #include <linux/slab.h> > @@ -77,6 +78,7 @@ static int create_gpio_led(const struct gpio_led *template, > struct fwnode_handle *fwnode, gpio_blink_set_t blink_set) > { > struct led_init_data init_data = {}; > + struct pinctrl *pinctrl; > int ret, state; > > led_dat->cdev.default_trigger = template->default_trigger; > @@ -119,6 +121,22 @@ static int create_gpio_led(const struct gpio_led *template, > &init_data); > } > > + if (ret) > + return ret; > + > + pinctrl = devm_pinctrl_get_select_default(led_dat->cdev.dev); > + if (IS_ERR(pinctrl)) { > + ret = PTR_ERR(pinctrl); > + if (ret != -ENODEV) { > + dev_warn(led_dat->cdev.dev, > + "Failed to select %pOF pinctrl: %d\n", > + to_of_node(fwnode), ret); > + } else { > + /* pinctrl-%d not present, not an error */ > + ret = 0; > + } > + } > + > return ret; > } > Tested-by: Christoph Niedermaier <cniedermaier@xxxxxxxxxxxxxxxxxx> Regards Christoph