summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenji Chen <kenji.chen@intel.com>2014-10-26 21:58:40 +0800
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-11-11 23:01:20 +0000
commite8088266227333a16785579613ce01f88c30596c (patch)
tree5ca20c33652c662511af9bad7e34558eb8c605a3
parent1ee2da7315a521b62f3ff7631857fdc0bb79eb23 (diff)
downloadchrome-ec-e8088266227333a16785579613ce01f88c30596c.tar.gz
CHERRY-PICK: EC:KBC: Wait until LPC host senses the IRQ and gets the character.
BRANCH=master BUG=chrome-os-partner:29139 TEST=Buiid an EC FW image and run on Rambi to test if key loss is improved and any side effect somes with this change. Need more test units to confirm this. Signed-off-by: Kenji Chen <kenji.chen@intel.com> Original-Change-Id: I2399e33d2ca3defe8cd9b1f94ab0af1db7f84635 Reviewed-on: https://chromium-review.googlesource.com/225557 Reviewed-by: Randall Spangler <rspangler@chromium.org> Reviewed-by: Mohammed Habibulla <moch@chromium.org> Change-Id: Ia7acdbaec729f8ddff9228ebabbee716c012ba53 Reviewed-on: https://chromium-review.googlesource.com/229108 Reviewed-by: Mohammed Habibulla <moch@chromium.org> Commit-Queue: Mohammed Habibulla <moch@chromium.org> Tested-by: Mohammed Habibulla <moch@chromium.org>
-rw-r--r--chip/lm4/lpc.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/chip/lm4/lpc.c b/chip/lm4/lpc.c
index 8f8c5434a4..6bab4fb761 100644
--- a/chip/lm4/lpc.c
+++ b/chip/lm4/lpc.c
@@ -92,11 +92,16 @@ static void keyboard_irq_assert(void)
* following falling edge, regardless of the line state before this
* function call.
*/
+ uint64_t tstop = get_time().val + MSEC;
gpio_set_level(CONFIG_KEYBOARD_IRQ_GPIO, 1);
udelay(4);
/* Generate a falling edge */
gpio_set_level(CONFIG_KEYBOARD_IRQ_GPIO, 0);
- udelay(4);
+ /* Wait for host senses the interrupt and gets the char. */
+ do {
+ if (get_time().val > tstop)
+ break;
+ } while (lpc_keyboard_has_char());
/* Set signal high, now that we've generated the edge */
gpio_set_level(CONFIG_KEYBOARD_IRQ_GPIO, 1);
}