Commit d149e98e authored by Pali Rohár's avatar Pali Rohár Committed by Anton Vorontsov

bq27x00_battery: Cache temperature value in converted unit

Signed-off-by: default avatarPali Rohár <pali.rohar@gmail.com>
Signed-off-by: default avatarAnton Vorontsov <cbouatmailru@gmail.com>
parent a8f6bd23
...@@ -247,6 +247,28 @@ static int bq27x00_battery_read_energy(struct bq27x00_device_info *di) ...@@ -247,6 +247,28 @@ static int bq27x00_battery_read_energy(struct bq27x00_device_info *di)
return ae; return ae;
} }
/*
* Return the battery temperature in tenths of degree Celsius
* Or < 0 if something fails.
*/
static int bq27x00_battery_read_temperature(struct bq27x00_device_info *di)
{
int temp;
temp = bq27x00_read(di, BQ27x00_REG_TEMP, false);
if (temp < 0) {
dev_err(di->dev, "error reading temperature\n");
return temp;
}
if (di->chip == BQ27500)
temp -= 2731;
else
temp = ((temp * 5) - 5463) / 2;
return temp;
}
/* /*
* Return the battery Cycle count total * Return the battery Cycle count total
* Or < 0 if something fails. * Or < 0 if something fails.
...@@ -304,7 +326,7 @@ static void bq27x00_update(struct bq27x00_device_info *di) ...@@ -304,7 +326,7 @@ static void bq27x00_update(struct bq27x00_device_info *di)
cache.time_to_full = bq27x00_battery_read_time(di, BQ27x00_REG_TTF); cache.time_to_full = bq27x00_battery_read_time(di, BQ27x00_REG_TTF);
cache.charge_full = bq27x00_battery_read_lmd(di); cache.charge_full = bq27x00_battery_read_lmd(di);
} }
cache.temperature = bq27x00_read(di, BQ27x00_REG_TEMP, false); cache.temperature = bq27x00_battery_read_temperature(di);
cache.cycle_count = bq27x00_battery_read_cyct(di); cache.cycle_count = bq27x00_battery_read_cyct(di);
/* We only have to read charge design full once */ /* We only have to read charge design full once */
...@@ -334,25 +356,6 @@ static void bq27x00_battery_poll(struct work_struct *work) ...@@ -334,25 +356,6 @@ static void bq27x00_battery_poll(struct work_struct *work)
} }
} }
/*
* Return the battery temperature in tenths of degree Celsius
* Or < 0 if something fails.
*/
static int bq27x00_battery_temperature(struct bq27x00_device_info *di,
union power_supply_propval *val)
{
if (di->cache.temperature < 0)
return di->cache.temperature;
if (di->chip == BQ27500)
val->intval = di->cache.temperature - 2731;
else
val->intval = ((di->cache.temperature * 5) - 5463) / 2;
return 0;
}
/* /*
* Return the battery average current in µA * Return the battery average current in µA
* Note that current can be negative signed as well * Note that current can be negative signed as well
...@@ -511,7 +514,7 @@ static int bq27x00_battery_get_property(struct power_supply *psy, ...@@ -511,7 +514,7 @@ static int bq27x00_battery_get_property(struct power_supply *psy,
ret = bq27x00_battery_capacity_level(di, val); ret = bq27x00_battery_capacity_level(di, val);
break; break;
case POWER_SUPPLY_PROP_TEMP: case POWER_SUPPLY_PROP_TEMP:
ret = bq27x00_battery_temperature(di, val); ret = bq27x00_simple_value(di->cache.temperature, val);
break; break;
case POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW: case POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW:
ret = bq27x00_simple_value(di->cache.time_to_empty, val); ret = bq27x00_simple_value(di->cache.time_to_empty, val);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment