summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/superio/ite/common/env_ctrl.c28
-rw-r--r--src/superio/ite/common/env_ctrl.h11
-rw-r--r--src/superio/ite/it8720f/it8720f.h4
-rw-r--r--src/superio/ite/it8720f/superio.c32
-rw-r--r--src/superio/ite/it8728f/superio.c30
5 files changed, 41 insertions, 64 deletions
diff --git a/src/superio/ite/common/env_ctrl.c b/src/superio/ite/common/env_ctrl.c
index 105d6da8cff3..c6b5ef04d525 100644
--- a/src/superio/ite/common/env_ctrl.c
+++ b/src/superio/ite/common/env_ctrl.c
@@ -4,6 +4,7 @@
#include <delay.h>
#include <stddef.h>
#include <superio/hwm5_conf.h>
+#include <option.h>
#include "env_ctrl.h"
#include "env_ctrl_chip.h"
@@ -374,3 +375,30 @@ void ite_ec_init(const u16 base, const struct ite_ec_config *const conf)
if (conf->tmpin[i].mode == THERMAL_PECI)
extemp_force_idle_status(base);
}
+
+void ite_ec_set_power_state(struct device *dev)
+{
+ uint8_t power_status;
+ uint8_t reg_pcr1, reg_pcr2;
+
+ /* Set power state after power fail */
+ power_status = get_uint_option("power_on_after_fail",
+ CONFIG_MAINBOARD_POWER_FAILURE_STATE);
+ pnp_enter_conf_mode(dev);
+ pnp_set_logical_device(dev);
+ reg_pcr1 = pnp_read_config(dev, ITE_EC_REG_PCR1);
+ reg_pcr2 = pnp_read_config(dev, ITE_EC_REG_PCR2);
+ if (power_status == MAINBOARD_POWER_ON) {
+ reg_pcr2 |= (1 << 5);
+ } else if (power_status == MAINBOARD_POWER_KEEP) {
+ reg_pcr2 &= ~(1 << 5);
+ reg_pcr1 |= (1 << 5);
+ } else {
+ reg_pcr2 &= ~(1 << 5);
+ reg_pcr1 &= ~(1 << 5);
+ }
+ pnp_write_config(dev, ITE_EC_REG_PCR1, reg_pcr1);
+ pnp_write_config(dev, ITE_EC_REG_PCR2, reg_pcr2);
+ pnp_exit_conf_mode(dev);
+ printk(BIOS_INFO, "set power %u after power fail\n", power_status);
+}
diff --git a/src/superio/ite/common/env_ctrl.h b/src/superio/ite/common/env_ctrl.h
index 8a461aa3f287..4471bea756b3 100644
--- a/src/superio/ite/common/env_ctrl.h
+++ b/src/superio/ite/common/env_ctrl.h
@@ -235,6 +235,17 @@ static const u8 ITE_EC_TEMP_ADJUST[] = { 0x56, 0x57, 0x59 };
#define PECI_GETTEMP_WRITE_LENGTH 0x01
#define PECI_GETTEMP_READ_LENGTH 0x02
+/* Registers in EC LDN */
+#define ITE_EC_REG_PCR1 0xf2
+#define ITE_EC_REG_PCR2 0xf4
+
+/* These must match the values in src/mainboard/Kconfig */
+#define MAINBOARD_POWER_OFF 0
+#define MAINBOARD_POWER_ON 1
+#define MAINBOARD_POWER_KEEP 2
+
+void ite_ec_set_power_state(struct device *dev);
+
void ite_ec_init(u16 base, const struct ite_ec_config *conf);
#endif /* SUPERIO_ITE_ENV_CTRL_H */
diff --git a/src/superio/ite/it8720f/it8720f.h b/src/superio/ite/it8720f/it8720f.h
index 45c8256b6408..77159506eb26 100644
--- a/src/superio/ite/it8720f/it8720f.h
+++ b/src/superio/ite/it8720f/it8720f.h
@@ -14,8 +14,4 @@
#define IT8720F_GPIO 0x07 /* GPIO (including SPI flash interface) */
#define IT8720F_CIR 0x0a /* Consumer IR */
-/* Registers in LDNs */
-#define IT8720F_EC_PCR1 0xf2
-#define IT8720F_EC_PCR2 0xf4
-
#endif /* SUPERIO_ITE_IT8720F_H */
diff --git a/src/superio/ite/it8720f/superio.c b/src/superio/ite/it8720f/superio.c
index 4491c101349e..b51e768aef46 100644
--- a/src/superio/ite/it8720f/superio.c
+++ b/src/superio/ite/it8720f/superio.c
@@ -3,7 +3,6 @@
#include <device/device.h>
#include <device/pnp.h>
#include <pc80/keyboard.h>
-#include <option.h>
#include <superio/ite/common/env_ctrl.h>
#include <superio/conf_mode.h>
#include <types.h>
@@ -11,35 +10,6 @@
#include "chip.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)
-{
- unsigned int power_on = get_uint_option("power_on_after_fail", MAINBOARD_POWER_OFF);
- u8 value;
-
- pnp_enter_conf_mode(dev);
- pnp_set_logical_device(dev);
-
- value = pnp_read_config(dev, IT8720F_EC_PCR1);
- if (power_on == MAINBOARD_POWER_KEEP)
- value |= (1 << 5);
- else
- value &= ~(1 << 5);
- pnp_write_config(dev, IT8720F_EC_PCR1, value);
-
- value = pnp_read_config(dev, IT8720F_EC_PCR2);
- if (power_on == MAINBOARD_POWER_ON)
- value |= (1 << 5);
- else
- value &= ~(1 << 5);
- pnp_write_config(dev, IT8720F_EC_PCR2, value);
-
- pnp_exit_conf_mode(dev);
-}
-
static void it8720f_init(struct device *dev)
{
const struct superio_ite_it8720f_config *conf;
@@ -55,7 +25,7 @@ static void it8720f_init(struct device *dev)
if (!conf || !res)
break;
ite_ec_init(res->base, &conf->ec);
- power_control_init(dev);
+ ite_ec_set_power_state(dev);
break;
case IT8720F_KBCK:
pc_keyboard_init(NO_AUX_DEVICE);
diff --git a/src/superio/ite/it8728f/superio.c b/src/superio/ite/it8728f/superio.c
index f3bdd85b49ae..ca18e68f570e 100644
--- a/src/superio/ite/it8728f/superio.c
+++ b/src/superio/ite/it8728f/superio.c
@@ -5,21 +5,14 @@
#include <superio/conf_mode.h>
#include <pc80/keyboard.h>
#include <superio/ite/common/env_ctrl.h>
-#include <option.h>
#include "chip.h"
#include "it8728f.h"
-#define MAINBOARD_POWER_OFF 0
-#define MAINBOARD_POWER_ON 1
-#define MAINBOARD_POWER_KEEP 2
-
static void it8728f_init(struct device *dev)
{
const struct superio_ite_it8728f_config *conf = dev->chip_info;
const struct resource *res;
- uint8_t power_status;
- uint8_t byte_f2, byte_f4;
if (!dev->enabled)
return;
@@ -31,28 +24,7 @@ static void it8728f_init(struct device *dev)
if (!conf || !res)
break;
ite_ec_init(res->base, &conf->ec);
-
- /* Set power state after power fail */
- power_status = get_uint_option("power_on_after_fail",
- CONFIG_MAINBOARD_POWER_FAILURE_STATE);
- pnp_enter_conf_mode(dev);
- pnp_set_logical_device(dev);
- byte_f4 = pnp_read_config(dev, 0xf4);
- byte_f2 = pnp_read_config(dev, 0xf2);
- if (power_status == MAINBOARD_POWER_ON) {
- byte_f4 |= 0x20;
- } else if (power_status == MAINBOARD_POWER_KEEP) {
- byte_f4 &= ~0x20;
- byte_f2 |= 0x20;
- } else {
- byte_f4 &= ~0x20;
- byte_f2 &= ~0x20;
- }
- pnp_write_config(dev, 0xf4, byte_f4);
- pnp_write_config(dev, 0xf2, byte_f2);
- pnp_exit_conf_mode(dev);
- printk(BIOS_INFO, "set power %u after power fail\n", power_status);
-
+ ite_ec_set_power_state(dev);
break;
case IT8728F_KBCK:
set_kbc_ps2_mode();