|
@@ -399,6 +399,9 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
|
|
|
struct drm_connector *connector;
|
|
|
struct drm_device *dev = encoder->dev;
|
|
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
|
|
+ struct i915_audio_component *acomp = dev_priv->audio_component;
|
|
|
+ struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
|
|
|
+ enum port port = intel_dig_port->port;
|
|
|
|
|
|
connector = drm_select_eld(encoder, mode);
|
|
|
if (!connector)
|
|
@@ -419,6 +422,9 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
|
|
|
|
|
|
if (dev_priv->display.audio_codec_enable)
|
|
|
dev_priv->display.audio_codec_enable(connector, intel_encoder, mode);
|
|
|
+
|
|
|
+ if (acomp && acomp->audio_ops && acomp->audio_ops->pin_eld_notify)
|
|
|
+ acomp->audio_ops->pin_eld_notify(acomp->audio_ops->audio_ptr, (int) port, 0);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -428,13 +434,20 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
|
|
|
* The disable sequences must be performed before disabling the transcoder or
|
|
|
* port.
|
|
|
*/
|
|
|
-void intel_audio_codec_disable(struct intel_encoder *encoder)
|
|
|
+void intel_audio_codec_disable(struct intel_encoder *intel_encoder)
|
|
|
{
|
|
|
- struct drm_device *dev = encoder->base.dev;
|
|
|
+ struct drm_encoder *encoder = &intel_encoder->base;
|
|
|
+ struct drm_device *dev = encoder->dev;
|
|
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
|
|
+ struct i915_audio_component *acomp = dev_priv->audio_component;
|
|
|
+ struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
|
|
|
+ enum port port = intel_dig_port->port;
|
|
|
|
|
|
if (dev_priv->display.audio_codec_disable)
|
|
|
- dev_priv->display.audio_codec_disable(encoder);
|
|
|
+ dev_priv->display.audio_codec_disable(intel_encoder);
|
|
|
+
|
|
|
+ if (acomp && acomp->audio_ops && acomp->audio_ops->pin_eld_notify)
|
|
|
+ acomp->audio_ops->pin_eld_notify(acomp->audio_ops->audio_ptr, (int) port, 0);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -525,12 +538,14 @@ static int i915_audio_component_bind(struct device *i915_dev,
|
|
|
struct device *hda_dev, void *data)
|
|
|
{
|
|
|
struct i915_audio_component *acomp = data;
|
|
|
+ struct drm_i915_private *dev_priv = dev_to_i915(i915_dev);
|
|
|
|
|
|
if (WARN_ON(acomp->ops || acomp->dev))
|
|
|
return -EEXIST;
|
|
|
|
|
|
acomp->ops = &i915_audio_component_ops;
|
|
|
acomp->dev = i915_dev;
|
|
|
+ dev_priv->audio_component = acomp;
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -539,9 +554,11 @@ static void i915_audio_component_unbind(struct device *i915_dev,
|
|
|
struct device *hda_dev, void *data)
|
|
|
{
|
|
|
struct i915_audio_component *acomp = data;
|
|
|
+ struct drm_i915_private *dev_priv = dev_to_i915(i915_dev);
|
|
|
|
|
|
acomp->ops = NULL;
|
|
|
acomp->dev = NULL;
|
|
|
+ dev_priv->audio_component = NULL;
|
|
|
}
|
|
|
|
|
|
static const struct component_ops i915_audio_component_bind_ops = {
|