[alsa-devel] model needed for Clevo P150HM (Realtek ALC892)

Takashi Iwai tiwai at suse.de
Thu Jun 30 19:41:00 CEST 2011


At Thu, 30 Jun 2011 19:00:44 +0200,
Julian Sikorski wrote:
> 
> W dniu 30.06.2011 08:54, Takashi Iwai pisze:
> > At Thu, 30 Jun 2011 08:30:10 +0200,
> > Julian Sikorski wrote:
> >>
> >> W dniu 30.06.2011 07:26, Takashi Iwai pisze:
> >>> At Wed, 29 Jun 2011 21:29:38 +0200,
> >>> Julian Sikorski wrote:
> >>>>
> >>>> I also tried merging sound-2.6/master with Linus's tree, but this also
> >>>> did not help.
> >>>
> >>> It's really strange.  Are you sure that this is the kernel you
> >>> modified properly?  Before further debugging, check two things:
> >>>
> >>> - Run "git log sound/pci/hda/patch_realtek.c" and the first few
> >>>   entries, whether they come from sound git tree.  For example,
> >>>   check the commit below is contained:
> >>>
> >>>   commit 7ec9c6ccc6007b14a916021d4ba7ffbcc7822ae3
> >>>   Author: Takashi Iwai <tiwai at suse.de>
> >>>   Date:   Mon Jun 27 15:53:38 2011 +0200
> >>>
> >>>     ALSA: hda - Fix volume-init for ALC259 with invalid widget caps
> >>
> >> commit 0b0c8490670a77b937f502491ae9d5236aa4054a
> >> Author: Takashi Iwai <tiwai at suse.de>
> >> Date:   Tue Jun 28 12:45:47 2011 +0200
> >>
> >>     ALSA: hda - Create snd_hda_get_conn_index() helper function
> >>
> >>     Create snd_hda_get_conn_index() helper function for obtaining the
> >>     connection index of the widget.  Replaced the similar codes used in
> >>     several codec-drivers with this common helper.
> >>
> >>     Signed-off-by: Takashi Iwai <tiwai at suse.de>
> >>
> >> commit 4f574b7b1a1cc8aac617e938459e8f03a641e678
> >> Author: Takashi Iwai <tiwai at suse.de>
> >> Date:   Mon Jun 27 16:17:07 2011 +0200
> >>
> >>     ALSA: hda - More volume-init fixes for ALC267 codec
> >>
> >>     More similar fixes like previous commits: handle the exceptional case
> >>     like ALC267 where no volume amp is found in ADC widget but in the
> >>     capsrc widget instead.
> >>
> >>     Also minor checks for avoiding possible erros: no connection-select
> >>     when the pin has a single selection, and add beep verbs only when the
> >>     0x1d is used for beep.
> >>
> >>     Signed-off-by: Takashi Iwai <tiwai at suse.de>
> >>
> >> To be even more sure, I re-synced your branch again and built a new
> >> kernel. I am attaching patch_realtek.c file being built. Fresh
> >> alsa-info.sh is here:
> >> http://www.alsa-project.org/db/?f=5051b2cb788b1db4273e06e98a78783dd0ec679f
> > 
> > OK, then it's correct.
> > 
> >>>     
> >>> - Confirm the running kernel is what you really built and installed.
> >>>   You can modify the suffix via $CONFIG_LOCALVERSION in .config file.
> >>>   Name it uniquely, rebuild, re-install and reboot.  The new suffix
> >>>   should appear in the output of "uname -r".
> >>
> >> belegdol4 is the suffix I added:
> >> $ uname -r
> >> 3.0-0.rc5.git0.1.belegdol4.fc15.x86_64
> >>
> >>> - Once when these are correct, check /proc/asound/card0/codec#0:
> >>>   the widget NID 0x02 should contain "Speaker Playback Volume" instead
> >>>   of "Headphone Playback Volume" with the latest driver.
> >>
> >> Node 0x02 [Audio Output] wcaps 0x41d: Stereo Amp-Out
> >>   Control: name="Headphone Playback Volume", index=0, device=0
> >>
> >> Perhaps I need to specify a correct model to enable this code?
> > 
> > No, you shouldn't pass any model option.
> > 
> > Could you apply the patch below to add some debug prints, and give
> > the relevant kernel messages you get?  Just grep lines with 'XXX'.
> > 
> > 
> > Takashi
> 
> Here you go:
> 
> $ dmesg | grep XXX
> [   12.789557] XXX alc662_auto_fill_dac_nids called
> [   12.789716] XXX filled dacs: 2/0/0/0/0, hp 0, ext 0/0/0
> [   12.789718] XXX swap primary out to HP
> [   12.789719] XXX alc662_auto_fill_dac_nids called
> [   12.789845] XXX filled dacs: 2/0/0/0/0, hp 0, ext 0/0/0

OK, at this point, something is wrong.

Could you try the patch again (after reverting the previous debug patch)?
This will give a bit more outputs.

I have a vague idea what could be wrong now.  Maybe the connection list
is differently returned from the real hardware unlike the emulator.
But I need to see it in more details.


thanks,

Takashi

---
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 7b96dce..0a28371 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -18770,8 +18770,11 @@ static hda_nid_t alc_auto_look_for_dac(struct hda_codec *codec, hda_nid_t pin)
 static hda_nid_t get_dac_if_single(struct hda_codec *codec, hda_nid_t pin)
 {
 	hda_nid_t sel = alc_go_down_to_selector(codec, pin);
-	if (snd_hda_get_conn_list(codec, sel, NULL) == 1)
+	printk(KERN_DEBUG "XXX check single for pin %x, sel %x\n", pin, sel);
+	if (snd_hda_get_conn_list(codec, sel, NULL) == 1) {
+		printk(KERN_DEBUG "XXX pin %x coupled with a single DAC\n", pin);
 		return alc_auto_look_for_dac(codec, pin);
+	}
 	return 0;
 }
 
@@ -18783,6 +18786,13 @@ static int alc662_auto_fill_dac_nids(struct hda_codec *codec)
 	bool redone;
 	int i;
 
+	printk(KERN_DEBUG "XXX alc662_auto_fill_dac_nids called\n");
+	printk(KERN_DEBUG "XXX line_outs=%d, %x/%x/%x\n",
+	       cfg->line_outs, cfg->line_out_pins[0], cfg->line_out_pins[1], cfg->line_out_pins[2]);
+	printk(KERN_DEBUG "XXX hp_outs=%d, %x/%x/%x\n",
+	       cfg->hp_outs, cfg->hp_pins[0], cfg->hp_pins[1], cfg->hp_pins[2]);
+	printk(KERN_DEBUG "XXX spk_outs=%d, %x/%x/%x\n",
+	       cfg->speaker_outs, cfg->speaker_pins[0], cfg->speaker_pins[1], cfg->speaker_pins[2]);
  again:
 	spec->multiout.num_dacs = 0;
 	spec->multiout.hp_nid = 0;
@@ -18813,6 +18823,7 @@ static int alc662_auto_fill_dac_nids(struct hda_codec *codec)
 			 * checking the hard-wired DACs
 			 */
 			redone = true;
+			printk(KERN_DEBUG "XXX redoing...\n");
 			goto again;
 		}
 	}
@@ -18826,6 +18837,17 @@ static int alc662_auto_fill_dac_nids(struct hda_codec *codec)
 				sizeof(hda_nid_t) * (cfg->line_outs - i - 1));
 	}
 
+	printk(KERN_DEBUG "XXX filled dacs: %x/%x/%x/%x/%x, hp %x, ext %x/%x/%x\n",
+	       spec->private_dac_nids[0],
+	       spec->private_dac_nids[1],
+	       spec->private_dac_nids[2],
+	       spec->private_dac_nids[3],
+	       spec->private_dac_nids[4],
+	       spec->multiout.hp_nid,
+	       spec->multiout.extra_out_nid[0],
+	       spec->multiout.extra_out_nid[1],
+	       spec->multiout.extra_out_nid[2]);
+
 	return 0;
 }
 
@@ -18877,6 +18899,7 @@ static int alc662_auto_create_multi_out_ctls(struct hda_codec *codec,
 		mix = alc_auto_dac_to_mix(codec, pin, nid);
 		if (!mix)
 			continue;
+		printk(KERN_DEBUG "XXX create mixer ch %d pin %x dac %x mix %x\n", i, pin, nid, mix);
 		name = alc_get_line_out_pfx(spec, i, true, &index);
 		if (!name) {
 			/* Center/LFE */
@@ -19026,6 +19049,7 @@ static int alc_auto_fill_multi_ios(struct hda_codec *codec,
 			dac = alc_auto_look_for_dac(codec, nid);
 			if (!dac)
 				continue;
+			printk(KERN_DEBUG "XXX added multi-io pin %x, dac %x\n", nid, dac);
 			spec->multi_io[num_pins].pin = nid;
 			spec->multi_io[num_pins].dac = dac;
 			num_pins++;
@@ -19128,13 +19152,16 @@ static int alc_auto_add_multi_channel_mode(struct hda_codec *codec,
 
 	if (cfg->line_out_type == AUTO_PIN_SPEAKER_OUT && cfg->hp_outs == 1) {
 		/* use HP as primary out */
+		printk(KERN_DEBUG "XXX swap primary out to HP\n");
 		cfg->speaker_outs = cfg->line_outs;
 		memcpy(cfg->speaker_pins, cfg->line_out_pins,
 		       sizeof(cfg->speaker_pins));
+		printk(KERN_DEBUG "XXX spk=%x\n", cfg->speaker_pins[0]);
 		cfg->line_outs = cfg->hp_outs;
 		memcpy(cfg->line_out_pins, cfg->hp_pins, sizeof(cfg->hp_pins));
 		cfg->hp_outs = 0;
 		memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
+		printk(KERN_DEBUG "XXX line=%x\n", cfg->line_out_pins[0]);
 		cfg->line_out_type = AUTO_PIN_HP_OUT;
 		if (fill_dac)
 			fill_dac(codec);


More information about the Alsa-devel mailing list