intelblocks/pep: Add display on/off notifications

Add display on and off notifications which call mainboard hooks if
present. This allows to handle some board specific functions in user
absence or presence (when display goes off from inactivity or on from
activity).

TEST=Use Display on/off notification on Clevo NV41 to tell EC about
laptop inactivity. It is necessary to properly handle S0ix entry (stop
the fans and start blinking the power led).

Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com>
Signed-off-by: Michał Kopeć <michal.kopec@3mdeb.com>
Change-Id: Ie80f631ecffa74467ab6d6162e552ba977f7e3f4
Reviewed-on: https://review.coreboot.org/c/coreboot/+/62494
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Krystian Hebel <krystian.hebel@3mdeb.com>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
This commit is contained in:
Michał Żygowski 2022-02-22 12:36:32 +01:00 committed by Felix Held
parent 08c2217192
commit 2b87b506bc
1 changed files with 21 additions and 2 deletions

View File

@ -14,6 +14,7 @@
#define SYSTEM_POWER_MANAGEMENT_CID "PNP0D80" #define SYSTEM_POWER_MANAGEMENT_CID "PNP0D80"
#define EC_S0IX_HOOK "\\_SB.PCI0.LPCB.EC0.S0IX" #define EC_S0IX_HOOK "\\_SB.PCI0.LPCB.EC0.S0IX"
#define MAINBOARD_HOOK "\\_SB.MS0X" #define MAINBOARD_HOOK "\\_SB.MS0X"
#define MAINBOARD_DISPLAY_HOOK "\\_SB.MDSX"
#define ENABLE_PM_BITS_HOOK "\\_SB.PCI0.EGPM" #define ENABLE_PM_BITS_HOOK "\\_SB.PCI0.EGPM"
#define RESTORE_PM_BITS_HOOK "\\_SB.PCI0.RGPM" #define RESTORE_PM_BITS_HOOK "\\_SB.PCI0.RGPM"
#define LPI_STATES_ALL 0xff #define LPI_STATES_ALL 0xff
@ -150,12 +151,30 @@ static void lpi_s0ix_exit(void *unused)
acpigen_write_if_end(); acpigen_write_if_end();
} }
static void lpi_display_on(void *unused)
{
/* Provide a board level S0ix hook */
acpigen_write_if_cond_ref_of(MAINBOARD_DISPLAY_HOOK);
acpigen_emit_namestring(MAINBOARD_DISPLAY_HOOK);
acpigen_write_integer(1);
acpigen_write_if_end();
}
static void lpi_display_off(void *unused)
{
/* Provide a board level S0ix hook */
acpigen_write_if_cond_ref_of(MAINBOARD_DISPLAY_HOOK);
acpigen_emit_namestring(MAINBOARD_DISPLAY_HOOK);
acpigen_write_integer(0);
acpigen_write_if_end();
}
static void (*lpi_s0_helpers[])(void *) = { static void (*lpi_s0_helpers[])(void *) = {
NULL, /* enumerate functions (autogenerated) */ NULL, /* enumerate functions (autogenerated) */
lpi_get_constraints, /* get device constraints */ lpi_get_constraints, /* get device constraints */
NULL, /* get crash dump device */ NULL, /* get crash dump device */
NULL, /* display off notify */ lpi_display_off, /* display off notify */
NULL, /* display on notify */ lpi_display_on, /* display on notify */
lpi_s0ix_entry, /* s0ix entry */ lpi_s0ix_entry, /* s0ix entry */
lpi_s0ix_exit, /* s0ix exit */ lpi_s0ix_exit, /* s0ix exit */
}; };