From 7ade27b01780801c677cc1b737d8a631fe89a155 Mon Sep 17 00:00:00 2001 From: Abhijeet Dharmapurikar Date: Wed, 23 Aug 2017 12:07:46 -0700 Subject: [PATCH] qpnp-qnovo: fix ptrain done handler Currently the handler skips calling the update function but uses the final result from the votable not_ok_to_qnovo_votable. Fix it by calling the update function so it gets a chance to vote on not_ok_to_qnovo_votable. Moreover do not return early from ptrain_done handler without setting QNI_PT_VOTER's vote on pt_dis_votable. This is a self clearing bit and unless QNI_PT_VOTER's bit is removed, the next restart may not trickle down to hw. Change-Id: I0a860287b638d20b6a4aa05c7bb25e9b81a980d2 Signed-off-by: Abhijeet Dharmapurikar --- drivers/power/supply/qcom/qpnp-qnovo.c | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/drivers/power/supply/qcom/qpnp-qnovo.c b/drivers/power/supply/qcom/qpnp-qnovo.c index cb34d73979ff..53af3415ec6a 100644 --- a/drivers/power/supply/qcom/qpnp-qnovo.c +++ b/drivers/power/supply/qcom/qpnp-qnovo.c @@ -1423,16 +1423,7 @@ static irqreturn_t handle_ptrain_done(int irq, void *data) struct qnovo *chip = data; union power_supply_propval pval = {0}; - /* - * In some cases (esp shutting down) the userspace would disable by - * setting qnovo_enable=0. Also charger could be removed or there is - * an error (i.e. its not okay to run qnovo)- - * skip taking ESR measurement in such situations - */ - - if (get_client_vote(chip->disable_votable, USER_VOTER) - || get_effective_result(chip->not_ok_to_qnovo_votable) > 0) - return IRQ_HANDLED; + qnovo_update_status(chip); /* * hw resets pt_en bit once ptrain_done triggers. @@ -1443,13 +1434,14 @@ static irqreturn_t handle_ptrain_done(int irq, void *data) vote(chip->pt_dis_votable, QNI_PT_VOTER, true, 0); vote(chip->pt_dis_votable, ESR_VOTER, true, 0); - if (is_fg_available(chip)) + if (is_fg_available(chip) + && !get_client_vote(chip->disable_votable, USER_VOTER) + && !get_effective_result(chip->not_ok_to_qnovo_votable)) power_supply_set_property(chip->bms_psy, POWER_SUPPLY_PROP_RESISTANCE, &pval); vote(chip->pt_dis_votable, ESR_VOTER, false, 0); - qnovo_update_status(chip); kobject_uevent(&chip->dev->kobj, KOBJ_CHANGE); return IRQ_HANDLED; }