summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSean Rhodes <sean@starlabs.systems>2022-07-31 17:35:28 +0100
committerMartin Roth <martin.roth@amd.corp-partner.google.com>2022-10-06 18:17:01 +0000
commit8de7c01e8b1db914f8f14b7b0c61e3652157f2fd (patch)
tree73712ea448e75a47470342c51ea6295a187265cd /src
parent47ee85f4d5b6818d1216511d0d7160b6b9431cc5 (diff)
downloadcoreboot-8de7c01e8b1db914f8f14b7b0c61e3652157f2fd.tar.gz
coreboot-8de7c01e8b1db914f8f14b7b0c61e3652157f2fd.tar.bz2
coreboot-8de7c01e8b1db914f8f14b7b0c61e3652157f2fd.zip
ec/starlabs/merlin: Add support for enabling fast charge
The Lite Mk IV's can enable fast charging, with support up to 100W via USB-C PD 3.0. The default for this is disabled, as it can reduce battery life span. This patch adds the option to enable fast charging, by writing 0x01 to 0x18 in the EC space. Signed-off-by: Sean Rhodes <sean@starlabs.systems> Change-Id: Ie01eb59d3f41b242190973fd9c58b1494320c12a Reviewed-on: https://review.coreboot.org/c/coreboot/+/66298 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/ec/starlabs/merlin/Kconfig7
-rw-r--r--src/ec/starlabs/merlin/ec.h4
-rw-r--r--src/ec/starlabs/merlin/nuvoton.c21
-rw-r--r--src/ec/starlabs/merlin/variants/apl/ecdefs.h1
-rw-r--r--src/ec/starlabs/merlin/variants/cezanne/ecdefs.h4
-rw-r--r--src/ec/starlabs/merlin/variants/cml/ecdefs.h4
-rw-r--r--src/ec/starlabs/merlin/variants/glk/ecdefs.h1
-rw-r--r--src/ec/starlabs/merlin/variants/glkr/ecdefs.h1
-rw-r--r--src/ec/starlabs/merlin/variants/glkr/emem.asl1
-rw-r--r--src/ec/starlabs/merlin/variants/kbl/ecdefs.h1
-rw-r--r--src/ec/starlabs/merlin/variants/merlin/ecdefs.h1
-rw-r--r--src/ec/starlabs/merlin/variants/tgl/ecdefs.h4
12 files changed, 50 insertions, 0 deletions
diff --git a/src/ec/starlabs/merlin/Kconfig b/src/ec/starlabs/merlin/Kconfig
index ff6077a80671..6ccd21791c3e 100644
--- a/src/ec/starlabs/merlin/Kconfig
+++ b/src/ec/starlabs/merlin/Kconfig
@@ -50,6 +50,13 @@ config EC_STARLABS_FAN
help
Select if the mainboard has a fan.
+config EC_STARLABS_FAST_CHARGE
+ bool
+ default n
+ depends on EC_STARLABS_NUVOTON
+ help
+ Select if the mainboard supports fast charging.
+
config EC_STARLABS_MAX_CHARGE
bool
default n
diff --git a/src/ec/starlabs/merlin/ec.h b/src/ec/starlabs/merlin/ec.h
index 6a6cda5ee13f..ca1d081f0c5c 100644
--- a/src/ec/starlabs/merlin/ec.h
+++ b/src/ec/starlabs/merlin/ec.h
@@ -71,6 +71,10 @@
#define CHARGE_80 0xbb
#define CHARGE_60 0xaa
+/* Fast Charge Setting */
+#define CHARGE_RATE_NORMAL 0x00
+#define CHARGE_RATE_FAST 0x01
+
/* Fan Mode Setting */
#define FAN_NORMAL 0x00
#define FAN_AGGRESSIVE 0xbb
diff --git a/src/ec/starlabs/merlin/nuvoton.c b/src/ec/starlabs/merlin/nuvoton.c
index ee8a66176f95..e62f3dcb532f 100644
--- a/src/ec/starlabs/merlin/nuvoton.c
+++ b/src/ec/starlabs/merlin/nuvoton.c
@@ -137,6 +137,27 @@ static void merlin_init(struct device *dev)
ARRAY_SIZE(max_charge)));
/*
+ * Fast Charge
+ *
+ * Setting: fast_charge
+ *
+ * Values: Normal, Fast
+ * Default: Normal
+ *
+ */
+ const uint8_t fast_charge[] = {
+ CHARGE_RATE_NORMAL,
+ CHARGE_RATE_FAST
+ };
+
+ if (CONFIG(EC_STARLABS_FAST_CHARGE))
+ ec_write(ECRAM_FAST_CHARGE,
+ get_ec_value_from_option("fast_charge",
+ 0,
+ fast_charge,
+ ARRAY_SIZE(fast_charge)));
+
+ /*
* Fan Mode
*
* Setting: fan_mode
diff --git a/src/ec/starlabs/merlin/variants/apl/ecdefs.h b/src/ec/starlabs/merlin/variants/apl/ecdefs.h
index bb791bc9dc52..fa7e79b1486d 100644
--- a/src/ec/starlabs/merlin/variants/apl/ecdefs.h
+++ b/src/ec/starlabs/merlin/variants/apl/ecdefs.h
@@ -22,5 +22,6 @@
#define ECRAM_FN_CTRL_REVERSE 0x2d
#define ECRAM_MAX_CHARGE dead_code_t(uint8_t)
#define ECRAM_FAN_MODE dead_code_t(uint8_t)
+#define ECRAM_FAST_CHARGE dead_code_t(uint8_t)
#endif
diff --git a/src/ec/starlabs/merlin/variants/cezanne/ecdefs.h b/src/ec/starlabs/merlin/variants/cezanne/ecdefs.h
index a75720e34e57..6a3bad928632 100644
--- a/src/ec/starlabs/merlin/variants/cezanne/ecdefs.h
+++ b/src/ec/starlabs/merlin/variants/cezanne/ecdefs.h
@@ -1,5 +1,8 @@
/* SPDX-License-Identifier: GPL-2.0-only */
+#include <assert.h>
+#include <stdint.h>
+
/*
* EC communication interface for ITE Embedded Controller
*/
@@ -19,5 +22,6 @@
#define ECRAM_FN_CTRL_REVERSE 0x22
#define ECRAM_MAX_CHARGE 0x23
#define ECRAM_FAN_MODE 0x24
+#define ECRAM_FAST_CHARGE dead_code_t(uint8_t)
#endif
diff --git a/src/ec/starlabs/merlin/variants/cml/ecdefs.h b/src/ec/starlabs/merlin/variants/cml/ecdefs.h
index 78c032997acf..6a24bc4debc7 100644
--- a/src/ec/starlabs/merlin/variants/cml/ecdefs.h
+++ b/src/ec/starlabs/merlin/variants/cml/ecdefs.h
@@ -1,5 +1,8 @@
/* SPDX-License-Identifier: GPL-2.0-only */
+#include <assert.h>
+#include <stdint.h>
+
/*
* EC communication interface for ITE Embedded Controller
*/
@@ -19,5 +22,6 @@
#define ECRAM_KBL_STATE 0x18
#define ECRAM_KBL_BRIGHTNESS 0x19
#define ECRAM_FN_LOCK_STATE 0x2c
+#define ECRAM_FAST_CHARGE dead_code_t(uint8_t)
#endif
diff --git a/src/ec/starlabs/merlin/variants/glk/ecdefs.h b/src/ec/starlabs/merlin/variants/glk/ecdefs.h
index 740726704146..fefdd141c97c 100644
--- a/src/ec/starlabs/merlin/variants/glk/ecdefs.h
+++ b/src/ec/starlabs/merlin/variants/glk/ecdefs.h
@@ -22,5 +22,6 @@
#define ECRAM_FN_CTRL_REVERSE 0x2d
#define ECRAM_MAX_CHARGE dead_code_t(uint8_t)
#define ECRAM_FAN_MODE dead_code_t(uint8_t)
+#define ECRAM_FAST_CHARGE dead_code_t(uint8_t)
#endif
diff --git a/src/ec/starlabs/merlin/variants/glkr/ecdefs.h b/src/ec/starlabs/merlin/variants/glkr/ecdefs.h
index 51b34dfd3e0e..038c378fb25c 100644
--- a/src/ec/starlabs/merlin/variants/glkr/ecdefs.h
+++ b/src/ec/starlabs/merlin/variants/glkr/ecdefs.h
@@ -22,5 +22,6 @@
#define ECRAM_FN_CTRL_REVERSE 0x13
#define ECRAM_MAX_CHARGE dead_code_t(uint8_t)
#define ECRAM_FAN_MODE dead_code_t(uint8_t)
+#define ECRAM_FAST_CHARGE 0x18
#endif
diff --git a/src/ec/starlabs/merlin/variants/glkr/emem.asl b/src/ec/starlabs/merlin/variants/glkr/emem.asl
index 4f7c10053bd1..6fa827eea89e 100644
--- a/src/ec/starlabs/merlin/variants/glkr/emem.asl
+++ b/src/ec/starlabs/merlin/variants/glkr/emem.asl
@@ -26,6 +26,7 @@ Field (ECF2, ByteAcc, Lock, Preserve)
FLKE, 8, // Function Lock State
KLSE, 8, // Keyboard Backlight State
KLBE, 8, // Keyboard Backlight Brightness
+ FSCH, 8, // Fast Charge
Offset(0x20),
RCMD, 8, // Send EC command
diff --git a/src/ec/starlabs/merlin/variants/kbl/ecdefs.h b/src/ec/starlabs/merlin/variants/kbl/ecdefs.h
index a9dda9271668..3b693173af76 100644
--- a/src/ec/starlabs/merlin/variants/kbl/ecdefs.h
+++ b/src/ec/starlabs/merlin/variants/kbl/ecdefs.h
@@ -22,5 +22,6 @@
#define ECRAM_FAN_MODE 0x42
#define ECRAM_FN_CTRL_REVERSE 0x43
#define ECRAM_MAX_CHARGE dead_code_t(uint8_t)
+#define ECRAM_FAST_CHARGE dead_code_t(uint8_t)
#endif
diff --git a/src/ec/starlabs/merlin/variants/merlin/ecdefs.h b/src/ec/starlabs/merlin/variants/merlin/ecdefs.h
index 48357d964a67..f02c73a27cf7 100644
--- a/src/ec/starlabs/merlin/variants/merlin/ecdefs.h
+++ b/src/ec/starlabs/merlin/variants/merlin/ecdefs.h
@@ -19,5 +19,6 @@
#define ECRAM_KBL_TIMEOUT 0x35
#define ECRAM_FAN_MODE 0x50
#define ECRAM_MAX_CHARGE 0x51
+#define ECRAM_FAST_CHARGE 0x52
#endif
diff --git a/src/ec/starlabs/merlin/variants/tgl/ecdefs.h b/src/ec/starlabs/merlin/variants/tgl/ecdefs.h
index 3441bc073f65..cbc7b86e108e 100644
--- a/src/ec/starlabs/merlin/variants/tgl/ecdefs.h
+++ b/src/ec/starlabs/merlin/variants/tgl/ecdefs.h
@@ -1,5 +1,8 @@
/* SPDX-License-Identifier: GPL-2.0-only */
+#include <assert.h>
+#include <stdint.h>
+
/*
* EC communication interface for ITE Embedded Controller
*/
@@ -19,5 +22,6 @@
#define ECRAM_FN_CTRL_REVERSE 0x17
#define ECRAM_MAX_CHARGE 0x1a
#define ECRAM_FAN_MODE 0x1b
+#define ECRAM_FAST_CHARGE dead_code_t(uint8_t)
#endif