Skip to content

Commit ea6aabf

Browse files
committed
Input: gpio_keys_polled - always use gpiod_get_value_cansleep
It does not matter if given GPIO may sleep or not when reading state, polling is always done in a non-atomic context, so we should always be able to simply use gpiod_get_value_cansleep(). Also let's note in the logs when we fail to read gpio state. Reviewed-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com> Tested-by: Mika Westerberg <mika.westerberg@linux.intel.com> Acked-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
1 parent 0f78ba9 commit ea6aabf

File tree

1 file changed

+10
-11
lines changed

1 file changed

+10
-11
lines changed

drivers/input/keyboard/gpio_keys_polled.c

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ struct gpio_keys_button_data {
3434
int last_state;
3535
int count;
3636
int threshold;
37-
int can_sleep;
3837
};
3938

4039
struct gpio_keys_polled_dev {
@@ -76,16 +75,17 @@ static void gpio_keys_polled_check_state(struct input_polled_dev *dev,
7675
{
7776
int state;
7877

79-
if (bdata->can_sleep)
80-
state = !!gpiod_get_value_cansleep(bdata->gpiod);
81-
else
82-
state = !!gpiod_get_value(bdata->gpiod);
83-
84-
gpio_keys_button_event(dev, button, state);
78+
state = gpiod_get_value_cansleep(bdata->gpiod);
79+
if (state < 0) {
80+
dev_err(dev->input->dev.parent,
81+
"failed to get gpio state: %d\n", state);
82+
} else {
83+
gpio_keys_button_event(dev, button, state);
8584

86-
if (state != bdata->last_state) {
87-
bdata->count = 0;
88-
bdata->last_state = state;
85+
if (state != bdata->last_state) {
86+
bdata->count = 0;
87+
bdata->last_state = state;
88+
}
8989
}
9090
}
9191

@@ -342,7 +342,6 @@ static int gpio_keys_polled_probe(struct platform_device *pdev)
342342
}
343343
}
344344

345-
bdata->can_sleep = gpiod_cansleep(bdata->gpiod);
346345
bdata->last_state = -1;
347346
bdata->threshold = DIV_ROUND_UP(button->debounce_interval,
348347
pdata->poll_interval);

0 commit comments

Comments
 (0)