diff options
Diffstat (limited to 'drivers/gpu/drm/amd/display/amdgpu_dm')
| -rw-r--r-- | drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 12 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 7 | 
2 files changed, 15 insertions, 4 deletions
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index f76d2ef9ca5c..8170923b3c76 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -2081,6 +2081,8 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)  	dc_hardware_init(adev->dm.dc); +	adev->dm.restore_backlight = true; +  	adev->dm.hpd_rx_offload_wq = hpd_rx_irq_create_workqueue(adev);  	if (!adev->dm.hpd_rx_offload_wq) {  		drm_err(adev_to_drm(adev), "failed to create hpd rx offload workqueue.\n"); @@ -3436,6 +3438,7 @@ static int dm_resume(struct amdgpu_ip_block *ip_block)  		dc_set_power_state(dm->dc, DC_ACPI_CM_POWER_STATE_D0);  		dc_resume(dm->dc); +		adev->dm.restore_backlight = true;  		amdgpu_dm_irq_resume_early(adev); @@ -9927,7 +9930,6 @@ static void amdgpu_dm_commit_streams(struct drm_atomic_state *state,  	bool mode_set_reset_required = false;  	u32 i;  	struct dc_commit_streams_params params = {dc_state->streams, dc_state->stream_count}; -	bool set_backlight_level = false;  	/* Disable writeback */  	for_each_old_connector_in_state(state, connector, old_con_state, i) { @@ -10047,7 +10049,6 @@ static void amdgpu_dm_commit_streams(struct drm_atomic_state *state,  			acrtc->hw_mode = new_crtc_state->mode;  			crtc->hwmode = new_crtc_state->mode;  			mode_set_reset_required = true; -			set_backlight_level = true;  		} else if (modereset_required(new_crtc_state)) {  			drm_dbg_atomic(dev,  				       "Atomic commit: RESET. crtc id %d:[%p]\n", @@ -10104,13 +10105,16 @@ static void amdgpu_dm_commit_streams(struct drm_atomic_state *state,  	 * to fix a flicker issue.  	 * It will cause the dm->actual_brightness is not the current panel brightness  	 * level. (the dm->brightness is the correct panel level) -	 * So we set the backlight level with dm->brightness value after set mode +	 * So we set the backlight level with dm->brightness value after initial +	 * set mode. Use restore_backlight flag to avoid setting backlight level +	 * for every subsequent mode set.  	 */ -	if (set_backlight_level) { +	if (dm->restore_backlight) {  		for (i = 0; i < dm->num_of_edps; i++) {  			if (dm->backlight_dev[i])  				amdgpu_dm_backlight_set_level(dm, i, dm->brightness[i]);  		} +		dm->restore_backlight = false;  	}  } diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h index 2967cd28efe4..69441980c3fa 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h @@ -626,6 +626,13 @@ struct amdgpu_display_manager {  	u32 actual_brightness[AMDGPU_DM_MAX_NUM_EDP];  	/** +	 * @restore_backlight: +	 * +	 * Flag to indicate whether to restore backlight after modeset. +	 */ +	bool restore_backlight; + +	/**  	 * @aux_hpd_discon_quirk:  	 *  	 * quirk for hpd discon while aux is on-going.  | 
