summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVic Yang <victoryang@chromium.org>2013-09-26 21:39:13 +0800
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2013-09-27 04:33:40 +0000
commit1e16031f75a9c84567b6bdb6fd5372234ac93fb3 (patch)
tree4d20372444afd65239188c48e6729c29ade63ff4
parent1b1bf3f03f6921ebff1c500cae7959b11287ecd3 (diff)
downloadchrome-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>
-rw-r--r--board/host/board.c2
-rw-r--r--board/host/board.h2
-rw-r--r--common/backlight_x86.c3
-rw-r--r--test/bklight_x86.c140
-rw-r--r--test/bklight_x86.tasklist17
-rw-r--r--test/build.mk2
-rw-r--r--test/test_config.h4
7 files changed, 169 insertions, 1 deletions
diff --git a/board/host/board.c b/board/host/board.c
index cb1ac26577..c48a1d3c44 100644
--- a/board/host/board.c
+++ b/board/host/board.c
@@ -17,6 +17,8 @@ const struct gpio_info gpio_list[] = {
MOCK_GPIO(WP),
MOCK_GPIO(ENTERING_RW),
MOCK_GPIO(AC_PRESENT),
+ MOCK_GPIO(PCH_BKLTEN),
+ MOCK_GPIO(ENABLE_BACKLIGHT),
};
BUILD_ASSERT(ARRAY_SIZE(gpio_list) == GPIO_COUNT);
diff --git a/board/host/board.h b/board/host/board.h
index 9eed6678b5..6db70771ff 100644
--- a/board/host/board.h
+++ b/board/host/board.h
@@ -35,6 +35,8 @@ enum gpio_signal {
GPIO_WP,
GPIO_ENTERING_RW,
GPIO_AC_PRESENT,
+ GPIO_PCH_BKLTEN,
+ GPIO_ENABLE_BACKLIGHT,
GPIO_COUNT
};
diff --git a/common/backlight_x86.c b/common/backlight_x86.c
index 83e9aeab04..9c3b4d0ae3 100644
--- a/common/backlight_x86.c
+++ b/common/backlight_x86.c
@@ -50,6 +50,7 @@ static int switch_command_enable_backlight(struct host_cmd_handler_args *args)
return EC_RES_SUCCESS;
}
DECLARE_HOST_COMMAND(EC_CMD_SWITCH_ENABLE_BKLIGHT,
- switch_command_enable_backlight, 0);
+ switch_command_enable_backlight,
+ EC_VER_MASK(0));
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