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: David Henningsson <david.henningsson@canonical.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Родитель
b896b4ebf0
Коммит
07acecc111
|
@ -5055,6 +5055,8 @@ static const char *get_jack_default_name(struct hda_codec *codec, hda_nid_t nid,
|
||||||
return "Line-out";
|
return "Line-out";
|
||||||
case SND_JACK_HEADSET:
|
case SND_JACK_HEADSET:
|
||||||
return "Headset";
|
return "Headset";
|
||||||
|
case SND_JACK_VIDEOOUT:
|
||||||
|
return "HDMI/DP";
|
||||||
default:
|
default:
|
||||||
return "Misc";
|
return "Misc";
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/moduleparam.h>
|
#include <linux/moduleparam.h>
|
||||||
#include <sound/core.h>
|
#include <sound/core.h>
|
||||||
|
#include <sound/jack.h>
|
||||||
#include "hda_codec.h"
|
#include "hda_codec.h"
|
||||||
#include "hda_local.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]);
|
&spec->sink_eld[index]);
|
||||||
/* TODO: do real things about ELD */
|
/* 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)
|
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)
|
static int hdmi_add_pin(struct hda_codec *codec, hda_nid_t pin_nid)
|
||||||
{
|
{
|
||||||
struct hdmi_spec *spec = codec->spec;
|
struct hdmi_spec *spec = codec->spec;
|
||||||
|
int err;
|
||||||
|
|
||||||
if (spec->num_pins >= MAX_HDMI_PINS) {
|
if (spec->num_pins >= MAX_HDMI_PINS) {
|
||||||
snd_printk(KERN_WARNING
|
snd_printk(KERN_WARNING
|
||||||
|
@ -919,6 +923,12 @@ static int hdmi_add_pin(struct hda_codec *codec, hda_nid_t pin_nid)
|
||||||
return -E2BIG;
|
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]);
|
hdmi_present_sense(codec, pin_nid, &spec->sink_eld[spec->num_pins]);
|
||||||
|
|
||||||
spec->pin[spec->num_pins] = pin_nid;
|
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++)
|
for (i = 0; i < spec->num_pins; i++)
|
||||||
snd_hda_eld_proc_free(codec, &spec->sink_eld[i]);
|
snd_hda_eld_proc_free(codec, &spec->sink_eld[i]);
|
||||||
|
snd_hda_input_jack_free(codec);
|
||||||
|
|
||||||
kfree(spec);
|
kfree(spec);
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче