summaryrefslogtreecommitdiff
path: root/src/ec/lenovo
diff options
context:
space:
mode:
authorBill XIE <persmule@hardenedlinux.org>2020-03-21 02:07:41 +0800
committerPatrick Georgi <pgeorgi@google.com>2020-05-13 08:47:04 +0000
commit4611ad8930f57aa0e394e476c613fae1a4931c13 (patch)
treec3bce913a5b37a8899ab208ee2c84724bbd144d9 /src/ec/lenovo
parent702cf30e987ef07533ef589035d7256c0be3d52c (diff)
downloadcoreboot-4611ad8930f57aa0e394e476c613fae1a4931c13.tar.xz
ec/lenovo/h8: Reintroduce h8_mb_init() for specific boards
Mainboard specific dock-init mechanism introduced https://review.coreboot.org/c/coreboot/+/36093 works on most boards, but https://ticket.coreboot.org/issues/256 shows that some boards (e.g. x201 and t410) need communication with h8 EC to enable or disable dock, (in dock_connect() and dock_disconnect() respectively) so they must be done after the h8 EC is brought up, which is not garanteed in the above mainboard specific dock-init mechanism. This time, a hook function h8_mb_init() will be called at the end of h8_enable(). (in place of the ancient h8_mainboard_init_dock() removed in CB:36093) Its default implementation is a weak empty function, but could be overrided with a strong one for boards needing to perform actions which should be done after h8 EC is brought up. This should fix the regression detected in https://ticket.coreboot.org/issues/256 Change-Id: I3674fbfeab2ea2cd2a4453a8e77521157d553388 Signed-off-by: Bill XIE <persmule@hardenedlinux.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/39708 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Patrick Rudolph <siro@das-labor.org>
Diffstat (limited to 'src/ec/lenovo')
-rw-r--r--src/ec/lenovo/h8/h8.c3
-rw-r--r--src/ec/lenovo/h8/h8.h5
2 files changed, 8 insertions, 0 deletions
diff --git a/src/ec/lenovo/h8/h8.c b/src/ec/lenovo/h8/h8.c
index c29364c9ef..aa1877eac6 100644
--- a/src/ec/lenovo/h8/h8.c
+++ b/src/ec/lenovo/h8/h8.c
@@ -221,6 +221,8 @@ struct device_operations h8_dev_ops = {
.init = h8_init,
};
+void __weak h8_mb_init(void){ /* NOOP */ }
+
static void h8_enable(struct device *dev)
{
struct ec_lenovo_h8_config *conf = dev->chip_info;
@@ -340,6 +342,7 @@ static void h8_enable(struct device *dev)
h8_charge_priority(val);
h8_set_audio_mute(0);
+ h8_mb_init();
}
struct chip_operations ec_lenovo_h8_ops = {
diff --git a/src/ec/lenovo/h8/h8.h b/src/ec/lenovo/h8/h8.h
index 6c2f86ab51..c5092c3a29 100644
--- a/src/ec/lenovo/h8/h8.h
+++ b/src/ec/lenovo/h8/h8.h
@@ -35,6 +35,11 @@ bool h8_wwan_nv_enable(void);
bool h8_has_wwan(const struct device *dev);
void h8_ssdt_generator(const struct device *dev);
+/*
+ * boards needing specific h8-related inits could override it
+ */
+void h8_mb_init(void);
+
/* EC registers */
#define H8_CONFIG0 0x00