OSDN Git Service

drm/i915/audio: add audio codec disable on g4x
authorJani Nikula <jani.nikula@intel.com>
Mon, 27 Oct 2014 14:26:57 +0000 (16:26 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 7 Nov 2014 17:42:17 +0000 (18:42 +0100)
This not based on any documentation...

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_audio.c

index 5c2d06c..fa0eecf 100644 (file)
@@ -93,6 +93,25 @@ static bool intel_eld_uptodate(struct drm_connector *connector,
        return true;
 }
 
+static void g4x_audio_codec_disable(struct intel_encoder *encoder)
+{
+       struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
+       uint32_t eldv, tmp;
+
+       DRM_DEBUG_KMS("Disable audio codec\n");
+
+       tmp = I915_READ(G4X_AUD_VID_DID);
+       if (tmp == INTEL_AUDIO_DEVBLC || tmp == INTEL_AUDIO_DEVCL)
+               eldv = G4X_ELDV_DEVCL_DEVBLC;
+       else
+               eldv = G4X_ELDV_DEVCTG;
+
+       /* Invalidate ELD */
+       tmp = I915_READ(G4X_AUD_CNTL_ST);
+       tmp &= ~eldv;
+       I915_WRITE(G4X_AUD_CNTL_ST, tmp);
+}
+
 static void g4x_audio_codec_enable(struct drm_connector *connector,
                                   struct intel_encoder *encoder,
                                   struct drm_display_mode *mode)
@@ -408,6 +427,7 @@ void intel_init_audio(struct drm_device *dev)
 
        if (IS_G4X(dev)) {
                dev_priv->display.audio_codec_enable = g4x_audio_codec_enable;
+               dev_priv->display.audio_codec_disable = g4x_audio_codec_disable;
        } else if (IS_VALLEYVIEW(dev)) {
                dev_priv->display.audio_codec_enable = ilk_audio_codec_enable;
                dev_priv->display.audio_codec_disable = ilk_audio_codec_disable;