From ee1900dfde5f440ea77341275be6b269f4b9a630 Mon Sep 17 00:00:00 2001 From: Shunqing Chen Date: Thu, 15 Oct 2020 09:30:23 +0800 Subject: [PATCH] drm: bridge: dw-hdmi: Fix the issue of EXTCON_DISP_HDMI state error First, echo off > sys/class/drm/card0-HDMI-A-1/status, the EXTCON_DISP_HDMI state is 0. Then, echo detect > sys/class/drm/card0-HDMI-A-1/status, the EXTCON_DISP_HDMI state still is 0. As a result, HDMI has no sound. Signed-off-by: Shunqing Chen Change-Id: I6d7904cb75fec21899389dbaba8acbd266dac7cd --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c index 37bfde9f9520..2b2576861d6e 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -402,8 +402,6 @@ static void repo_hpd_event(struct work_struct *p_work) ktime_get()); drm_bridge_hpd_notify(&hdmi->bridge, status); } - - extcon_set_state_sync(hdmi->extcon, EXTCON_DISP_HDMI, hdmi->hpd_state); } static bool check_hdmi_irq(struct dw_hdmi *hdmi, int intr_stat, @@ -2750,6 +2748,11 @@ static enum drm_connector_status dw_hdmi_detect(struct dw_hdmi *hdmi) } mutex_unlock(&hdmi->mutex); + if (result == connector_status_connected) + extcon_set_state_sync(hdmi->extcon, EXTCON_DISP_HDMI, true); + else + extcon_set_state_sync(hdmi->extcon, EXTCON_DISP_HDMI, false); + return result; } @@ -2927,11 +2930,11 @@ static void dw_hdmi_connector_force(struct drm_connector *connector) mutex_lock(&hdmi->mutex); - if (!hdmi->disabled && hdmi->force != connector->force) { - if (connector->force == DRM_FORCE_OFF) + if (hdmi->force != connector->force) { + if (!hdmi->disabled && connector->force == DRM_FORCE_OFF) extcon_set_state_sync(hdmi->extcon, EXTCON_DISP_HDMI, false); - else if (connector->force == DRM_FORCE_ON) + else if (hdmi->disabled && connector->force == DRM_FORCE_ON) extcon_set_state_sync(hdmi->extcon, EXTCON_DISP_HDMI, true); }