From 5156afa79ca4538ecd19d6cd9e562848abd7fcfc Mon Sep 17 00:00:00 2001 From: Imre Deak Date: Tue, 3 Apr 2018 20:18:00 +0300 Subject: [PATCH] drm/i915: Make sure HDMI TMDS output buffer gets enabled Signed-off-by: Imre Deak --- drivers/gpu/drm/drm_dp_dual_mode_helper.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/drm_dp_dual_mode_helper.c b/drivers/gpu/drm/drm_dp_dual_mode_helper.c index 02a50929af67..de48dafbc32f 100644 --- a/drivers/gpu/drm/drm_dp_dual_mode_helper.c +++ b/drivers/gpu/drm/drm_dp_dual_mode_helper.c @@ -350,18 +350,34 @@ int drm_dp_dual_mode_set_tmds_output(enum drm_dp_dual_mode_type type, { uint8_t tmds_oen = enable ? 0 : DP_DUAL_MODE_TMDS_DISABLE; ssize_t ret; + int i; if (type < DRM_DP_DUAL_MODE_TYPE2_DVI) return 0; - ret = drm_dp_dual_mode_write(adapter, DP_DUAL_MODE_TMDS_OEN, - &tmds_oen, sizeof(tmds_oen)); - if (ret) { - DRM_DEBUG_KMS("Failed to %s TMDS output buffers\n", - enable ? "enable" : "disable"); - return ret; + for (i = 0; i < 10; i++) { + uint8_t tmp; + + ret = drm_dp_dual_mode_write(adapter, DP_DUAL_MODE_TMDS_OEN, + &tmds_oen, sizeof(tmds_oen)); + if (ret) { + DRM_DEBUG_KMS("Failed to %s TMDS output buffers\n", + enable ? "enable" : "disable"); + return ret; + } + + ret = drm_dp_dual_mode_read(adapter, DP_DUAL_MODE_TMDS_OEN, + &tmp, sizeof(tmp)); + if (ret) { + DRM_DEBUG_KMS("Failed to read TMDS output buffer state\n"); + return ret; + } + if (tmp == tmds_oen) + break; } + DRM_DEBUG_KMS("TMDS output buffer write attempts: %d\n", i); + return 0; } EXPORT_SYMBOL(drm_dp_dual_mode_set_tmds_output); -- 2.13.2