diff options
author | Amy Zhang | 2017-05-12 21:54:29 +0200 |
---|---|---|
committer | Alex Deucher | 2017-09-27 00:07:12 +0200 |
commit | aa7397dfd4cd2e31f007ad3adc08823afb40c25b (patch) | |
tree | 41bb0fdce58e21a97f4ed2a46c3a752700852af5 /drivers/gpu/drm/amd/display/dc/dce/dce_abm.c | |
parent | drm/amd/display: Fix slow FPS. (diff) | |
download | kernel-qcow2-linux-aa7397dfd4cd2e31f007ad3adc08823afb40c25b.tar.gz kernel-qcow2-linux-aa7397dfd4cd2e31f007ad3adc08823afb40c25b.tar.xz kernel-qcow2-linux-aa7397dfd4cd2e31f007ad3adc08823afb40c25b.zip |
drm/amd/display: Disable ABM when eDP is disabled
- Add immediate ABM disable when eDP is disabled
- Fix purple screen when ABM is mistakenly enabled
on non eDP display
Signed-off-by: Amy Zhang <Amy.Zhang@amd.com>
Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
Acked-by: Harry Wentland <Harry.Wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/display/dc/dce/dce_abm.c')
-rw-r--r-- | drivers/gpu/drm/amd/display/dc/dce/dce_abm.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c b/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c index cefffe164fe0..b4fa78292ad2 100644 --- a/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c +++ b/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c @@ -49,6 +49,8 @@ #define MCP_ABM_PIPE_SET 0x66 #define MCP_BL_SET 0x67 +#define MCP_DISABLE_ABM_IMMEDIATELY 255 + struct abm_backlight_registers { unsigned int BL_PWM_CNTL; unsigned int BL_PWM_CNTL2; @@ -315,6 +317,24 @@ static bool dce_abm_set_level(struct abm *abm, uint32_t level) return true; } +static bool dce_abm_immediate_disable(struct abm *abm) +{ + struct dce_abm *abm_dce = TO_DCE_ABM(abm); + + REG_WAIT(MASTER_COMM_CNTL_REG, MASTER_COMM_INTERRUPT, 0, + 100, 800); + + /* setDMCUParam_ABMLevel */ + REG_UPDATE_2(MASTER_COMM_CMD_REG, + MASTER_COMM_CMD_REG_BYTE0, MCP_ABM_LEVEL_SET, + MASTER_COMM_CMD_REG_BYTE2, MCP_DISABLE_ABM_IMMEDIATELY); + + /* notifyDMCUMsg */ + REG_UPDATE(MASTER_COMM_CNTL_REG, MASTER_COMM_INTERRUPT, 1); + + return true; +} + static bool dce_abm_init_backlight(struct abm *abm) { struct dce_abm *abm_dce = TO_DCE_ABM(abm); @@ -414,6 +434,7 @@ static const struct abm_funcs dce_funcs = { .init_backlight = dce_abm_init_backlight, .set_backlight_level = dce_abm_set_backlight_level, .get_current_backlight_8_bit = dce_abm_get_current_backlight_8_bit, + .set_abm_immediate_disable = dce_abm_immediate_disable, .is_dmcu_initialized = is_dmcu_initialized }; |