diff --git a/drivers/power/qti_glink_charger/qti_glink_charger.c b/drivers/power/qti_glink_charger/qti_glink_charger.c index e6d08cb8da16..ef2adbae0788 100644 --- a/drivers/power/qti_glink_charger/qti_glink_charger.c +++ b/drivers/power/qti_glink_charger/qti_glink_charger.c @@ -2814,6 +2814,36 @@ static int qti_charger_init(struct qti_charger *chg) return 0; } +bool qti_charger_reset_chargepump(struct qti_charger *chg) +{ + unsigned long reset = 0x1; + int rc ; + + if(!chg) { + pr_err("QTI: chip not valid"); + return false; + } + + rc = qti_charger_write(chg, OEM_PROP_MASTER_SWITCHEDCAP_RESET, &reset, sizeof(reset)); + if(rc) { + mmi_err(chg, "qit charger reset charger pump register fail:%d\n", rc); + } + + return true; +} + +static void qti_charger_shutdown(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct qti_charger *chg= dev_get_drvdata(dev); + + //reset charger pump register before shutdown. + qti_charger_reset_chargepump(chg); + mmi_info(chg, "qti_charger_shutdown\n"); + + return; +} + static void qti_charger_deinit(struct qti_charger *chg) { int rc; @@ -3096,6 +3126,7 @@ static struct platform_driver qti_charger_driver = { }, .probe = qti_charger_probe, .remove = qti_charger_remove, + .shutdown = qti_charger_shutdown, }; module_platform_driver(qti_charger_driver); diff --git a/drivers/power/qti_glink_charger/qti_glink_charger.h b/drivers/power/qti_glink_charger/qti_glink_charger.h index 8493199b5f35..e2ed4eb662e8 100644 --- a/drivers/power/qti_glink_charger/qti_glink_charger.h +++ b/drivers/power/qti_glink_charger/qti_glink_charger.h @@ -73,6 +73,7 @@ enum oem_property_type { OEM_PROP_MSB_DEV_INFO, OEM_PROP_MASTER_SWITCHEDCAP_INFO, OEM_PROP_SLAVE_SWITCHEDCAP_INFO, + OEM_PROP_MASTER_SWITCHEDCAP_RESET, OEM_PROP_MAX, };