]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
power: supply: cpcap-battery: Use accumulator for current and power average
authorTony Lindgren <tony@atomide.com>
Sun, 7 Apr 2019 18:12:52 +0000 (11:12 -0700)
committerSebastian Reichel <sebastian.reichel@collabora.com>
Mon, 15 Apr 2019 20:53:16 +0000 (22:53 +0200)
We should not use measured current value for average since we have proper
coulomb counter values available. Using measured current value should
be only used when the value is queried at a higher rate than the 250 ms
rate the coulomb counter is configured to run at.

Cc: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
drivers/power/supply/cpcap-battery.c

index c8c893de00fd199f977fc368addec2a4af6bbe3b..2f55a25addee33fed67adae9c131f0be1c707e21 100644 (file)
@@ -476,11 +476,11 @@ static int cpcap_battery_get_property(struct power_supply *psy,
                val->intval = ddata->config.info.voltage_min_design;
                break;
        case POWER_SUPPLY_PROP_CURRENT_AVG:
-               if (cached) {
+               sample = latest->cc.sample - previous->cc.sample;
+               if (!sample) {
                        val->intval = cpcap_battery_cc_get_avg_current(ddata);
                        break;
                }
-               sample = latest->cc.sample - previous->cc.sample;
                accumulator = latest->cc.accumulator - previous->cc.accumulator;
                val->intval = cpcap_battery_cc_to_ua(ddata, sample,
                                                     accumulator,
@@ -497,13 +497,13 @@ static int cpcap_battery_get_property(struct power_supply *psy,
                val->intval = div64_s64(tmp, 100);
                break;
        case POWER_SUPPLY_PROP_POWER_AVG:
-               if (cached) {
+               sample = latest->cc.sample - previous->cc.sample;
+               if (!sample) {
                        tmp = cpcap_battery_cc_get_avg_current(ddata);
                        tmp *= (latest->voltage / 10000);
                        val->intval = div64_s64(tmp, 100);
                        break;
                }
-               sample = latest->cc.sample - previous->cc.sample;
                accumulator = latest->cc.accumulator - previous->cc.accumulator;
                tmp = cpcap_battery_cc_to_ua(ddata, sample, accumulator,
                                             latest->cc.offset);