电源域需要在dts中正确配置,比如下面这样:
&io_domains {
status = "okay";
uboot-set = <(RK3399_BT656_VDD_3V3 | RK3399_AUDIO_VDD_1V8 | RK3399_GPIO1833_VDD_3V3)>;
bt656-supply = <&vcc_3v0>;
audio-supply = <&vcca1v8_codec>;
sdmmc-supply = <&vcc_sd>;
gpio1830-supply = <&vcc_3v0>;
};
&pmu_io_domains {
status = "okay";
pmu1830-supply = <&vcc_1v8>;
};
具体如何找到前面节点名称与后面电源的对应关系,可参考“kernel\Documentation\devicetree\bindings\power\rockchip-io-domain.txt”中如下内容:
Possible supplies for rk3399:
- bt656-supply: The supply connected to APIO2_VDD.
- audio-supply: The supply connected to APIO5_VDD.
- sdmmc-supply: The supply connected to SDMMC0_VDD.
- gpio1830 The supply connected to APIO4_VDD.
Possible supplies for rk3399 pmu-domains:
- pmu1830-supply:The supply connected to PMUIO2_VDD.
之后通过节点对应的电源域名称(比如APIO2_VDD)在原理图上找到所连接的电源regulator名称填到dts中即可。
重点关注下uboot-set节点的配置,这是配置uboot中电源域的,如果不配置,可能会出现uboot中操作对应电源域的GPIO无效的问题。RK3399_BT656_VDD_3V3代表 bt656-supply电源域配置为3.3V,如果是1.8V,则写为RK3399_BT656_VDD_1V8,这两个宏的定义在kernel/include/dt-bindings/soc/rockchip-io-domain.h中,如下:
#define RK3399_BT656_VDD_1V8 BT656_GPIO2AB_MS(1)
#define RK3399_BT656_VDD_3V3 BT656_GPIO2AB_MS(0)
#define RK3399_SDMMC_VDD_1V8 SDMMC_GPIO4B_MS(1)
#define RK3399_SDMMC_VDD_3V3 SDMMC_GPIO4B_MS(0)
#define RK3399_GPIO1833_VDD_1V8 GPIO1833_GPIO4CD_MS(1)
#define RK3399_GPIO1833_VDD_3V3 GPIO1833_GPIO4CD_MS(0)
#define RK3399_AUDIO_VDD_1V8 AUDIO_GPIO3D4A_MS(1)
#define RK3399_AUDIO_VDD_3V3 AUDIO_GPIO3D4A_MS(0)
#define RK3399_PMU1830_VDD_1V8 (PMU1830_VOL(1) | PMU1830_VOLSEL(1))
#define RK3399_PMU1830_VDD_3V0 (PMU1830_VOL(0) | PMU1830_VOLSEL(1))