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: Pavel Machek <pavel@ucw.cz> Signed-off-by: NeilBrown <neil@brown.name> Signed-off-by: Sebastian Reichel <sre@kernel.org>
This commit is contained in:
parent
6e37ec8c77
commit
3b542f089d
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue