Skip to content

Commit

Permalink
gpio: pca953x: fix irq_stat not updated when irq is disabled (irq_mas…
Browse files Browse the repository at this point in the history
…k not set)

commit dba7857 upstream.

When one port's input state get inverted (eg. from low to hight) after
pca953x_irq_setup but before setting irq_mask (by some other driver such as
"gpio-keys"), the next inversion of this port (eg. from hight to low) will not
be triggered any more (because irq_stat is not updated at the first time). Issue
should be fixed after this commit.

Fixes: 89ea8bb ("gpio: pca953x.c: add interrupt handling capability")
Signed-off-by: Puyou Lu <puyou.lu@gmail.com>
Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
puyoulu authored and gregkh committed May 12, 2022
1 parent 8ec1096 commit e75dd87
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions drivers/gpio/gpio-pca953x.c
Expand Up @@ -762,11 +762,11 @@ static bool pca953x_irq_pending(struct pca953x_chip *chip, unsigned long *pendin
bitmap_xor(cur_stat, new_stat, old_stat, gc->ngpio);
bitmap_and(trigger, cur_stat, chip->irq_mask, gc->ngpio);

bitmap_copy(chip->irq_stat, new_stat, gc->ngpio);

if (bitmap_empty(trigger, gc->ngpio))
return false;

bitmap_copy(chip->irq_stat, new_stat, gc->ngpio);

bitmap_and(cur_stat, chip->irq_trig_fall, old_stat, gc->ngpio);
bitmap_and(old_stat, chip->irq_trig_raise, new_stat, gc->ngpio);
bitmap_or(new_stat, old_stat, cur_stat, gc->ngpio);
Expand Down

0 comments on commit e75dd87

Please sign in to comment.