Remove unused power states, rename power on/off functions
This commit is contained in:
@ -4,19 +4,16 @@
|
|||||||
#define _BOARD_POWER_H
|
#define _BOARD_POWER_H
|
||||||
|
|
||||||
enum PowerState {
|
enum PowerState {
|
||||||
POWER_STATE_DEFAULT,
|
POWER_STATE_OFF,
|
||||||
POWER_STATE_DS5,
|
|
||||||
POWER_STATE_S5,
|
POWER_STATE_S5,
|
||||||
POWER_STATE_DS3,
|
|
||||||
POWER_STATE_S3,
|
POWER_STATE_S3,
|
||||||
POWER_STATE_S0,
|
POWER_STATE_S0,
|
||||||
};
|
};
|
||||||
|
|
||||||
extern enum PowerState power_state;
|
extern enum PowerState power_state;
|
||||||
|
|
||||||
void power_on_ds5(void);
|
void power_on(void);
|
||||||
void power_on_s5(void);
|
void power_off(void);
|
||||||
void power_off_s5(void);
|
|
||||||
void power_set_limit(void);
|
void power_set_limit(void);
|
||||||
void power_cpu_reset(void);
|
void power_cpu_reset(void);
|
||||||
|
|
||||||
|
@ -196,7 +196,7 @@ bool kbscan_press(uint16_t key, bool pressed, uint8_t * layer) {
|
|||||||
// Wake from sleep on keypress
|
// Wake from sleep on keypress
|
||||||
if (pressed &&
|
if (pressed &&
|
||||||
lid_state &&
|
lid_state &&
|
||||||
(power_state == POWER_STATE_S3 || power_state == POWER_STATE_DS3)) {
|
(power_state == POWER_STATE_S3)) {
|
||||||
pmc_swi();
|
pmc_swi();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,7 +112,7 @@ extern uint8_t main_cycle;
|
|||||||
// RSMRST# de-assertion to SUSPWRDNACK valid
|
// RSMRST# de-assertion to SUSPWRDNACK valid
|
||||||
#define tPLT01 delay_ms(200)
|
#define tPLT01 delay_ms(200)
|
||||||
|
|
||||||
enum PowerState power_state = POWER_STATE_DEFAULT;
|
enum PowerState power_state = POWER_STATE_OFF;
|
||||||
|
|
||||||
enum PowerState calculate_power_state(void) {
|
enum PowerState calculate_power_state(void) {
|
||||||
//TODO: Deep Sx states using SLP_SUS#
|
//TODO: Deep Sx states using SLP_SUS#
|
||||||
@ -132,7 +132,7 @@ enum PowerState calculate_power_state(void) {
|
|||||||
return POWER_STATE_S5;
|
return POWER_STATE_S5;
|
||||||
}
|
}
|
||||||
|
|
||||||
return POWER_STATE_DS5;
|
return POWER_STATE_OFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
void update_power_state(void) {
|
void update_power_state(void) {
|
||||||
@ -142,18 +142,12 @@ void update_power_state(void) {
|
|||||||
|
|
||||||
#if LEVEL >= LEVEL_DEBUG
|
#if LEVEL >= LEVEL_DEBUG
|
||||||
switch (power_state) {
|
switch (power_state) {
|
||||||
case POWER_STATE_DEFAULT:
|
case POWER_STATE_OFF:
|
||||||
DEBUG("POWER_STATE_DEFAULT\n");
|
DEBUG("POWER_STATE_OFF\n");
|
||||||
break;
|
|
||||||
case POWER_STATE_DS5:
|
|
||||||
DEBUG("POWER_STATE_DS5\n");
|
|
||||||
break;
|
break;
|
||||||
case POWER_STATE_S5:
|
case POWER_STATE_S5:
|
||||||
DEBUG("POWER_STATE_S5\n");
|
DEBUG("POWER_STATE_S5\n");
|
||||||
break;
|
break;
|
||||||
case POWER_STATE_DS3:
|
|
||||||
DEBUG("POWER_STATE_DS3\n");
|
|
||||||
break;
|
|
||||||
case POWER_STATE_S3:
|
case POWER_STATE_S3:
|
||||||
DEBUG("POWER_STATE_S3\n");
|
DEBUG("POWER_STATE_S3\n");
|
||||||
break;
|
break;
|
||||||
@ -165,24 +159,8 @@ void update_power_state(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enable deep sleep well power
|
void power_on(void) {
|
||||||
void power_on_ds5(void) {
|
DEBUG("%02X: power_on\n", main_cycle);
|
||||||
DEBUG("%02X: power_on_ds5\n", main_cycle);
|
|
||||||
|
|
||||||
// See Figure 12-19 in Whiskey Lake Platform Design Guide
|
|
||||||
// | VCCRTC | RTCRST# | VccPRIM |
|
|
||||||
// | tPCH01---------- | |
|
|
||||||
// | tPCH04-------------------- |
|
|
||||||
|
|
||||||
// tPCH04 is the ideal delay
|
|
||||||
tPCH04;
|
|
||||||
|
|
||||||
update_power_state();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enable S5 power
|
|
||||||
void power_on_s5(void) {
|
|
||||||
DEBUG("%02X: power_on_s5\n", main_cycle);
|
|
||||||
|
|
||||||
// See Figure 12-19 in Whiskey Lake Platform Design Guide
|
// See Figure 12-19 in Whiskey Lake Platform Design Guide
|
||||||
// TODO - signal timing graph
|
// TODO - signal timing graph
|
||||||
@ -224,6 +202,10 @@ void power_on_s5(void) {
|
|||||||
// Wait for SUSPWRDNACK validity
|
// Wait for SUSPWRDNACK validity
|
||||||
tPLT01;
|
tPLT01;
|
||||||
|
|
||||||
|
GPIO_SET_DEBUG(PWR_BTN_N, false);
|
||||||
|
delay_ms(32); // PWRBTN# must assert for at least 16 ms, we do twice that
|
||||||
|
GPIO_SET_DEBUG(PWR_BTN_N, true);
|
||||||
|
|
||||||
uint16_t i;
|
uint16_t i;
|
||||||
for (i = 0; i < 5000; i++) {
|
for (i = 0; i < 5000; i++) {
|
||||||
// If we reached S0, exit this loop
|
// If we reached S0, exit this loop
|
||||||
@ -244,12 +226,12 @@ void power_on_s5(void) {
|
|||||||
|
|
||||||
if (power_state != POWER_STATE_S0) {
|
if (power_state != POWER_STATE_S0) {
|
||||||
DEBUG("failed to reach S0, powering off\n");
|
DEBUG("failed to reach S0, powering off\n");
|
||||||
power_off_s5();
|
power_off();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void power_off_s5(void) {
|
void power_off(void) {
|
||||||
DEBUG("%02X: power_off_s5\n", main_cycle);
|
DEBUG("%02X: power_off\n", main_cycle);
|
||||||
|
|
||||||
#if HAVE_PCH_PWROK_EC
|
#if HAVE_PCH_PWROK_EC
|
||||||
// De-assert SYS_PWROK
|
// De-assert SYS_PWROK
|
||||||
@ -345,11 +327,6 @@ static bool power_button_disabled(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void power_event(void) {
|
void power_event(void) {
|
||||||
// Always switch to ds5 if EC is running
|
|
||||||
if (power_state == POWER_STATE_DEFAULT) {
|
|
||||||
power_on_ds5();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the adapter line goes low
|
// Check if the adapter line goes low
|
||||||
static bool ac_send_sci = true;
|
static bool ac_send_sci = true;
|
||||||
static bool ac_last = true;
|
static bool ac_last = true;
|
||||||
@ -413,10 +390,13 @@ void power_event(void) {
|
|||||||
|
|
||||||
// Enable S5 power if necessary, before sending PWR_BTN
|
// Enable S5 power if necessary, before sending PWR_BTN
|
||||||
update_power_state();
|
update_power_state();
|
||||||
if (power_state == POWER_STATE_DS5) {
|
if (power_state == POWER_STATE_OFF) {
|
||||||
if (config_should_reset())
|
if (config_should_reset())
|
||||||
config_reset();
|
config_reset();
|
||||||
power_on_s5();
|
power_on();
|
||||||
|
|
||||||
|
// After power on ensure there is no secondary press sent to PCH
|
||||||
|
ps_new = ps_last;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -519,7 +499,7 @@ void power_event(void) {
|
|||||||
{
|
{
|
||||||
// Disable S5 power plane if not needed
|
// Disable S5 power plane if not needed
|
||||||
if (power_state == POWER_STATE_S5) {
|
if (power_state == POWER_STATE_S5) {
|
||||||
power_off_s5();
|
power_off();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -529,8 +509,8 @@ void power_event(void) {
|
|||||||
if (!wake_new && wake_last) {
|
if (!wake_new && wake_last) {
|
||||||
update_power_state();
|
update_power_state();
|
||||||
DEBUG("%02X: LAN_WAKEUP# asserted\n", main_cycle);
|
DEBUG("%02X: LAN_WAKEUP# asserted\n", main_cycle);
|
||||||
if (power_state == POWER_STATE_DS5) {
|
if (power_state == POWER_STATE_OFF) {
|
||||||
power_on_s5();
|
power_on();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if LEVEL >= LEVEL_DEBUG
|
#if LEVEL >= LEVEL_DEBUG
|
||||||
@ -559,7 +539,7 @@ void power_event(void) {
|
|||||||
gpio_set(&LED_PWR, true);
|
gpio_set(&LED_PWR, true);
|
||||||
gpio_set(&LED_ACIN, false);
|
gpio_set(&LED_ACIN, false);
|
||||||
}
|
}
|
||||||
} else if (power_state == POWER_STATE_S3 || power_state == POWER_STATE_DS3) {
|
} else if (power_state == POWER_STATE_S3) {
|
||||||
// Suspended, flashing green light
|
// Suspended, flashing green light
|
||||||
if ((time - last_time) >= 1000) {
|
if ((time - last_time) >= 1000) {
|
||||||
gpio_set(&LED_PWR, !gpio_get(&LED_PWR));
|
gpio_set(&LED_PWR, !gpio_get(&LED_PWR));
|
||||||
|
Reference in New Issue
Block a user