mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-11 23:24:22 -04:00
align battery current and charger power update rate
Align battery current reading request of power supply property reading to avoid too frequent mmi charger status updating and uevent change to user space on dual batteries support products.. Update charger power only when power change more than 1W. Change-Id: I154ad951d79db36ed06eaaeca32785b8a68051a3 Signed-off-by: Yonghua Yan <yanyh2@motorola.com> Reviewed-on: https://gerrit.mot.com/2482188 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Jianqi Yang <yangj@motorola.com> Submit-Approved: Jira Key
This commit is contained in:
parent
0edc1aa411
commit
d93f2d210f
1 changed files with 26 additions and 5 deletions
|
|
@ -256,6 +256,7 @@ struct mmi_charger_chip {
|
|||
bool empty_vbat_shutdown_triggered;
|
||||
|
||||
int heartbeat_dischg_ms;
|
||||
uint32_t ibat_calc_alignment_time;
|
||||
};
|
||||
|
||||
static int mmi_vote(struct mmi_vote *vote, const char *voter,
|
||||
|
|
@ -2086,7 +2087,7 @@ static void mmi_update_battery_status(struct mmi_charger_chip *chip)
|
|||
vbus_present? "present" : "absent");
|
||||
}
|
||||
|
||||
if (chip->power_watt != power_watt) {
|
||||
if ((chip->power_watt / 1000) != (power_watt / 1000)) {
|
||||
mmi_changed = true;
|
||||
chip->power_watt = power_watt;
|
||||
mmi_notify_charger_event(chip, NOTIFY_EVENT_TYPE_POWER_WATT);
|
||||
|
|
@ -2624,11 +2625,26 @@ static int mmi_get_prop(struct power_supply *psy,
|
|||
{
|
||||
struct mmi_charger_chip *chip = power_supply_get_drvdata(psy);
|
||||
int rc = 0;
|
||||
uint32_t elapsed_ms;
|
||||
struct timespec64 now;
|
||||
static struct timespec64 start = {0};
|
||||
|
||||
if (psp == POWER_SUPPLY_PROP_CURRENT_NOW) {
|
||||
cancel_delayed_work(&chip->heartbeat_work);
|
||||
schedule_delayed_work(&chip->heartbeat_work,
|
||||
msecs_to_jiffies(0));
|
||||
if (psp == POWER_SUPPLY_PROP_CURRENT_NOW &&
|
||||
chip->ibat_calc_alignment_time != UINT_MAX) {
|
||||
ktime_get_real_ts64(&now);
|
||||
if (now.tv_sec >= start.tv_sec) {
|
||||
elapsed_ms = (now.tv_sec - start.tv_sec) * 1000;
|
||||
elapsed_ms += (now.tv_nsec - start.tv_nsec) / 1000000;
|
||||
} else {
|
||||
elapsed_ms = 0;
|
||||
start = now;
|
||||
}
|
||||
if (elapsed_ms >= chip->ibat_calc_alignment_time) {
|
||||
cancel_delayed_work(&chip->heartbeat_work);
|
||||
schedule_delayed_work(&chip->heartbeat_work,
|
||||
msecs_to_jiffies(0));
|
||||
start = now;
|
||||
}
|
||||
}
|
||||
|
||||
switch (psp) {
|
||||
|
|
@ -2772,6 +2788,11 @@ static int mmi_parse_dt(struct mmi_charger_chip *chip)
|
|||
|
||||
mmi_warn(chip, "mmi,heartbeat dischg ms %d\n", chip->heartbeat_dischg_ms);
|
||||
|
||||
rc = of_property_read_u32(node, "mmi,ibat-calc-alignment-time",
|
||||
&chip->ibat_calc_alignment_time);
|
||||
if (rc)
|
||||
chip->ibat_calc_alignment_time = UINT_MAX;
|
||||
|
||||
node = of_find_node_by_path("/chosen");
|
||||
|
||||
if (!node)
|
||||
|
|
|
|||
Loading…
Reference in a new issue