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

Commit 25f2bfa6 authored by Daniel Mack's avatar Daniel Mack Committed by Anton Vorontsov
Browse files

ds2760_battery: handle full_active_uAh == 0 case correctly



In systems where the battery monitor is not part of the battery pack and
is hence not bootstrapped with sane values, the full_active_uAh is
likely to be zero.

Handle that case by defaulting to the rated_capacity information which
can be passed to the driver using the new module parameter.

Signed-off-by: default avatarDaniel Mack <daniel@caiaq.de>
Cc: Szabolcs Gyurko <szabolcs.gyurko@tlt.hu>
Acked-by: default avatarMatt Reimer <mreimer@vpop.net>
Signed-off-by: default avatarAnton Vorontsov <cbouatmailru@gmail.com>
parent c1e72193
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -172,8 +172,13 @@ static int ds2760_battery_read_status(struct ds2760_device_info *di)
	di->full_active_uAh = di->raw[DS2760_ACTIVE_FULL] << 8 |
			      di->raw[DS2760_ACTIVE_FULL + 1];

	scale[0] = di->raw[DS2760_ACTIVE_FULL] << 8 |
		   di->raw[DS2760_ACTIVE_FULL + 1];
	/* If the full_active_uAh value is not given, fall back to the rated
	 * capacity. This is likely to happen when chips are not part of the
	 * battery pack and is therefore not bootstrapped. */
	if (di->full_active_uAh == 0)
		di->full_active_uAh = di->rated_capacity / 1000L;

	scale[0] = di->full_active_uAh;
	for (i = 1; i < 5; i++)
		scale[i] = scale[i - 1] + di->raw[DS2760_ACTIVE_FULL + 2 + i];