summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ec/lenovo/h8/Makefile.inc1
-rw-r--r--src/ec/lenovo/h8/h8.c34
-rw-r--r--src/ec/lenovo/h8/h8.h7
-rw-r--r--src/ec/lenovo/h8/smm.c47
-rw-r--r--src/mainboard/lenovo/l520/smihandler.c2
-rw-r--r--src/mainboard/lenovo/t420/smihandler.c2
-rw-r--r--src/mainboard/lenovo/t420s/smihandler.c2
-rw-r--r--src/mainboard/lenovo/t430/smihandler.c2
-rw-r--r--src/mainboard/lenovo/t430s/smihandler.c2
-rw-r--r--src/mainboard/lenovo/t520/smihandler.c2
-rw-r--r--src/mainboard/lenovo/t530/smihandler.c2
-rw-r--r--src/mainboard/lenovo/x201/cmos.layout2
-rw-r--r--src/mainboard/lenovo/x201/smihandler.c2
-rw-r--r--src/mainboard/lenovo/x220/cmos.layout2
-rw-r--r--src/mainboard/lenovo/x220/smihandler.c2
-rw-r--r--src/mainboard/lenovo/x230/smihandler.c2
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. */