Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

bq27x00_battery: Cache temperature value in converted unit

parent a8f6bd23
Loading
Loading
Loading
Loading
+24 −21
Original line number Diff line number Diff line
@@ -247,6 +247,28 @@ static int bq27x00_battery_read_energy(struct bq27x00_device_info *di)
	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
 * Or < 0 if something fails.
@@ -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.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);

		/* We only have to read charge design full once */
@@ -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
 * Note that current can be negative signed as well
@@ -511,7 +514,7 @@ static int bq27x00_battery_get_property(struct power_supply *psy,
		ret = bq27x00_battery_capacity_level(di, val);
		break;
	case POWER_SUPPLY_PROP_TEMP:
		ret = bq27x00_battery_temperature(di, val);
		ret = bq27x00_simple_value(di->cache.temperature, val);
		break;
	case POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW:
		ret = bq27x00_simple_value(di->cache.time_to_empty, val);