|  | * 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>; | 
|  | }; | 
|  |  | 
|  | ... | 
|  |  | 
|  | }; |