diff options
author | Shawn Nematbakhsh <shawnn@chromium.org> | 2016-08-20 14:25:59 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-08-22 14:52:32 -0700 |
commit | 383ee4260b8d113da63df1be95ef98a8f6809c56 (patch) | |
tree | c934cb3030401b64eac5c46e072ddce2ba9e34d5 | |
parent | 9a59b5ea9cd00a6221dd55a83d2b0a51f7ef94da (diff) | |
download | chrome-ec-383ee4260b8d113da63df1be95ef98a8f6809c56.tar.gz |
kevin: Save and restore display backlight PWM duty across sysjump
Display backlight going down for an extended period of time is
a major user annoyance, so save the duty prior to sysjump and restore it
upon init.
BUG=chrome-os-partner:56390
BRANCH=None
TEST=On kevin, run "sysjump rw" from recovery screen, verify backlight
goes black for a fraction of a second and comes back to previous level.
Change-Id: I98f12ace9b933874ba9088a790b9efa0941050ed
Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/373621
Commit-Ready: Shawn N <shawnn@chromium.org>
Tested-by: Shawn N <shawnn@chromium.org>
Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
-rw-r--r-- | board/kevin/board.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/board/kevin/board.c b/board/kevin/board.c index c85a0840c4..b7c48925fe 100644 --- a/board/kevin/board.c +++ b/board/kevin/board.c @@ -36,6 +36,7 @@ #include "shi_chip.h" #include "spi.h" #include "switch.h" +#include "system.h" #include "task.h" #include "tcpm.h" #include "timer.h" @@ -614,3 +615,27 @@ static void usb_charge_shutdown(void) } DECLARE_HOOK(HOOK_CHIPSET_SHUTDOWN, usb_charge_shutdown, HOOK_PRIO_DEFAULT); #endif + +#define PWM_DISPLIGHT_SYSJUMP_TAG 0x5044 /* "PD" */ +#define PWM_HOOK_VERSION 1 + +static void pwm_displight_restore_state(void) +{ + const int *prev; + int version, size; + + prev = (const int *)system_get_jump_tag(PWM_DISPLIGHT_SYSJUMP_TAG, + &version, &size); + if (prev && version == PWM_HOOK_VERSION && size == sizeof(*prev)) + pwm_set_duty(PWM_CH_DISPLIGHT, *prev); +} +DECLARE_HOOK(HOOK_INIT, pwm_displight_restore_state, HOOK_PRIO_INIT_PWM + 1); + +static void pwm_displight_preserve_state(void) +{ + int pwm_displight_duty = pwm_get_duty(PWM_CH_DISPLIGHT); + + system_add_jump_tag(PWM_DISPLIGHT_SYSJUMP_TAG, PWM_HOOK_VERSION, + sizeof(pwm_displight_duty), &pwm_displight_duty); +} +DECLARE_HOOK(HOOK_SYSJUMP, pwm_displight_preserve_state, HOOK_PRIO_DEFAULT); |