At Tue, 24 Apr 2007 10:15:30 +1000, Ben DiDonc wrote:
Takashi, I applied your patch (to alsa-driver-hg-20070421) and modprobe'd snd_hda_intel without probe_mask, but with model=auto. It worked and detected the ALC861 codec straight away, just like it did with probe_mask=8.
OK, then I'll apply the patch to the upstream.
I max'ed all playback and capture volumes , ran arecord | aplay ,which worked fine. The laptop I have (toshiba A100) only has builtin speakers and a headphone jack for output (and a mic jack for input). There are no other jacks. I tried both the speakers and headphones, both worked (the speakers are muted when the headphone is connected).
Interesting. It means that this has obviously a different hardware design from the pre-defined one in the current driver code.
Next I modprobe'd again snd_hda_intel without any parameters this time, and it worked fine too. the codec was detected and both playback and capture worked fine.
The current code has a check of headphone pin, so either with or without headphone, model=toshiba works.
Takashi
On 4/24/07, Takashi Iwai tiwai@suse.de wrote:
At Tue, 24 Apr 2007 00:12:46 +1000, Ben DiDonc wrote:
Here are the two codec files: codec#3-working-14rc1 was obtained after loading snd-hda-intel with probe_mask=8 and model=auto the other was obtained after loading the module without special parameters
Thanks. Let's cut out bugs step by step.
The probing problem with the latest driver might be fixed by the patch below. Could you try it and load without probe_mask option?
Also, what output did you test actually? Is the output from the built-in speaker (if any), the output from HP-jack or both?
Takashi
diff -r aed6a15c9398 pci/hda/hda_intel.c --- a/pci/hda/hda_intel.c Mon Apr 23 11:54:41 2007 +0200 +++ b/pci/hda/hda_intel.c Mon Apr 23 16:18:35 2007 +0200 @@ -979,7 +979,7 @@ static int __devinit azx_codec_create(st static int __devinit azx_codec_create(struct azx *chip, const char *model) { struct hda_bus_template bus_temp;
int c, codecs, err;
int c, codecs, audio_codecs, err; memset(&bus_temp, 0, sizeof(bus_temp)); bus_temp.private_data = chip;
@@ -991,16 +991,19 @@ static int __devinit azx_codec_create(st if ((err = snd_hda_bus_new(chip->card, &bus_temp, &chip->bus)) < 0) return err;
codecs = 0;
codecs = audio_codecs = 0; for (c = 0; c < AZX_MAX_CODECS; c++) { if ((chip->codec_mask & (1 << c)) & probe_mask) {
err = snd_hda_codec_new(chip->bus, c, NULL);
struct hda_codec *codec;
err = snd_hda_codec_new(chip->bus, c, &codec); if (err < 0) continue; codecs++;
if (codec->afg)
audio_codecs++; } }
if (!codecs) {
if (!audio_codecs) { /* probe additional slots if no codec is found */ for (; c < azx_max_codecs[chip->driver_type]; c++) { if ((chip->codec_mask & (1 << c)) & probe_mask) {