diff options
-rw-r--r-- | board/falco/backlight.c | 89 | ||||
-rw-r--r-- | board/falco/board.h | 1 | ||||
-rw-r--r-- | board/falco/build.mk | 2 |
3 files changed, 90 insertions, 2 deletions
diff --git a/board/falco/backlight.c b/board/falco/backlight.c new file mode 100644 index 0000000000..a1d0b44b0f --- /dev/null +++ b/board/falco/backlight.c @@ -0,0 +1,89 @@ +/* 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. + */ + +#include "common.h" +#include "gpio.h" +#include "hooks.h" +#include "host_command.h" +#include "lid_switch.h" + +/* + * Falco needs a 420ms delay for a 0->1 transition of the PCH's backlight + * enable signal. The reason is that Falco has a LVDS bridge which controls + * all the other signals for the panel except the backlight. In order to + * meet the penel power sequencing requirements a delay needs to be added. + */ + +#define BL_ENABLE_DELAY_US 420000 /* 420 ms delay */ + +static int backlight_deferred_value; + +static void set_backlight_value(void) +{ + gpio_set_level(GPIO_ENABLE_BACKLIGHT, backlight_deferred_value); +} +DECLARE_DEFERRED(set_backlight_value); + +/** + * Update backlight state. + */ +static void update_backlight(void) +{ + int pch_value; + + pch_value = gpio_get_level(GPIO_PCH_BKLTEN); + + /* Immediately disable the backlight when the lid is closed or the PCH + * is instructing the backlight to be disabled. */ + if (!lid_is_open() || !pch_value) { + /* If there was a scheduled callback pending make sure it picks + * up the disabled value. */ + backlight_deferred_value = 0; + gpio_set_level(GPIO_ENABLE_BACKLIGHT, 0); + /* Cancel pending hook */ + hook_call_deferred(&set_backlight_value, -1); + return; + } + /* Handle a 0->1 transition by calling a deferred hook. */ + if (pch_value && !backlight_deferred_value) { + backlight_deferred_value = 1; + hook_call_deferred(&set_backlight_value, BL_ENABLE_DELAY_US); + } +} +DECLARE_HOOK(HOOK_LID_CHANGE, update_backlight, HOOK_PRIO_DEFAULT); + +/** + * Initialize backlight module. + */ +static void backlight_init(void) +{ + /* Set initial deferred value and signal to the current PCH signal. */ + backlight_deferred_value = gpio_get_level(GPIO_PCH_BKLTEN); + set_backlight_value(); + + update_backlight(); + + gpio_enable_interrupt(GPIO_PCH_BKLTEN); +} +DECLARE_HOOK(HOOK_INIT, backlight_init, HOOK_PRIO_DEFAULT); + +void backlight_interrupt(enum gpio_signal signal) +{ + update_backlight(); +} + +/** + * Host command to toggle backlight. + */ +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, 0); + + diff --git a/board/falco/board.h b/board/falco/board.h index 2d0d6f2fdb..19136f7d26 100644 --- a/board/falco/board.h +++ b/board/falco/board.h @@ -9,7 +9,6 @@ #define __BOARD_H /* Optional features */ -#define CONFIG_BACKLIGHT_X86 #define CONFIG_BATTERY_SMART #define CONFIG_BOARD_VERSION #define CONFIG_CHARGER diff --git a/board/falco/build.mk b/board/falco/build.mk index 1843369ed4..b7f987e71f 100644 --- a/board/falco/build.mk +++ b/board/falco/build.mk @@ -9,4 +9,4 @@ # the IC is TI Stellaris LM4 CHIP:=lm4 -board-y=board.o +board-y=board.o backlight.o |