[alsa-devel] [PATCH v3 14/15] ASoC: hdac_hdmi: Add jack reporting for user space
Subhransu S. Prusty
subhransu.s.prusty at intel.com
Mon Dec 7 22:24:28 CET 2015
User space also need be notified of HDMI hotplug notification so
that it can select the appropriate device to route audio.
Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty at intel.com>
Signed-off-by: Vinod Koul <vinod.koul at intel.com>
---
sound/soc/codecs/hdac_hdmi.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/sound/soc/codecs/hdac_hdmi.c b/sound/soc/codecs/hdac_hdmi.c
index 008a29f..cce2af0 100644
--- a/sound/soc/codecs/hdac_hdmi.c
+++ b/sound/soc/codecs/hdac_hdmi.c
@@ -24,6 +24,7 @@
#include <linux/hdmi.h>
#include <drm/drm_edid.h>
#include <sound/pcm_params.h>
+#include <sound/jack.h>
#include <sound/soc.h>
#include <sound/hdaudio_ext.h>
#include <sound/hda_i915.h>
@@ -73,6 +74,7 @@ struct hdac_hdmi_pin {
struct hdac_ext_device *edev;
int repoll_count;
struct delayed_work work;
+ struct snd_jack *jack;
};
struct hdac_hdmi_dai_pin_map {
@@ -905,6 +907,7 @@ static void hdac_hdmi_present_sense(struct hdac_hdmi_pin *pin, int repoll)
pin->eld.eld_valid = !!(val & AC_PINSENSE_ELDV);
if (!pin->eld.monitor_present || !pin->eld.eld_valid) {
+ snd_jack_report(pin->jack, 0);
dev_info(&edev->hdac.dev, "%s: disconnect or eld_invalid\n",
__func__);
goto put_hdac_device;
@@ -915,6 +918,7 @@ static void hdac_hdmi_present_sense(struct hdac_hdmi_pin *pin, int repoll)
if (hdac_hdmi_get_eld(&edev->hdac, pin->nid,
pin->eld.eld_buffer,
&pin->eld.eld_size) == 0) {
+ snd_jack_report(pin->jack, SND_JACK_AVOUT);
print_hex_dump_bytes("Eld: ", DUMP_PREFIX_OFFSET,
pin->eld.eld_buffer, pin->eld.eld_size);
} else {
@@ -1173,6 +1177,7 @@ static int hdmi_codec_probe(struct snd_soc_codec *codec)
struct snd_soc_dapm_context *dapm =
snd_soc_component_get_dapm(&codec->component);
struct hdac_hdmi_pin *pin;
+ char jack_name[NAME_SIZE];
int ret;
edev->scodec = codec;
@@ -1189,8 +1194,12 @@ static int hdmi_codec_probe(struct snd_soc_codec *codec)
return ret;
}
- list_for_each_entry(pin, &hdmi->pin_list, head)
+ list_for_each_entry(pin, &hdmi->pin_list, head) {
+ sprintf(jack_name, "HDMI/DP, Pin=%d Jack", pin->nid);
+ snd_jack_new(dapm->card->snd_card, jack_name, SND_JACK_AVOUT,
+ &pin->jack, true, false);
hdac_hdmi_present_sense(pin, 1);
+ }
/* Imp: Store the card pointer in hda_codec */
edev->card = dapm->card->snd_card;
--
1.9.1
More information about the Alsa-devel
mailing list