[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