@@ -209,3 +209,75 @@ Example 2:
Here, three GPIO ranges are defined wrt. two pin controllers. pinctrl1 GPIO
ranges are defined using pin numbers whereas the GPIO ranges wrt. pinctrl2
are named "foo" and "bar".
+
+3) Generic driver for memory-mapped GPIO controllers
+----------------------------------------------------
+The GPIO generic library provides support for basic platform_device
+memory-mapped GPIO controllers, which can be accessed by selecting Kconfig
+symbol GPIO_GENERIC and using library functions provided by GPIO generic
+driver (see drivers/gpio/gpio-generic.c).
+The simplest form of a GPIO controller that the driver support is just a
+single "data" register, where GPIO state can be read and/or written.
+
+The driver supports:
+- 8/16/32/64 bits registers. The number of GPIOs is determined by the width of
+ the registers.
+- GPIO controllers with clear/set registers.
+- GPIO controllers with a single "data" register.
+- Big endian bits/GPIOs ordering.
+
+For setting GPIO's there are three supported configurations:
+- single input/output register resource (named "dat").
+- set/clear pair (named "set" and "clr").
+- single output register resource and single input resource ("set" and dat").
+
+For setting the GPIO direction, there are three supported configurations:
+- simple bidirection GPIO that requires no configuration.
+- an output direction register (named "dirout") where a 1 bit indicates the
+ GPIO is an output.
+- an input direction register (named "dirin") where a 1 bit indicates the GPIO
+ is an input.
+
+Required properties:
+- compatible : Should be "basic-mmio-gpio".
+- reg : Address and length of the registers needed for the device.
+- reg-names : Names of the needed registers.
+- #gpio-cells : Should be two. The first cell is the pin number and
+ the second cell is used to specify optional parameters (currently
+ unused).
+- gpio-controller : Marks the device node as a gpio controller.
+
+Optional properties:
+- num-gpios : Specify the number of configurable gpios.
+- bit-be : Use big endian bit order for pins.
+- byte-be : Use big endian byte order for registers.
+- regset-wo : set register is unreadable.
+- regdir-wo : dir register is unreadable.
+
+Examples:
+
+gpio0: gpio-controller@10000084 {
+ compatible = "brcm,brcm6368", "basic-mmio-gpio";
+ reg = <0x10000084 0x4>, <0x1000008c 0x4>;
+ reg-names = "dirout", "dat";
+
+ gpio-controller;
+ #gpio-cells = <2>;
+
+ num-gpios = <32>;
+ byte-be;
+};
+
+gpio1: gpio-controller@10000180 {
+ compatible = "foo,bar", "basic-mmio-gpio";
+ reg = <0x10000180 0x4>, <0x10000184 0x4>, <0x10000188 0x4>;
+ reg-names = "dirin", "dirout", "dat";
+
+ gpio-controller;
+ #gpio-cells = <2>;
+
+ num-gpios = <20>;
+ bit-be;
+ byte-be;
+ regdir-wo;
+};
Add DT support while keeping legacy support. Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com> --- -- To unsubscribe from this list: send the line "unsubscribe linux-gpio" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html