Update of /cvsroot/alsa/alsa-kernel/pci/ac97 In directory sc8-pr-cvs1:/tmp/cvs-serv13198
Modified Files: ac97_pcm.c Log Message: - fixed the rates detection for capture. Index: ac97_pcm.c =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/pci/ac97/ac97_pcm.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- ac97_pcm.c 24 Nov 2003 08:02:10 -0000 1.4 +++ ac97_pcm.c 28 Nov 2003 10:31:03 -0000 1.5 @@ -145,6 +145,19 @@ } }}; +/* FIXME: more various mappings for ADC? */ +static unsigned char rate_cregs[9] = { + AC97_PCM_LR_ADC_RATE, /* 3 */ + AC97_PCM_LR_ADC_RATE, /* 4 */ + 0xff, /* 5 */ + AC97_PCM_MIC_ADC_RATE, /* 6 */ + 0xff, /* 7 */ + 0xff, /* 8 */ + 0xff, /* 9 */ + 0xff, /* 10 */ + 0xff, /* 11 */ +}; + static unsigned char get_slot_reg(struct ac97_pcm *pcm, unsigned short cidx, unsigned short slot, int dbl) { @@ -152,7 +165,10 @@ return 0xff; if (slot > 11) return 0xff; - return rate_reg_tables[dbl][pcm->r[dbl].rate_table[cidx]][slot - 3]; + if (pcm->stream == SNDRV_PCM_STREAM_PLAYBACK) + return rate_preg_tables[dbl][pcm->r[dbl].rate_table[cidx]][slot - 3]; + else + return rate_cregs[slot - 3]; } static int set_spdif_rate(ac97_t *ac97, unsigned short rate) @@ -380,7 +396,6 @@ const struct ac97_pcm *pcm; struct ac97_pcm *rpcms, *rpcm; unsigned short avail_slots[2][4]; - unsigned short all_slots[2][4]; unsigned char rate_table[2][4]; unsigned short tmp, slots; unsigned int rates; @@ -390,7 +405,7 @@ if (rpcms == NULL) return -ENOMEM; memset(avail_slots, 0, sizeof(avail_slots)); - memset(all_slots, 0, sizeof(all_slots)); + memset(rate_table, 0, sizeof(rate_table)); for (i = 0; i < 4; i++) { codec = bus->codec[i]; if (! codec) @@ -401,8 +416,6 @@ for (j = 0; j < i; j++) avail_slots[1][i] &= ~avail_slots[1][j]; } - all_slots[0][i] = avail_slots[0][i]; - all_slots[1][i] = avail_slots[1][i]; } /* FIXME: add double rate allocation */ /* first step - exclusive devices */ @@ -430,7 +443,7 @@ if (tmp) { rpcm->r[0].rslots[j] = tmp; rpcm->r[0].codec[j] = bus->codec[j]; - rpcm->r[0].rate_table[j] = rate_table[0][j]; + rpcm->r[0].rate_table[j] = rate_table[pcm->stream][j]; rates = get_rates(rpcm, j, tmp, 0); avail_slots[pcm->stream][j] &= ~tmp; } ------------------------------------------------------- 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