diff options
Diffstat (limited to 'drivers/gpio/gpiolib.c')
-rw-r--r-- | drivers/gpio/gpiolib.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 9568708a550b..cd003b74512f 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c | |||
@@ -704,24 +704,23 @@ static irqreturn_t lineevent_irq_thread(int irq, void *p) | |||
704 | { | 704 | { |
705 | struct lineevent_state *le = p; | 705 | struct lineevent_state *le = p; |
706 | struct gpioevent_data ge; | 706 | struct gpioevent_data ge; |
707 | int ret; | 707 | int ret, level; |
708 | 708 | ||
709 | ge.timestamp = ktime_get_real_ns(); | 709 | ge.timestamp = ktime_get_real_ns(); |
710 | level = gpiod_get_value_cansleep(le->desc); | ||
710 | 711 | ||
711 | if (le->eflags & GPIOEVENT_REQUEST_RISING_EDGE | 712 | if (le->eflags & GPIOEVENT_REQUEST_RISING_EDGE |
712 | && le->eflags & GPIOEVENT_REQUEST_FALLING_EDGE) { | 713 | && le->eflags & GPIOEVENT_REQUEST_FALLING_EDGE) { |
713 | int level = gpiod_get_value_cansleep(le->desc); | ||
714 | |||
715 | if (level) | 714 | if (level) |
716 | /* Emit low-to-high event */ | 715 | /* Emit low-to-high event */ |
717 | ge.id = GPIOEVENT_EVENT_RISING_EDGE; | 716 | ge.id = GPIOEVENT_EVENT_RISING_EDGE; |
718 | else | 717 | else |
719 | /* Emit high-to-low event */ | 718 | /* Emit high-to-low event */ |
720 | ge.id = GPIOEVENT_EVENT_FALLING_EDGE; | 719 | ge.id = GPIOEVENT_EVENT_FALLING_EDGE; |
721 | } else if (le->eflags & GPIOEVENT_REQUEST_RISING_EDGE) { | 720 | } else if (le->eflags & GPIOEVENT_REQUEST_RISING_EDGE && level) { |
722 | /* Emit low-to-high event */ | 721 | /* Emit low-to-high event */ |
723 | ge.id = GPIOEVENT_EVENT_RISING_EDGE; | 722 | ge.id = GPIOEVENT_EVENT_RISING_EDGE; |
724 | } else if (le->eflags & GPIOEVENT_REQUEST_FALLING_EDGE) { | 723 | } else if (le->eflags & GPIOEVENT_REQUEST_FALLING_EDGE && !level) { |
725 | /* Emit high-to-low event */ | 724 | /* Emit high-to-low event */ |
726 | ge.id = GPIOEVENT_EVENT_FALLING_EDGE; | 725 | ge.id = GPIOEVENT_EVENT_FALLING_EDGE; |
727 | } else { | 726 | } else { |