drm/i915: Pass platform device to LPE audio notifier
authorTakashi Iwai <tiwai@suse.de>
Mon, 30 Jan 2017 16:56:39 +0000 (17:56 +0100)
committerTakashi Iwai <tiwai@suse.de>
Wed, 1 Feb 2017 15:22:28 +0000 (16:22 +0100)
This allows the LPE HDMI driver to clean up its global variable
reference.

Also drop to pass the eld pointer because the connection status and
the ELD bytes can be retrieved from the attached pdata.

Acked-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
drivers/gpu/drm/i915/intel_lpe_audio.c
include/drm/intel_lpe_audio.h
sound/x86/intel_hdmi_lpe_audio.c

index 68ebf383043377cc7b8b4f1210e5440fe4dc124d..d3ffe00126920d312cfcaa893707c03f4b9d9bea 100644 (file)
@@ -378,8 +378,7 @@ void intel_lpe_audio_notify(struct drm_i915_private *dev_priv,
        }
 
        if (pdata->notify_audio_lpe)
-               pdata->notify_audio_lpe(
-                       (eld != NULL) ? &pdata->eld : NULL);
+               pdata->notify_audio_lpe(dev_priv->lpe_audio.platdev);
        else
                pdata->notify_pending = true;
 
index 410128e4cd708fe078a1e5a86605e4e331d5ee5f..e9892b4c3af10c103cbe27f9ee17d1e31c0ba5ac 100644 (file)
@@ -27,6 +27,8 @@
 #include <linux/types.h>
 #include <linux/spinlock_types.h>
 
+struct platform_device;
+
 #define HDMI_MAX_ELD_BYTES     128
 
 struct intel_hdmi_lpe_audio_eld {
@@ -42,7 +44,7 @@ struct intel_hdmi_lpe_audio_pdata {
        bool dp_output;
        int link_rate;
        struct intel_hdmi_lpe_audio_eld eld;
-       void (*notify_audio_lpe)(void *audio_ptr);
+       void (*notify_audio_lpe)(struct platform_device *pdev);
        spinlock_t lpe_audio_slock;
 };
 
index 6d630f20bca8dea45163db05505df5608e01510f..3cb0f642575c055bb42bf7a498e85d6be94709a5 100644 (file)
@@ -439,15 +439,14 @@ static irqreturn_t display_pipe_interrupt_handler(int irq, void *dev_id)
        return IRQ_HANDLED;
 }
 
-static void notify_audio_lpe(void *audio_ptr)
+static void notify_audio_lpe(struct platform_device *pdev)
 {
-       struct hdmi_lpe_audio_ctx *ctx = get_hdmi_context();
-       struct intel_hdmi_lpe_audio_pdata *pdata = hlpe_pdev->dev.platform_data;
-       struct intel_hdmi_lpe_audio_eld *eld = audio_ptr;
+       struct hdmi_lpe_audio_ctx *ctx = platform_get_drvdata(pdev);
+       struct intel_hdmi_lpe_audio_pdata *pdata = pdev->dev.platform_data;
 
        if (pdata->hdmi_connected != true) {
 
-               dev_dbg(&hlpe_pdev->dev, "%s: Event: HAD_NOTIFY_HOT_UNPLUG\n",
+               dev_dbg(&pdev->dev, "%s: Event: HAD_NOTIFY_HOT_UNPLUG\n",
                        __func__);
 
                if (hlpe_state == hdmi_connector_status_connected) {
@@ -458,10 +457,11 @@ static void notify_audio_lpe(void *audio_ptr)
                        mid_hdmi_audio_signal_event(
                                HAD_EVENT_HOT_UNPLUG);
                } else
-                       dev_dbg(&hlpe_pdev->dev, "%s: Already Unplugged!\n",
+                       dev_dbg(&pdev->dev, "%s: Already Unplugged!\n",
                                __func__);
 
-       } else if (eld != NULL) {
+       } else {
+               struct intel_hdmi_lpe_audio_eld *eld = &pdata->eld;
 
                switch (eld->pipe_id) {
                case 0:
@@ -474,7 +474,7 @@ static void notify_audio_lpe(void *audio_ptr)
                        ctx->had_config_offset = AUDIO_HDMI_CONFIG_C;
                        break;
                default:
-                       dev_dbg(&hlpe_pdev->dev, "Invalid pipe %d\n",
+                       dev_dbg(&pdev->dev, "Invalid pipe %d\n",
                                eld->pipe_id);
                        break;
                }
@@ -485,7 +485,7 @@ static void notify_audio_lpe(void *audio_ptr)
 
                hlpe_state = hdmi_connector_status_connected;
 
-               dev_dbg(&hlpe_pdev->dev, "%s: HAD_NOTIFY_ELD : port = %d, tmds = %d\n",
+               dev_dbg(&pdev->dev, "%s: HAD_NOTIFY_ELD : port = %d, tmds = %d\n",
                        __func__, eld->port_id, pdata->tmds_clock_speed);
 
                if (pdata->tmds_clock_speed) {
@@ -494,8 +494,7 @@ static void notify_audio_lpe(void *audio_ptr)
                        ctx->link_rate = pdata->link_rate;
                        mid_hdmi_audio_signal_event(HAD_EVENT_MODE_CHANGING);
                }
-       } else
-               dev_dbg(&hlpe_pdev->dev, "%s: Event: NULL EDID!!\n", __func__);
+       }
 }
 
 /**
@@ -606,7 +605,7 @@ static int hdmi_lpe_audio_probe(struct platform_device *pdev)
        if (pdata->notify_pending) {
 
                dev_dbg(&hlpe_pdev->dev, "%s: handle pending notification\n", __func__);
-               notify_audio_lpe(&pdata->eld);
+               notify_audio_lpe(pdev);
                pdata->notify_pending = false;
        }
        spin_unlock_irqrestore(&pdata->lpe_audio_slock, flag_irq);