Commit dc6ce568 authored by Christophe JAILLET's avatar Christophe JAILLET Committed by Sebastian Reichel

power: supply: ab8500: Use iio_read_channel_processed_scale()

Instead of rescaling current or voltage channels after the fact, use the
dedicated scaling API. This should reduce any inaccuracies resulting from
the scaling.

This is also slightly more efficient as it saves a function call and a
multiplication.
Signed-off-by: default avatarChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Reviewed-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/5668d73b92eb6318c7f094a9a8fa914c909485ca.1719037737.git.christophe.jaillet@wanadoo.frSigned-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
parent 32887570
......@@ -487,7 +487,9 @@ static int ab8500_charger_get_ac_voltage(struct ab8500_charger *di)
/* Only measure voltage if the charger is connected */
if (di->ac.charger_connected) {
ret = iio_read_channel_processed(di->adc_main_charger_v, &vch);
/* Convert to microvolt, IIO returns millivolt */
ret = iio_read_channel_processed_scale(di->adc_main_charger_v,
&vch, 1000);
if (ret < 0) {
dev_err(di->dev, "%s ADC conv failed,\n", __func__);
return ret;
......@@ -495,8 +497,7 @@ static int ab8500_charger_get_ac_voltage(struct ab8500_charger *di)
} else {
vch = 0;
}
/* Convert to microvolt, IIO returns millivolt */
return vch * 1000;
return vch;
}
/**
......@@ -541,7 +542,9 @@ static int ab8500_charger_get_vbus_voltage(struct ab8500_charger *di)
/* Only measure voltage if the charger is connected */
if (di->usb.charger_connected) {
ret = iio_read_channel_processed(di->adc_vbus_v, &vch);
/* Convert to microvolt, IIO returns millivolt */
ret = iio_read_channel_processed_scale(di->adc_vbus_v,
&vch, 1000);
if (ret < 0) {
dev_err(di->dev, "%s ADC conv failed,\n", __func__);
return ret;
......@@ -549,8 +552,7 @@ static int ab8500_charger_get_vbus_voltage(struct ab8500_charger *di)
} else {
vch = 0;
}
/* Convert to microvolt, IIO returns millivolt */
return vch * 1000;
return vch;
}
/**
......@@ -566,7 +568,9 @@ static int ab8500_charger_get_usb_current(struct ab8500_charger *di)
/* Only measure current if the charger is online */
if (di->usb.charger_online) {
ret = iio_read_channel_processed(di->adc_usb_charger_c, &ich);
/* Return microamperes */
ret = iio_read_channel_processed_scale(di->adc_usb_charger_c,
&ich, 1000);
if (ret < 0) {
dev_err(di->dev, "%s ADC conv failed,\n", __func__);
return ret;
......@@ -574,8 +578,7 @@ static int ab8500_charger_get_usb_current(struct ab8500_charger *di)
} else {
ich = 0;
}
/* Return microamperes */
return ich * 1000;
return ich;
}
/**
......@@ -591,7 +594,9 @@ static int ab8500_charger_get_ac_current(struct ab8500_charger *di)
/* Only measure current if the charger is online */
if (di->ac.charger_online) {
ret = iio_read_channel_processed(di->adc_main_charger_c, &ich);
/* Return microamperes */
ret = iio_read_channel_processed_scale(di->adc_main_charger_c,
&ich, 1000);
if (ret < 0) {
dev_err(di->dev, "%s ADC conv failed,\n", __func__);
return ret;
......@@ -599,8 +604,7 @@ static int ab8500_charger_get_ac_current(struct ab8500_charger *di)
} else {
ich = 0;
}
/* Return microamperes */
return ich * 1000;
return ich;
}
/**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment