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)

相关推荐
智慧物业老杨15 小时前
物业数字化落地思考:真正的转型,是底层数据秩序的重构
java·大数据·人工智能·微服务·系统架构
RoboWizard19 小时前
三星和金士顿内存条哪个更适合游戏超频
大数据·人工智能
深圳市恒星物联科技有限公司20 小时前
轻量MCU设备通过OpenHarmony兼容性测评的全流程关键要点与实战踩坑经验
大数据·人工智能·物联网·鸿蒙
TDengine (老段)20 小时前
TDengine 常见问题 TOP3
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
Leo.yuan1 天前
盘点2026十大主流国产数据仓库软件:从开源到商业,企业级怎么选?
大数据
长谷深风1111 天前
评测AI Agent:三种裁判各司其职
java·大数据·开发语言·人工智能·ai agent
大大大大晴天1 天前
元数据之后,数据治理该做什么:标准、指标与主数据
大数据
移动云开发者联盟1 天前
AI重塑短剧生产!移动云×咪咕 AIGC内容创作平台正式发布
大数据·人工智能
其实防守也摸鱼1 天前
Codex 下载与本地部署实战:从安装到运行全指南
android·大数据·运维·安全·自动化
shujudang1 天前
零售客户分析平台的四种路径:身份关联、分析模型与系统对接
大数据·人工智能·数据分析