Re: [PATCH] input: gpio-keys: initialize the input value with the current gpioval
"Sascha Hauer" <[email protected]> Thu, 02 Jul 2026 08:18:24 +0000
| Newsgroups | org.infradead.lists.barebox |
|---|---|
| Message-ID | <[email protected]> |
Hi Marco, I just sent an alternative patch which avoids some code duplication. It's untested, maybe you could spin a test for your case. Sascha On 2026-06-25 13:51, Marco Felsch wrote: > This is required for deep-probe systems which prove the "gpio-keys" > device on demand. In such case the input value is not yet accessible > once the probe finished. However, board code queries the input device > value directly after the of.*ensure.*probed(). > > Therefore provide a sane default by reading the gpio value during probe > and init the input device value. > > Signed-off-by: Marco Felsch <[email protected]> > --- > drivers/input/gpio_keys.c | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/drivers/input/gpio_keys.c b/drivers/input/gpio_keys.c > index b52738f5ccb2..316ed73ddfd1 100644 > --- a/drivers/input/gpio_keys.c > +++ b/drivers/input/gpio_keys.c > @@ -143,6 +143,26 @@ static int gpio_keys_probe_dt(struct gpio_keys *gk, struct device *dev) > return 0; > } > > +static int gpio_keys_set_initialval(struct gpio_keys *gk) > +{ > + struct gpio_key *gb; > + int i, pressed; > + > + for (i = 0; i < gk->nbuttons; i++) { > + > + gb = &gk->buttons[i]; > + pressed = gpiod_get_value(gb->gpio); > + > + if (pressed != gb->previous_state) { > + gb->debounce_start = get_time_ns(); > + input_report_key_event(&gk->input, gb->code, pressed); > + dev_dbg(gk->input.parent, "%s gpio #%d as %d\n", > + pressed ? "pressed" : "released", i, gb->code); > + gb->previous_state = pressed; > + } > + } > +} > + > static int __init gpio_keys_probe(struct device *dev) > { > int ret; > @@ -163,6 +183,8 @@ static int __init gpio_keys_probe(struct device *dev) > if (ret) > return ret; > > + gpio_keys_set_initialval(gk); > + > ret = poller_async_register(&gk->poller, dev_name(dev)); > if (ret) > return ret; > -- > 2.47.3 > > > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |