Hi Linus, On Tue, May 28, 2024 at 01:54:29PM +0200, Linus Walleij wrote: > On Mon, May 20, 2024 at 9:59 PM Laurent Pinchart wrote: > > > From: Haibo Chen <haibo.chen@xxxxxxx> > > > > The ADP5585 is a 10/11 input/output port expander with a built in keypad > > matrix decoder, programmable logic, reset generator, and PWM generator. > > This driver supports the GPIO function using the platform device > > registered by the core MFD driver. > > > > The driver is derived from an initial implementation from NXP, available > > in commit 451f61b46b76 ("MLK-25917-2 gpio: adp5585-gpio: add > > adp5585-gpio support") in their BSP kernel tree. It has been extensively > > rewritten. > > > > Signed-off-by: Haibo Chen <haibo.chen@xxxxxxx> > > Signed-off-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > > (...) > > > +static int adp5585_gpio_direction_input(struct gpio_chip *chip, unsigned int off) > > +{ > > + struct adp5585_gpio_dev *adp5585_gpio = gpiochip_get_data(chip); > > + unsigned int bank = ADP5585_BANK(off); > > + unsigned int bit = ADP5585_BIT(off); > > + > > + guard(mutex)(&adp5585_gpio->lock); > > + > > + return regmap_update_bits(adp5585_gpio->regmap, > > + ADP5585_GPIO_DIRECTION_A + bank, > > + bit, 0); > > First, I love the guarded mutex! Yes, it's neat :-) > But doesn't regmap already contain a mutex? Or is this one of those > cases where regmap has been instantiated without a lock? regmap indeed includes a lock, but it will lock each register access independently. In adp5585_gpio_get_value() we need to read two registers atomically, so we need to cover them by a single lock. I could drop the lock from regmap, but I would then likely need to introduce a lock in the parent mfd device that both the PWM and GPIO children would use to protect bus access. That may make sense in the future, but is a bit overkill for now I think. > > + gc = &adp5585_gpio->gpio_chip; > > + gc->parent = dev; > > + gc->direction_input = adp5585_gpio_direction_input; > > + gc->direction_output = adp5585_gpio_direction_output; > > And chance to implemen ->get_direction()? Sure, I'll add that to v2. > Other than this I think the driver is ready for merge, so with the > comments fixed or addressed: > Reviewed-by: Linus Walleij <linus.walleij@xxxxxxxxxx> Thank you. -- Regards, Laurent Pinchart