This is the bulk of GPIO changes for the v4.20 series:

Core changes:

- A patch series from Hans Verkuil to make it possible to
  enable/disable IRQs on a GPIO line at runtime and drive GPIO
  lines as output without having to put/get them from scratch.
  The irqchip callbacks have been improved so that they can
  use only the fastpatch callbacks to enable/disable irqs
  like any normal irqchip, especially the gpiod_lock_as_irq()
  has been improved to be callable in fastpath context.
  A bunch of rework had to be done to achieve this but it is
  a big win since I never liked to restrict this to slowpath.
  The only call requireing slowpath was try_module_get() and
  this is kept at the .request_resources() slowpath callback.
  In the GPIO CEC driver this is a big win sine a single
  line is used for both outgoing and incoming traffic, and
  this needs to use IRQs for incoming traffic while actively
  driving the line for outgoing traffic.

- Janusz Krzysztofik improved the GPIO array API to pass a
  "cookie" (struct gpio_array) and a bitmap for setting or
  getting multiple GPIO lines at once. This improvement
  orginated in a specific need to speed up an OMAP1 driver and
  has led to a much better API and real performance gains
  when the state of the array can be used to bypass a lot
  of checks and code when we want things to go really fast.
  The previous code would minimize the number of calls
  down to the driver callbacks assuming the CPU speed was
  orders of magnitude faster than the I/O latency, but this
  assumption was wrong on several platforms: what we needed
  to do was to profile and improve the speed on the hot
  path of the array functions and this change is now

- Clean out the painful and hard to grasp BNF experiments
  from the device tree bindings. Future approaches are looking
  into using JSON schema for this purpose. (Rob Herring
  is floating a patch series.)

New drivers:

- The RCAR driver now supports r8a774a1 (RZ/G2M).

- Synopsys GPIO via CREGs driver.

Major improvements:

- Modernization of the EP93xx driver to use irqdomain and
  other contemporary concepts.

- The ingenic driver has been merged into the Ingenic pin
  control driver and removed from the GPIO subsystem.

- Debounce support in the ftgpio010 driver.
gpio: Clarify kerneldoc on gpiochip_set_chained_irqchip()

This doesn't support nested anymore, so drivers shouldn't call it with
the handler set to NULL.

Cc: Evan Green <>
Cc: Thierry Reding <>
Cc: Grygorii Strashko <>
Signed-off-by: Stephen Boyd <>
Signed-off-by: Linus Walleij <>
1 file changed