Skip to content

Commit

Permalink
drm/i915: Add support for audio driver notifications
Browse files Browse the repository at this point in the history
Notifiations like mode change, hot plug and edid to
the audio driver are added. This is inturn used by the
audio driver for its functionality.

A new interface file capturing the notifications needed by the
audio driver is added

Signed-off-by: Pierre-Louis Bossart <[email protected]>
Signed-off-by: Jerome Anand <[email protected]>
Acked-by: Jani Nikula <[email protected]>
Signed-off-by: Takashi Iwai <[email protected]>
  • Loading branch information
jeromean authored and tiwai committed Jan 25, 2017
1 parent eef5732 commit 46d196e
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 0 deletions.
2 changes: 2 additions & 0 deletions drivers/gpu/drm/i915/i915_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -3400,6 +3400,8 @@ void i915_teardown_sysfs(struct drm_i915_private *dev_priv);
int intel_lpe_audio_init(struct drm_i915_private *dev_priv);
void intel_lpe_audio_teardown(struct drm_i915_private *dev_priv);
void intel_lpe_audio_irq_handler(struct drm_i915_private *dev_priv);
void intel_lpe_audio_notify(struct drm_i915_private *dev_priv,
void *eld, int port, int tmds_clk_speed);

/* intel_i2c.c */
extern int intel_setup_gmbus(struct drm_device *dev);
Expand Down
6 changes: 6 additions & 0 deletions drivers/gpu/drm/i915/intel_audio.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include <linux/kernel.h>
#include <linux/component.h>
#include <drm/i915_component.h>
#include <drm/intel_lpe_audio.h>
#include "intel_drv.h"

#include <drm/drmP.h>
Expand Down Expand Up @@ -630,6 +631,9 @@ void intel_audio_codec_enable(struct intel_encoder *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, (int) pipe);

intel_lpe_audio_notify(dev_priv, connector->eld, port,
crtc_state->port_clock);
}

/**
Expand Down Expand Up @@ -663,6 +667,8 @@ void intel_audio_codec_disable(struct intel_encoder *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, (int) pipe);

intel_lpe_audio_notify(dev_priv, NULL, port, 0);
}

/**
Expand Down
1 change: 1 addition & 0 deletions drivers/gpu/drm/i915/intel_hdmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
#include <drm/drm_edid.h>
#include "intel_drv.h"
#include <drm/i915_drm.h>
#include <drm/intel_lpe_audio.h>
#include "i915_drv.h"

static struct drm_device *intel_hdmi_to_dev(struct intel_hdmi *intel_hdmi)
Expand Down
49 changes: 49 additions & 0 deletions drivers/gpu/drm/i915/intel_lpe_audio.c
Original file line number Diff line number Diff line change
Expand Up @@ -319,3 +319,52 @@ void intel_lpe_audio_teardown(struct drm_i915_private *dev_priv)

irq_free_desc(dev_priv->lpe_audio.irq);
}


/**
* intel_lpe_audio_notify() - notify lpe audio event
* audio driver and i915
* @dev_priv: the i915 drm device private data
* @eld : ELD data
* @port: port id
* @tmds_clk_speed: tmds clock frequency in Hz
*
* Notify lpe audio driver of eld change.
*/
void intel_lpe_audio_notify(struct drm_i915_private *dev_priv,
void *eld, int port, int tmds_clk_speed)
{
unsigned long irq_flags;
struct intel_hdmi_lpe_audio_pdata *pdata = NULL;

if (!HAS_LPE_AUDIO(dev_priv))
return;

pdata = dev_get_platdata(
&(dev_priv->lpe_audio.platdev->dev));

spin_lock_irqsave(&pdata->lpe_audio_slock, irq_flags);

if (eld != NULL) {
memcpy(pdata->eld.eld_data, eld,
HDMI_MAX_ELD_BYTES);
pdata->eld.port_id = port;
pdata->hdmi_connected = true;

if (tmds_clk_speed)
pdata->tmds_clock_speed = tmds_clk_speed;
} else {
memset(pdata->eld.eld_data, 0,
HDMI_MAX_ELD_BYTES);
pdata->hdmi_connected = false;
}

if (pdata->notify_audio_lpe)
pdata->notify_audio_lpe(
(eld != NULL) ? &pdata->eld : NULL);
else
pdata->notify_pending = true;

spin_unlock_irqrestore(&pdata->lpe_audio_slock,
irq_flags);
}

0 comments on commit 46d196e

Please sign in to comment.