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)

相关推荐
SelectDB26 分钟前
Doris Arrow Flight SQL 高速读取协议实战:与 Snowflake 客户端取数链路对照
大数据·数据库·数据分析
爱签AI电子合同1 小时前
电子合同全维度实测与选型指南
大数据·人工智能
AI办公探索者1 小时前
从SaaS到本地部署:大模型推理成本优化与8888元私有化方案的技术解析
大数据·人工智能
做运维的阿瑞1 小时前
云项目可观测性与成本治理:告警、日志、Dashboard 与预算标签
大数据·云原生·云计算·terraform
4SAPI2 小时前
多国产模型混合调度与企业级治理生产选型指南:4SAPI、硅基流动与 OpenRouter 的架构权衡
大数据·人工智能·架构·php
智购科技自动售货机厂家2 小时前
让AI经营自动售货机:从Project Vend看工具权限与业务规则~YH
大数据·服务器·单片机·嵌入式硬件·深度学习
数字新视界2 小时前
空调控制器AIRC800的智能化管理与应用实践
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
isfox3 小时前
ReduceTask工作机制
大数据
蹄蹄4 小时前
从“一次性检测“到“年度服务“:检测机构收入结构变了,合同和应收账款也要跟着变
大数据·数据库·人工智能
YIN_尹4 小时前
【git原理与使用】git初识与安装
大数据·git·elasticsearch