• 周六. 5月 3rd, 2025

rockchip — pinctrl dts 配置

3月 9, 2020

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

		...

	};