diff options
author | Vic Yang <victoryang@chromium.org> | 2014-05-20 14:23:17 -0700 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-05-21 04:09:34 +0000 |
commit | 951ee9e37944b7f1eea9d9a7921727c663665fd6 (patch) | |
tree | 20c67b8b27af6556057b2c16a2c428f42d4417dc | |
parent | 7dd3ee4db371fb70c19a5b709985cd6b67f04906 (diff) | |
download | chrome-ec-951ee9e37944b7f1eea9d9a7921727c663665fd6.tar.gz |
Keyborg: fix ADC timing and increase sampling rate
This fixes a bug that PMSE_MRCR is changed too early. Also, with this
bug fixed, we can increase the sampling rate to 13.5 cycles/sample.
BUG=None
TEST=Check heat map
BRANCH=None
Change-Id: Id7dc34fd7975ca7153b96443b8d4d28f1557eec4
Signed-off-by: Vic Yang <victoryang@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/200651
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
-rw-r--r-- | board/keyborg/touch_scan.c | 10 | ||||
-rw-r--r-- | board/keyborg/touch_scan.h | 9 |
2 files changed, 9 insertions, 10 deletions
diff --git a/board/keyborg/touch_scan.c b/board/keyborg/touch_scan.c index 3b3a7a84f1..5cc3f25a05 100644 --- a/board/keyborg/touch_scan.c +++ b/board/keyborg/touch_scan.c @@ -91,12 +91,12 @@ static void start_adc_sample(int id, int wait_cycle) " bne 1b\n" :: "r"(wait_cycle / 3)); } -#if ADC_SMPL_CYCLE_2 < ADC_CONV_CYCLE_2 * 2 +#if ADC_SMPL_CYCLE_2 < ADC_QUNTZ_CYCLE_2 static uint16_t flush_adc(int id) { while (!(STM32_ADC_SR(id) & (1 << 1))) ; - return STM32_ADC_DR(id) & ADC_READ_MAX; + return STM32_ADC_DR(id); } #else #define flush_adc(x) STM32_ADC_DR(x) @@ -120,14 +120,14 @@ void scan_column(uint8_t *data) int i; STM32_PMSE_MRCR = mrcr_list[0]; - start_adc_sample(0, ADC_LONG_CPU_CYCLE); + start_adc_sample(0, ADC_SMPL_CPU_CYCLE); STM32_PMSE_MRCR = mrcr_list[1]; - start_adc_sample(1, ADC_LONG_CPU_CYCLE); + start_adc_sample(1, ADC_SMPL_CPU_CYCLE); for (i = 2; i < ROW_COUNT; ++i) { data[i - 2] = ADC_DATA_WINDOW(flush_adc(i & 1)); STM32_PMSE_MRCR = mrcr_list[i]; - start_adc_sample(i & 1, ADC_SHORT_CPU_CYCLE); + start_adc_sample(i & 1, ADC_SMPL_CPU_CYCLE); } while (!(STM32_ADC_SR(ROW_COUNT & 1) & (1 << 1))) diff --git a/board/keyborg/touch_scan.h b/board/keyborg/touch_scan.h index 022c2b7d3e..e3f694a1da 100644 --- a/board/keyborg/touch_scan.h +++ b/board/keyborg/touch_scan.h @@ -22,13 +22,12 @@ enum pin_type { #define THRESHOLD 35 /* ADC speed */ -#define ADC_SMPR_VAL 0x3 /* 28.5 cycles */ -#define ADC_SMPL_CYCLE_2 57 -#define ADC_CONV_CYCLE_2 25 +#define ADC_SMPR_VAL 0x2 /* 13.5 cycles */ +#define ADC_SMPL_CYCLE_2 27 +#define ADC_QUNTZ_CYCLE_2 25 /* Quantization always takes 12.5 cycles */ /* CPU clock is 4 times faster than ADC clock */ -#define ADC_LONG_CPU_CYCLE (ADC_SMPL_CYCLE_2 * 2) -#define ADC_SHORT_CPU_CYCLE ((ADC_SMPL_CYCLE_2 - ADC_CONV_CYCLE_2) * 2) +#define ADC_SMPL_CPU_CYCLE (ADC_SMPL_CYCLE_2 * 2) struct ts_pin { uint8_t port_id; /* GPIO_A = 0, GPIO_B = 1, ... */ |