diff options
-rw-r--r-- | board/spring/board.c | 6 | ||||
-rw-r--r-- | board/spring/usb_charging.c | 12 | ||||
-rw-r--r-- | common/pmu_tps65090.c | 18 | ||||
-rw-r--r-- | include/pmu_tpschrome.h | 5 |
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 |