power: smb5: fix watchdog configuration
Update the watchdog configuration logic to enable/disable
watchdog configuration based on software based step charging/jeita
state.
While at it, fix register offset of watchdog register.
Change-Id: I2138a85f52fafc556eef7e2743568608395df89b
Signed-off-by: Ashay Jaiswal <ashayj@codeaurora.org>
diff --git a/drivers/power/supply/qcom/qpnp-smb5.c b/drivers/power/supply/qcom/qpnp-smb5.c
index b91850d..20dd78e 100644
--- a/drivers/power/supply/qcom/qpnp-smb5.c
+++ b/drivers/power/supply/qcom/qpnp-smb5.c
@@ -1084,6 +1084,7 @@
{
int rc = 0;
struct smb_charger *chg = power_supply_get_drvdata(psy);
+ bool enable;
switch (prop) {
case POWER_SUPPLY_PROP_STATUS:
@@ -1106,11 +1107,16 @@
vote(chg->fv_votable, BATT_PROFILE_VOTER, true, val->intval);
break;
case POWER_SUPPLY_PROP_STEP_CHARGING_ENABLED:
- chg->step_chg_enabled = !!val->intval;
+ enable = !!val->intval || chg->sw_jeita_enabled;
+ rc = smblib_configure_wdog(chg, enable);
+ if (rc == 0)
+ chg->step_chg_enabled = !!val->intval;
break;
case POWER_SUPPLY_PROP_SW_JEITA_ENABLED:
if (chg->sw_jeita_enabled != (!!val->intval)) {
rc = smblib_disable_hw_jeita(chg, !!val->intval);
+ enable = !!val->intval || chg->step_chg_enabled;
+ rc |= smblib_configure_wdog(chg, enable);
if (rc == 0)
chg->sw_jeita_enabled = !!val->intval;
}
@@ -1481,6 +1487,10 @@
return rc;
}
+ /*
+ * configure the one time watchdong periodic interval and
+ * disable "watchdog bite disable charging".
+ */
val = (ilog2(chip->dt.wd_bark_time / 16) << BARK_WDOG_TIMEOUT_SHIFT)
& BARK_WDOG_TIMEOUT_MASK;
val |= BITE_WDOG_TIMEOUT_8S;
@@ -1493,18 +1503,6 @@
return rc;
}
- /* enable WD BARK and enable it on plugin */
- rc = smblib_masked_write(chg, WD_CFG_REG,
- WATCHDOG_TRIGGER_AFP_EN_BIT |
- WDOG_TIMER_EN_ON_PLUGIN_BIT |
- BARK_WDOG_INT_EN_BIT,
- WDOG_TIMER_EN_ON_PLUGIN_BIT |
- BARK_WDOG_INT_EN_BIT);
- if (rc < 0) {
- pr_err("Couldn't configue WD config rc=%d\n", rc);
- return rc;
- }
-
/* configure float charger options */
switch (chip->dt.float_option) {
case FLOAT_DCP:
@@ -1643,6 +1641,14 @@
}
}
+ rc = smblib_configure_wdog(chg,
+ chg->step_chg_enabled || chg->sw_jeita_enabled);
+ if (rc < 0) {
+ dev_err(chg->dev, "Couldn't configure watchdog rc=%d\n",
+ rc);
+ return rc;
+ }
+
return rc;
}
@@ -1892,6 +1898,7 @@
[WDOG_BARK_IRQ] = {
.name = "wdog-bark",
.handler = wdog_bark_irq_handler,
+ .wake = true,
},
[AICL_FAIL_IRQ] = {
.name = "aicl-fail",