superio/ite/it8720f: Implement power control
Program the Super I/O to turn the machine on or restore its power state when AC power is restored. Based on code from src/superio/nuvoton/nct5572d/superio.c. Change-Id: I1f3432f43b0784c3696bf1d7233b83d3a203af20 Signed-off-by: Samuel Holland <samuel@sholland.org> Reviewed-on: https://review.coreboot.org/25463 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
parent
9d217bf79a
commit
c622dc5e82
|
@ -18,12 +18,35 @@
|
||||||
#include <device/device.h>
|
#include <device/device.h>
|
||||||
#include <device/pnp.h>
|
#include <device/pnp.h>
|
||||||
#include <pc80/keyboard.h>
|
#include <pc80/keyboard.h>
|
||||||
|
#include <pc80/mc146818rtc.h>
|
||||||
#include <superio/ite/common/env_ctrl.h>
|
#include <superio/ite/common/env_ctrl.h>
|
||||||
#include <superio/conf_mode.h>
|
#include <superio/conf_mode.h>
|
||||||
|
#include <types.h>
|
||||||
|
|
||||||
#include "chip.h"
|
#include "chip.h"
|
||||||
#include "it8720f.h"
|
#include "it8720f.h"
|
||||||
|
|
||||||
|
#define MAINBOARD_POWER_OFF 0
|
||||||
|
#define MAINBOARD_POWER_ON 1
|
||||||
|
#define MAINBOARD_POWER_KEEP 2
|
||||||
|
|
||||||
|
static void power_control_init(struct device *dev)
|
||||||
|
{
|
||||||
|
int power_on = MAINBOARD_POWER_OFF;
|
||||||
|
u8 addr, value;
|
||||||
|
|
||||||
|
get_option(&power_on, "power_on_after_fail");
|
||||||
|
if (power_on == MAINBOARD_POWER_OFF)
|
||||||
|
return;
|
||||||
|
pnp_enter_conf_mode(dev);
|
||||||
|
pnp_set_logical_device(dev);
|
||||||
|
addr = power_on == MAINBOARD_POWER_KEEP ? 0xf2 : 0xf4;
|
||||||
|
value = pnp_read_config(dev, addr);
|
||||||
|
value |= BIT(5);
|
||||||
|
pnp_write_config(dev, addr, value);
|
||||||
|
pnp_exit_conf_mode(dev);
|
||||||
|
}
|
||||||
|
|
||||||
static void it8720f_init(struct device *dev)
|
static void it8720f_init(struct device *dev)
|
||||||
{
|
{
|
||||||
const struct superio_ite_it8720f_config *conf;
|
const struct superio_ite_it8720f_config *conf;
|
||||||
|
@ -39,6 +62,7 @@ static void it8720f_init(struct device *dev)
|
||||||
if (!conf || !res)
|
if (!conf || !res)
|
||||||
break;
|
break;
|
||||||
ite_ec_init(res->base, &conf->ec);
|
ite_ec_init(res->base, &conf->ec);
|
||||||
|
power_control_init(dev);
|
||||||
break;
|
break;
|
||||||
case IT8720F_KBCK:
|
case IT8720F_KBCK:
|
||||||
pc_keyboard_init(NO_AUX_DEVICE);
|
pc_keyboard_init(NO_AUX_DEVICE);
|
||||||
|
|
Loading…
Reference in New Issue