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

Commit 3b542f08 authored by NeilBrown's avatar NeilBrown Committed by Sebastian Reichel
Browse files

twl4030_charger: split uA calculation into a function.



We will need this calculation in other places, so
create functions to map between register value and uA value.

Acked-by: default avatarPavel Machek <pavel@ucw.cz>
Signed-off-by: default avatarNeilBrown <neil@brown.name>
Signed-off-by: default avatarSebastian Reichel <sre@kernel.org>
parent 6e37ec8c
Loading
Loading
Loading
Loading
+35 −13
Original line number Diff line number Diff line
@@ -177,6 +177,40 @@ static int twl4030_is_battery_present(struct twl4030_bci *bci)
	return -ENODEV;
}

/*
 * TI provided formulas:
 * CGAIN == 0: ICHG = (BCIICHG * 1.7) / (2^10 - 1) - 0.85
 * CGAIN == 1: ICHG = (BCIICHG * 3.4) / (2^10 - 1) - 1.7
 * Here we use integer approximation of:
 * CGAIN == 0: val * 1.6618 - 0.85 * 1000
 * CGAIN == 1: (val * 1.6618 - 0.85 * 1000) * 2
 */
/*
 * convert twl register value for currents into uA
 */
static int regval2ua(int regval, bool cgain)
{
	if (cgain)
		return (regval * 16618 - 8500 * 1000) / 5;
	else
		return (regval * 16618 - 8500 * 1000) / 10;
}

/*
 * convert uA currents into twl register value
 */
static int ua2regval(int ua, bool cgain)
{
	int ret;
	if (cgain)
		ua /= 2;
	ret = (ua * 10 + 8500 * 1000) / 16618;
	/* rounding problems */
	if (ret < 512)
		ret = 512;
	return ret;
}

/*
 * Enable/Disable USB Charge functionality.
 */
@@ -366,14 +400,6 @@ static int twl4030_bci_usb_ncb(struct notifier_block *nb, unsigned long val,
	return NOTIFY_OK;
}

/*
 * TI provided formulas:
 * CGAIN == 0: ICHG = (BCIICHG * 1.7) / (2^10 - 1) - 0.85
 * CGAIN == 1: ICHG = (BCIICHG * 3.4) / (2^10 - 1) - 1.7
 * Here we use integer approximation of:
 * CGAIN == 0: val * 1.6618 - 0.85
 * CGAIN == 1: (val * 1.6618 - 0.85) * 2
 */
static int twl4030_charger_get_current(void)
{
	int curr;
@@ -388,11 +414,7 @@ static int twl4030_charger_get_current(void)
	if (ret)
		return ret;

	ret = (curr * 16618 - 850 * 10000) / 10;
	if (bcictl1 & TWL4030_CGAIN)
		ret *= 2;

	return ret;
	return regval2ua(curr, bcictl1 & TWL4030_CGAIN);
}

/*