diff options
author | Nico Huber <nico.h@gmx.de> | 2016-11-14 00:49:29 +0200 |
---|---|---|
committer | Nico Huber <nico.h@gmx.de> | 2016-11-16 00:47:59 +0100 |
commit | 6444b52ce06236c621a88003b2fca107feaf9bff (patch) | |
tree | 6d591addc82416f10b571f625ed8efffca30656a | |
parent | 0530b299212b4d584571ab588ad1d750ae57e251 (diff) |
Revert "ec/lenovo/h8: don't load configuration when booting from s3"
This reverts commit 83df672d2ce481686c5c4e04625bc1b97d7a4a8b.
It's based on the assumption that the H8 keeps its configuration
during a suspend/resume cycle. User reports indicate that this might
not be true.
Caching the settings in a cbtable entry might be a better approach.
Change-Id: Ic4ba862ee7068ffe214c2aeaadecb4390a0e0529
Reviewed-on: https://review.coreboot.org/17411
Tested-by: build bot (Jenkins)
Reviewed-by: Martin Roth <martinroth@google.com>
Reviewed-by: Alexander Couzens <lynxis@fe80.eu>
-rw-r--r-- | src/ec/lenovo/h8/h8.c | 112 |
1 files changed, 52 insertions, 60 deletions
diff --git a/src/ec/lenovo/h8/h8.c b/src/ec/lenovo/h8/h8.c index 703acaddb4..b7b9db75c9 100644 --- a/src/ec/lenovo/h8/h8.c +++ b/src/ec/lenovo/h8/h8.c @@ -202,46 +202,27 @@ struct device_operations h8_dev_ops = { .init = h8_init, }; -/* configure default values or load value from nvram */ -static void h8_configure(struct ec_lenovo_h8_config *conf) +static void h8_enable(struct device *dev) { + struct ec_lenovo_h8_config *conf = dev->chip_info; u8 val; - u8 beepmask0, beepmask1; + u8 beepmask0, beepmask1, config1; - if (get_option(&val, "wlan") != CB_SUCCESS) - val = 1; - h8_wlan_enable(val); - - if (get_option(&val, "bluetooth") != CB_SUCCESS) - val = 1; - h8_bluetooth_enable(val); + dev->ops = &h8_dev_ops; - if (get_option(&val, "wwan") != CB_SUCCESS) - val = 1; - h8_wwan_enable(val); + h8_log_ec_version(); - if (conf->has_uwb) { - if (get_option(&val, "uwb") != CB_SUCCESS) - val = 1; + ec_write(H8_CONFIG0, conf->config0); + config1 = conf->config1; - h8_uwb_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 (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); + ec_write(H8_CONFIG1, config1); + ec_write(H8_CONFIG2, conf->config2); + ec_write(H8_CONFIG3, conf->config3); beepmask0 = conf->beepmask0; beepmask1 = conf->beepmask1; @@ -261,35 +242,9 @@ static void h8_configure(struct ec_lenovo_h8_config *conf) 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); - - if (!acpi_is_wakeup_s3()) - h8_configure(conf); /* silence sounds in queue */ ec_write(H8_SOUND_REPEAT, 0x00); @@ -314,9 +269,46 @@ 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 |