Patchwork drm/i915: HDMI - Clear Audio Enable bit for Hot Plug unconditionally

login
register
mail settings
Submitter Rex Tsai
Date Sept. 26, 2012, 10:24 a.m.
Message ID <8f3b812f576291f5a26fa0a4dc7bd78b178ac0ea.1348653931.git.rex.tsai@canonical.com>
Download mbox | patch
Permalink /patch/187036/
State New
Headers show

Comments

Rex Tsai - Sept. 26, 2012, 10:24 a.m.
From: Wang Xingchao <xingchao.wang@intel.com>

Clear Audio Enable bit to trigger unsolicated event to notify Audio
Driver part the HDMI hot plug change. The patch fixed the bug when
remove HDMI cable the bit was not cleared correctly.

In intel_enable_hdmi(), if intel_hdmi->has_audio been true, the "Audio enable bit" will
be set to trigger unsolicated event to notify Alsa driver the change.

intel_hdmi->has_audio will be reset to false from intel_hdmi_detect() after
remove the hdmi cable, here's debug log:

[  187.494153] [drm:output_poll_execute], [CONNECTOR:17:HDMI-A-1] status updated from 1 to 2
[  187.525349] [drm:intel_hdmi_detect], HDMI: has_audio = 0

so when comes back to intel_disable_hdmi(), the "Audio enable bit" will not be cleared. And this
cause the eld infomation and pin presence doesnot update accordingly in alsa driver side.

This patch will also trigger unsolicated event to alsa driver to notify the hot plug event:

[  187.853159] ALSA sound/pci/hda/patch_hdmi.c:772 HDMI hot plug event: Codec=3 Pin=5 Presence_Detect=0 ELD_Valid=1
[  187.853268] ALSA sound/pci/hda/patch_hdmi.c:990 HDMI status: Codec=3 Pin=5 Presence_Detect=0 ELD_Valid=0

Signed-off-by: Wang Xingchao <xingchao.wang@intel.com>
Signed-off-by: Rex Tsai <rex.tsai@canonical.com>
---
 drivers/gpu/drm/i915/intel_hdmi.c |    5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)
Herton Ronaldo Krzesinski - Sept. 26, 2012, 12:55 p.m.
On Wed, Sep 26, 2012 at 06:24:04PM +0800, Rex Tsai wrote:
> From: Wang Xingchao <xingchao.wang@intel.com>
> 
> Clear Audio Enable bit to trigger unsolicated event to notify Audio
> Driver part the HDMI hot plug change. The patch fixed the bug when
> remove HDMI cable the bit was not cleared correctly.
> 
> In intel_enable_hdmi(), if intel_hdmi->has_audio been true, the "Audio enable bit" will
> be set to trigger unsolicated event to notify Alsa driver the change.
> 
> intel_hdmi->has_audio will be reset to false from intel_hdmi_detect() after
> remove the hdmi cable, here's debug log:
> 
> [  187.494153] [drm:output_poll_execute], [CONNECTOR:17:HDMI-A-1] status updated from 1 to 2
> [  187.525349] [drm:intel_hdmi_detect], HDMI: has_audio = 0
> 
> so when comes back to intel_disable_hdmi(), the "Audio enable bit" will not be cleared. And this
> cause the eld infomation and pin presence doesnot update accordingly in alsa driver side.
> 
> This patch will also trigger unsolicated event to alsa driver to notify the hot plug event:
> 
> [  187.853159] ALSA sound/pci/hda/patch_hdmi.c:772 HDMI hot plug event: Codec=3 Pin=5 Presence_Detect=0 ELD_Valid=1
> [  187.853268] ALSA sound/pci/hda/patch_hdmi.c:990 HDMI status: Codec=3 Pin=5 Presence_Detect=0 ELD_Valid=0
> 
> Signed-off-by: Wang Xingchao <xingchao.wang@intel.com>
> Signed-off-by: Rex Tsai <rex.tsai@canonical.com>
> ---
>  drivers/gpu/drm/i915/intel_hdmi.c |    5 +----
>  1 file changed, 1 insertion(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
> index 9cd81ba..427ec8c 100644
> --- a/drivers/gpu/drm/i915/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> @@ -269,10 +269,7 @@ static void intel_hdmi_dpms(struct drm_encoder *encoder, int mode)
>  	struct drm_i915_private *dev_priv = dev->dev_private;
>  	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
>  	u32 temp;
> -	u32 enable_bits = SDVO_ENABLE;
> -
> -	if (intel_hdmi->has_audio)
> -		enable_bits |= SDVO_AUDIO_ENABLE;
> +	u32 enable_bits = SDVO_ENABLE | SDVO_AUDIO_ENABLE;

This is different from the patch merged in Linus tree for 3.6. Looking
at the discussion on https://patchwork.kernel.org/patch/1450051/, it
points we should use what was merged
(commit b98b60167279df3acac9422c3c9820d9ebbcf9fb)

>  
>  	temp = I915_READ(intel_hdmi->sdvox_reg);
>  
> -- 
> 1.7.9.5

Patch

diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 9cd81ba..427ec8c 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -269,10 +269,7 @@  static void intel_hdmi_dpms(struct drm_encoder *encoder, int mode)
 	struct drm_i915_private *dev_priv = dev->dev_private;
 	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
 	u32 temp;
-	u32 enable_bits = SDVO_ENABLE;
-
-	if (intel_hdmi->has_audio)
-		enable_bits |= SDVO_AUDIO_ENABLE;
+	u32 enable_bits = SDVO_ENABLE | SDVO_AUDIO_ENABLE;
 
 	temp = I915_READ(intel_hdmi->sdvox_reg);