Commit e962dc94 authored by Jaroslav Kysela's avatar Jaroslav Kysela

ALSA CVS update - Takashi Iwai <tiwai@suse.de>

AC97 Codec Core
fixed snd_ac97_set_rate() to accept surround and LFE sample rates, too.
parent a77aedf0
...@@ -2067,6 +2067,8 @@ static int set_spdif_rate(ac97_t *ac97, unsigned short rate) ...@@ -2067,6 +2067,8 @@ static int set_spdif_rate(ac97_t *ac97, unsigned short rate)
* *
* The valid registers are AC97_PMC_MIC_ADC_RATE, * The valid registers are AC97_PMC_MIC_ADC_RATE,
* AC97_PCM_FRONT_DAC_RATE, AC97_PCM_LR_ADC_RATE and AC97_SPDIF. * AC97_PCM_FRONT_DAC_RATE, AC97_PCM_LR_ADC_RATE and AC97_SPDIF.
* AC97_PCM_SURR_DAC_RATE and AC97_PCM_LFE_DAC_RATE are accepted
* if the codec supports them.
* The SPDIF register is a pseudo-register to change the rate of SPDIF * The SPDIF register is a pseudo-register to change the rate of SPDIF
* (only if supported). * (only if supported).
* *
...@@ -2074,28 +2076,28 @@ static int set_spdif_rate(ac97_t *ac97, unsigned short rate) ...@@ -2074,28 +2076,28 @@ static int set_spdif_rate(ac97_t *ac97, unsigned short rate)
*/ */
int snd_ac97_set_rate(ac97_t *ac97, int reg, unsigned short rate) int snd_ac97_set_rate(ac97_t *ac97, int reg, unsigned short rate)
{ {
unsigned short mask;
unsigned int tmp; unsigned int tmp;
switch (reg) { switch (reg) {
case AC97_PCM_MIC_ADC_RATE: case AC97_PCM_MIC_ADC_RATE:
mask = 0x0000;
if ((ac97->regs[AC97_EXTENDED_STATUS] & AC97_EA_VRM) == 0) /* MIC VRA */ if ((ac97->regs[AC97_EXTENDED_STATUS] & AC97_EA_VRM) == 0) /* MIC VRA */
if (rate != 48000) if (rate != 48000)
return -EINVAL; return -EINVAL;
break; break;
case AC97_PCM_FRONT_DAC_RATE: case AC97_PCM_FRONT_DAC_RATE:
mask = 0x0200;
if ((ac97->regs[AC97_EXTENDED_STATUS] & AC97_EA_VRA) == 0) /* VRA */
if (rate != 48000)
return -EINVAL;
break;
case AC97_PCM_LR_ADC_RATE: case AC97_PCM_LR_ADC_RATE:
mask = 0x0100;
if ((ac97->regs[AC97_EXTENDED_STATUS] & AC97_EA_VRA) == 0) /* VRA */ if ((ac97->regs[AC97_EXTENDED_STATUS] & AC97_EA_VRA) == 0) /* VRA */
if (rate != 48000) if (rate != 48000)
return -EINVAL; return -EINVAL;
break; break;
case AC97_PCM_SURR_DAC_RATE:
if (! (ac97->ext_id & AC97_SCAP_SURROUND_DAC))
return -EINVAL;
break;
case AC97_PCM_LFE_DAC_RATE:
if (! (ac97->ext_id & AC97_SCAP_CENTER_LFE_DAC))
return -EINVAL;
break;
case AC97_SPDIF: case AC97_SPDIF:
return set_spdif_rate(ac97, rate); return set_spdif_rate(ac97, rate);
default: default:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment