diff options
author | Vic Yang <victoryang@chromium.org> | 2013-09-26 21:39:13 +0800 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2013-09-27 04:33:40 +0000 |
commit | 1e16031f75a9c84567b6bdb6fd5372234ac93fb3 (patch) | |
tree | 4d20372444afd65239188c48e6729c29ade63ff4 /test | |
parent | 1b1bf3f03f6921ebff1c500cae7959b11287ecd3 (diff) | |
download | chrome-ec-1e16031f75a9c84567b6bdb6fd5372234ac93fb3.tar.gz |
Add a test for x86 backlight passthrough
This checks x86 backlight passthrough by toggling lid switch and PCH
backlight output, and also by host command.
Also fix a bug that backlight switch host command can never be invoked
due to incorrect version mask.
BUG=chrome-os-partner:19236
TEST=util/make_all.sh
BRANCH=None (unless some platform needs backlight switch host command)
Change-Id: Iefc5f4b7387c4d2aa43059d073bd70aed879fe34
Signed-off-by: Vic Yang <victoryang@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/170758
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'test')
-rw-r--r-- | test/bklight_x86.c | 140 | ||||
-rw-r--r-- | test/bklight_x86.tasklist | 17 | ||||
-rw-r--r-- | test/build.mk | 2 | ||||
-rw-r--r-- | test/test_config.h | 4 |
4 files changed, 163 insertions, 0 deletions
diff --git a/test/bklight_x86.c b/test/bklight_x86.c new file mode 100644 index 0000000000..cf533912ae --- /dev/null +++ b/test/bklight_x86.c @@ -0,0 +1,140 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Test x86 backlight passthrough. + */ + +#include "backlight.h" +#include "common.h" +#include "console.h" +#include "hooks.h" +#include "host_command.h" +#include "lid_switch.h" +#include "test_util.h" +#include "timer.h" +#include "util.h" + +static int mock_lid = 1; +static int mock_pch_bklten; +static int backlight_en; + +int gpio_get_level(enum gpio_signal signal) +{ + if (signal == GPIO_LID_OPEN) + return mock_lid; + if (signal == GPIO_PCH_BKLTEN) + return mock_pch_bklten; + return 0; +} + +void gpio_set_level(enum gpio_signal signal, int level) +{ + if (signal == GPIO_ENABLE_BACKLIGHT) + backlight_en = level; +} + +void set_lid_state(int is_open) +{ + mock_lid = is_open; + lid_interrupt(GPIO_LID_OPEN); + msleep(40); +} + +void set_pch_bklten(int enabled) +{ + int orig = mock_pch_bklten; + mock_pch_bklten = enabled; + if (orig != enabled) + backlight_interrupt(GPIO_PCH_BKLTEN); +} + +static int send_bklight_hostcmd(int enabled) +{ + struct ec_params_switch_enable_backlight p; + p.enabled = enabled; + + return test_send_host_command(EC_CMD_SWITCH_ENABLE_BKLIGHT, 0, &p, + sizeof(p), NULL, 0); +} + +static int test_passthrough(void) +{ + /* Initial state */ + TEST_ASSERT(mock_lid == 1 && mock_pch_bklten == 0); + TEST_ASSERT(!backlight_en); + + /* Enable backlight */ + set_pch_bklten(1); + TEST_ASSERT(backlight_en); + + /* Disable backlight */ + set_pch_bklten(0); + TEST_ASSERT(!backlight_en); + + /* Enable backlight again */ + set_pch_bklten(1); + TEST_ASSERT(backlight_en); + + /* Close lid. Backlight should turn off */ + set_lid_state(0); + TEST_ASSERT(!backlight_en); + + /* Open lid. Backlight turns on */ + set_lid_state(1); + TEST_ASSERT(backlight_en); + + /* Close lid and disable backlight */ + set_lid_state(0); + set_pch_bklten(0); + TEST_ASSERT(!backlight_en); + + /* Open lid now. Backlight stays off */ + set_lid_state(1); + TEST_ASSERT(!backlight_en); + + return EC_SUCCESS; +} + +static int test_hostcommand(void) +{ + /* Open lid and enable backlight */ + set_lid_state(1); + set_pch_bklten(1); + TEST_ASSERT(backlight_en); + + /* Disable by host command */ + send_bklight_hostcmd(0); + TEST_ASSERT(!backlight_en); + + /* Close and open lid. Backlight should come up */ + set_lid_state(0); + set_lid_state(1); + TEST_ASSERT(backlight_en); + + /* Close lid and disable backlight */ + set_lid_state(0); + set_pch_bklten(0); + TEST_ASSERT(!backlight_en); + + /* Enable by host command */ + send_bklight_hostcmd(1); + TEST_ASSERT(backlight_en); + + /* Disable backlight by lid */ + set_lid_state(1); + set_lid_state(0); + TEST_ASSERT(!backlight_en); + + return EC_SUCCESS; +} + +void run_test(void) +{ + test_reset(); + + RUN_TEST(test_passthrough); + RUN_TEST(test_hostcommand); + + test_print_result(); +} diff --git a/test/bklight_x86.tasklist b/test/bklight_x86.tasklist new file mode 100644 index 0000000000..26cfc53453 --- /dev/null +++ b/test/bklight_x86.tasklist @@ -0,0 +1,17 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/** + * List of enabled tasks in the priority order + * + * The first one has the lowest priority. + * + * For each task, use the macro TASK_TEST(n, r, d, s) where : + * 'n' in the name of the task + * 'r' in the main routine of the task + * 'd' in an opaque parameter passed to the routine at startup + * 's' is the stack size in bytes; must be a multiple of 8 + */ +#define CONFIG_TEST_TASK_LIST /* No test task */ diff --git a/test/build.mk b/test/build.mk index 8c1ede35b6..af3807a84a 100644 --- a/test/build.mk +++ b/test/build.mk @@ -30,8 +30,10 @@ test-list-$(BOARD_bolt)= test-list-host=mutex pingpong utils kb_scan kb_mkbp lid_sw power_button hooks test-list-host+=thermal flash queue kb_8042 extpwr_gpio console_edit system test-list-host+=sbs_charging adapter host_command thermal_falco led_lp5562 +test-list-host+=bklight_x86 adapter-y=adapter.o +bklight_x86-y=bklight_x86.o console_edit-y=console_edit.o extpwr_gpio-y=extpwr_gpio.o flash-y=flash.o diff --git a/test/test_config.h b/test/test_config.h index e848f94af0..bf47205d9b 100644 --- a/test/test_config.h +++ b/test/test_config.h @@ -13,6 +13,10 @@ #define CONFIG_EXTPOWER_FALCO #endif +#ifdef TEST_bklight_x86 +#define CONFIG_BACKLIGHT_X86 +#endif + #ifdef TEST_kb_8042 #undef CONFIG_KEYBOARD_PROTOCOL_MKBP #define CONFIG_KEYBOARD_PROTOCOL_8042 |