提交 d4f408cd 编写于 作者: E Evgeny Boger 提交者: Sebastian Reichel

power: supply: axp20x_battery: properly report current when discharging

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: NEvgeny Boger <boger@wirenboard.com>
Acked-by: NChen-Yu Tsai <wens@csie.org>
Signed-off-by: NSebastian Reichel <sebastian.reichel@collabora.com>
上级 ba18dad0
...@@ -186,7 +186,6 @@ static int axp20x_battery_get_prop(struct power_supply *psy, ...@@ -186,7 +186,6 @@ static int axp20x_battery_get_prop(struct power_supply *psy,
union power_supply_propval *val) union power_supply_propval *val)
{ {
struct axp20x_batt_ps *axp20x_batt = power_supply_get_drvdata(psy); struct axp20x_batt_ps *axp20x_batt = power_supply_get_drvdata(psy);
struct iio_channel *chan;
int ret = 0, reg, val1; int ret = 0, reg, val1;
switch (psp) { switch (psp) {
...@@ -266,12 +265,12 @@ static int axp20x_battery_get_prop(struct power_supply *psy, ...@@ -266,12 +265,12 @@ static int axp20x_battery_get_prop(struct power_supply *psy,
if (ret) if (ret)
return ret; return ret;
if (reg & AXP20X_PWR_STATUS_BAT_CHARGING) if (reg & AXP20X_PWR_STATUS_BAT_CHARGING) {
chan = axp20x_batt->batt_chrg_i; ret = iio_read_channel_processed(axp20x_batt->batt_chrg_i, &val->intval);
else } else {
chan = axp20x_batt->batt_dischrg_i; ret = iio_read_channel_processed(axp20x_batt->batt_dischrg_i, &val1);
val->intval = -val1;
ret = iio_read_channel_processed(chan, &val->intval); }
if (ret) if (ret)
return ret; return ret;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册