alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
From: jeeja.kp@intel.com
To: alsa-devel@alsa-project.org
Cc: tiwai@suse.de, patches.audio@intel.com, broonie@kernel.org,
	liam.r.girdwood@intel.com, Jeeja KP <jeeja.kp@intel.com>
Subject: [PATCH 02/16] ASoC: hdac_hdmi: Handle MST pin jack detection at boot/resume
Date: Tue,  7 Feb 2017 19:09:46 +0530	[thread overview]
Message-ID: <1486474800-11426-3-git-send-email-jeeja.kp@intel.com> (raw)
In-Reply-To: <1486474800-11426-1-git-send-email-jeeja.kp@intel.com>

From: Jeeja KP <jeeja.kp@intel.com>

The ELD notification can be received asynchronously from the graphics
side and this may happen just at the moment the sound driver is
initializing and notification will be missed. Similarly at system
resume, the notification is ignored as the  ELD and connection states
are updated in anyway at the end of the resume.
So check the jack status in boot/resume by querying the port presence
based on pin caps and report the jack status.

Signed-off-by: Jeeja KP <jeeja.kp@intel.com>
---
 sound/soc/codecs/hdac_hdmi.c | 41 +++++++++++++++++++++++++++++------------
 1 file changed, 29 insertions(+), 12 deletions(-)

diff --git a/sound/soc/codecs/hdac_hdmi.c b/sound/soc/codecs/hdac_hdmi.c
index 84b7d6c..c5527e8 100644
--- a/sound/soc/codecs/hdac_hdmi.c
+++ b/sound/soc/codecs/hdac_hdmi.c
@@ -1551,15 +1551,38 @@ int hdac_hdmi_jack_init(struct snd_soc_dai *dai, int device)
 }
 EXPORT_SYMBOL_GPL(hdac_hdmi_jack_init);
 
+static void hdac_hdmi_present_sense_all_pins(struct hdac_ext_device *edev,
+			struct hdac_hdmi_priv *hdmi, bool detect_pin_caps)
+{
+	int i;
+	struct hdac_hdmi_pin *pin;
+
+	list_for_each_entry(pin, &hdmi->pin_list, head) {
+		if (detect_pin_caps) {
+
+			if (hdac_hdmi_get_port_len(edev, pin->nid)  == 0)
+				pin->mst_capable = false;
+			else
+				pin->mst_capable = true;
+		}
+
+		for (i = 0; i < pin->num_ports; i++) {
+			if (!pin->mst_capable && i > 0)
+				continue;
+
+			hdac_hdmi_present_sense(pin, &pin->ports[i]);
+		}
+	}
+}
+
 static int hdmi_codec_probe(struct snd_soc_codec *codec)
 {
 	struct hdac_ext_device *edev = snd_soc_codec_get_drvdata(codec);
 	struct hdac_hdmi_priv *hdmi = edev->private_data;
 	struct snd_soc_dapm_context *dapm =
 		snd_soc_component_get_dapm(&codec->component);
-	struct hdac_hdmi_pin *pin;
 	struct hdac_ext_link *hlink = NULL;
-	int ret, i;
+	int ret;
 
 	edev->scodec = codec;
 
@@ -1587,10 +1610,7 @@ static int hdmi_codec_probe(struct snd_soc_codec *codec)
 		return ret;
 	}
 
-	list_for_each_entry(pin, &hdmi->pin_list, head)
-		for (i = 0; i < pin->num_ports; i++)
-			hdac_hdmi_present_sense(pin, &pin->ports[i]);
-
+	hdac_hdmi_present_sense_all_pins(edev, hdmi, true);
 	/* Imp: Store the card pointer in hda_codec */
 	edev->card = dapm->card->snd_card;
 
@@ -1638,9 +1658,7 @@ static void hdmi_codec_complete(struct device *dev)
 {
 	struct hdac_ext_device *edev = to_hda_ext_device(dev);
 	struct hdac_hdmi_priv *hdmi = edev->private_data;
-	struct hdac_hdmi_pin *pin;
 	struct hdac_device *hdac = &edev->hdac;
-	int i;
 
 	/* Power up afg */
 	snd_hdac_codec_read(hdac, hdac->afg, 0,	AC_VERB_SET_POWER_STATE,
@@ -1652,11 +1670,10 @@ static void hdmi_codec_complete(struct device *dev)
 	/*
 	 * As the ELD notify callback request is not entertained while the
 	 * device is in suspend state. Need to manually check detection of
-	 * all pins here.
+	 * all pins here. pin capablity change is not support, so use the
+	 * already set pin caps.
 	 */
-	list_for_each_entry(pin, &hdmi->pin_list, head)
-		for (i = 0; i < pin->num_ports; i++)
-			hdac_hdmi_present_sense(pin, &pin->ports[i]);
+	hdac_hdmi_present_sense_all_pins(edev, hdmi, false);
 
 	pm_runtime_put_sync(&edev->hdac.dev);
 }
-- 
2.5.0

  parent reply	other threads:[~2017-02-07 13:28 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-07 13:39 [PATCH 00/16] ASoC: hdac_hdmi: Enable MST audio jeeja.kp
2017-02-07 13:39 ` [PATCH 01/16] ASoC: hdac_hdmi: Add MST verb support jeeja.kp
2017-02-07 13:39 ` jeeja.kp [this message]
2017-02-07 13:39 ` [PATCH 03/16] ASoc: hdac_hdmi: Configure pin verbs for MST jeeja.kp
2017-02-07 13:39 ` [PATCH 04/16] ASoC: hdac_hdmi: Add support for multiple ports to a PCM jeeja.kp
2017-02-07 13:39 ` [PATCH 05/16] ASoC: hdac_hdmi: Use ASoC jack instead of snd_jack jeeja.kp
2017-02-07 13:39 ` [PATCH 06/16] ASoC: Intel: Skylake: Create ASoC jack for hdmi in rt286 machine jeeja.kp
2017-02-07 13:39 ` [PATCH 07/16] ASoC: Intel: Skylake: Create ASoC jack for hdmi in skl_nau88l25_max98357a machine jeeja.kp
2017-02-07 13:39 ` [PATCH 08/16] ASoC: Intel: Skylake: Create ASoC jack for hdmi in nau88l25_ssm4567 machine jeeja.kp
2017-02-07 13:39 ` [PATCH 09/16] ASoC: Intel: bxt: Create ASoC jack for hdmi in bxt_rt298 machine jeeja.kp
2017-02-07 13:39 ` [PATCH 10/16] ASoC: Intel: bxt: Create ASoC jack for hdmi in bxt_da7219_max98357 machine jeeja.kp
2017-02-07 13:39 ` [PATCH 11/16] ASoC: hdac_hdmi: Add machine pin widget for each port jeeja.kp
2017-02-07 13:39 ` [PATCH 12/16] ASoC: Intel: Skylake: Add jack port initialize in rt286 machine jeeja.kp
2017-02-07 13:39 ` [PATCH 13/16] ASoC: Intel: Skylake: Add jack port initialize in nau88l25_max98357a machine jeeja.kp
2017-02-07 13:39 ` [PATCH 14/16] ASoC: Intel: Skylake: Add jack port initialize in nau88l25_ssm4567 machine jeeja.kp
2017-02-07 13:39 ` [PATCH 15/16] ASoC: Intel: bxt: Add jack port initialize in bxt_rt298 machine jeeja.kp
2017-02-16 18:56   ` Mark Brown
2017-02-17  2:10     ` Vinod Koul
2017-02-17  8:51     ` Jeeja KP
2017-02-07 13:40 ` [PATCH 16/16] ASoC: Intel: bxt: Add jack port initialize in da7219_max98357a machine jeeja.kp
2017-02-13  9:07 ` [PATCH 00/16] ASoC: hdac_hdmi: Enable MST audio Vinod Koul

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1486474800-11426-3-git-send-email-jeeja.kp@intel.com \
    --to=jeeja.kp@intel.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@kernel.org \
    --cc=liam.r.girdwood@intel.com \
    --cc=patches.audio@intel.com \
    --cc=tiwai@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).