Loading drivers/power/supply/qcom/battery.c +19 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ struct pl_data { struct delayed_work status_change_work; struct work_struct pl_disable_forever_work; struct work_struct pl_taper_work; struct delayed_work pl_awake_work; bool taper_work_running; struct power_supply *main_psy; struct power_supply *pl_psy; Loading Loading @@ -568,6 +569,14 @@ static void pl_disable_forever_work(struct work_struct *work) vote(chip->hvdcp_hw_inov_dis_votable, PL_VOTER, false, 0); } static void pl_awake_work(struct work_struct *work) { struct pl_data *chip = container_of(work, struct pl_data, pl_awake_work.work); vote(chip->pl_awake_votable, PL_VOTER, false, 0); } static bool is_main_available(struct pl_data *chip) { if (chip->main_psy) Loading Loading @@ -595,6 +604,10 @@ static int pl_disable_vote_callback(struct votable *votable, total_fcc_ua = get_effective_result_locked(chip->fcc_votable); if (chip->pl_mode != POWER_SUPPLY_PL_NONE && !pl_disable) { /* keep system awake to talk to slave charger through i2c */ cancel_delayed_work_sync(&chip->pl_awake_work); vote(chip->pl_awake_votable, PL_VOTER, true, 0); /* enable parallel charging */ rc = power_supply_get_property(chip->pl_psy, POWER_SUPPLY_PROP_CHARGE_TYPE, &pval); Loading Loading @@ -698,6 +711,10 @@ static int pl_disable_vote_callback(struct votable *votable, } rerun_election(chip->fv_votable); cancel_delayed_work_sync(&chip->pl_awake_work); schedule_delayed_work(&chip->pl_awake_work, msecs_to_jiffies(5000)); } pl_dbg(chip, PR_PARALLEL, "parallel charging %s\n", Loading Loading @@ -1075,6 +1092,7 @@ int qcom_batt_init(void) INIT_DELAYED_WORK(&chip->status_change_work, status_change_work); INIT_WORK(&chip->pl_taper_work, pl_taper_work); INIT_WORK(&chip->pl_disable_forever_work, pl_disable_forever_work); INIT_DELAYED_WORK(&chip->pl_awake_work, pl_awake_work); rc = pl_register_notifier(chip); if (rc < 0) { Loading Loading @@ -1128,6 +1146,7 @@ void qcom_batt_deinit(void) cancel_delayed_work_sync(&chip->status_change_work); cancel_work_sync(&chip->pl_taper_work); cancel_work_sync(&chip->pl_disable_forever_work); cancel_delayed_work_sync(&chip->pl_awake_work); power_supply_unreg_notifier(&chip->nb); destroy_votable(chip->pl_enable_votable_indirect); Loading Loading
drivers/power/supply/qcom/battery.c +19 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ struct pl_data { struct delayed_work status_change_work; struct work_struct pl_disable_forever_work; struct work_struct pl_taper_work; struct delayed_work pl_awake_work; bool taper_work_running; struct power_supply *main_psy; struct power_supply *pl_psy; Loading Loading @@ -568,6 +569,14 @@ static void pl_disable_forever_work(struct work_struct *work) vote(chip->hvdcp_hw_inov_dis_votable, PL_VOTER, false, 0); } static void pl_awake_work(struct work_struct *work) { struct pl_data *chip = container_of(work, struct pl_data, pl_awake_work.work); vote(chip->pl_awake_votable, PL_VOTER, false, 0); } static bool is_main_available(struct pl_data *chip) { if (chip->main_psy) Loading Loading @@ -595,6 +604,10 @@ static int pl_disable_vote_callback(struct votable *votable, total_fcc_ua = get_effective_result_locked(chip->fcc_votable); if (chip->pl_mode != POWER_SUPPLY_PL_NONE && !pl_disable) { /* keep system awake to talk to slave charger through i2c */ cancel_delayed_work_sync(&chip->pl_awake_work); vote(chip->pl_awake_votable, PL_VOTER, true, 0); /* enable parallel charging */ rc = power_supply_get_property(chip->pl_psy, POWER_SUPPLY_PROP_CHARGE_TYPE, &pval); Loading Loading @@ -698,6 +711,10 @@ static int pl_disable_vote_callback(struct votable *votable, } rerun_election(chip->fv_votable); cancel_delayed_work_sync(&chip->pl_awake_work); schedule_delayed_work(&chip->pl_awake_work, msecs_to_jiffies(5000)); } pl_dbg(chip, PR_PARALLEL, "parallel charging %s\n", Loading Loading @@ -1075,6 +1092,7 @@ int qcom_batt_init(void) INIT_DELAYED_WORK(&chip->status_change_work, status_change_work); INIT_WORK(&chip->pl_taper_work, pl_taper_work); INIT_WORK(&chip->pl_disable_forever_work, pl_disable_forever_work); INIT_DELAYED_WORK(&chip->pl_awake_work, pl_awake_work); rc = pl_register_notifier(chip); if (rc < 0) { Loading Loading @@ -1128,6 +1146,7 @@ void qcom_batt_deinit(void) cancel_delayed_work_sync(&chip->status_change_work); cancel_work_sync(&chip->pl_taper_work); cancel_work_sync(&chip->pl_disable_forever_work); cancel_delayed_work_sync(&chip->pl_awake_work); power_supply_unreg_notifier(&chip->nb); destroy_votable(chip->pl_enable_votable_indirect); Loading