Skip to content

Commit dc6ce56

Browse files
tititiou36sre
authored andcommitted
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: Christophe JAILLET <[email protected]> Reviewed-by: Jonathan Cameron <[email protected]> Reviewed-by: Linus Walleij <[email protected]> Link: https://lore.kernel.org/r/5668d73b92eb6318c7f094a9a8fa914c909485ca.1719037737.git.christophe.jaillet@wanadoo.fr Signed-off-by: Sebastian Reichel <[email protected]>
1 parent 3288757 commit dc6ce56

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

drivers/power/supply/ab8500_charger.c

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -487,16 +487,17 @@ static int ab8500_charger_get_ac_voltage(struct ab8500_charger *di)
487487

488488
/* Only measure voltage if the charger is connected */
489489
if (di->ac.charger_connected) {
490-
ret = iio_read_channel_processed(di->adc_main_charger_v, &vch);
490+
/* Convert to microvolt, IIO returns millivolt */
491+
ret = iio_read_channel_processed_scale(di->adc_main_charger_v,
492+
&vch, 1000);
491493
if (ret < 0) {
492494
dev_err(di->dev, "%s ADC conv failed,\n", __func__);
493495
return ret;
494496
}
495497
} else {
496498
vch = 0;
497499
}
498-
/* Convert to microvolt, IIO returns millivolt */
499-
return vch * 1000;
500+
return vch;
500501
}
501502

502503
/**
@@ -541,16 +542,17 @@ static int ab8500_charger_get_vbus_voltage(struct ab8500_charger *di)
541542

542543
/* Only measure voltage if the charger is connected */
543544
if (di->usb.charger_connected) {
544-
ret = iio_read_channel_processed(di->adc_vbus_v, &vch);
545+
/* Convert to microvolt, IIO returns millivolt */
546+
ret = iio_read_channel_processed_scale(di->adc_vbus_v,
547+
&vch, 1000);
545548
if (ret < 0) {
546549
dev_err(di->dev, "%s ADC conv failed,\n", __func__);
547550
return ret;
548551
}
549552
} else {
550553
vch = 0;
551554
}
552-
/* Convert to microvolt, IIO returns millivolt */
553-
return vch * 1000;
555+
return vch;
554556
}
555557

556558
/**
@@ -566,16 +568,17 @@ static int ab8500_charger_get_usb_current(struct ab8500_charger *di)
566568

567569
/* Only measure current if the charger is online */
568570
if (di->usb.charger_online) {
569-
ret = iio_read_channel_processed(di->adc_usb_charger_c, &ich);
571+
/* Return microamperes */
572+
ret = iio_read_channel_processed_scale(di->adc_usb_charger_c,
573+
&ich, 1000);
570574
if (ret < 0) {
571575
dev_err(di->dev, "%s ADC conv failed,\n", __func__);
572576
return ret;
573577
}
574578
} else {
575579
ich = 0;
576580
}
577-
/* Return microamperes */
578-
return ich * 1000;
581+
return ich;
579582
}
580583

581584
/**
@@ -591,16 +594,17 @@ static int ab8500_charger_get_ac_current(struct ab8500_charger *di)
591594

592595
/* Only measure current if the charger is online */
593596
if (di->ac.charger_online) {
594-
ret = iio_read_channel_processed(di->adc_main_charger_c, &ich);
597+
/* Return microamperes */
598+
ret = iio_read_channel_processed_scale(di->adc_main_charger_c,
599+
&ich, 1000);
595600
if (ret < 0) {
596601
dev_err(di->dev, "%s ADC conv failed,\n", __func__);
597602
return ret;
598603
}
599604
} else {
600605
ich = 0;
601606
}
602-
/* Return microamperes */
603-
return ich * 1000;
607+
return ich;
604608
}
605609

606610
/**

0 commit comments

Comments
 (0)