drm/i915: Clean up the LPE audio platform data
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Thu, 27 Apr 2017 16:02:27 +0000 (19:02 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 3 May 2017 13:21:26 +0000 (16:21 +0300)
Split the LPE audio platform data into a port specific
chunk and device specific chunk. Eventually we'll have
a port specific chunk for each port, but for now we'll
stick to just one.

We'll also get rid of the intel_hdmi_lpe_audio_eld structure
which doesn't seem to have any real reason to exist.

v2: Organize per port instead of per pipe

Cc: Takashi Iwai <tiwai@suse.de>
Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170427160231.13337-9-ville.syrjala@linux.intel.com
Reviewed-by: Takashi Iwai <tiwai@suse.de>
drivers/gpu/drm/i915/intel_lpe_audio.c
include/drm/intel_lpe_audio.h
sound/x86/intel_hdmi_audio.c

index 4c770d037f237acbba169b450b57421f3bb534e6..bdbc235141b58e4d856b95844d210c6d43943b4d 100644 (file)
@@ -111,7 +111,7 @@ lpe_audio_platdev_create(struct drm_i915_private *dev_priv)
        pinfo.size_data = sizeof(*pdata);
        pinfo.dma_mask = DMA_BIT_MASK(32);
 
-       pdata->pipe = -1;
+       pdata->port.pipe = -1;
        spin_lock_init(&pdata->lpe_audio_slock);
 
        platdev = platform_device_register_full(&pinfo);
@@ -320,38 +320,36 @@ void intel_lpe_audio_notify(struct drm_i915_private *dev_priv,
                            const void *eld, int ls_clock, bool dp_output)
 {
        unsigned long irq_flags;
-       struct intel_hdmi_lpe_audio_pdata *pdata = NULL;
+       struct intel_hdmi_lpe_audio_pdata *pdata;
+       struct intel_hdmi_lpe_audio_port_pdata *ppdata;
        u32 audio_enable;
 
        if (!HAS_LPE_AUDIO(dev_priv))
                return;
 
-       pdata = dev_get_platdata(
-               &(dev_priv->lpe_audio.platdev->dev));
+       pdata = dev_get_platdata(&dev_priv->lpe_audio.platdev->dev);
+       ppdata = &pdata->port;
 
        spin_lock_irqsave(&pdata->lpe_audio_slock, irq_flags);
 
        audio_enable = I915_READ(VLV_AUD_PORT_EN_DBG(port));
 
-       pdata->eld.port_id = port;
+       ppdata->port = port;
 
        if (eld != NULL) {
-               memcpy(pdata->eld.eld_data, eld,
-                       HDMI_MAX_ELD_BYTES);
-               pdata->pipe = pipe;
-               pdata->ls_clock = ls_clock;
-               pdata->dp_output = dp_output;
+               memcpy(ppdata->eld, eld, HDMI_MAX_ELD_BYTES);
+               ppdata->pipe = pipe;
+               ppdata->ls_clock = ls_clock;
+               ppdata->dp_output = dp_output;
 
                /* Unmute the amp for both DP and HDMI */
                I915_WRITE(VLV_AUD_PORT_EN_DBG(port),
                           audio_enable & ~VLV_AMP_MUTE);
-
        } else {
-               memset(pdata->eld.eld_data, 0,
-                       HDMI_MAX_ELD_BYTES);
-               pdata->pipe = -1;
-               pdata->ls_clock = 0;
-               pdata->dp_output = false;
+               memset(ppdata->eld, 0, HDMI_MAX_ELD_BYTES);
+               ppdata->pipe = -1;
+               ppdata->ls_clock = 0;
+               ppdata->dp_output = false;
 
                /* Mute the amp for both DP and HDMI */
                I915_WRITE(VLV_AUD_PORT_EN_DBG(port),
index 9a5bdf5ad18058d219573e7961cc01c4c66eba05..211f1cd6115344541db442932aca10ea5d0c988e 100644 (file)
@@ -31,16 +31,17 @@ struct platform_device;
 
 #define HDMI_MAX_ELD_BYTES     128
 
-struct intel_hdmi_lpe_audio_eld {
-       int port_id;
-       unsigned char eld_data[HDMI_MAX_ELD_BYTES];
-};
-
-struct intel_hdmi_lpe_audio_pdata {
+struct intel_hdmi_lpe_audio_port_pdata {
+       u8 eld[HDMI_MAX_ELD_BYTES];
+       int port;
        int pipe;
        int ls_clock;
        bool dp_output;
-       struct intel_hdmi_lpe_audio_eld eld;
+};
+
+struct intel_hdmi_lpe_audio_pdata {
+       struct intel_hdmi_lpe_audio_port_pdata port;
+
        void (*notify_audio_lpe)(struct platform_device *pdev);
        spinlock_t lpe_audio_slock;
 };
index 1a095189db8349227ae825beb19406ac70ea973c..c2b78621852e6aea524cbb9ef4c62a573c9fdba5 100644 (file)
@@ -1556,21 +1556,20 @@ static void had_audio_wq(struct work_struct *work)
        struct snd_intelhad *ctx =
                container_of(work, struct snd_intelhad, hdmi_audio_wq);
        struct intel_hdmi_lpe_audio_pdata *pdata = ctx->dev->platform_data;
+       struct intel_hdmi_lpe_audio_port_pdata *ppdata = &pdata->port;
 
        pm_runtime_get_sync(ctx->dev);
        mutex_lock(&ctx->mutex);
-       if (pdata->pipe < 0) {
+       if (ppdata->pipe < 0) {
                dev_dbg(ctx->dev, "%s: Event: HAD_NOTIFY_HOT_UNPLUG\n",
                        __func__);
                memset(ctx->eld, 0, sizeof(ctx->eld)); /* clear the old ELD */
                had_process_hot_unplug(ctx);
        } else {
-               struct intel_hdmi_lpe_audio_eld *eld = &pdata->eld;
-
                dev_dbg(ctx->dev, "%s: HAD_NOTIFY_ELD : port = %d, tmds = %d\n",
-                       __func__, eld->port_id, pdata->ls_clock);
+                       __func__, ppdata->port, ppdata->ls_clock);
 
-               switch (pdata->pipe) {
+               switch (ppdata->pipe) {
                case 0:
                        ctx->had_config_offset = AUDIO_HDMI_CONFIG_A;
                        break;
@@ -1582,18 +1581,18 @@ static void had_audio_wq(struct work_struct *work)
                        break;
                default:
                        dev_dbg(ctx->dev, "Invalid pipe %d\n",
-                               pdata->pipe);
+                               ppdata->pipe);
                        break;
                }
 
-               memcpy(ctx->eld, eld->eld_data, sizeof(ctx->eld));
+               memcpy(ctx->eld, ppdata->eld, sizeof(ctx->eld));
 
-               ctx->dp_output = pdata->dp_output;
+               ctx->dp_output = ppdata->dp_output;
                if (ctx->dp_output) {
                        ctx->tmds_clock_speed = 0;
-                       ctx->link_rate = pdata->ls_clock;
+                       ctx->link_rate = ppdata->ls_clock;
                } else {
-                       ctx->tmds_clock_speed = pdata->ls_clock;
+                       ctx->tmds_clock_speed = ppdata->ls_clock;
                        ctx->link_rate = 0;
                }