summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ec/lenovo/h8/smm.c18
-rw-r--r--src/mainboard/lenovo/x201/cmos.layout1
-rw-r--r--src/mainboard/lenovo/x220/cmos.layout1
3 files changed, 17 insertions, 3 deletions
diff --git a/src/ec/lenovo/h8/smm.c b/src/ec/lenovo/h8/smm.c
index 31009a6926..6005c31033 100644
--- a/src/ec/lenovo/h8/smm.c
+++ b/src/ec/lenovo/h8/smm.c
@@ -18,18 +18,30 @@
#include "h8.h"
+enum usb_always_on {
+ UAO_OFF = 0,
+ UAO_AC_AND_BATTERY,
+ UAO_AC_ONLY
+};
+
void h8_usb_always_on(void)
{
- u8 val;
+ enum usb_always_on val;
u8 reg;
if (get_option(&val, "usb_always_on") != CB_SUCCESS)
- val = 0;
+ val = UAO_OFF;
- if (val) {
+ 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/x201/cmos.layout b/src/mainboard/lenovo/x201/cmos.layout
index 72702328fb..8b40585260 100644
--- a/src/mainboard/lenovo/x201/cmos.layout
+++ b/src/mainboard/lenovo/x201/cmos.layout
@@ -125,6 +125,7 @@ enumerations
10 6 160M
11 0 Disable
11 1 AC and battery
+11 2 AC only
# -----------------------------------------------------------------
checksums
diff --git a/src/mainboard/lenovo/x220/cmos.layout b/src/mainboard/lenovo/x220/cmos.layout
index 77979b38a5..93e7ba98aa 100644
--- a/src/mainboard/lenovo/x220/cmos.layout
+++ b/src/mainboard/lenovo/x220/cmos.layout
@@ -136,6 +136,7 @@ enumerations
11 6 224M
12 0 Disable
12 1 AC and battery
+12 2 AC only
# -----------------------------------------------------------------
checksums