summaryrefslogtreecommitdiff
path: root/common/backlight_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 /common/backlight_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 'common/backlight_lid.c')
-rw-r--r--common/backlight_lid.c71
1 files changed, 71 insertions, 0 deletions
diff --git a/common/backlight_lid.c b/common/backlight_lid.c
new file mode 100644
index 0000000000..30b8b75eb7
--- /dev/null
+++ b/common/backlight_lid.c
@@ -0,0 +1,71 @@
+/* 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.
+ */
+
+/* Backlight control based on lid and optional request signal from AP */
+
+#include "common.h"
+#include "gpio.h"
+#include "hooks.h"
+#include "host_command.h"
+#include "lid_switch.h"
+
+/**
+ * Update backlight state.
+ */
+static void update_backlight(void)
+{
+#ifdef CONFIG_BACKLIGHT_REQ_GPIO
+ /* Enable the backlight if lid is open AND requested by AP */
+ gpio_set_level(GPIO_ENABLE_BACKLIGHT, lid_is_open() &&
+ gpio_get_level(CONFIG_BACKLIGHT_REQ_GPIO));
+#else
+ /*
+ * Enable backlight if lid is open; this is AND'd with the request from
+ * the AP in hardware.
+ */
+ gpio_set_level(GPIO_ENABLE_BACKLIGHT, lid_is_open());
+#endif
+}
+DECLARE_HOOK(HOOK_LID_CHANGE, update_backlight, HOOK_PRIO_DEFAULT);
+
+/**
+ * Initialize backlight module.
+ */
+static void backlight_init(void)
+{
+ update_backlight();
+
+#ifdef CONFIG_BACKLIGHT_REQ_GPIO
+ gpio_enable_interrupt(CONFIG_BACKLIGHT_REQ_GPIO);
+#endif
+}
+DECLARE_HOOK(HOOK_INIT, backlight_init, HOOK_PRIO_DEFAULT);
+
+#ifdef CONFIG_BACKLIGHT_REQ_GPIO
+void backlight_interrupt(enum gpio_signal signal)
+{
+ update_backlight();
+}
+#endif
+
+/**
+ * Host command to toggle backlight.
+ *
+ * The requested state will persist until the next lid-switch or request-gpio
+ * transition.
+ */
+static int switch_command_enable_backlight(struct host_cmd_handler_args *args)
+{
+ const struct ec_params_switch_enable_backlight *p = args->params;
+
+ gpio_set_level(GPIO_ENABLE_BACKLIGHT, p->enabled);
+
+ return EC_RES_SUCCESS;
+}
+DECLARE_HOST_COMMAND(EC_CMD_SWITCH_ENABLE_BKLIGHT,
+ switch_command_enable_backlight,
+ EC_VER_MASK(0));
+
+