From 384e9aed8c477922c960e2cbd429bd3a15b371de Mon Sep 17 00:00:00 2001 From: Evgeny Zinoviev Date: Thu, 30 Aug 2018 02:18:48 +0300 Subject: mb/lenovo: Support dual graphics for xx20/xx30 ThinkPads Add CMOS option that allows to use both integrated and discrete GPU. Tested on ThinkPad W530. Change-Id: I8842fef0fa1235eb91abf6b7e655ed4d8598adc7 Signed-off-by: Evgeny Zinoviev Reviewed-on: https://review.coreboot.org/28393 Reviewed-by: Patrick Rudolph Tested-by: build bot (Jenkins) --- src/ec/lenovo/pmh7/pmh7.c | 21 +++++++++++++++++++++ src/ec/lenovo/pmh7/pmh7.h | 2 ++ 2 files changed, 23 insertions(+) (limited to 'src/ec/lenovo') diff --git a/src/ec/lenovo/pmh7/pmh7.c b/src/ec/lenovo/pmh7/pmh7.c index b160fd0bc1..f7b798be33 100644 --- a/src/ec/lenovo/pmh7/pmh7.c +++ b/src/ec/lenovo/pmh7/pmh7.c @@ -19,6 +19,7 @@ #include #include #include +#include #include "pmh7.h" #include "chip.h" @@ -64,6 +65,26 @@ void pmh7_ultrabay_power_enable(int onoff) pmh7_register_set_bit(0x62, 0); } +void pmh7_dgpu_power_enable(int onoff) +{ + if (onoff) { + pmh7_register_clear_bit(0x50, 7); // DGPU_RST + pmh7_register_set_bit(0x50, 3); // DGPU_PWR + mdelay(10); + pmh7_register_set_bit(0x50, 7); // DGPU_RST + mdelay(50); + } else { + pmh7_register_clear_bit(0x50, 7); // DGPU_RST + udelay(100); + pmh7_register_clear_bit(0x50, 3); // DGPU_PWR + } +} + +bool pmh7_dgpu_power_state(void) +{ + return (pmh7_register_read(0x50) & 0x08) == 8; +} + void pmh7_register_set_bit(int reg, int bit) { char val; diff --git a/src/ec/lenovo/pmh7/pmh7.h b/src/ec/lenovo/pmh7/pmh7.h index d486ceb041..a641fce0fa 100644 --- a/src/ec/lenovo/pmh7/pmh7.h +++ b/src/ec/lenovo/pmh7/pmh7.h @@ -35,5 +35,7 @@ void pmh7_dock_event_enable(int onoff); void pmh7_touchpad_enable(int onoff); void pmh7_ultrabay_power_enable(int onoff); void pmh7_trackpoint_enable(int onoff); +void pmh7_dgpu_power_enable(int onoff); +bool pmh7_dgpu_power_state(void); #endif /* EC_LENOVO_PMH7_H */ -- cgit v1.2.3