The is the bulk of GPIO changes for the v4.16 kernel cycle.

Core changes:

- Disallow open drain and open source flags to be set
  simultaneously. This doesn't make electrical sense, and would
  the hardware actually respond to this setting, the result
  would be short circuit.

- ACPI GPIO has a new core infrastructure for handling quirks.
  The quirks are there to deal with broken ACPI tables centrally
  instead of pushing the work to individual drivers. In the world
  of BIOS writers, the ACPI tables are perfect. Until they find a
  mistake in it. When such a mistake is found, we can patch it
  with a quirk. It should never happen, the problem is that it
  happens. So we accomodate for it.

- Several documentation updates.

- Revert the patch setting up initial direction state from
  reading the device. This was causing bad things for drivers
  that can't read status on all its pins. It is only affecting
  debugfs information quality.

- Label descriptors with the device name if no explicit label is
  passed in.

- Pave the ground for transitioning SPI and regulators to use
  GPIO descriptors by implementing some quirks in the device tree
  GPIO parsing code.

New drivers:

- New driver for the Access PCIe IDIO 24 family.


- Major refactorings and improvements to the GPIO mockup driver
  used for test and verification.

- Moved the AXP209 driver over to pin control since it gained a
  pin control back-end. These patches will appear (with the same
  hashes) in the pin control pull request as well.

- Convert the onewire GPIO driver w1-gpio to use descriptors.
  This is merged here since the W1 maintainers send very few
  pull requests and he ACKed it.

- Start to clean up driver headers using <linux/gpio.h> to just
  use <linux/gpio/driver.h> as appropriate.

gpio: Timestamp events in hardirq handler

Add a hardirq handler to the GPIO userspace event loop, making
sure to pick up the timestamp there, as close as possible in time
relative to the actual event causing the interrupt.

Tested with a simple pushbutton GPIO on ux500 and seems to work

Cc: Bartosz Golaszewski <>
Reviewed-by: Felipe Balbi <>
Reported-by: Felipe Balbi <>
Signed-off-by: Linus Walleij <>
1 file changed