Last minute fixes for GPIO:

- Fix another ACPI problem with broken BIOSes.
 
 - Filter out the GPIO right events, making a very user-visible bug
   go away.
 -----BEGIN PGP SIGNATURE-----
 
 iQIcBAABAgAGBQJZV4YOAAoJEEEQszewGV1zWpgQAMnE1QlY6knyjv6Uu3HYKt2C
 /vPc5eaAwqVMMlnLX0WVzSjBbrlSGShHs4Adtoq45WhsImeKmVNx0sepKCcygPyR
 BiS73TT/C1Vv7F+FhC6cFob3o6+aDxO3PSy5HiLePfakGkGAS4fCSuwneKRN75nT
 GNbX0ub7Z6T7m0LkiqxMLH4peZ7RFXqU5zlbM+Cal1XP0XPHKsu/YSDjxucXQd5j
 vjx1DcYl1CzbzgHynX2nd1SZif/d9IBXh9bRRwWmp130DBTPPuGrkEL4kNJn5Yok
 YQFELXLManRJyVvR/XFJUnxf/RbQ3aE9TWoqE5Y5ZbxJ8Gklgl3E+r/pJl4A6Kiz
 N7Y/fx498suoVETvaljWbzWVpc2SF4UDzW31lhFz/ndfecxSc5iy5woG+CndJxEu
 fCVdHqivmX6c6XQ+jn3ywhCjO5rXO708YzN9F6JZUFxDRKHlIQhRZ3KJ96fU8hWQ
 QlSDwARtQmV7+ydDLQSLOTBtXUsboQeoc29NNO2dW/hK0pXrs30pQbm1osGkt0ay
 CWmKVjzEU/Lrw4bf0oFxjpAiX72/shd1DQa2LXpPz7VsSLu7sjOY38/nHyBBCgNC
 fAH4S6Or1rXBinaYl06eMk6aQA1P0gSM6WuMrcmM6NTHMLxgiLwHUMYkoGFtnRZV
 l4apbNZ2w5eE+vwYdYIz
 =hdkl
 -----END PGP SIGNATURE-----

Merge tag 'gpio-v4.12-4' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio

Pull last minute fixes for GPIO from Linus Walleij:

 - Fix another ACPI problem with broken BIOSes.

 - Filter out the right GPIO events, making a very user-visible bug go
   away.

* tag 'gpio-v4.12-4' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio:
  gpio: acpi: Skip _AEI entries without a handler rather then aborting the scan
  gpiolib: fix filtering out unwanted events
This commit is contained in:
Linus Torvalds 2017-07-01 08:24:54 -07:00
commit fc93274ab5
2 changed files with 3 additions and 2 deletions

View File

@ -201,7 +201,7 @@ static acpi_status acpi_gpiochip_request_interrupt(struct acpi_resource *ares,
handler = acpi_gpio_irq_handler_evt;
}
if (!handler)
return AE_BAD_PARAMETER;
return AE_OK;
pin = acpi_gpiochip_pin_to_gpio_offset(chip->gpiodev, pin);
if (pin < 0)

View File

@ -708,7 +708,8 @@ static irqreturn_t lineevent_irq_thread(int irq, void *p)
ge.timestamp = ktime_get_real_ns();
if (le->eflags & GPIOEVENT_REQUEST_BOTH_EDGES) {
if (le->eflags & GPIOEVENT_REQUEST_RISING_EDGE
&& le->eflags & GPIOEVENT_REQUEST_FALLING_EDGE) {
int level = gpiod_get_value_cansleep(le->desc);
if (level)