lkml.org 
[lkml]   [2022]   [Apr]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 381/475] power: supply: axp20x_battery: properly report current when discharging
    Date
    From: Evgeny Boger <boger@wirenboard.com>

    [ Upstream commit d4f408cdcd26921c1268cb8dcbe8ffb6faf837f3 ]

    As stated in [1], negative current values are used for discharging
    batteries.

    AXP PMICs internally have two different ADC channels for shunt current
    measurement: one used during charging and one during discharging.
    The values reported by these ADCs are unsigned.
    While the driver properly selects ADC channel to get the data from,
    it doesn't apply negative sign when reporting discharging current.

    [1] Documentation/ABI/testing/sysfs-class-power

    Signed-off-by: Evgeny Boger <boger@wirenboard.com>
    Acked-by: Chen-Yu Tsai <wens@csie.org>
    Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/power/supply/axp20x_battery.c | 13 ++++++-------
    1 file changed, 6 insertions(+), 7 deletions(-)

    diff --git a/drivers/power/supply/axp20x_battery.c b/drivers/power/supply/axp20x_battery.c
    index e84b6e4da14a..9fda98b950ba 100644
    --- a/drivers/power/supply/axp20x_battery.c
    +++ b/drivers/power/supply/axp20x_battery.c
    @@ -185,7 +185,6 @@ static int axp20x_battery_get_prop(struct power_supply *psy,
    union power_supply_propval *val)
    {
    struct axp20x_batt_ps *axp20x_batt = power_supply_get_drvdata(psy);
    - struct iio_channel *chan;
    int ret = 0, reg, val1;

    switch (psp) {
    @@ -265,12 +264,12 @@ static int axp20x_battery_get_prop(struct power_supply *psy,
    if (ret)
    return ret;

    - if (reg & AXP20X_PWR_STATUS_BAT_CHARGING)
    - chan = axp20x_batt->batt_chrg_i;
    - else
    - chan = axp20x_batt->batt_dischrg_i;
    -
    - ret = iio_read_channel_processed(chan, &val->intval);
    + if (reg & AXP20X_PWR_STATUS_BAT_CHARGING) {
    + ret = iio_read_channel_processed(axp20x_batt->batt_chrg_i, &val->intval);
    + } else {
    + ret = iio_read_channel_processed(axp20x_batt->batt_dischrg_i, &val1);
    + val->intval = -val1;
    + }
    if (ret)
    return ret;

    --
    2.35.1


    \
     
     \ /
      Last update: 2022-04-14 17:33    [W:4.241 / U:0.216 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site