On Mon, 23 Apr 2018 20:40:37 +0200, Johannes Geiss wrote:
On Mon, 23 Apr 2018 15:42:33 +0200 Takashi Iwai tiwai@suse.de wrote:
Did you get the error message "Too many HDMI devices" as mentioned in the changelog?
Yes:
Mar 14 11:29:48 mizar kernel: snd_hda_intel 0000:00:1b.0: Too many HDMI devices Mar 14 11:29:48 mizar kernel: snd_hda_intel 0000:00:1b.0: Consider building the kernel with CONFIG_SND_DYNAMIC_MINORS=y Mar 14 11:29:48 mizar kernel: input: HDA Intel PCH Line as /devices/pci0000:00/0000:00:1b.0/sound/card0/input3 Mar 14 11:29:48 mizar kernel: input: HDA Intel PCH Headphone as /devices/pci0000:00/0000:00:1b.0/sound/card0/input4 Mar 14 11:29:48 mizar kernel: input: HDA Intel PCH SPDIF In as /devices/pci0000:00/0000:00:1b.0/sound/card0/input5 Mar 14 11:29:48 mizar kernel: input: HDA Intel PCH HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:1b.0/sound/card0/input7 Mar 14 11:29:48 mizar kernel: input: HDA Intel PCH HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:1b.0/sound/card0/input8 Mar 14 11:29:48 mizar kernel: input: HDA Intel PCH HDMI/DP as /devices/pci0000:00/0000:00:1b.0/sound/card0/input9 Mar 14 11:29:48 mizar systemd[1]: Reached target Sound Card.
Does this mean I should try to use CONFIG_SND_DYNAMIC_MINORS=y to solve the hibernate/suspend problem?
I guess the problem should gone with that kconfig, yes. But it doesn't mean that we ignore the issue.
What about the patch below? Does it change the behavior?
thanks,
Takashi
-- 8< -- diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c --- a/sound/pci/hda/patch_hdmi.c +++ b/sound/pci/hda/patch_hdmi.c @@ -1383,6 +1383,8 @@ static void hdmi_pcm_setup_pin(struct hdmi_spec *spec, pcm = get_pcm_rec(spec, per_pin->pcm_idx); else return; + if (!pcm->pcm) + return; if (!test_bit(per_pin->pcm_idx, &spec->pcm_in_use)) return;
@@ -2151,8 +2153,13 @@ static int generic_hdmi_build_controls(struct hda_codec *codec) int dev, err; int pin_idx, pcm_idx;
- for (pcm_idx = 0; pcm_idx < spec->pcm_used; pcm_idx++) { + if (!get_pcm_rec(spec, pcm_idx)->pcm) { + /* no PCM; mark this not to be selected */ + set_bit(idx, &spec->pcm_bitmap); + continue; + } + err = generic_hdmi_build_jack(codec, pcm_idx); if (err < 0) return err;