关键词: rockchip,px30-pinctrl; rockchip,rk2928-pinctrl; rockchip,rk3066a-pinctrl; rockchip,rk3066b-pinctrl; rockchip,rk3128-pinctrl; rockchip,rk3188-pinctrl; rockchip,rk3228-pinctrl; rockchip,rk3288-pinctrl; rockchip,rk3308-pinctrl; rockchip,rk3328-pinctrl; rockchip,rk3366-pinctrl; rockchip,rk3368-pinctrl; rockchip,rk3399-pinctrl;
rockchip — pinctrl dts 配置
1、Rockchip Pinmux 控制器:
Rockchip Pinmux控制器,是将一个PAD共享复用成多种功能的控制块, 这个共享过程是通过多路复用 PAD的输入输出信号来完成。每一个PAD具有多个复用选项,比如设置成0时,PAD被用成简单的GPIO.
Rockchip的 pin 配置节点是一个成组的pin配置节点,即节点可以配置的gpio由1个或多个组成, 然后该pin节点会被其他设备使用或者被用成特定功能,pin节点的配置包含复用的功能,以及使用了哪些gpio,然后设置相应的模式,以及上下拉等信息。
2、必须设置的属性值:
- compatible: 可以取以下值: "rockchip,px30-pinctrl": for Rockchip PX30 "rockchip,rk2928-pinctrl": for Rockchip RK2928 "rockchip,rk3066a-pinctrl": for Rockchip RK3066a "rockchip,rk3066b-pinctrl": for Rockchip RK3066b "rockchip,rk3128-pinctrl": for Rockchip RK3128 "rockchip,rk3188-pinctrl": for Rockchip RK3188 "rockchip,rk3228-pinctrl": for Rockchip RK3228 "rockchip,rk3288-pinctrl": for Rockchip RK3288 "rockchip,rk3308-pinctrl": for Rockchip RK3308 "rockchip,rk3328-pinctrl": for Rockchip RK3328 "rockchip,rk3366-pinctrl": for Rockchip RK3366 "rockchip,rk3368-pinctrl": for Rockchip RK3368 "rockchip,rk3399-pinctrl": for Rockchip RK3399 - rockchip,grf: 设置grf;
3、可选属性配置:
- rockchip,pmu: 指定pmu配置节点
4、gpio 子节点的属性配置:
- compatible: 设置名字为:"rockchip,gpio-bank"; - reg: 设置物理寄存器的基地址,以及寄存器的空间大小; - interrupts: 设置相应gpio的中断号; - clocks: 设置相应gpio使用的clock; - gpio-controller: 该属性表示这个节点是gpio控制器; - #gpio-cells: 这里设置成2 - interrupt-controller: 代表这个中断是一个interrupt-parent. - #interrupt-cells: 这里设置成2;
5、以rk3066为例:
#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>;
};
6、以rk3188为例:
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>;
};
...
};