summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--board/llama/gpio.inc1
-rw-r--r--power/mediatek.c36
2 files changed, 35 insertions, 2 deletions
diff --git a/board/llama/gpio.inc b/board/llama/gpio.inc
index 795c870143..0ad76346c7 100644
--- a/board/llama/gpio.inc
+++ b/board/llama/gpio.inc
@@ -32,6 +32,7 @@ GPIO(KB_IN07, D, 2, GPIO_KB_INPUT, keyboard_raw_gpio_interrupt)
/* Outputs */
GPIO(BAT_LED0, B, 11, GPIO_OUT_LOW, NULL) /* LED_GREEN */
GPIO(BAT_LED1, A, 11, GPIO_OUT_LOW, NULL) /* LED_ORANGE */
+GPIO(EC_BL_OVERRIDE, F, 1, GPIO_OUT_LOW, NULL)
GPIO(EC_INT, B, 9, GPIO_OUT_HIGH, NULL)
GPIO(ENTERING_RW, F, 0, GPIO_OUT_LOW, NULL)
GPIO(KB_OUT00, B, 0, GPIO_KB_OUTPUT, NULL)
diff --git a/power/mediatek.c b/power/mediatek.c
index 8515c27310..e4b54c59d9 100644
--- a/power/mediatek.c
+++ b/power/mediatek.c
@@ -140,6 +140,16 @@ enum power_on_event_t {
POWER_ON_EVENT_COUNT,
};
+/**
+ * Parameters of mtk_backlight_override().
+ */
+enum blacklight_override_t {
+ MTK_BACKLIGHT_FORCE_OFF,
+ MTK_BACKLIGHT_CONTROL_BY_SOC,
+
+ MTK_BACKLIGHT_OVERRIDE_COUNT,
+};
+
/* Forward declaration */
static void chipset_turn_off_power_rails(void);
@@ -261,8 +271,30 @@ static int check_for_power_off_event(void)
return POWER_OFF_CANCEL;
}
-static void llama_lid_event(void)
+/**
+ * Set the LCD backlight enable pin and override the signal from SoC.
+ *
+ * @param asserted MTK_BACKLIGHT_FORCE_OFF, force off the panel backlight
+ * MTK_BACKLIGHT_CONTROL_BY_SOC, leave the control to SOC
+ */
+static void mtk_backlight_override(enum blacklight_override_t asserted)
+{
+ /* Signal is active-low */
+ gpio_set_level(GPIO_EC_BL_OVERRIDE, !asserted);
+}
+
+static void mtk_lid_event(void)
{
+ enum blacklight_override_t bl_override;
+
+ /* Override the panel backlight enable signal from SoC,
+ * force the backlight off on lid close.
+ */
+ bl_override = lid_is_open() ?
+ MTK_BACKLIGHT_CONTROL_BY_SOC :
+ MTK_BACKLIGHT_FORCE_OFF;
+ mtk_backlight_override(bl_override);
+
/* Power task only cares about lid-open events */
if (!lid_is_open())
return;
@@ -270,7 +302,7 @@ static void llama_lid_event(void)
lid_opened = 1;
task_wake(TASK_ID_CHIPSET);
}
-DECLARE_HOOK(HOOK_LID_CHANGE, llama_lid_event, HOOK_PRIO_DEFAULT);
+DECLARE_HOOK(HOOK_LID_CHANGE, mtk_lid_event, HOOK_PRIO_DEFAULT);
enum power_state power_chipset_init(void)
{