power: supply: bq27xxx: fix reporting critical level
The EDV1/SOC1 flag is set when the battery voltage drops below the threshold set in EEPROM. From observing the capacity_level reported by the driver, and reading the datasheet, EDV1 remains set even when EDVF/SOCF gets set. Thus, bq27xxx_battery_capacity_level() never reaches the CAPACITY_LEVEL_CRITICAL code path, since CAPACITY_LEVEL_LOW takes precedence. This commit fixes the issue by swapping the order in which the flags are tested. It was tested with bq27200 in the Nokia N900. Signed-off-by: Sicelo A. Mhlongo <absicsz@gmail.com> Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
This commit is contained in:
parent
4651b6b729
commit
e2b018cb55
@ -1917,10 +1917,10 @@ static int bq27xxx_battery_capacity_level(struct bq27xxx_device_info *di,
|
||||
if (di->opts & BQ27XXX_O_ZERO) {
|
||||
if (di->cache.flags & BQ27000_FLAG_FC)
|
||||
level = POWER_SUPPLY_CAPACITY_LEVEL_FULL;
|
||||
else if (di->cache.flags & BQ27000_FLAG_EDV1)
|
||||
level = POWER_SUPPLY_CAPACITY_LEVEL_LOW;
|
||||
else if (di->cache.flags & BQ27000_FLAG_EDVF)
|
||||
level = POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL;
|
||||
else if (di->cache.flags & BQ27000_FLAG_EDV1)
|
||||
level = POWER_SUPPLY_CAPACITY_LEVEL_LOW;
|
||||
else
|
||||
level = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL;
|
||||
} else if (di->opts & BQ27Z561_O_BITS) {
|
||||
@ -1933,10 +1933,10 @@ static int bq27xxx_battery_capacity_level(struct bq27xxx_device_info *di,
|
||||
} else {
|
||||
if (di->cache.flags & BQ27XXX_FLAG_FC)
|
||||
level = POWER_SUPPLY_CAPACITY_LEVEL_FULL;
|
||||
else if (di->cache.flags & BQ27XXX_FLAG_SOC1)
|
||||
level = POWER_SUPPLY_CAPACITY_LEVEL_LOW;
|
||||
else if (di->cache.flags & BQ27XXX_FLAG_SOCF)
|
||||
level = POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL;
|
||||
else if (di->cache.flags & BQ27XXX_FLAG_SOC1)
|
||||
level = POWER_SUPPLY_CAPACITY_LEVEL_LOW;
|
||||
else
|
||||
level = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user