[alsa-devel] Linux-Kernel: System freezes after hibernate or suspend on a Mac mini 6, 2

Takashi Iwai tiwai at suse.de
Mon Apr 23 21:26:22 CEST 2018


On Mon, 23 Apr 2018 20:40:37 +0200,
Johannes Geiss wrote:
> 
> On Mon, 23 Apr 2018 15:42:33 +0200
> Takashi Iwai <tiwai at 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;


More information about the Alsa-devel mailing list