At Wed, 3 Dec 2003 11:41:23 -0500 (EST), Jeremy Hall wrote: > > there also appears to be a delay of upwards of 2 seconds before it starts > playing > > but I don't have anything more in my logs.
you're using the cvs version, right? then apply the patch below. Takashi
Index: alsa-kernel/pci/ac97/ac97_pcm.c =================================================================== RCS file: /suse/tiwai/cvs/alsa/alsa-kernel/pci/ac97/ac97_pcm.c,v retrieving revision 1.8 diff -u -r1.8 ac97_pcm.c --- alsa-kernel/pci/ac97/ac97_pcm.c 3 Dec 2003 13:37:25 -0000 1.8 +++ alsa-kernel/pci/ac97/ac97_pcm.c 3 Dec 2003 15:58:24 -0000 @@ -418,16 +418,19 @@ continue; avail_slots[0][i] = get_pslots(codec, &rate_table[0][i]); avail_slots[1][i] = get_cslots(codec); + printk(KERN_DEBUG "checking codec %d, slots = 0x%x / 0x%x\n", i, avail_slots[0][i], avail_slots[1][i]); if (!(codec->scaps & AC97_SCAP_INDEP_SDIN)) { for (j = 0; j < i; j++) { if (bus->codec[j]) avail_slots[1][i] &= ~avail_slots[1][j]; } + printk(KERN_DEBUG "-> capture slots = 0x%x\n", avail_slots[1][i]); } } /* FIXME: add double rate allocation */ /* first step - exclusive devices */ for (i = 0; i < pcms_count; i++) { + printk(KERN_DEBUG "probing pcm %d\n", i); pcm = &pcms[i]; rpcm = &rpcms[i]; /* low-level driver thinks that it's more clever */ @@ -445,19 +448,23 @@ for (j = 0; j < 4 && slots; j++) { if (!bus->codec[j]) continue; + printk(KERN_DEBUG ".. probing codec %d, slots = 0x%x\n", j, slots); rates = ~0; if (pcm->exclusive) { /* exclusive access */ tmp = avail_slots[pcm->stream][j] & slots; + printk(KERN_DEBUG ".. tmp = 0x%x\n", tmp); for (k = 0; k < i; k++) { if (rpcm->stream == rpcms[k].stream) tmp &= ~rpcms[k].r[0].rslots[j]; } + printk(KERN_DEBUG ".. tmp = 0x%x\n", tmp); if (tmp) { rpcm->r[0].rslots[j] = tmp; rpcm->r[0].codec[j] = bus->codec[j]; rpcm->r[0].rate_table[j] = rate_table[pcm->stream][j]; rates = get_rates(rpcm, j, tmp, 0); + printk(KERN_DEBUG ".. rslots = 0x%x, rate_table = %d, rates = 0x%x\n", tmp, rpcm->r[0].rate_table[j], rates); avail_slots[pcm->stream][j] &= ~tmp; } } else { @@ -476,6 +483,7 @@ } if (rpcm->rates == ~0) rpcm->rates = 0; /* not used */ + printk(KERN_DEBUG "--> slots = 0x%x, rates = 0x%x\n", rpcm->r[0].slots, rpcm->rates); } bus->pcms_count = pcms_count; bus->pcms = rpcms; @@ -500,6 +508,7 @@ unsigned char reg; int err = 0; + printk(KERN_DEBUG "ac97_pcm_open: rate = %d, cfg = %d, slots = 0x%x\n", rate, cfg, slots); if (rate > 48000) /* FIXME: add support for double rate */ return -EINVAL; bus = pcm->bus; @@ -548,9 +557,10 @@ } if (reg_ok & (1 << (reg - AC97_PCM_FRONT_DAC_RATE))) continue; + printk(KERN_DEBUG "setting ac97 reg 0x%x to rate %d\n", reg, rate); err = snd_ac97_set_rate(pcm->r[r].codec[cidx], reg, rate); if (err < 0) - snd_printk(KERN_ERR "error in snd_ac97_set_rate: cidx=%d, reg=0x%x, rate=%d\n, err=%d", cidx, reg, rate, err); + snd_printk(KERN_ERR "error in snd_ac97_set_rate: cidx=%d, reg=0x%x, rate=%d, err=%d\n", cidx, reg, rate, err); else reg_ok |= (1 << (reg - AC97_PCM_FRONT_DAC_RATE)); }