This patch fixes shutdown power off issues on Rock Pi 4 and probably all other boards using RK808 PMIC combined with PSCI. diff --git a/drivers/mfd/rk808.c b/drivers/mfd/rk808.c index 601cefb5c..a57e4bb86 100644 --- a/drivers/mfd/rk808.c +++ b/drivers/mfd/rk808.c @@ -526,15 +526,24 @@ static void rk8xx_syscore_shutdown(void) struct rk808 *rk808 = i2c_get_clientdata(rk808_i2c_client); int ret; - if (system_state == SYSTEM_POWER_OFF && - (rk808->variant == RK809_ID || rk808->variant == RK817_ID)) { - ret = regmap_update_bits(rk808->regmap, - RK817_SYS_CFG(3), - RK817_SLPPIN_FUNC_MSK, - SLPPIN_DN_FUN); - if (ret) { - dev_warn(&rk808_i2c_client->dev, - "Cannot switch to power down function\n"); + if (system_state == SYSTEM_POWER_OFF) { + switch(rk808->variant) { + case RK809_ID: + case RK817_ID: + ret = regmap_update_bits(rk808->regmap, + RK817_SYS_CFG(3), + RK817_SLPPIN_FUNC_MSK, + SLPPIN_DN_FUN); + if (ret) { + dev_warn(&rk808_i2c_client->dev, + "Cannot switch to power down function\n"); + } + break; + case RK808_ID: + rk808_device_shutdown(); + break; + default: + break; } } } @@ -616,7 +625,7 @@ static int rk808_probe(struct i2c_client *client, nr_pre_init_regs = ARRAY_SIZE(rk808_pre_init_reg); cells = rk808s; nr_cells = ARRAY_SIZE(rk808s); - rk808->pm_pwroff_fn = rk808_device_shutdown; + register_syscore_ops(&rk808_syscore_ops); break; case RK818_ID: rk808->regmap_cfg = &rk818_regmap_config;