diff options
author | Boris Mittelberg <bmbm@google.com> | 2023-02-14 17:57:59 -0800 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2023-02-17 18:59:05 +0000 |
commit | 6dcfdc7b10f44852c40b30564d596fe27c5249c8 (patch) | |
tree | f5eaca0a12973576e5602c1abafa3fa3afef748a | |
parent | 111ff65dbd498641a773ff77928595ccd0b58667 (diff) | |
download | chrome-ec-6dcfdc7b10f44852c40b30564d596fe27c5249c8.tar.gz |
i8042: return self-test status on reset
As described in PS/2 keyboard protocol spec, the reset command 0xff
is followed by diagnostic self-test, aka BAT. Along with the ACK
for reset command EC must return BAT status.
BRANCH=none
BUG=b:134366527
TEST=buildall; make run-kb_8042; depthcharge screen on brya
Change-Id: I5803d06b204d552c458ad443393f80072d41e40e
Signed-off-by: Boris Mittelberg <bmbm@google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4252007
Reviewed-by: Raul Rangel <rrangel@chromium.org>
Reviewed-by: CoolStar <coolstarorganization@gmail.com>
Tested-by: Raul Rangel <rrangel@chromium.org>
-rw-r--r-- | common/keyboard_8042.c | 1 | ||||
-rw-r--r-- | test/kb_8042.c | 17 |
2 files changed, 15 insertions, 3 deletions
diff --git a/common/keyboard_8042.c b/common/keyboard_8042.c index fc55628719..f3c454382b 100644 --- a/common/keyboard_8042.c +++ b/common/keyboard_8042.c @@ -735,6 +735,7 @@ static int handle_keyboard_data(uint8_t data, uint8_t *output) reset_rate_and_delay(); keyboard_clear_buffer(); output[out_len++] = ATKBD_RET_ACK; + output[out_len++] = ATKBD_RET_TEST_SUCCESS; break; case ATKBD_CMD_RESEND: diff --git a/test/kb_8042.c b/test/kb_8042.c index 0065319576..792b6ea0d5 100644 --- a/test/kb_8042.c +++ b/test/kb_8042.c @@ -184,14 +184,14 @@ static int _enable_keystroke(int enabled) #define ENABLE_KEYSTROKE(enabled) \ TEST_EQ(_enable_keystroke(enabled), EC_SUCCESS, "%d") -static int _reset_8042(void) +static int _reset_8042_def(void) { keyboard_host_write(ATKBD_CMD_RESET_DEF, 0); VERIFY_ATKBD_ACK(); return EC_SUCCESS; } -#define RESET_8042() TEST_EQ(_reset_8042(), EC_SUCCESS, "%d") +#define RESET_8042_DEF() TEST_EQ(_reset_8042_def(), EC_SUCCESS, "%d") static int _set_typematic(uint8_t val) { @@ -603,7 +603,7 @@ test_static int test_typematic(void) /* * 500ms delay, 10.9 chars / sec. */ - RESET_8042(); + RESET_8042_DEF(); press_key(1, 1, 1); VERIFY_LPC_CHAR_DELAY("\x01\x01\x01", 650); @@ -801,6 +801,16 @@ test_static int test_atkbd_set_ex_leds(void) return EC_SUCCESS; } +test_static int test_atkbd_reset(void) +{ + i8042_write_data(ATKBD_CMD_RESET); + VERIFY_ATKBD_ACK(); + /* Successful BAT self-test */ + VERIFY_LPC_CHAR("\xAA"); + + return EC_SUCCESS; +} + test_static int test_scancode_set2(void) { SET_SCANCODE(2); @@ -989,6 +999,7 @@ void run_test(int argc, const char **argv) RUN_TEST(test_atkbd_set_leds_keypress_during); RUN_TEST(test_atkbd_set_leds_abort_set); RUN_TEST(test_atkbd_set_ex_leds); + RUN_TEST(test_atkbd_reset); RUN_TEST(test_single_key_press); RUN_TEST(test_disable_keystroke); RUN_TEST(test_typematic); |