Re: [RFC PATCH 4/7] power: supply: axp20x-battery: support AXP803
From: Quentin Schulz <hidden>
Date: 2017-09-25 08:59:01
Also in:
linux-arm-kernel, linux-iio, linux-pm, lkml
Hi Icenowy, On 20/09/2017 17:18, Icenowy Zheng wrote:
quoted hunk ↗ jump to hunk
The AXP803 PMIC has battery support like other AXP PMICs, but with different definition of max target charging voltage and constant charging current. Add support for AXP803 battery in axp20x-battery driver. Signed-off-by: Icenowy Zheng <redacted> --- drivers/power/supply/axp20x_battery.c | 88 +++++++++++++++++++++++++++++++---- 1 file changed, 78 insertions(+), 10 deletions(-)diff --git a/drivers/power/supply/axp20x_battery.c b/drivers/power/supply/axp20x_battery.c index 7494f0f0eadb..c9a9fb320c92 100644 --- a/drivers/power/supply/axp20x_battery.c +++ b/drivers/power/supply/axp20x_battery.c@@ -49,6 +49,8 @@
[...]
static void constant_charge_current_to_raw(struct axp20x_batt_ps *axp, int *val)
{
- if (axp->axp_id == AXP209_ID)
+ switch (axp->axp_id) {
+ case AXP209_ID:
*val = (*val - 300000) / 100000;
- else
+ break;
+ case AXP221_ID:
*val = (*val - 300000) / 150000;
+ break;
+ case AXP803_ID:
+ *val = (*val - 200000) / 200000;
+ /*
+ * The maximum charge current on AXP803 is 2.8A, and the
+ * datasheet says "1110-1111 reserved" in this part.
+ * So we return an invalid value -1 in this situation,
+ * which will be dealed by the caller of this function,
+ */Good, we could do that for the two others compatible as well. They are not explicitly marked as reserved but it stops at 1100 for AXP223/AXP221 for example.
quoted hunk ↗ jump to hunk
+ if (*val > 13) + *val = -1; + break; + } } static int axp20x_get_constant_charge_current(struct axp20x_batt_ps *axp,@@ -269,9 +322,13 @@ static int axp20x_battery_get_prop(struct power_supply *psy, if (ret) return ret; - if (axp20x_batt->axp_id == AXP221_ID && - !(reg & AXP22X_FG_VALID)) - return -EINVAL; + switch (axp20x_batt->axp_id) { + case AXP221_ID: + case AXP803_ID: + if (!(reg & AXP22X_FG_VALID)) + return -EINVAL; + break; + };
Looks weird to me. if (axp20x_batt->axp_id != AXP209_ID && !(reg & AXP22X_FG_VALID)) would be a better match? [...] Thanks, Quentin -- Quentin Schulz, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com