PMIC
通过查阅原理图,可知rk809挂载i2c0下面。
arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi
查找设备树,找到i2c0节点,及其子节点rk809。
rk809节点里面有一个regulators子节点,这个节点就是指定PMIC各个稳压器的输出。
图. 南瑞RK3568板的PMIC原理图
图. 南瑞RK3568板的PMU电源树示例框图
vcc1~9-supply
PMIC的各个稳压器也需要提供电源,分别对应着VCC1~9。
rk809: pmic@20 {
......
vcc1-supply = <&vcc3v3_sys>;
vcc2-supply = <&vcc3v3_sys>;
vcc3-supply = <&vcc3v3_sys>;
vcc4-supply = <&vcc3v3_sys>;
vcc5-supply = <&vcc3v3_sys>;
vcc6-supply = <&vcc3v3_sys>;
vcc7-supply = <&vcc3v3_sys>;
vcc8-supply = <&vcc3v3_sys>;
vcc9-supply = <&vcc3v3_sys>;
......
}
arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi
根节点下面,已经定义了&vcc3v3_sys和&dc_12v
dc_12v: dc-12v {
compatible = "regulator-fixed";
regulator-name = "dc_12v";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <12000000>;
regulator-max-microvolt = <12000000>;
};
vcc3v3_sys: vcc3v3-sys {
compatible = "regulator-fixed";
regulator-name = "vcc3v3_sys";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
vin-supply = <&dc_12v>;
};
DCDCn
arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi
确保如下配置。
rk809: pmic@20 {
......
regulators {
vdd_logic: DCDC_REG1 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <1350000>;
regulator-init-microvolt = <900000>;
regulator-ramp-delay = <6001>;
regulator-initial-mode = <0x2>;
regulator-name = "vdd_logic";
regulator-state-mem {
regulator-off-in-suspend;
};
};
vcc_ddr: DCDC_REG3 {
regulator-always-on;
regulator-boot-on;
regulator-initial-mode = <0x2>;
regulator-name = "vcc_ddr";
regulator-state-mem {
regulator-on-in-suspend;
};
};
......
vcc_1v8: DCDC_REG5 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-name = "vcc_1v8";
regulator-state-mem {
regulator-off-in-suspend;
};
};
......
}
}
这里需要注意,DCDC3 这路电源比较特殊,不能通过寄存器修改电压(所以没有regulator-min-microvolt和regulator-max-microvolt),只能通过外部电路的分压电阻进行调节,所以如果需要修改电压请修改外围硬件,在 Rockchip 的方案上一般作为 VCC_DDR 使用。
LDOn
arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi
确保如下配置。
取消LDO0、LDO4、LDO5、LDO9
rk809: pmic@20 {
......
regulators {
// vdda0v9_image: LDO_REG1 {
// regulator-boot-on;
// regulator-always-on;
// regulator-min-microvolt = <900000>;
// regulator-max-microvolt = <900000>;
// regulator-name = "vdda0v9_image";
// regulator-state-mem {
// regulator-off-in-suspend;
// };
// };
vdda_0v9: LDO_REG2 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <900000>;
regulator-max-microvolt = <900000>;
regulator-name = "vdda_0v9";
regulator-state-mem {
regulator-off-in-suspend;
};
};
vdda0v9_pmu: LDO_REG3 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <900000>;
regulator-max-microvolt = <900000>;
regulator-name = "vdda0v9_pmu";
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <900000>;
};
};
// vccio_acodec: LDO_REG4 {
// regulator-always-on;
// regulator-boot-on;
// regulator-min-microvolt = <3300000>;
// regulator-max-microvolt = <3300000>;
// regulator-name = "vccio_acodec";
// regulator-state-mem {
// regulator-off-in-suspend;
// };
// };
// vccio_sd: LDO_REG5 {
// regulator-always-on;
// regulator-boot-on;
// regulator-min-microvolt = <1800000>;
// regulator-max-microvolt = <3300000>;
// regulator-name = "vccio_sd";
// regulator-state-mem {
// regulator-off-in-suspend;
// };
// };
vcc3v3_pmu: LDO_REG6 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-name = "vcc3v3_pmu";
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <3300000>;
};
};
vcca_1v8: LDO_REG7 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-name = "vcca_1v8";
regulator-state-mem {
regulator-off-in-suspend;
};
};
vcca1v8_pmu: LDO_REG8 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-name = "vcca1v8_pmu";
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <1800000>;
};
};
// vcca1v8_image: LDO_REG9 {
// regulator-always-on;
// regulator-boot-on;
// regulator-min-microvolt = <1800000>;
// regulator-max-microvolt = <1800000>;
// regulator-name = "vcca1v8_image";
// regulator-state-mem {
// regulator-off-in-suspend;
// };
// };
......
}
}
SWOUTn
arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi
确保如下配置,取消SWOUT2。
rk809: pmic@20 {
......
regulators {
vcc_3v3: SWITCH_REG1 {
regulator-always-on;
regulator-boot-on;
regulator-name = "vcc_3v3";
regulator-state-mem {
regulator-off-in-suspend;
};
};
// vcc3v3_sd: SWITCH_REG2 {
// regulator-always-on;
// regulator-boot-on;
// regulator-name = "vcc3v3_sd";
// regulator-state-mem {
// regulator-off-in-suspend;
// };
// };
......
}
}
SOC IO-Domain
arch/arm64/boot/dts/rockchip/rk3568.dtsi
pmugrf: syscon@fdc20000 {
compatible = "rockchip,rk3568-pmugrf", "syscon", "simple-mfd";
reg = <0x0 0xfdc20000 0x0 0x10000>;
pmu_io_domains: io-domains {
compatible = "rockchip,rk3568-pmu-io-voltage-domain";
status = "disabled";
};
....
};
arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi
&pmu_io_domains {
status = "okay";
pmuio1-supply = <&vcc3v3_pmu>;
pmuio2-supply = <&vcc3v3_pmu>;
vccio1-supply = <&vcc_3v3>;
vccio2-supply = <&vcc_3v3>;
vccio3-supply = <&vcc_3v3>;
vccio4-supply = <&vcc_1v8>;
vccio5-supply = <&vcc_3v3>;
vccio6-supply = <&vcc_1v8>;
vccio7-supply = <&vcc_3v3>;
};