Hi Dmitry, Thanks for the feedback. On Tue, Dec 19, 2023 at 1:52 AM Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx> wrote: > > On Wed, Dec 13, 2023 at 09:48:03PM +0000, Biju Das wrote: > > +static void da9063_onkey_polled_poll(struct input_dev *input) > > +{ > > + struct da9063_onkey *onkey = input_get_drvdata(input); > > + const struct da906x_chip_config *config = onkey->config; > > + unsigned int val; > > + int error; > > + > > + error = regmap_read(onkey->regmap, config->onkey_status, &val); > > + if (onkey->key_power && !error && (val & config->onkey_nonkey_mask)) { > > + input_report_key(onkey->input, KEY_POWER, 1); > > + input_sync(onkey->input); > > + schedule_delayed_work(&onkey->work, 0); > > In the polling case you should not be scheduling any additional works as > the driver may get confused if you repeatedly open and close input > device. OK. > > Also I think in threaded case it might be cleaner to avoid scheduling > work and simply loop in the interrupt thread (since it can sleep). Agreed. Will fix this in the next version. Cheers, Biju