Skip to content

Commit c32c617

Browse files
glneosre
authored andcommitted
power: supply: bq27xxx: Move temperature reading out of update loop
Most of the functions that read values return a status and put the value itself in an a function parameter. Update temperature reading to match. As temp is not checked for changes as part of the update loop, remove the read of the temperature from the periodic update loop. This saves I2C/1W bandwidth. It also means we do not have to cache it, fresh values are read when requested. Signed-off-by: Andrew Davis <afd@ti.com> Link: https://lore.kernel.org/r/20240325203129.150030-1-afd@ti.com Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
1 parent d6486a1 commit c32c617

File tree

2 files changed

+10
-8
lines changed

2 files changed

+10
-8
lines changed

drivers/power/supply/bq27xxx_battery.c

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1652,10 +1652,11 @@ static int bq27xxx_battery_read_energy(struct bq27xxx_device_info *di)
16521652
}
16531653

16541654
/*
1655-
* Return the battery temperature in tenths of degree Kelvin
1655+
* Return the battery temperature in tenths of degree Celsius
16561656
* Or < 0 if something fails.
16571657
*/
1658-
static int bq27xxx_battery_read_temperature(struct bq27xxx_device_info *di)
1658+
static int bq27xxx_battery_read_temperature(struct bq27xxx_device_info *di,
1659+
union power_supply_propval *val)
16591660
{
16601661
int temp;
16611662

@@ -1668,7 +1669,12 @@ static int bq27xxx_battery_read_temperature(struct bq27xxx_device_info *di)
16681669
if (di->opts & BQ27XXX_O_ZERO)
16691670
temp = 5 * temp / 2;
16701671

1671-
return temp;
1672+
/* Convert decidegree Kelvin to Celsius */
1673+
temp -= 2731;
1674+
1675+
val->intval = temp;
1676+
1677+
return 0;
16721678
}
16731679

16741680
/*
@@ -1851,7 +1857,6 @@ static void bq27xxx_battery_update_unlocked(struct bq27xxx_device_info *di)
18511857
if ((cache.flags & 0xff) == 0xff)
18521858
cache.flags = -1; /* read error */
18531859
if (cache.flags >= 0) {
1854-
cache.temperature = bq27xxx_battery_read_temperature(di);
18551860
if (di->regs[BQ27XXX_REG_TTE] != INVALID_REG_ADDR)
18561861
cache.time_to_empty = bq27xxx_battery_read_time(di, BQ27XXX_REG_TTE);
18571862
if (di->regs[BQ27XXX_REG_TTECP] != INVALID_REG_ADDR)
@@ -2038,9 +2043,7 @@ static int bq27xxx_battery_get_property(struct power_supply *psy,
20382043
ret = bq27xxx_battery_capacity_level(di, val);
20392044
break;
20402045
case POWER_SUPPLY_PROP_TEMP:
2041-
ret = bq27xxx_simple_value(di->cache.temperature, val);
2042-
if (ret == 0)
2043-
val->intval -= 2731; /* convert decidegree k to c */
2046+
ret = bq27xxx_battery_read_temperature(di, val);
20442047
break;
20452048
case POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW:
20462049
ret = bq27xxx_simple_value(di->cache.time_to_empty, val);

include/linux/power/bq27xxx_battery.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ struct bq27xxx_access_methods {
4747
};
4848

4949
struct bq27xxx_reg_cache {
50-
int temperature;
5150
int time_to_empty;
5251
int time_to_empty_avg;
5352
int time_to_full;

0 commit comments

Comments
 (0)