From mboxrd@z Thu Jan 1 00:00:00 1970 From: Fengguang Wu Subject: Re: [PATCH] drm/i915: ELD info update during HDMI hot plug Date: Wed, 5 Sep 2012 13:29:52 +0800 Message-ID: <20120905052952.GA7081@localhost> References: <1346821576-18024-1-git-send-email-xingchao.wang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 1965F9E77C for ; Tue, 4 Sep 2012 22:29:55 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1346821576-18024-1-git-send-email-xingchao.wang@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org To: Wang Xingchao Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Xingchao, We have the drm_i915_display_funcs.write_eld() for such functionalities. Thanks, Fengguang On Wed, Sep 05, 2012 at 01:06:16PM +0800, Wang Xingchao wrote: > ELD infomation should update immediately when detected HDMI hot plug event. > The related ELD_VALID bit should be set/clear to generate unsolicited event > to notify Alsa driver this change. > > Signed-off-by: Wang Xingchao > --- > drivers/gpu/drm/i915/intel_hdmi.c | 28 ++++++++++++++++++++++++++++ > 1 file changed, 28 insertions(+) > > diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c > index e4c37bb..1d9aaa9 100644 > --- a/drivers/gpu/drm/i915/intel_hdmi.c > +++ b/drivers/gpu/drm/i915/intel_hdmi.c > @@ -719,6 +719,10 @@ intel_hdmi_detect(struct drm_connector *connector, bool force) > struct drm_i915_private *dev_priv = connector->dev->dev_private; > struct edid *edid; > enum drm_connector_status status = connector_status_disconnected; > + enum drm_connector_status old_status = connector->status; > + int aud_cntrl_st2; > + uint32_t eldv; > + int i; > > if (IS_G4X(connector->dev) && !g4x_hdmi_connected(intel_hdmi)) > return status; > @@ -747,6 +751,30 @@ intel_hdmi_detect(struct drm_connector *connector, bool force) > (intel_hdmi->force_audio == HDMI_AUDIO_ON); > } > > + if (status != old_status) { > + if (HAS_PCH_IBX(connector->dev)) > + aud_cntrl_st2 = IBX_AUD_CNTL_ST2; > + else if (IS_HASWELL(connector->dev)) > + aud_cntrl_st2 = HSW_AUD_PIN_ELD_CP_VLD; > + else > + aud_cntrl_st2 = CPT_AUD_CNTRL_ST2; > + > + eldv = (AUDIO_ELD_VALID_A | > + AUDIO_ELD_VALID_B | > + AUDIO_ELD_VALID_C) ; > + if (status == connector_status_connected) { > + DRM_DEBUG_KMS("[CONNECTOR:%d:%s] Pluged In\n", connector->base.id, > + drm_get_connector_name(connector)); > + I915_WRITE(aud_cntrl_st2, eldv); > + } else { > + i = I915_READ(aud_cntrl_st2); > + i &= ~eldv; > + I915_WRITE(aud_cntrl_st2, i); > + DRM_DEBUG_KMS("[CONNECTOR:%d:%s] Pluged Out\n", connector->base.id, > + drm_get_connector_name(connector)); > + } > + } > + > return status; > } > > -- > 1.7.9.5