Make sure we can associate HDMI Jacks with the correct PCM devices.
Signed-off-by: David Henningsson david.henningsson@canonical.com --- sound/pci/hda/hda_jack.c | 5 +++-- sound/pci/hda/hda_jack.h | 2 +- sound/pci/hda/patch_hdmi.c | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/sound/pci/hda/hda_jack.c b/sound/pci/hda/hda_jack.c index 3949015..0b1f72c 100644 --- a/sound/pci/hda/hda_jack.c +++ b/sound/pci/hda/hda_jack.c @@ -210,7 +210,7 @@ EXPORT_SYMBOL_HDA(snd_hda_jack_report_sync); * will have the given name and index. */ int snd_hda_jack_add_kctl(struct hda_codec *codec, hda_nid_t nid, - const char *name, int idx) + const char *name, int idx, int device) { struct hda_jack_tbl *jack; struct snd_kcontrol *kctl; @@ -223,6 +223,7 @@ int snd_hda_jack_add_kctl(struct hda_codec *codec, hda_nid_t nid, kctl = snd_kctl_jack_new(name, idx, codec); if (!kctl) return -ENOMEM; + kctl->id.device = device; if (snd_hda_ctl_add(codec, nid, kctl) < 0) return -ENOMEM; jack->kctl = kctl; @@ -249,7 +250,7 @@ static int add_jack_kctl(struct hda_codec *codec, hda_nid_t nid, return 0;
snd_hda_get_pin_label(codec, nid, cfg, name, sizeof(name), &idx); - err = snd_hda_jack_add_kctl(codec, nid, name, idx); + err = snd_hda_jack_add_kctl(codec, nid, name, idx, 0); if (err < 0) return err; return snd_hda_jack_detect_enable(codec, nid, 0); diff --git a/sound/pci/hda/hda_jack.h b/sound/pci/hda/hda_jack.h index f8f97c7..fcca96c 100644 --- a/sound/pci/hda/hda_jack.h +++ b/sound/pci/hda/hda_jack.h @@ -76,7 +76,7 @@ static inline bool is_jack_detectable(struct hda_codec *codec, hda_nid_t nid) }
int snd_hda_jack_add_kctl(struct hda_codec *codec, hda_nid_t nid, - const char *name, int idx); + const char *name, int idx, int device); int snd_hda_jack_add_kctls(struct hda_codec *codec, const struct auto_pin_cfg *cfg);
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c index bb8cfc6..9689c8d 100644 --- a/sound/pci/hda/patch_hdmi.c +++ b/sound/pci/hda/patch_hdmi.c @@ -1277,7 +1277,8 @@ static int generic_hdmi_build_controls(struct hda_codec *codec) if (err < 0) return err; err = snd_hda_jack_add_kctl(codec, per_pin->pin_nid, - "HDMI", pin_idx); + "HDMI", pin_idx, + spec->pcm_rec[pin_idx].device); if (err < 0) return err; }