summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--board/spring/board.c6
-rw-r--r--board/spring/usb_charging.c12
-rw-r--r--common/pmu_tps65090.c18
-rw-r--r--include/pmu_tpschrome.h5
4 files changed, 27 insertions, 14 deletions
diff --git a/board/spring/board.c b/board/spring/board.c
index 8307dd9ab8..da74c966ee 100644
--- a/board/spring/board.c
+++ b/board/spring/board.c
@@ -345,8 +345,10 @@ static int power_command_info(struct host_cmd_handler_args *args)
struct ec_response_power_info *r = args->response;
r->voltage_ac = adc_read_channel(ADC_CH_USB_VBUS_SNS);
- r->voltage_system = pmu_adc_read(ADC_VAC) * 17000 / 1024;
- r->current_system = pmu_adc_read(ADC_IAC) * 20 * 33 / 1024;
+ r->voltage_system = pmu_adc_read(ADC_VAC, ADC_FLAG_KEEP_ON)
+ * 17000 / 1024;
+ r->current_system = pmu_adc_read(ADC_IAC, 0)
+ * 20 * 33 / 1024;
r->usb_dev_type = board_get_usb_dev_type();
r->usb_current_limit = board_get_usb_current_limit();
args->response_size = sizeof(*r);
diff --git a/board/spring/usb_charging.c b/board/spring/usb_charging.c
index a7f3e45728..ce864e1d9f 100644
--- a/board/spring/usb_charging.c
+++ b/board/spring/usb_charging.c
@@ -426,10 +426,14 @@ static int command_batdebug(int argc, char **argv)
{
int val;
ccprintf("VBUS = %d mV\n", adc_read_channel(ADC_CH_USB_VBUS_SNS));
- ccprintf("VAC = %d mV\n", pmu_adc_read(ADC_VAC) * 17000 / 1024);
- ccprintf("IAC = %d mA\n", pmu_adc_read(ADC_IAC) * 20 * 33 / 1024);
- ccprintf("VBAT = %d mV\n", pmu_adc_read(ADC_VBAT) * 17000 / 1024);
- ccprintf("IBAT = %d mA\n", pmu_adc_read(ADC_IBAT) * 50 * 40 / 1024);
+ ccprintf("VAC = %d mV\n", pmu_adc_read(ADC_VAC, ADC_FLAG_KEEP_ON)
+ * 17000 / 1024);
+ ccprintf("IAC = %d mA\n", pmu_adc_read(ADC_IAC, ADC_FLAG_KEEP_ON)
+ * 20 * 33 / 1024);
+ ccprintf("VBAT = %d mV\n", pmu_adc_read(ADC_VBAT, ADC_FLAG_KEEP_ON)
+ * 17000 / 1024);
+ ccprintf("IBAT = %d mA\n", pmu_adc_read(ADC_IBAT, 0)
+ * 50 * 40 / 1024);
ccprintf("PWM = %d%%\n", STM32_TIM_CCR1(3));
battery_current(&val);
ccprintf("Battery Current = %d mA\n", val);
diff --git a/common/pmu_tps65090.c b/common/pmu_tps65090.c
index f5f32b1d1c..b48fbe8f2d 100644
--- a/common/pmu_tps65090.c
+++ b/common/pmu_tps65090.c
@@ -406,7 +406,7 @@ int pmu_enable_fet(int fet_id, int enable, int *power_good)
return EC_SUCCESS;
}
-int pmu_adc_read(int adc_idx)
+int pmu_adc_read(int adc_idx, int flags)
{
int ctrl;
int val1, val2;
@@ -415,11 +415,14 @@ int pmu_adc_read(int adc_idx)
rv = pmu_read(AD_CTRL, &ctrl);
if (rv)
return rv;
- ctrl |= AD_CTRL_ENADREF;
- rv = pmu_write(AD_CTRL, ctrl);
- if (rv)
- return rv;
- msleep(20);
+ if (!(ctrl & AD_CTRL_ENADREF)) {
+ ctrl |= AD_CTRL_ENADREF;
+ rv = pmu_write(AD_CTRL, ctrl);
+ if (rv)
+ return rv;
+ /* wait for reference voltage stabilization */
+ msleep(10);
+ }
ctrl = (ctrl & ~0xf) | adc_idx;
rv = pmu_write(AD_CTRL, ctrl);
@@ -443,7 +446,8 @@ int pmu_adc_read(int adc_idx)
if (rv)
return rv;
- rv = pmu_write(AD_CTRL, ctrl & ~AD_CTRL_ENADREF);
+ if (!(flags & ADC_FLAG_KEEP_ON))
+ rv = pmu_write(AD_CTRL, ctrl & ~AD_CTRL_ENADREF);
return (val2 << 8) | val1;
}
diff --git a/include/pmu_tpschrome.h b/include/pmu_tpschrome.h
index 39985eea30..54da1bca57 100644
--- a/include/pmu_tpschrome.h
+++ b/include/pmu_tpschrome.h
@@ -89,6 +89,8 @@ enum FASTCHARGE_TIMEOUT {
#define ADC_IFET6 12
#define ADC_IFET7 13
+/* do not turn off voltage reference */
+#define ADC_FLAG_KEEP_ON 0x1
/**
* Clear tps65090 IRQ register
@@ -188,8 +190,9 @@ int pmu_low_current_charging(int enable);
* Read ADC channel
*
* @param adc_idx Index of ADC channel
+ * @param flags combination of ADC_FLAG_* constants
*/
-int pmu_adc_read(int adc_idx);
+int pmu_adc_read(int adc_idx, int flags);
/**
* Handles interrupts from tpschrome