From 9df731a176aab8e03b984b681b1bea01ccff6644 Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Mon, 06 Nov 2023 07:23:06 +0000 Subject: [PATCH] rk3568 rt uboot init --- u-boot/drivers/power/pmic/rk8xx.c | 73 ++++++++++++++++++++++++++---------- 1 files changed, 53 insertions(+), 20 deletions(-) diff --git a/u-boot/drivers/power/pmic/rk8xx.c b/u-boot/drivers/power/pmic/rk8xx.c index e361015..19877f3 100644 --- a/u-boot/drivers/power/pmic/rk8xx.c +++ b/u-boot/drivers/power/pmic/rk8xx.c @@ -152,7 +152,8 @@ { RK817_PMIC_SYS_CFG1, 0x20, 0x70}, /* Set pmic_sleep as none function */ { RK817_PMIC_SYS_CFG3, 0x00, 0x18 }, - + /* GATE pin function: gate function */ + { RK817_GPIO_INT_CFG, 0x00, 0x20 }, #ifdef CONFIG_DM_CHARGE_DISPLAY /* Set pmic_int active low */ { RK817_GPIO_INT_CFG, 0x00, 0x02 }, @@ -408,6 +409,9 @@ val = dev_read_u32_default(dev, "not-save-power-en", 0); rk8xx->not_save_power_en = val; + val = dev_read_bool(dev, "vsys-off-shutdown"); + rk8xx->sys_can_sd = val; + return 0; } @@ -534,6 +538,16 @@ break; case RK809_ID: case RK817_ID: + if (device_is_compatible(dev, "rockchip,rk809") && (priv->variant != RK809_ID)) { + dev_err(dev, "the dts is RK809, the hardware is RK817\n"); + run_command("download", 0); + } + + if (device_is_compatible(dev, "rockchip,rk817") && (priv->variant != RK817_ID)) { + dev_err(dev, "the dts is RK817, the hardware is RK809\n"); + run_command("download", 0); + } + on_source = RK817_ON_SOURCE; off_source = RK817_OFF_SOURCE; pwron_key = RK817_PWRON_KEY; @@ -541,27 +555,46 @@ lp_act_msk = RK8XX_LP_ACTION_MSK; init_data = rk817_init_reg; init_data_num = ARRAY_SIZE(rk817_init_reg); + + /* 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; + if (!priv->not_save_power_en) { + ret = rk8xx_read(dev, RK817_POWER_EN0, &power_en0, 1); + if (ret) + return ret; + ret = rk8xx_read(dev, RK817_POWER_EN1, &power_en1, 1); + if (ret) + return ret; + ret = rk8xx_read(dev, RK817_POWER_EN2, &power_en2, 1); + if (ret) + return ret; + ret = rk8xx_read(dev, RK817_POWER_EN3, &power_en3, 1); + if (ret) + return ret; - ret = rk8xx_read(dev, RK817_POWER_EN0, &power_en0, 1); - if (ret) - return ret; - ret = rk8xx_read(dev, RK817_POWER_EN1, &power_en1, 1); - if (ret) - return ret; - ret = rk8xx_read(dev, RK817_POWER_EN2, &power_en2, 1); - if (ret) - return ret; - ret = rk8xx_read(dev, RK817_POWER_EN3, &power_en3, 1); - if (ret) - return ret; - - value = (power_en0 & 0x0f) | ((power_en1 & 0x0f) << 4); - rk8xx_write(dev, RK817_POWER_EN_SAVE0, &value, 1); - value = (power_en2 & 0x0f) | ((power_en3 & 0x0f) << 4); - rk8xx_write(dev, RK817_POWER_EN_SAVE1, &value, 1); + value = (power_en0 & 0x0f) | ((power_en1 & 0x0f) << 4); + rk8xx_write(dev, RK817_POWER_EN_SAVE0, &value, 1); + value = (power_en2 & 0x0f) | ((power_en3 & 0x0f) << 4); + rk8xx_write(dev, RK817_POWER_EN_SAVE1, &value, 1); + } break; default: printf("Unknown PMIC: RK%x!!\n", priv->variant); -- Gitblit v1.6.2