Merge "Merge android13-gs-pixel-5.10-tm-qpr3 into android13-gs-pixel-5.10-udc" into android13-gs-pixel-5.10-udc
diff --git a/google_battery.c b/google_battery.c
index 804bd86..e1bfa5b 100644
--- a/google_battery.c
+++ b/google_battery.c
@@ -2221,8 +2221,9 @@
const bool same_type_and_status =
csi_stats->csi_current_type == batt_drv->csi_current_type &&
csi_stats->csi_current_status == batt_drv->csi_current_status;
- int current_speed = batt_drv->csi_current_speed < 0 ? 0 :
- batt_drv->csi_current_speed;
+ int current_speed = batt_drv->csi_current_speed;
+ int min_speed = csi_stats->csi_speed_min;
+ int max_speed = csi_stats->csi_speed_max;
const ktime_t right_now = get_boot_sec();
int ssoc = -1;
@@ -2239,14 +2240,18 @@
csi_stats->last_update = right_now;
/* accumulate only positive*/
- if (batt_drv->csi_current_speed < 0)
+ if (current_speed < 0)
return;
- if (current_speed < csi_stats->csi_speed_min)
- csi_stats->csi_speed_min = current_speed;
- else if (current_speed > csi_stats->csi_speed_max)
- csi_stats->csi_speed_max = current_speed;
+ if (min_speed == max_speed && max_speed == 0)
+ min_speed = max_speed = current_speed;
+ else if (current_speed < min_speed)
+ min_speed = current_speed;
+ else if (current_speed > max_speed)
+ max_speed = current_speed;
+ csi_stats->csi_speed_min = min_speed;
+ csi_stats->csi_speed_max = max_speed;
csi_stats->speed_sum += current_speed * elap;
csi_stats->csi_time_sum += elap;
return;
@@ -2258,7 +2263,7 @@
if (csi_stats->ssoc != -1) {
const int csi_speed_avg = csi_stats->csi_time_sum == 0 ?
- csi_stats->speed_sum :
+ ((csi_stats->csi_speed_min + csi_stats->csi_speed_max) / 2) :
(csi_stats->speed_sum / csi_stats->csi_time_sum);
const int cc = GPSY_GET_PROP(batt_drv->fg_psy, POWER_SUPPLY_PROP_CHARGE_COUNTER);
ktime_t res = 0;
@@ -2278,7 +2283,7 @@
}
/* ssoc == -1 on disconnect */
- if (ssoc == -1)
+ if (ssoc == -1 || current_speed < 0)
current_speed = 0;
csi_stats->ssoc = ssoc;
@@ -2524,12 +2529,15 @@
* different from the reference. Here status will either be *_COLD
* or *_HOT.
*/
- cc_max = GBMS_CCCM_LIMITS(profile, batt_drv->temp_idx, batt_drv->vbatt_idx);
+ cc_max = GBMS_CCCM_LIMITS(profile, batt_drv->temp_idx, batt_drv->vbatt_idx) / 1000;
if (cc_max && cc_max < nominal_demand)
nominal_demand = cc_max;
chg_speed = ibatt * 100 / nominal_demand;
+ pr_debug("chg_speed=%d ibatt=%d nominal_demand=%d cc_max=%d",
+ chg_speed, ibatt, nominal_demand, cc_max);
+
/* bound in [0,100] */
if (chg_speed > CSI_CHG_SPEED_MAX)
chg_speed = CSI_CHG_SPEED_MAX;