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)

相关推荐
DFT计算杂谈2 小时前
C4T交错磁体中的超导交织序向列涨落与自旋流环涨落的选择机制
大数据·数据库·人工智能
咖啡屋和酒吧2 小时前
2026年探索高端健康管理:细胞存储与抗衰需求下的行业观察
大数据·人工智能·精选
2601_963282772 小时前
极寒场景专网通信技术实践:黑龙江零下 40℃环境数字对讲组网方案落地解析
大数据·运维·数据库
ha_lydms3 小时前
Hologres分区表
大数据·mysql·阿里云·实时数仓·hologres·调度·aliyun
2601_956456344 小时前
AI巡检机器人实战评测:3款室外产品算法自研能力与真实场景表现横评(2026)
大数据·人工智能·机器人
qingyulee4 小时前
git常用指令
大数据·git·elasticsearch
数据智研5 小时前
【数据分享】中国民政统计年鉴(1949-2025)
大数据·人工智能·信息可视化·数据分析
ACP广源盛139246256735 小时前
Ling‑3.0‑flash 昇腾 0‑Day 适配落地@ACP#IX9104 在国产高密度算力矩阵中的机遇与落地场景
大数据·人工智能·分布式·单片机·嵌入式硬件
湘美书院--湘美谈教育6 小时前
湘美书院谈探索式教育,中医药AI研究络病理论
大数据·人工智能·深度学习·学习·生活