gpiolib: fix filtering out unwanted events
GPIOEVENT_REQUEST_BOTH_EDGES is not a single flag, but a binary OR of
GPIOEVENT_REQUEST_RISING_EDGE and GPIOEVENT_REQUEST_FALLING_EDGE.
The expression 'le->eflags & GPIOEVENT_REQUEST_BOTH_EDGES' we'll get
evaluated to true even if only one event type was requested.
Fix it by checking both RISING & FALLING flags explicitly.
Cc: stable@vger.kernel.org
Fixes: 61f922db72
("gpio: userspace ABI for reading GPIO line events")
Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
c0bc126f97
commit
ad537b8225
|
@ -708,7 +708,8 @@ static irqreturn_t lineevent_irq_thread(int irq, void *p)
|
|||
|
||||
ge.timestamp = ktime_get_real_ns();
|
||||
|
||||
if (le->eflags & GPIOEVENT_REQUEST_BOTH_EDGES) {
|
||||
if (le->eflags & GPIOEVENT_REQUEST_RISING_EDGE
|
||||
&& le->eflags & GPIOEVENT_REQUEST_FALLING_EDGE) {
|
||||
int level = gpiod_get_value_cansleep(le->desc);
|
||||
|
||||
if (level)
|
||||
|
|
Loading…
Reference in New Issue