summaryrefslogtreecommitdiff
path: root/src/ec
diff options
context:
space:
mode:
Diffstat (limited to 'src/ec')
-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
4 files changed, 39 insertions, 50 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);
- }
-}