hc
2023-11-06 9df731a176aab8e03b984b681b1bea01ccff6644
u-boot/drivers/power/pmic/rk8xx.c
....@@ -152,7 +152,8 @@
152152 { RK817_PMIC_SYS_CFG1, 0x20, 0x70},
153153 /* Set pmic_sleep as none function */
154154 { RK817_PMIC_SYS_CFG3, 0x00, 0x18 },
155
-
155
+ /* GATE pin function: gate function */
156
+ { RK817_GPIO_INT_CFG, 0x00, 0x20 },
156157 #ifdef CONFIG_DM_CHARGE_DISPLAY
157158 /* Set pmic_int active low */
158159 { RK817_GPIO_INT_CFG, 0x00, 0x02 },
....@@ -408,6 +409,9 @@
408409 val = dev_read_u32_default(dev, "not-save-power-en", 0);
409410 rk8xx->not_save_power_en = val;
410411
412
+ val = dev_read_bool(dev, "vsys-off-shutdown");
413
+ rk8xx->sys_can_sd = val;
414
+
411415 return 0;
412416 }
413417
....@@ -534,6 +538,16 @@
534538 break;
535539 case RK809_ID:
536540 case RK817_ID:
541
+ if (device_is_compatible(dev, "rockchip,rk809") && (priv->variant != RK809_ID)) {
542
+ dev_err(dev, "the dts is RK809, the hardware is RK817\n");
543
+ run_command("download", 0);
544
+ }
545
+
546
+ if (device_is_compatible(dev, "rockchip,rk817") && (priv->variant != RK817_ID)) {
547
+ dev_err(dev, "the dts is RK817, the hardware is RK809\n");
548
+ run_command("download", 0);
549
+ }
550
+
537551 on_source = RK817_ON_SOURCE;
538552 off_source = RK817_OFF_SOURCE;
539553 pwron_key = RK817_PWRON_KEY;
....@@ -541,27 +555,46 @@
541555 lp_act_msk = RK8XX_LP_ACTION_MSK;
542556 init_data = rk817_init_reg;
543557 init_data_num = ARRAY_SIZE(rk817_init_reg);
558
+
559
+ /* whether the system voltage can be shutdown in PWR_off mode */
560
+ if (priv->sys_can_sd) {
561
+ ret = rk8xx_read(dev, RK817_PMIC_CHRG_TERM, &value, 1);
562
+ if (ret)
563
+ return ret;
564
+ value |= 0x80;
565
+ ret = rk8xx_write(dev, RK817_PMIC_CHRG_TERM, &value, 1);
566
+ if (ret)
567
+ return ret;
568
+ } else {
569
+ ret = rk8xx_read(dev, RK817_PMIC_CHRG_TERM, &value, 1);
570
+ if (ret)
571
+ return ret;
572
+ value &= 0x7f;
573
+ ret = rk8xx_write(dev, RK817_PMIC_CHRG_TERM, &value, 1);
574
+ if (ret)
575
+ return ret;
576
+ }
577
+
544578 /* judge whether save the PMIC_POWER_EN register */
545
- if (priv->not_save_power_en)
546
- break;
579
+ if (!priv->not_save_power_en) {
580
+ ret = rk8xx_read(dev, RK817_POWER_EN0, &power_en0, 1);
581
+ if (ret)
582
+ return ret;
583
+ ret = rk8xx_read(dev, RK817_POWER_EN1, &power_en1, 1);
584
+ if (ret)
585
+ return ret;
586
+ ret = rk8xx_read(dev, RK817_POWER_EN2, &power_en2, 1);
587
+ if (ret)
588
+ return ret;
589
+ ret = rk8xx_read(dev, RK817_POWER_EN3, &power_en3, 1);
590
+ if (ret)
591
+ return ret;
547592
548
- ret = rk8xx_read(dev, RK817_POWER_EN0, &power_en0, 1);
549
- if (ret)
550
- return ret;
551
- ret = rk8xx_read(dev, RK817_POWER_EN1, &power_en1, 1);
552
- if (ret)
553
- return ret;
554
- ret = rk8xx_read(dev, RK817_POWER_EN2, &power_en2, 1);
555
- if (ret)
556
- return ret;
557
- ret = rk8xx_read(dev, RK817_POWER_EN3, &power_en3, 1);
558
- if (ret)
559
- return ret;
560
-
561
- value = (power_en0 & 0x0f) | ((power_en1 & 0x0f) << 4);
562
- rk8xx_write(dev, RK817_POWER_EN_SAVE0, &value, 1);
563
- value = (power_en2 & 0x0f) | ((power_en3 & 0x0f) << 4);
564
- rk8xx_write(dev, RK817_POWER_EN_SAVE1, &value, 1);
593
+ value = (power_en0 & 0x0f) | ((power_en1 & 0x0f) << 4);
594
+ rk8xx_write(dev, RK817_POWER_EN_SAVE0, &value, 1);
595
+ value = (power_en2 & 0x0f) | ((power_en3 & 0x0f) << 4);
596
+ rk8xx_write(dev, RK817_POWER_EN_SAVE1, &value, 1);
597
+ }
565598 break;
566599 default:
567600 printf("Unknown PMIC: RK%x!!\n", priv->variant);