summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVic Yang <victoryang@chromium.org>2014-05-20 14:23:17 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-05-21 04:09:34 +0000
commit951ee9e37944b7f1eea9d9a7921727c663665fd6 (patch)
tree20c67b8b27af6556057b2c16a2c428f42d4417dc
parent7dd3ee4db371fb70c19a5b709985cd6b67f04906 (diff)
downloadchrome-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.c10
-rw-r--r--board/keyborg/touch_scan.h9
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, ... */