diff options
Diffstat (limited to 'src/ec/lenovo')
-rw-r--r-- | src/ec/lenovo/pmh7/pmh7.c | 21 | ||||
-rw-r--r-- | src/ec/lenovo/pmh7/pmh7.h | 2 |
2 files changed, 23 insertions, 0 deletions
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 <device/pnp.h> #include <stdlib.h> #include <pc80/mc146818rtc.h> +#include <delay.h> #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 */ |