Update of /cvsroot/alsa/alsa-kernel/pci
In directory sc8-pr-cvs1:/tmp/cvs-serv4982/pci
Modified Files:
intel8x0.c
Log Message:
- fixed the wrong sized allocation of snd_ac97_pcm.
- fixed the probing of multiple codecs on intel8x0.
- fixed the computation of rates bits.
Index: intel8x0.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/pci/intel8x0.c,v
retrieving revision 1.97
retrieving revision 1.98
diff -u -r1.97 -r1.98
--- intel8x0.c 18 Nov 2003 11:38:40 -0000 1.97
+++ intel8x0.c 20 Nov 2003 15:59:32 -0000 1.98
@@ -892,8 +892,10 @@
err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
if (err < 0)
return err;
- if (ichdev->pcm_open_flag)
+ if (ichdev->pcm_open_flag) {
snd_ac97_pcm_close(ichdev->pcm);
+ ichdev->pcm_open_flag = 0;
+ }
err = snd_ac97_pcm_open(ichdev->pcm, params_rate(hw_params),
params_channels(hw_params),
ichdev->pcm->r[0].slots);
@@ -906,8 +908,10 @@
{
ichdev_t *ichdev = get_ichdev(substream);
- if (ichdev->pcm_open_flag)
+ if (ichdev->pcm_open_flag) {
snd_ac97_pcm_close(ichdev->pcm);
+ ichdev->pcm_open_flag = 0;
+ }
return snd_pcm_lib_free_pages(substream);
}
@@ -1765,14 +1769,16 @@
goto __err;
chip->ac97_bus = pbus;
ac97.pci = chip->pci;
- if ((err = snd_ac97_mixer(pbus, &ac97, &x97)) < 0) {
- __err:
- /* clear the cold-reset bit for the next chance */
- if (chip->device_type != DEVICE_ALI)
- iputdword(chip, ICHREG(GLOB_CNT), igetdword(chip,
ICHREG(GLOB_CNT)) & ~ICH_AC97COLD);
- return err;
+ for (i = 0; i < codecs; i++) {
+ ac97.num = i;
+ if ((err = snd_ac97_mixer(pbus, &ac97, &x97)) < 0) {
+ snd_printk(KERN_ERR "Unable to initialize codec #%d\n", i);
+ if (i == 0)
+ goto __err;
+ continue;
+ }
+ chip->ac97[i] = x97;
}
- chip->ac97[0] = x97;
/* tune up the primary codec */
snd_ac97_tune_hardware(chip->ac97[0], ac97_quirks);
/* enable separate SDINs for ICH4 */
@@ -1784,7 +1790,7 @@
i -= 2; /* do not allocate PCM2IN and MIC2 */
if (spdif_idx < 0)
i--; /* do not allocate S/PDIF */
- err = snd_ac97_pcm_assign(pbus, ARRAY_SIZE(ac97_pcm_defs), ac97_pcm_defs);
+ err = snd_ac97_pcm_assign(pbus, i, ac97_pcm_defs);
if (err < 0)
goto __err;
chip->ichd[ICHD_PCMOUT].pcm = &pbus->pcms[0];
@@ -1826,6 +1832,12 @@
}
chip->in_ac97_init = 0;
return 0;
+
+ __err:
+ /* clear the cold-reset bit for the next chance */
+ if (chip->device_type != DEVICE_ALI)
+ iputdword(chip, ICHREG(GLOB_CNT), igetdword(chip, ICHREG(GLOB_CNT)) &
~ICH_AC97COLD);
+ return err;
}
-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
Does SourceForge.net help you be more productive? Does it
help you create better code? SHARE THE LOVE, and help us help
YOU! Click Here: http://sourceforge.net/donate/
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog