On Wed, May 03, 2023 at 08:44:06PM -0500, Jeff LaBundy wrote: > Hi Tomas, > > On Wed, May 03, 2023 at 05:32:31PM +0200, Tomas Mudrunka wrote: > > LM8333 uses gpio interrupt line which is triggered by falling edge. > > When button is pressed before driver is loaded, > > driver will miss the edge and never respond again. > > To fix this we run the interrupt handler before registering IRQ > > to clear the interrupt via i2c command. > > > > Signed-off-by: Tomas Mudrunka <tomas.mudrunka@xxxxxxxxx> > > --- > > Reviewed-by: Jeff LaBundy <jeff@xxxxxxxxxxx> > > > drivers/input/keyboard/lm8333.c | 2 ++ > > 1 file changed, 2 insertions(+) > > > > diff --git a/drivers/input/keyboard/lm8333.c b/drivers/input/keyboard/lm8333.c > > index 7457c3220..52108c370 100644 > > --- a/drivers/input/keyboard/lm8333.c > > +++ b/drivers/input/keyboard/lm8333.c > > @@ -178,6 +178,8 @@ static int lm8333_probe(struct i2c_client *client) > > dev_warn(&client->dev, "Unable to set active time\n"); > > } > > > > + lm8333_irq_thread(client->irq, lm8333); So this is still racy, isn't it? The interrupt may come after read is done, but before we register the handler. > > + > > err = request_threaded_irq(client->irq, NULL, lm8333_irq_thread, > > IRQF_TRIGGER_FALLING | IRQF_ONESHOT, > > "lm8333", lm8333); > > -- > > 2.40.1 > Thanks. -- Dmitry