Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 07acecc1 authored by David Henningsson's avatar David Henningsson Committed by Takashi Iwai
Browse files

ALSA: HDA: Add jack detection for HDMI



Just as for headphones and microphone jacks, this patch adds reporting
of HDMI jack status through the input layer.

Signed-off-by: default avatarDavid Henningsson <david.henningsson@canonical.com>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent b896b4eb
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -5055,6 +5055,8 @@ static const char *get_jack_default_name(struct hda_codec *codec, hda_nid_t nid,
		return "Line-out";
	case SND_JACK_HEADSET:
		return "Headset";
	case SND_JACK_VIDEOOUT:
		return "HDMI/DP";
	default:
		return "Misc";
	}
+11 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@
#include <linux/slab.h>
#include <linux/moduleparam.h>
#include <sound/core.h>
#include <sound/jack.h>
#include "hda_codec.h"
#include "hda_local.h"

@@ -720,6 +721,8 @@ static void hdmi_intrinsic_event(struct hda_codec *codec, unsigned int res)
				  &spec->sink_eld[index]);
		/* TODO: do real things about ELD */
	}

	snd_hda_input_jack_report(codec, tag);
}

static void hdmi_non_intrinsic_event(struct hda_codec *codec, unsigned int res)
@@ -912,6 +915,7 @@ static void hdmi_present_sense(struct hda_codec *codec, hda_nid_t pin_nid,
static int hdmi_add_pin(struct hda_codec *codec, hda_nid_t pin_nid)
{
	struct hdmi_spec *spec = codec->spec;
	int err;

	if (spec->num_pins >= MAX_HDMI_PINS) {
		snd_printk(KERN_WARNING
@@ -919,6 +923,12 @@ static int hdmi_add_pin(struct hda_codec *codec, hda_nid_t pin_nid)
		return -E2BIG;
	}

	err = snd_hda_input_jack_add(codec, pin_nid,
				     SND_JACK_VIDEOOUT, NULL);
	if (err < 0)
		return err;
	snd_hda_input_jack_report(codec, pin_nid);

	hdmi_present_sense(codec, pin_nid, &spec->sink_eld[spec->num_pins]);

	spec->pin[spec->num_pins] = pin_nid;
@@ -1120,6 +1130,7 @@ static void generic_hdmi_free(struct hda_codec *codec)

	for (i = 0; i < spec->num_pins; i++)
		snd_hda_eld_proc_free(codec, &spec->sink_eld[i]);
	snd_hda_input_jack_free(codec);

	kfree(spec);
}