diff options
-rw-r--r-- | src/ec/lenovo/h8/Makefile.inc | 1 | ||||
-rw-r--r-- | src/ec/lenovo/h8/h8.c | 34 | ||||
-rw-r--r-- | src/ec/lenovo/h8/h8.h | 7 | ||||
-rw-r--r-- | src/ec/lenovo/h8/smm.c | 47 | ||||
-rw-r--r-- | src/mainboard/lenovo/l520/smihandler.c | 2 | ||||
-rw-r--r-- | src/mainboard/lenovo/t420/smihandler.c | 2 | ||||
-rw-r--r-- | src/mainboard/lenovo/t420s/smihandler.c | 2 | ||||
-rw-r--r-- | src/mainboard/lenovo/t430/smihandler.c | 2 | ||||
-rw-r--r-- | src/mainboard/lenovo/t430s/smihandler.c | 2 | ||||
-rw-r--r-- | src/mainboard/lenovo/t520/smihandler.c | 2 | ||||
-rw-r--r-- | src/mainboard/lenovo/t530/smihandler.c | 2 | ||||
-rw-r--r-- | src/mainboard/lenovo/x201/cmos.layout | 2 | ||||
-rw-r--r-- | src/mainboard/lenovo/x201/smihandler.c | 2 | ||||
-rw-r--r-- | src/mainboard/lenovo/x220/cmos.layout | 2 | ||||
-rw-r--r-- | src/mainboard/lenovo/x220/smihandler.c | 2 | ||||
-rw-r--r-- | src/mainboard/lenovo/x230/smihandler.c | 2 |
16 files changed, 41 insertions, 72 deletions
diff --git a/src/ec/lenovo/h8/Makefile.inc b/src/ec/lenovo/h8/Makefile.inc index e4408f1ac1..ebf6d7d7a4 100644 --- a/src/ec/lenovo/h8/Makefile.inc +++ b/src/ec/lenovo/h8/Makefile.inc @@ -9,6 +9,5 @@ ramstage-y += h8.c ramstage-y += bluetooth.c ramstage-y += wwan.c ramstage-$(CONFIG_HAVE_ACPI_TABLES) += ssdt.c -smm-y += smm.c endif diff --git a/src/ec/lenovo/h8/h8.c b/src/ec/lenovo/h8/h8.c index 1f1655dc40..da216ec78f 100644 --- a/src/ec/lenovo/h8/h8.c +++ b/src/ec/lenovo/h8/h8.c @@ -128,6 +128,34 @@ void h8_disable_event(int event) } +void h8_usb_always_on_enable(enum usb_always_on on) +{ + u8 val; + + switch (on) { + case UAO_OFF: + val = ec_read(H8_USB_ALWAYS_ON); + // Clear bits 0,2,3 + val &= ~(H8_USB_ALWAYS_ON_ENABLE | H8_USB_ALWAYS_ON_AC_ONLY); + ec_write(H8_USB_ALWAYS_ON, val); + break; + + case UAO_AC_AND_BATTERY: + val = ec_read(H8_USB_ALWAYS_ON); + val |= H8_USB_ALWAYS_ON_ENABLE; // Set bit 0 + val &= ~H8_USB_ALWAYS_ON_AC_ONLY; // Clear bits 2 and 3 + ec_write(H8_USB_ALWAYS_ON, val); + break; + + case UAO_AC_ONLY: + val = ec_read(H8_USB_ALWAYS_ON); + // Set bits 0,2,3 + val |= (H8_USB_ALWAYS_ON_ENABLE | H8_USB_ALWAYS_ON_AC_ONLY); + ec_write(H8_USB_ALWAYS_ON, val); + break; + } +} + void h8_usb_power_enable(int onoff) { if (onoff) @@ -270,8 +298,10 @@ static void h8_enable(struct device *dev) ec_write(0x1f, conf->eventf_enable); ec_write(H8_FAN_CONTROL, H8_FAN_CONTROL_AUTO); - ec_write(H8_USB_ALWAYS_ON, ec_read(H8_USB_ALWAYS_ON) & - ~H8_USB_ALWAYS_ON_ENABLE); + + if (get_option(&val, "usb_always_on") != CB_SUCCESS) + val = 0; + h8_usb_always_on_enable(val); if (get_option(&val, "wlan") != CB_SUCCESS) val = 1; diff --git a/src/ec/lenovo/h8/h8.h b/src/ec/lenovo/h8/h8.h index 4ac395a098..a46ba1f5e0 100644 --- a/src/ec/lenovo/h8/h8.h +++ b/src/ec/lenovo/h8/h8.h @@ -19,9 +19,16 @@ #include <stdint.h> #include <device/device.h> +enum usb_always_on { + UAO_OFF = 0, + UAO_AC_AND_BATTERY = 1, + UAO_AC_ONLY = 2 +}; + void h8_trackpoint_enable(int on); void h8_wlan_enable(int on); void h8_set_audio_mute(int on); +void h8_usb_always_on_enable(enum usb_always_on on); void h8_usb_power_enable(int on); void h8_enable_event(int event); void h8_disable_event(int event); diff --git a/src/ec/lenovo/h8/smm.c b/src/ec/lenovo/h8/smm.c deleted file mode 100644 index 6005c31033..0000000000 --- a/src/ec/lenovo/h8/smm.c +++ /dev/null @@ -1,47 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright (C) 2016 Nicola Corna <nicola@corna.info> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include <ec/acpi/ec.h> -#include <pc80/mc146818rtc.h> - -#include "h8.h" - -enum usb_always_on { - UAO_OFF = 0, - UAO_AC_AND_BATTERY, - UAO_AC_ONLY -}; - -void h8_usb_always_on(void) -{ - enum usb_always_on val; - u8 reg; - - if (get_option(&val, "usb_always_on") != CB_SUCCESS) - val = UAO_OFF; - - if (val == UAO_AC_AND_BATTERY) { - reg = ec_read(H8_USB_ALWAYS_ON); - reg &= ~H8_USB_ALWAYS_ON_AC_ONLY; - reg |= H8_USB_ALWAYS_ON_ENABLE; - ec_write(H8_USB_ALWAYS_ON, reg); - } else if (val == UAO_AC_ONLY) { - reg = ec_read(H8_USB_ALWAYS_ON); - reg |= H8_USB_ALWAYS_ON_AC_ONLY; - reg |= H8_USB_ALWAYS_ON_ENABLE; - ec_write(H8_USB_ALWAYS_ON, reg); - ec_set_bit(0x2, 3); - } -} diff --git a/src/mainboard/lenovo/l520/smihandler.c b/src/mainboard/lenovo/l520/smihandler.c index fa038ed92b..982233d4bc 100644 --- a/src/mainboard/lenovo/l520/smihandler.c +++ b/src/mainboard/lenovo/l520/smihandler.c @@ -73,8 +73,6 @@ int mainboard_smi_apmc(u8 data) void mainboard_smi_sleep(u8 slp_typ) { - h8_usb_always_on(); - if (slp_typ == 3) { u8 ec_wake = ec_read(0x32); /* If EC wake events are enabled, enable wake on EC WAKE GPE. */ diff --git a/src/mainboard/lenovo/t420/smihandler.c b/src/mainboard/lenovo/t420/smihandler.c index dd29232095..bc92cf1b78 100644 --- a/src/mainboard/lenovo/t420/smihandler.c +++ b/src/mainboard/lenovo/t420/smihandler.c @@ -72,8 +72,6 @@ int mainboard_smi_apmc(u8 data) void mainboard_smi_sleep(u8 slp_typ) { - h8_usb_always_on(); - if (slp_typ == 3) { u8 ec_wake = ec_read(0x32); /* If EC wake events are enabled, enable wake on EC WAKE GPE. */ diff --git a/src/mainboard/lenovo/t420s/smihandler.c b/src/mainboard/lenovo/t420s/smihandler.c index 578aee8bfa..0e8e6d071a 100644 --- a/src/mainboard/lenovo/t420s/smihandler.c +++ b/src/mainboard/lenovo/t420s/smihandler.c @@ -102,8 +102,6 @@ int mainboard_smi_apmc(u8 data) void mainboard_smi_sleep(u8 slp_typ) { - h8_usb_always_on(); - if (slp_typ == 3) { u8 ec_wake = ec_read(0x32); /* If EC wake events are enabled, enable wake on EC WAKE GPE. */ diff --git a/src/mainboard/lenovo/t430/smihandler.c b/src/mainboard/lenovo/t430/smihandler.c index 910fc1a096..9a567ab40f 100644 --- a/src/mainboard/lenovo/t430/smihandler.c +++ b/src/mainboard/lenovo/t430/smihandler.c @@ -72,8 +72,6 @@ int mainboard_smi_apmc(u8 data) void mainboard_smi_sleep(u8 slp_typ) { - h8_usb_always_on(); - if (slp_typ == 3) { u8 ec_wake = ec_read(0x32); /* If EC wake events are enabled, enable wake on EC WAKE GPE. */ diff --git a/src/mainboard/lenovo/t430s/smihandler.c b/src/mainboard/lenovo/t430s/smihandler.c index 79679dcf42..8831e9d696 100644 --- a/src/mainboard/lenovo/t430s/smihandler.c +++ b/src/mainboard/lenovo/t430s/smihandler.c @@ -102,8 +102,6 @@ int mainboard_smi_apmc(u8 data) void mainboard_smi_sleep(u8 slp_typ) { - h8_usb_always_on(); - if (slp_typ == 3) { u8 ec_wake = ec_read(0x32); /* If EC wake events are enabled, enable wake on EC WAKE GPE. */ diff --git a/src/mainboard/lenovo/t520/smihandler.c b/src/mainboard/lenovo/t520/smihandler.c index 2c50e2339c..f8400dd670 100644 --- a/src/mainboard/lenovo/t520/smihandler.c +++ b/src/mainboard/lenovo/t520/smihandler.c @@ -102,8 +102,6 @@ int mainboard_smi_apmc(u8 data) void mainboard_smi_sleep(u8 slp_typ) { - h8_usb_always_on(); - if (slp_typ == 3) { u8 ec_wake = ec_read(0x32); /* If EC wake events are enabled, enable wake on EC WAKE GPE. */ diff --git a/src/mainboard/lenovo/t530/smihandler.c b/src/mainboard/lenovo/t530/smihandler.c index c967e4084e..150232f354 100644 --- a/src/mainboard/lenovo/t530/smihandler.c +++ b/src/mainboard/lenovo/t530/smihandler.c @@ -102,8 +102,6 @@ int mainboard_smi_apmc(u8 data) void mainboard_smi_sleep(u8 slp_typ) { - h8_usb_always_on(); - if (slp_typ == 3) { u8 ec_wake = ec_read(0x32); /* If EC wake events are enabled, enable wake on EC WAKE GPE. */ diff --git a/src/mainboard/lenovo/x201/cmos.layout b/src/mainboard/lenovo/x201/cmos.layout index d8d8794223..0cda679814 100644 --- a/src/mainboard/lenovo/x201/cmos.layout +++ b/src/mainboard/lenovo/x201/cmos.layout @@ -70,7 +70,7 @@ entries 419 1 e 1 power_management_beeps 420 1 e 1 low_battery_beep 421 1 e 9 sata_mode -422 1 e 11 usb_always_on +422 2 e 11 usb_always_on #423 1 r 1 unused # coreboot config options: northbridge diff --git a/src/mainboard/lenovo/x201/smihandler.c b/src/mainboard/lenovo/x201/smihandler.c index 10ca4d438b..f1e2c3f9b0 100644 --- a/src/mainboard/lenovo/x201/smihandler.c +++ b/src/mainboard/lenovo/x201/smihandler.c @@ -178,8 +178,6 @@ int mainboard_smi_apmc(u8 data) void mainboard_smi_sleep(u8 slp_typ) { - h8_usb_always_on(); - if (slp_typ == 3) { u8 ec_wake = ec_read(0x32); /* If EC wake events are enabled, enable wake on EC WAKE GPE. */ diff --git a/src/mainboard/lenovo/x220/cmos.layout b/src/mainboard/lenovo/x220/cmos.layout index c6e270afa0..d4a4ed3371 100644 --- a/src/mainboard/lenovo/x220/cmos.layout +++ b/src/mainboard/lenovo/x220/cmos.layout @@ -69,7 +69,7 @@ entries 418 1 e 1 sticky_fn 419 1 e 1 power_management_beeps 421 1 e 9 sata_mode -422 1 e 12 usb_always_on +422 2 e 12 usb_always_on #423 1 r 1 unused # coreboot config options: cpu diff --git a/src/mainboard/lenovo/x220/smihandler.c b/src/mainboard/lenovo/x220/smihandler.c index c967e4084e..150232f354 100644 --- a/src/mainboard/lenovo/x220/smihandler.c +++ b/src/mainboard/lenovo/x220/smihandler.c @@ -102,8 +102,6 @@ int mainboard_smi_apmc(u8 data) void mainboard_smi_sleep(u8 slp_typ) { - h8_usb_always_on(); - if (slp_typ == 3) { u8 ec_wake = ec_read(0x32); /* If EC wake events are enabled, enable wake on EC WAKE GPE. */ diff --git a/src/mainboard/lenovo/x230/smihandler.c b/src/mainboard/lenovo/x230/smihandler.c index a69b78fc07..24259270b3 100644 --- a/src/mainboard/lenovo/x230/smihandler.c +++ b/src/mainboard/lenovo/x230/smihandler.c @@ -72,8 +72,6 @@ int mainboard_smi_apmc(u8 data) void mainboard_smi_sleep(u8 slp_typ) { - h8_usb_always_on(); - if (slp_typ == 3) { u8 ec_wake = ec_read(0x32); /* If EC wake events are enabled, enable wake on EC WAKE GPE. */ |