diff options
| -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 { |
