Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1a46712a authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull GPIO updates from Linus Walleij:
 "This is the bulk of GPIO changes for kernel v4.6.  There is quite a
  lot of interesting stuff going on.

  The patches to other subsystems and arch-wide are ACKed as far as
  possible, though I consider things like per-arch <asm/gpio.h> as
  essentially a part of the GPIO subsystem so it should not be needed.

  Core changes:

   - The gpio_chip is now a *real device*.  Until now the gpio chips
     were just piggybacking the parent device or (gasp) floating in
     space outside of the device model.

     We now finally make GPIO chips devices.  The gpio_chip will create
     a gpio_device which contains a struct device, and this gpio_device
     struct is kept private.  Anything that needs to be kept private
     from the rest of the kernel will gradually be moved over to the
     gpio_device.

   - As a result of making the gpio_device a real device, we have added
     resource management, so devm_gpiochip_add_data() will cut down on
     overhead and reduce code lines.  A huge slew of patches convert
     almost all drivers in the subsystem to use this.

   - Building on making the GPIO a real device, we add the first step of
     a new userspace ABI: the GPIO character device.  We take small
     steps here, so we first add a pure *information* ABI and the tool
     "lsgpio" that will list all GPIO devices on the system and all
     lines on these devices.

     We can now discover GPIOs properly from userspace.  We still have
     not come up with a way to actually *use* GPIOs from userspace.

   - To encourage people to use the character device for the future, we
     have it always-enabled when using GPIO.  The old sysfs ABI is still
     opt-in (and can be used in parallel), but is marked as deprecated.

     We will keep it around for the foreseeable future, but it will not
     be extended to cover ever more use cases.

  Cleanup:

   - Bjorn Helgaas removed a whole slew of per-architecture <asm/gpio.h>
     includes.

     This dates back to when GPIO was an opt-in feature and no shared
     library even existed: just a header file with proper prototypes was
     provided and all semantics were up to the arch to implement.  These
     patches make the GPIO chip even more a proper device and cleans out
     leftovers of the old in-kernel API here and there.

     Still some cruft is left but it's very little now.

   - There is still some clamping of return values for .get() going on,
     but we now return sane values in the vast majority of drivers and
     the errorpath is sanitized.  Some patches for powerpc, blackfin and
     unicore still drop in.

   - We continue to switch the ARM, MIPS, blackfin, m68k local GPIO
     implementations to use gpiochip_add_data() and cut down on code
     lines.

   - MPC8xxx is converted to use the generic GPIO helpers.

   - ATH79 is converted to use the generic GPIO helpers.

  New drivers:

   - WinSystems WS16C48

   - Acces 104-DIO-48E

   - F81866 (a F7188x variant)

   - Qoric (a MPC8xxx variant)

   - TS-4800

   - SPI serializers (pisosr): simple 74xx shift registers connected to
     SPI to obtain a dirt-cheap output-only GPIO expander.

   - Texas Instruments TPIC2810

   - Texas Instruments TPS65218

   - Texas Instruments TPS65912

   - X-Gene (ARM64) standby GPIO controller"

* tag 'gpio-v4.6-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio: (194 commits)
  Revert "Share upstreaming patches"
  gpio: mcp23s08: Fix clearing of interrupt.
  gpiolib: Fix comment referring to gpio_*() in gpiod_*()
  gpio: pca953x: Fix pca953x_gpio_set_multiple() on 64-bit
  gpio: xgene: Fix kconfig for standby GIPO contoller
  gpio: Add generic serializer DT binding
  gpio: uapi: use 0xB4 as ioctl() major
  gpio: tps65912: fix bad merge
  Revert "gpio: lp3943: Drop pin_used and lp3943_gpio_request/lp3943_gpio_free"
  gpio: omap: drop dev field from gpio_bank structure
  gpio: mpc8xxx: Slightly update the code for better readability
  gpio: mpc8xxx: Remove *read_reg and *write_reg from struct mpc8xxx_gpio_chip
  gpio: mpc8xxx: Fixup setting gpio direction output
  gpio: mcp23s08: Add support for mcp23s18
  dt-bindings: gpio: altera: Fix altr,interrupt-type property
  gpio: add driver for MEN 16Z127 GPIO controller
  gpio: lp3943: Drop pin_used and lp3943_gpio_request/lp3943_gpio_free
  gpio: timberdale: Switch to devm_ioremap_resource()
  gpio: ts4800: Add IMX51 dependency
  gpiolib: rewrite gpiodev_add_to_list
  ...
parents 82b666ee ccbd805a
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
What:		/sys/class/gpio/
Date:		July 2008
KernelVersion:	2.6.27
Contact:	David Brownell <dbrownell@users.sourceforge.net>
Contact:	Linus Walleij <linusw@kernel.org>
Description:

  As a Kconfig option, individual GPIO signals may be accessed from
@@ -26,3 +26,5 @@ Description:
	    /label ... (r/o) descriptive, not necessarily unique
	    /ngpio ... (r/o) number of GPIOs; numbered N to N + (ngpio - 1)

  This ABI is deprecated and will be removed after 2020. It is
  replaced with the GPIO character device.
+26 −0
Original line number Diff line number Diff line
What:		/dev/gpiochip[0-9]+
Date:		November 2015
KernelVersion:	4.4
Contact:	linux-gpio@vger.kernel.org
Description:
		The character device files /dev/gpiochip* are the interface
		between GPIO chips and userspace.

		The ioctl(2)-based ABI is defined and documented in
		[include/uapi]<linux/gpio.h>.

		The following file operations are supported:

		open(2)
		Currently the only useful flags are O_RDWR.

		ioctl(2)
		Initiate various actions.
		See the inline documentation in [include/uapi]<linux/gpio.h>
		for descriptions of all ioctls.

		close(2)
		Stops and free up the I/O contexts that was associated
		with the file descriptor.

Users:		TBD
+2 −2
Original line number Diff line number Diff line
@@ -12,7 +12,7 @@ Required properties:
- #interrupt-cells : Should be 1. The interrupt type is fixed in the hardware.
  - The first cell is the GPIO offset number within the GPIO controller.
- interrupts: Specify the interrupt.
- altr,interrupt-trigger: Specifies the interrupt trigger type the GPIO
- altr,interrupt-type: Specifies the interrupt trigger type the GPIO
  hardware is synthesized. This field is required if the Altera GPIO controller
  used has IRQ enabled as the interrupt type is not software controlled,
  but hardware synthesized. Required if GPIO is used as an interrupt
@@ -35,7 +35,7 @@ gpio_altr: gpio@0xff200000 {
	reg = <0xff200000 0x10>;
	interrupts = <0 45 4>;
	altr,ngpio = <32>;
	altr,interrupt-trigger = <IRQ_TYPE_EDGE_RISING>;
	altr,interrupt-type = <IRQ_TYPE_EDGE_RISING>;
	#gpio-cells = <2>;
	gpio-controller;
	#interrupt-cells = <1>;
+1 −3
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ Required properties:

    - "microchip,mcp23s08" for  8 GPIO SPI version
    - "microchip,mcp23s17" for 16 GPIO SPI version
    - "microchip,mcp23s18" for 16 GPIO SPI version
    - "microchip,mcp23008" for  8 GPIO I2C version or
    - "microchip,mcp23017" for 16 GPIO I2C version of the chip
    NOTE: Do not use the old mcp prefix any more. It is deprecated and will be
@@ -43,9 +44,6 @@ Optional properties:
  - first cell is the pin number
  - second cell is used to specify flags.
- interrupt-controller: Marks the device node as a interrupt controller.
NOTE: The interrupt functionality is only supported for i2c versions of the
chips. The spi chips can also do the interrupts, but this is not supported by
the linux driver yet.

Optional device specific properties:
- microchip,irq-mirror: Sets the mirror flag in the IOCON register. Devices
+34 −0
Original line number Diff line number Diff line
Generic Parallel-in/Serial-out Shift Register GPIO Driver

This binding describes generic parallel-in/serial-out shift register
devices that can be used for GPI (General Purpose Input). This includes
SN74165 serial-out shift registers and the SN65HVS88x series of
industrial serializers.

Required properties:
 - compatible		: Should be "pisosr-gpio".
 - gpio-controller	: Marks the device node as a GPIO controller.
 - #gpio-cells		: Should be two. For consumer use see gpio.txt.

Optional properties:
 - ngpios		: Number of used GPIO lines (0..n-1), default is 8.
 - load-gpios		: GPIO pin specifier attached to load enable, this
			  pin is pulsed before reading from the device to
			  load input pin values into the the device.

For other required and optional properties of SPI slave
nodes please refer to ../spi/spi-bus.txt.

Example:

	gpio@0 {
		compatible = "ti,sn65hvs882", "pisosr-gpio";
		gpio-controller;
		#gpio-cells = <2>;

		load-gpios = <&gpio2 23 GPIO_ACTIVE_LOW>;

		reg = <0>;
		spi-max-frequency = <1000000>;
		spi-cpol;
	};
Loading