summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Couzens <lynxis@fe80.eu>2016-10-16 07:30:34 +0200
committerMartin Roth <martinroth@google.com>2016-11-02 18:25:11 +0100
commit83df672d2ce481686c5c4e04625bc1b97d7a4a8b (patch)
tree79c513d8e23e6f16ea8502f899b759585070c7c0
parentc5a6fb805265f53917eef9748dfa8e39f0697b8c (diff)
downloadcoreboot-83df672d2ce481686c5c4e04625bc1b97d7a4a8b.tar.xz
ec/lenovo/h8: don't load configuration when booting from s3
Some user might change some devices. After a suspend this reset to the (nvram) defaults which breaks the user expectation. Change-Id: Ifacca35210474ec3db41a53d2ad18f3798b14077 Signed-off-by: Alexander Couzens <lynxis@fe80.eu> Reviewed-on: https://review.coreboot.org/16215 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org> Reviewed-by: Martin Roth <martinroth@google.com>
-rw-r--r--src/ec/lenovo/h8/h8.c111
1 files changed, 59 insertions, 52 deletions
diff --git a/src/ec/lenovo/h8/h8.c b/src/ec/lenovo/h8/h8.c
index 84766d000e..4e8172e171 100644
--- a/src/ec/lenovo/h8/h8.c
+++ b/src/ec/lenovo/h8/h8.c
@@ -202,27 +202,46 @@ struct device_operations h8_dev_ops = {
.init = h8_init,
};
-static void h8_enable(struct device *dev)
+/* configure default values or load value from nvram */
+static void h8_configure(struct ec_lenovo_h8_config *conf)
{
- struct ec_lenovo_h8_config *conf = dev->chip_info;
u8 val;
- u8 beepmask0, beepmask1, config1;
+ u8 beepmask0, beepmask1;
- dev->ops = &h8_dev_ops;
+ if (get_option(&val, "wlan") != CB_SUCCESS)
+ val = 1;
+ h8_wlan_enable(val);
- h8_log_ec_version();
+ if (get_option(&val, "bluetooth") != CB_SUCCESS)
+ val = 1;
+ h8_bluetooth_enable(val);
- ec_write(H8_CONFIG0, conf->config0);
- config1 = conf->config1;
+ if (get_option(&val, "wwan") != CB_SUCCESS)
+ val = 1;
+ h8_wwan_enable(val);
- if (conf->has_keyboard_backlight) {
- if (get_option(&val, "backlight") != CB_SUCCESS)
- val = 0; /* Both backlights. */
- config1 = (config1 & 0xf3) | ((val & 0x3) << 2);
+ if (conf->has_uwb) {
+ if (get_option(&val, "uwb") != CB_SUCCESS)
+ val = 1;
+
+ h8_uwb_enable(val);
}
- ec_write(H8_CONFIG1, config1);
- ec_write(H8_CONFIG2, conf->config2);
- ec_write(H8_CONFIG3, conf->config3);
+
+ if (get_option(&val, "fn_ctrl_swap") != CB_SUCCESS)
+ val = 0;
+ h8_fn_ctrl_swap(val);
+
+ if (get_option(&val, "sticky_fn") != CB_SUCCESS)
+ val = 0;
+ h8_sticky_fn(val);
+
+ if (get_option(&val, "first_battery") != CB_SUCCESS)
+ val = PRIMARY_BATTERY;
+ h8_charge_priority(val);
+
+ /* configure sound */
+ if (get_option(&val, "volume") == CB_SUCCESS)
+ ec_write(H8_VOLUME_CONTROL, val);
beepmask0 = conf->beepmask0;
beepmask1 = conf->beepmask1;
@@ -242,11 +261,36 @@ static void h8_enable(struct device *dev)
else
beepmask0 &= ~2;
}
-
ec_write(H8_SOUND_ENABLE0, beepmask0);
ec_write(H8_SOUND_ENABLE1, beepmask1);
+ h8_set_audio_mute(0);
+}
+
+static void h8_enable(struct device *dev)
+{
+ struct ec_lenovo_h8_config *conf = dev->chip_info;
+ u8 val;
+ u8 config1;
+
+ dev->ops = &h8_dev_ops;
+
+ h8_log_ec_version();
+
+ ec_write(H8_CONFIG0, conf->config0);
+ config1 = conf->config1;
+
+ if (conf->has_keyboard_backlight) {
+ if (get_option(&val, "backlight") != CB_SUCCESS)
+ val = 0; /* Both backlights. */
+ config1 = (config1 & 0xf3) | ((val & 0x3) << 2);
+ }
+ ec_write(H8_CONFIG1, config1);
+ ec_write(H8_CONFIG2, conf->config2);
+ ec_write(H8_CONFIG3, conf->config3);
ec_write(H8_SOUND_REPEAT, 0x00);
+ if (!acpi_is_wakeup_s3())
+ h8_configure(conf);
/* silence sounds in queue */
ec_write(H8_SOUND_REG, 0x00);
@@ -270,46 +314,9 @@ static void h8_enable(struct device *dev)
ec_write(H8_FAN_CONTROL, H8_FAN_CONTROL_AUTO);
- if (get_option(&val, "wlan") != CB_SUCCESS)
- val = 1;
- h8_wlan_enable(val);
-
h8_trackpoint_enable(1);
h8_usb_power_enable(1);
- if (get_option(&val, "volume") == CB_SUCCESS && !acpi_is_wakeup_s3())
- ec_write(H8_VOLUME_CONTROL, val);
-
- if (get_option(&val, "bluetooth") != CB_SUCCESS)
- val = 1;
- h8_bluetooth_enable(val);
-
- if (get_option(&val, "wwan") != CB_SUCCESS)
- val = 1;
-
- h8_wwan_enable(val);
-
- if (conf->has_uwb) {
- if (get_option(&val, "uwb") != CB_SUCCESS)
- val = 1;
-
- h8_uwb_enable(val);
- }
-
- if (get_option(&val, "fn_ctrl_swap") != CB_SUCCESS)
- val = 0;
- h8_fn_ctrl_swap(val);
-
- if (get_option(&val, "sticky_fn") != CB_SUCCESS)
- val = 0;
- h8_sticky_fn(val);
-
- if (get_option(&val, "first_battery") != CB_SUCCESS)
- val = PRIMARY_BATTERY;
- h8_charge_priority(val);
-
- h8_set_audio_mute(0);
-
#if !IS_ENABLED(CONFIG_H8_DOCK_EARLY_INIT)
h8_mainboard_init_dock();
#endif