On Wed, Feb 21, 2024 at 2:59 AM Stephen Boyd <swboyd@xxxxxxxxxxxx> wrote: > > This devm API takes a consumer device as an argument to setup the devm > action, but throws it away when calling further into gpiolib. This leads > to odd debug messages like this: > > (NULL device *): using DT '/gpio-keys/switch-pen-insert' for '(null)' GPIO lookup > > Let's pass the consumer device down, by directly calling what > fwnode_gpiod_get_index() calls but pass the device used for devm. This > changes the message to look like this instead: > > gpio-keys gpio-keys: using DT '/gpio-keys/switch-pen-insert' for '(null)' GPIO lookup > > Note that callers of fwnode_gpiod_get_index() will still see the NULL > device pointer debug message, but there's not much we can do about that > because the API doesn't take a struct device. > > Cc: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx> > Fixes: 8eb1f71e7acc ("gpiolib: consolidate GPIO lookups") > Signed-off-by: Stephen Boyd <swboyd@xxxxxxxxxxxx> > --- > drivers/gpio/gpiolib-devres.c | 2 +- > drivers/gpio/gpiolib.c | 14 +++++++------- > drivers/gpio/gpiolib.h | 8 ++++++++ > 3 files changed, 16 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpio/gpiolib-devres.c b/drivers/gpio/gpiolib-devres.c > index fe9ce6b19f15..4987e62dcb3d 100644 > --- a/drivers/gpio/gpiolib-devres.c > +++ b/drivers/gpio/gpiolib-devres.c > @@ -158,7 +158,7 @@ struct gpio_desc *devm_fwnode_gpiod_get_index(struct device *dev, > if (!dr) > return ERR_PTR(-ENOMEM); > > - desc = fwnode_gpiod_get_index(fwnode, con_id, index, flags, label); > + desc = gpiod_find_and_request(dev, fwnode, con_id, index, flags, label, false); > if (IS_ERR(desc)) { > devres_free(dr); > return desc; > diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c > index 44c8f5743a24..c6667a887ecb 100644 > --- a/drivers/gpio/gpiolib.c > +++ b/drivers/gpio/gpiolib.c > @@ -4133,13 +4133,13 @@ static struct gpio_desc *gpiod_find_by_fwnode(struct fwnode_handle *fwnode, > return desc; > } > > -static struct gpio_desc *gpiod_find_and_request(struct device *consumer, > - struct fwnode_handle *fwnode, > - const char *con_id, > - unsigned int idx, > - enum gpiod_flags flags, > - const char *label, > - bool platform_lookup_allowed) > +struct gpio_desc *gpiod_find_and_request(struct device *consumer, > + struct fwnode_handle *fwnode, > + const char *con_id, > + unsigned int idx, > + enum gpiod_flags flags, > + const char *label, > + bool platform_lookup_allowed) > { > unsigned long lookupflags = GPIO_LOOKUP_FLAGS_DEFAULT; > struct gpio_desc *desc; > diff --git a/drivers/gpio/gpiolib.h b/drivers/gpio/gpiolib.h > index a4a2520b5f31..c6e5fb9aa212 100644 > --- a/drivers/gpio/gpiolib.h > +++ b/drivers/gpio/gpiolib.h > @@ -202,6 +202,14 @@ static inline int gpiod_request_user(struct gpio_desc *desc, const char *label) > return ret; > } > > +struct gpio_desc *gpiod_find_and_request(struct device *consumer, > + struct fwnode_handle *fwnode, > + const char *con_id, > + unsigned int idx, > + enum gpiod_flags flags, > + const char *label, > + bool platform_lookup_allowed); > + > int gpiod_configure_flags(struct gpio_desc *desc, const char *con_id, > unsigned long lflags, enum gpiod_flags dflags); > int gpio_set_debounce_timeout(struct gpio_desc *desc, unsigned int debounce); > > base-commit: 6613476e225e090cc9aad49be7fa504e290dd33d > -- > https://chromeos.dev > This doesn't apply on top of the for-next branch of the GPIO tree, please rebase and resend. Bart