diff options
Diffstat (limited to 'driver/battery')
-rw-r--r-- | driver/battery/smart.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/driver/battery/smart.c b/driver/battery/smart.c index f30b74d71b..4497129bdd 100644 --- a/driver/battery/smart.c +++ b/driver/battery/smart.c @@ -342,9 +342,17 @@ static void apply_fake_state_of_charge(struct batt_params *batt) void battery_get_params(struct batt_params *batt) { - struct batt_params batt_new = {0}; + struct batt_params batt_new; int v; + /* + * Start with a copy so that only valid fields will be updated. Note + * sb_read doesn't change the value if I2C fails. So, the current value + * will be preserved. + */ + memcpy(&batt_new, batt, sizeof(*batt)); + batt_new.flags = 0; + if (sb_read(SB_TEMPERATURE, &batt_new.temperature)) batt_new.flags |= BATT_FLAG_BAD_TEMPERATURE; |