* Rockchip Pinmux Controller

The Rockchip Pinmux Controller, enables the IC
to share one PAD to several functional blocks. The sharing is done by
multiplexing the PAD input/output signals. For each PAD there are several
muxing options with option 0 being the use as a GPIO.

Please refer to pinctrl-bindings.txt in this directory for details of the
common pinctrl bindings used by client devices, including the meaning of the
phrase "pin configuration node".

The Rockchip pin configuration node is a node of a group of pins which can be
used for a specific device or function. This node represents both mux and
config of the pins in that group. The 'pins' selects the function mode(also
named pin mode) this pin can work on and the 'config' configures various pad
settings such as pull-up, etc.

The pins are grouped into up to 5 individual pin banks which need to be
defined as gpio sub-nodes of the pinmux controller.

Required properties for iomux controller:
  - compatible: one of "rockchip,rk2928-pinctrl", "rockchip,rk3066a-pinctrl"
		       "rockchip,rk3066b-pinctrl", "rockchip,rk3188-pinctrl"
		       "rockchip,rk3288-pinctrl"
  - rockchip,grf: phandle referencing a syscon providing the
	 "general register files"

Optional properties for iomux controller:
  - rockchip,pmu: phandle referencing a syscon providing the pmu registers
	 as some SoCs carry parts of the iomux controller registers there.
	 Required for at least rk3188 and rk3288.

Deprecated properties for iomux controller:
  - reg: first element is the general register space of the iomux controller
	 It should be large enough to contain also separate pull registers.
	 second element is the separate pull register space of the rk3188.
	 Use rockchip,grf and rockchip,pmu described above instead.

Required properties for gpio sub nodes:
  - compatible: "rockchip,gpio-bank"
  - reg: register of the gpio bank (different than the iomux registerset)
  - interrupts: base interrupt of the gpio bank in the interrupt controller
  - clocks: clock that drives this bank
  - gpio-controller: identifies the node as a gpio controller and pin bank.
  - #gpio-cells: number of cells in GPIO specifier. Since the generic GPIO
    binding is used, the amount of cells must be specified as 2. See generic
    GPIO binding documentation for description of particular cells.
  - interrupt-controller: identifies the controller node as interrupt-parent.
  - #interrupt-cells: the value of this property should be 2 and the interrupt
    cells should use the standard two-cell scheme described in
    bindings/interrupt-controller/interrupts.txt

Deprecated properties for gpio sub nodes:
  - compatible: "rockchip,rk3188-gpio-bank0"
  - reg: second element: separate pull register for rk3188 bank0, use
	 rockchip,pmu described above instead

Required properties for pin configuration node:
  - rockchip,pins: 3 integers array, represents a group of pins mux and config
    setting. The format is rockchip,pins = <PIN_BANK PIN_BANK_IDX MUX &phandle>.
    The MUX 0 means gpio and MUX 1 to N mean the specific device function.
    The phandle of a node containing the generic pinconfig options
    to use, as described in pinctrl-bindings.txt in this directory.

Examples:

#include <dt-bindings/pinctrl/rockchip.h>

...

pinctrl@20008000 {
	compatible = "rockchip,rk3066a-pinctrl";
	rockchip,grf = <&grf>;

	#address-cells = <1>;
	#size-cells = <1>;
	ranges;

	gpio0: gpio0@20034000 {
		compatible = "rockchip,gpio-bank";
		reg = <0x20034000 0x100>;
		interrupts = <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&clk_gates8 9>;

		gpio-controller;
		#gpio-cells = <2>;

		interrupt-controller;
		#interrupt-cells = <2>;
	};

	...

	pcfg_pull_default: pcfg_pull_default {
		bias-pull-pin-default
	};

	uart2 {
		uart2_xfer: uart2-xfer {
			rockchip,pins = <RK_GPIO1 8 1 &pcfg_pull_default>,
					<RK_GPIO1 9 1 &pcfg_pull_default>;
		};
	};
};

uart2: serial@20064000 {
	compatible = "snps,dw-apb-uart";
	reg = <0x20064000 0x400>;
	interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
	reg-shift = <2>;
	reg-io-width = <1>;
	clocks = <&mux_uart2>;
	status = "okay";

	pinctrl-names = "default";
	pinctrl-0 = <&uart2_xfer>;
};

Example for rk3188:

	pinctrl@20008000 {
		compatible = "rockchip,rk3188-pinctrl";
		rockchip,grf = <&grf>;
		rockchip,pmu = <&pmu>;
		#address-cells = <1>;
		#size-cells = <1>;
		ranges;

		gpio0: gpio0@0x2000a000 {
			compatible = "rockchip,rk3188-gpio-bank0";
			reg = <0x2000a000 0x100>;
			interrupts = <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>;
			clocks = <&clk_gates8 9>;

			gpio-controller;
			#gpio-cells = <2>;

			interrupt-controller;
			#interrupt-cells = <2>;
		};

		gpio1: gpio1@0x2003c000 {
			compatible = "rockchip,gpio-bank";
			reg = <0x2003c000 0x100>;
			interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
			clocks = <&clk_gates8 10>;

			gpio-controller;
			#gpio-cells = <2>;

			interrupt-controller;
			#interrupt-cells = <2>;
		};

		...

	};
