diff options
author | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2013-04-09 17:57:25 +0400 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2013-04-11 01:41:17 +0400 |
commit | 7fc7acb9a0b0ff3ffdf21818fe0735ebaf4fecb8 (patch) | |
tree | b7dcfc4ecf9a1ef1099f0f658b381139c8689746 /include/linux/acpi_gpio.h | |
parent | fdc7a9f85ab4c19acfc21e4da6ff8b7000bb686c (diff) | |
download | linux-7fc7acb9a0b0ff3ffdf21818fe0735ebaf4fecb8.tar.xz |
gpio / ACPI: Handle ACPI events in accordance with the spec
Commit 0d1c28a (gpiolib-acpi: Add ACPI5 event model support to gpio.)
that added support for ACPI events signalled through GPIO interrupts
covered only GPIO pins whose numbers are less than or equal to 255.
However, there may be GPIO pins with numbers greater than 255 and
the ACPI spec (ACPI 5.0, Section 5.6.5.1) requires the _EVT method
to be used for handling events corresponding to those pins.
Moreover, according to the spec, _EVT is the default mechanism
for handling all ACPI events signalled through GPIO interrupts,
so if the _Exx/_Lxx method is not present for the given pin,
_EVT should be used instead. If present, though, _Exx/_Lxx take
precedence over _EVT which shouldn't be executed in that case
(ACPI 5.0, Section 5.6.5.3).
Modify acpi_gpiochip_request_interrupts() to follow the spec as
described above and add acpi_gpiochip_free_interrupts() needed
to free interrupts associated with _EVT.
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'include/linux/acpi_gpio.h')
-rw-r--r-- | include/linux/acpi_gpio.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/include/linux/acpi_gpio.h b/include/linux/acpi_gpio.h index b76ebd08ff8e..213135f44333 100644 --- a/include/linux/acpi_gpio.h +++ b/include/linux/acpi_gpio.h @@ -8,6 +8,7 @@ int acpi_get_gpio(char *path, int pin); void acpi_gpiochip_request_interrupts(struct gpio_chip *chip); +void acpi_gpiochip_free_interrupts(struct gpio_chip *chip); #else /* CONFIG_GPIO_ACPI */ @@ -17,6 +18,7 @@ static inline int acpi_get_gpio(char *path, int pin) } static inline void acpi_gpiochip_request_interrupts(struct gpio_chip *chip) { } +static inline void acpi_gpiochip_free_interrupts(struct gpio_chip *chip) { } #endif /* CONFIG_GPIO_ACPI */ |