Add acpi_reset function, to reset registers set by the OS

This commit is contained in:
Jeremy Soller 2020-08-28 09:48:44 -06:00 committed by Jeremy Soller
parent 70e6476208
commit ee404071fb
3 changed files with 22 additions and 4 deletions

View File

@ -12,7 +12,7 @@
extern uint8_t sci_extra;
uint8_t ecos = 0;
uint8_t acpi_ecos = 0;
static uint8_t fcmd = 0;
static uint8_t fdat = 0;
@ -48,6 +48,19 @@ void fcommand(void) {
}
}
void acpi_reset(void) {
// Disable lid wake
lid_wake = false;
// ECOS: No ACPI
acpi_ecos = 0;
#if HAVE_LED_AIRPLANE_N
// Clear airplane mode LED
gpio_set(&LED_AIRPLANE_N, true);
#endif
}
uint8_t acpi_read(uint8_t addr) {
uint8_t data = 0;
@ -105,7 +118,7 @@ uint8_t acpi_read(uint8_t addr) {
ACPI_16(0x2E, battery_remaining_capacity);
ACPI_16(0x32, battery_voltage);
ACPI_8(0x68, ecos);
ACPI_8(0x68, acpi_ecos);
ACPI_8(0xCC, sci_extra);
@ -133,7 +146,6 @@ uint8_t acpi_read(uint8_t addr) {
return data;
}
void acpi_write(uint8_t addr, uint8_t data) {
DEBUG("acpi_write %02X = %02X\n", addr, data);
@ -144,7 +156,7 @@ void acpi_write(uint8_t addr, uint8_t data) {
break;
case 0x68:
ecos = data;
acpi_ecos = data;
break;
#if HAVE_LED_AIRPLANE_N

View File

@ -3,6 +3,9 @@
#include <stdint.h>
extern uint8_t acpi_ecos;
void acpi_reset(void);
uint8_t acpi_read(uint8_t addr);
void acpi_write(uint8_t addr, uint8_t data);

View File

@ -1,5 +1,6 @@
#include <arch/delay.h>
#include <arch/time.h>
#include <board/acpi.h>
#include <board/battery.h>
#include <board/board.h>
#include <board/gpio.h>
@ -331,6 +332,8 @@ void power_off_s5(void) {
static void power_cpu_reset(void) {
// LPC was just reset, enable PNP devices
pnp_enable();
// Reset ACPI registers
acpi_reset();
//TODO: reset KBC and touchpad states
kbled_reset();
}