summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2024-02-21 15:28:00 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2024-02-23 08:28:39 +0100
commitb01bba2f2beac5312206b84b879a0ec3c277e7fb (patch)
tree7ad6a92f9468cf455054549af47b3eeeb66a14dd
parentff5e5b69d643793a711ca4a85d3bf97c448817a1 (diff)
downloadbarebox-b01bba2f2beac5312206b84b879a0ec3c277e7fb.tar.gz
barebox-b01bba2f2beac5312206b84b879a0ec3c277e7fb.tar.xz
input: gpio_keys: only use gpios in poller when not in use
Before reading GPIOs in a poller check if they are available. Link: https://lore.barebox.org/20240221142800.1958810-5-s.hauer@pengutronix.de Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--drivers/input/gpio_keys.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/input/gpio_keys.c b/drivers/input/gpio_keys.c
index fd3995d01f..c23d20563c 100644
--- a/drivers/input/gpio_keys.c
+++ b/drivers/input/gpio_keys.c
@@ -41,6 +41,13 @@ static void gpio_key_poller(void *data)
int i, val;
for (i = 0; i < gk->nbuttons; i++) {
+ gb = &gk->buttons[i];
+
+ if (gpio_slice_acquired(gb->gpio))
+ goto out;
+ }
+
+ for (i = 0; i < gk->nbuttons; i++) {
gb = &gk->buttons[i];
val = gpio_get_value(gb->gpio);
@@ -58,7 +65,7 @@ static void gpio_key_poller(void *data)
gb->previous_state = val;
}
}
-
+out:
poller_call_async(&gk->poller, 10 * MSECOND, gpio_key_poller, gk);
}