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)