diff options
-rw-r--r-- | board/llama/gpio.inc | 1 | ||||
-rw-r--r-- | power/mediatek.c | 36 |
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) { |