pinctrl: baytrail: Rework interrupt handling
authorMika Westerberg <mika.westerberg@linux.intel.com>
Mon, 23 Feb 2015 12:53:12 +0000 (14:53 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Fri, 6 Mar 2015 11:22:41 +0000 (12:22 +0100)
commit31e4329f99062a06dca5a493bb4495a63b2dc6ba
treea0df5223e51622480ddad730d6ed093e0fa8388d
parent95f0972c7e4cbf3fc68160131c5ac2f033481d00
pinctrl: baytrail: Rework interrupt handling

Instead of handling everything in the driver's first level interrupt
handler, we can take advantage of already existing flow handlers that are
provided by the IRQ core.

This changes the functionality a bit also. Previously the driver looped
over pending interrupts in a single loop, restarting the loop if some
interrupt changed state. This caused problem with Lenovo Thinkpad 10
digitizer that it was not able to deassert the interrupt before the driver
disabled the interrupt for good (looplimit was exhausted).

Rework the interrupt handling logic a bit so that we provide proper mask,
ack and unmask operations in terms of Baytrail GPIO hardware and loop over
pending interrupts only once. If the interrupt remains asserted the first
level handler will be re-triggered automatically.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/intel/pinctrl-baytrail.c