3572_a16_3566_A11_A9等解决机器接电池或者插DC电源上电的时候不要立马开机,要通过电源按键按下之后才开机

3566_A19 解决机器接电池或者插DC电源上电的时候不要立马开机,要通过电源按键按下之后才开机

diff --git a/kernel/arch/arm64/boot/dts/rockchip/rk3566-box-demo-v10.dtsi b/kernel/arch/arm64/boot/dts/rockchip/rk3566-box-demo-v10.dtsi

index fb47c15..4bbc4d1 100644

--- a/kernel/arch/arm64/boot/dts/rockchip/rk3566-box-demo-v10.dtsi

+++ b/kernel/arch/arm64/boot/dts/rockchip/rk3566-box-demo-v10.dtsi

@@ -323,6 +323,9 @@

pmic-reset-func = <0>;

/* not save the PMIC_POWER_EN register in uboot */

not-save-power-en = <1>;

  • /* XHF CUSTOM shutdown VSYS (VCC3V3_SYS) in PWR_OFF mode,

  • * so VDC divider loses power -> no auto power-on after poweroff */

  • vsys-off-shutdown;

vcc1-supply = <&vcc3v3_sys>;

vcc2-supply = <&vcc3v3_sys>;

diff --git a/u-boot/drivers/power/pmic/rk8xx.c b/u-boot/drivers/power/pmic/rk8xx.c

index 64c48f8..0b858f7 100644

--- a/u-boot/drivers/power/pmic/rk8xx.c

+++ b/u-boot/drivers/power/pmic/rk8xx.c

@@ -834,6 +834,42 @@ static int rk8xx_probe(struct udevice *dev)

}

printf("\n");

  • /* ============================================================

  • * XHF CUSTOM Power-on source gate for RK809

  • * Only allow boot when powered on by PWRON key press.

  • * - ON_SOURCE(0xF5) bit7 (0x80): PWRON key -> boot normally

  • * - ON_SOURCE(0xF5) bit6 (0x40): PLUG_IN -> shutdown

  • * (DC/battery plugged in triggers auto power-on)

  • * - Verified by experiment 2026-08-07:

  • * power key boot -> 0x80, DC plug boot -> 0x40

  • * Runs after PMIC init (I2C ready). pmic_shutdown() triggers

  • * DEV_OFF; PMIC powers off all rails -> CPU dies here.

  • * ============================================================ */

  • if (on_source && off_source &&

  • device_is_compatible(dev, "rockchip,rk809")) {

  • uint8_t on_val = 0;

  • ret = rk8xx_read(dev, on_source, &on_val, 1);

  • if (ret) {

  • printf("%s: read ON_SOURCE(0x%02x) failed, ret=%d\n",

  • func, on_source, ret);

  • } else {

  • /* Only PWRON key (bit7) is allowed to boot */

  • if (!(on_val & 0x80)) {

  • printf("PMIC: on=0x%02x (no PWRON key), power off!\n",

  • on_val);

  • pmic_shutdown(dev);

  • /* pmic_shutdown() should not return.

  • * If it does, stall here instead of booting. */

  • while (1)

  • ;

  • } else {

  • printf("PMIC: on=0x%02x (PWRON key), boot OK\n",

  • on_val);

  • }

  • }

  • }

if (pwron_key) {

ret = rk8xx_read(dev, pwron_key, &value, 1);

if (ret)

3566_A11解决机器接电池或者插DC电源上电的时候不要立马开机,要通过电源按键按下之后才开机

diff --git a/kernel/arch/arm64/boot/dts/rockchip/rk3566-box-demo-v10.dtsi b/kernel/arch/arm64/boot/dts/rockchip/rk3566-box-demo-v10.dtsi

index f91deb8..6e2a598 100644

--- a/kernel/arch/arm64/boot/dts/rockchip/rk3566-box-demo-v10.dtsi

+++ b/kernel/arch/arm64/boot/dts/rockchip/rk3566-box-demo-v10.dtsi

@@ -246,6 +246,9 @@

pmic-reset-func = <0>;

/* not save the PMIC_POWER_EN register in uboot */

not-save-power-en = <1>;

  • /* XHF CUSTOM shutdown VSYS (VCC3V3_SYS) in PWR_OFF mode,

  • * so VDC divider loses power -> no auto power-on after poweroff */

  • vsys-off-shutdown;

vcc1-supply = <&vcc3v3_sys>;

vcc2-supply = <&vcc3v3_sys>;

diff --git a/u-boot/drivers/power/pmic/rk8xx.c b/u-boot/drivers/power/pmic/rk8xx.c

index e361015..9eb1b95 100644

--- a/u-boot/drivers/power/pmic/rk8xx.c

+++ b/u-boot/drivers/power/pmic/rk8xx.c

@@ -408,6 +408,10 @@ static int rk8xx_ofdata_to_platdata(struct udevice *dev)

val = dev_read_u32_default(dev, "not-save-power-en", 0);

rk8xx->not_save_power_en = val;

  • /* XHF CUSTOM vsys-off-shutdown: power off VSYS in PWR_OFF mode

  • * (prevents auto power-on ~5min after software poweroff) */

  • rk8xx->sys_can_sd = dev_read_bool(dev, "vsys-off-shutdown");

return 0;

}

@@ -541,6 +545,26 @@ static int rk8xx_probe(struct udevice *dev)

lp_act_msk = RK8XX_LP_ACTION_MSK;

init_data = rk817_init_reg;

init_data_num = ARRAY_SIZE(rk817_init_reg);

  • /* XHF CUSTOM whether the system voltage can be shutdown in PWR_off mode */

  • if (priv->sys_can_sd) {

  • ret = rk8xx_read(dev, RK817_PMIC_CHRG_TERM, &value, 1);

  • if (ret)

  • return ret;

  • value |= 0x80;

  • ret = rk8xx_write(dev, RK817_PMIC_CHRG_TERM, &value, 1);

  • if (ret)

  • return ret;

  • } else {

  • ret = rk8xx_read(dev, RK817_PMIC_CHRG_TERM, &value, 1);

  • if (ret)

  • return ret;

  • value &= 0x7f;

  • ret = rk8xx_write(dev, RK817_PMIC_CHRG_TERM, &value, 1);

  • if (ret)

  • return ret;

  • }

/* judge whether save the PMIC_POWER_EN register */

if (priv->not_save_power_en)

break;

@@ -601,6 +625,42 @@ static int rk8xx_probe(struct udevice *dev)

}

printf("\n");

  • /* ============================================================

  • * XHF CUSTOM Power-on source gate for RK809

  • * Only allow boot when powered on by PWRON key press.

  • * - ON_SOURCE(0xF5) bit7 (0x80): PWRON key -> boot normally

  • * - ON_SOURCE(0xF5) bit6 (0x40): PLUG_IN -> shutdown

  • * (DC/battery plugged in triggers auto power-on)

  • * - Verified by experiment 2026-08-07:

  • * power key boot -> 0x80, DC plug boot -> 0x40

  • * Runs after PMIC init (I2C ready). pmic_shutdown() triggers

  • * DEV_OFF; PMIC powers off all rails -> CPU dies here.

  • * ============================================================ */

  • if (on_source && off_source &&

  • device_is_compatible(dev, "rockchip,rk809")) {

  • uint8_t on_val = 0;

  • ret = rk8xx_read(dev, on_source, &on_val, 1);

  • if (ret) {

  • printf("%s: read ON_SOURCE(0x%02x) failed, ret=%d\n",

  • func, on_source, ret);

  • } else {

  • /* Only PWRON key (bit7) is allowed to boot */

  • if (!(on_val & 0x80)) {

  • printf("PMIC: on=0x%02x (no PWRON key), power off!\n",

  • on_val);

  • pmic_shutdown(dev);

  • /* pmic_shutdown() should not return.

  • * If it does, stall here instead of booting. */

  • while (1)

  • ;

  • } else {

  • printf("PMIC: on=0x%02x (PWRON key), boot OK\n",

  • on_val);

  • }

  • }

  • }

if (pwron_key) {

ret = rk8xx_read(dev, pwron_key, &value, 1);

if (ret)

diff --git a/u-boot/include/power/rk8xx_pmic.h b/u-boot/include/power/rk8xx_pmic.h

index aa51e88..a491835 100644

--- a/u-boot/include/power/rk8xx_pmic.h

+++ b/u-boot/include/power/rk8xx_pmic.h

@@ -209,6 +209,7 @@ enum {

#define RK817_PMIC_SYS_CFG1 0xf1

#define RK817_PMIC_SYS_CFG3 0xf4

#define RK817_GPIO_INT_CFG 0xfe

+#define RK817_PMIC_CHRG_TERM 0xe6

#define RK8XX_ON_SOURCE 0xae

#define RK8XX_OFF_SOURCE 0xaf

@@ -287,6 +288,7 @@ struct rk8xx_priv {

uint8_t sleep_pin;

uint8_t rst_fun;

int not_save_power_en;

  • int sys_can_sd;

};

int rk8xx_spl_configure_buck(struct udevice *pmic, int buck, int uvolt);

3572_a16 解决机器接电池或者插DC电源上电的时候不要立马开机,要通过电源按键按下之后才开机

diff --git a/u-boot/drivers/power/pmic/rk8xx.c b/u-boot/drivers/power/pmic/rk8xx.c

index a5e97ea..d6829c5 100755

--- a/u-boot/drivers/power/pmic/rk8xx.c

+++ b/u-boot/drivers/power/pmic/rk8xx.c

@@ -1003,6 +1003,41 @@ static int rk8xx_probe(struct udevice *dev)

}

printf("\n");

  • /* ============================================================

  • * XHF CUSTOM Power-on source gate for RK806/RK809

  • * Only allow boot when powered on by PWRON key press.

  • * - ON_SOURCE bit7 (0x80): PWRON key -> boot normally

  • * - ON_SOURCE bit6 (0x40): VDC/DC/battery plugged in -> shutdown

  • * Verified on RK3572 (RK806) 2026-08-08:

  • * DC plug boot -> 0x40, battery boot -> 0x40, PWRON -> 0x80

  • * Runs after PMIC init (I2C ready). pmic_shutdown() triggers

  • * DEV_OFF; PMIC powers off all rails -> CPU dies here.

  • * ============================================================ */

  • if (on_source && off_source &&

  • device_is_compatible(dev, "rockchip,rk806")) {

  • uint8_t on_val = 0;

  • ret = rk8xx_read(dev, on_source, &on_val, 1);

  • if (ret) {

  • printf("%s: read ON_SOURCE(0x%02x) failed, ret=%d\n",

  • func, on_source, ret);

  • } else {

  • /* Only PWRON key (bit7) is allowed to boot */

  • if (!(on_val & 0x80)) {

  • printf("PMIC: on=0x%02x (no PWRON key), power off!\n",

  • on_val);

  • pmic_shutdown(dev);

  • /* pmic_shutdown() should not return.

  • * If it does, stall here instead of booting. */

  • while (1)

  • ;

  • } else {

  • printf("PMIC: on=0x%02x (PWRON key), boot OK\n",

  • on_val);

  • }

  • }

  • }

if (pwron_key) {

ret = rk8xx_read(dev, pwron_key, &value, 1);

if (ret)

相关推荐
大金SEO1 小时前
GEO启动的正确顺序:先做信源清理,再谈内容扩张
大数据·人工智能
IT毕设实战小研2 小时前
基于安卓的空气质量查询系统
android·大数据·vue.js·爬虫·python·django·课程设计
Capricorn19882 小时前
个人知识库接入大模型频现“幻觉引用”?排查 RAG 溯源失效问题,解析知芽构建可信第三大脑的底层架构
大数据·论文阅读·人工智能·笔记·架构·论文笔记
LaughingZhu2 小时前
Product Hunt 每日热榜 | 2026-08-27
人工智能·深度学习·神经网络·搜索引擎·百度
DeepAgent3 小时前
AI Agent 工程实践(35):我的 AI Engineering OS 最终架构
大数据·人工智能·agent
whcyhhh3 小时前
头歌实践教学平台:数据科学与大数据技术导论(十六)
大数据·开发语言·python
宸津-代码粉碎机3 小时前
AI工程化高阶实战|从Demo到生产落地核心架构、全套源码与避坑指南
java·大数据·开发语言·人工智能·python·架构
自由能燃气设备4 小时前
燃气热水锅炉/全预混低氮冷凝锅炉哪个品牌好?哪家好?6大商用品牌横评
大数据·数据库·人工智能
资深电气设计4 小时前
技术分析:空调机房水泵性能优势与系统适配性研究——水力能效、结构集成与智能运维维度
大数据·运维
Zenova EdgeOS4 小时前
工业网关心跳机制:从 Keepalive 到健康判定的工程实战
大数据·网络·数据库·边缘计算·工业网关