关键词: 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>; }; ... };