mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-12-27 18:25:05 +00:00
keep ADC reference voltage on between successive reads
To decrease the amount of time needed for PMU ADC reads, add the option to keep the ADC reference voltage enable as its stabilization time is the longest pole. Also set the stabilization time to 10ms as the max defined in the datasheet. Signed-off-by: Vincent Palatin <vpalatin@chromium.org> BRANCH=none BUG=chrome-os-partner:17997 TEST=on Spring, measure EC_CMD_POWER_INFO latency and see it going from 49ms to 18ms. Change-Id: I7ed20bcddab165250108eb9f768539b19fa251de Reviewed-on: https://gerrit.chromium.org/gerrit/44008 Reviewed-by: Vic Yang <victoryang@chromium.org> Commit-Queue: Vincent Palatin <vpalatin@chromium.org> Tested-by: Vincent Palatin <vpalatin@chromium.org>
This commit is contained in:
committed by
ChromeBot
parent
10f34bf8a9
commit
2cf4d02acd
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user