diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_display.c')
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_display.c | 17 | 
1 files changed, 13 insertions, 4 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c index bfa2a601572..1da2386d7cf 100644 --- a/drivers/gpu/drm/radeon/radeon_display.c +++ b/drivers/gpu/drm/radeon/radeon_display.c @@ -378,8 +378,12 @@ static int radeon_crtc_page_flip(struct drm_crtc *crtc,  	work->old_rbo = rbo;  	obj = new_radeon_fb->obj;  	rbo = gem_to_radeon_bo(obj); + +	spin_lock(&rbo->tbo.bdev->fence_lock);  	if (rbo->tbo.sync_obj)  		work->fence = radeon_fence_ref(rbo->tbo.sync_obj); +	spin_unlock(&rbo->tbo.bdev->fence_lock); +  	INIT_WORK(&work->work, radeon_unpin_work_func);  	/* We borrow the event spin lock for protecting unpin_work */ @@ -695,10 +699,15 @@ int radeon_ddc_get_modes(struct radeon_connector *radeon_connector)  	if (radeon_connector->router.ddc_valid)  		radeon_router_select_ddc_port(radeon_connector); -	if ((radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_DisplayPort) || -	    (radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_eDP) || -	    (radeon_connector_encoder_get_dp_bridge_encoder_id(&radeon_connector->base) != -	     ENCODER_OBJECT_ID_NONE)) { +	if (radeon_connector_encoder_get_dp_bridge_encoder_id(&radeon_connector->base) != +	    ENCODER_OBJECT_ID_NONE) { +		struct radeon_connector_atom_dig *dig = radeon_connector->con_priv; + +		if (dig->dp_i2c_bus) +			radeon_connector->edid = drm_get_edid(&radeon_connector->base, +							      &dig->dp_i2c_bus->adapter); +	} else if ((radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_DisplayPort) || +		   (radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_eDP)) {  		struct radeon_connector_atom_dig *dig = radeon_connector->con_priv;  		if ((dig->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT ||  |