summaryrefslogtreecommitdiff
path: root/test/bklight_lid.c
diff options
context:
space:
mode:
authorRandall Spangler <rspangler@chromium.org>2013-09-27 09:11:48 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2013-09-27 23:07:21 +0000
commit84ba1881208aa0fe56e7775958d95a8fa78f93c4 (patch)
tree3a5059690586b13e18fa2f94dccb5e2f9b6df252 /test/bklight_lid.c
parent1e16031f75a9c84567b6bdb6fd5372234ac93fb3 (diff)
downloadchrome-ec-84ba1881208aa0fe56e7775958d95a8fa78f93c4.tar.gz
Support backlight control via lid only
The old backlight_x86 code did (backlight enable) = (lid is open) && (GPIO request from AP) Newer systems will AND those signals in hardware. Support those systems by separating CONFIG_BACKLIGHT_LID and CONFIG_BACKLIGHT_REQ_GPIO, and add tests for the case where the enable signal is dependent only on the lid position. BUG=chrome-os-partner:22960 BRANCH=none TEST=pass unit tests Change-Id: I1909426e49f00a8acd5047fd88c801cba1dacd76 Reviewed-on: https://chromium-review.googlesource.com/170925 Tested-by: Randall Spangler <rspangler@chromium.org> Reviewed-by: Bill Richardson <wfrichar@chromium.org> Commit-Queue: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'test/bklight_lid.c')
-rw-r--r--test/bklight_lid.c106
1 files changed, 106 insertions, 0 deletions
diff --git a/test/bklight_lid.c b/test/bklight_lid.c
new file mode 100644
index 0000000000..9cdd3741a2
--- /dev/null
+++ b/test/bklight_lid.c
@@ -0,0 +1,106 @@
+/* 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 backlight control based on lid
+ */
+
+#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 backlight_en;
+
+int gpio_get_level(enum gpio_signal signal)
+{
+ if (signal == GPIO_LID_OPEN)
+ return mock_lid;
+ 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);
+}
+
+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);
+ 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);
+
+ return EC_SUCCESS;
+}
+
+static int test_hostcommand(void)
+{
+ /* Open lid */
+ set_lid_state(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 */
+ set_lid_state(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();
+}