diff options
| author | Russell King <rmk+kernel@arm.linux.org.uk> | 2009-12-18 12:48:45 -0500 |
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2009-12-18 14:31:01 -0500 |
| commit | a08d56583f6b87e2981d1b6e9ee891bdc741cc44 (patch) | |
| tree | 4fdc8eeaee76f0bb4d7f78b1e3d36717142ab28c | |
| parent | d3aee7996c30f928bbbbfd0994148e35d2e83084 (diff) | |
ALSA: AACI: add double-rate support
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
| -rw-r--r-- | sound/arm/aaci.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/sound/arm/aaci.c b/sound/arm/aaci.c index b88bbded2f4f..b377370af2d7 100644 --- a/sound/arm/aaci.c +++ b/sound/arm/aaci.c | |||
| @@ -366,6 +366,10 @@ static int __aaci_pcm_open(struct aaci *aaci, | |||
| 366 | runtime->hw.rates = aacirun->pcm->rates; | 366 | runtime->hw.rates = aacirun->pcm->rates; |
| 367 | snd_pcm_limit_hw_rates(runtime); | 367 | snd_pcm_limit_hw_rates(runtime); |
| 368 | 368 | ||
| 369 | if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK && | ||
| 370 | aacirun->pcm->r[1].slots) | ||
| 371 | snd_ac97_pcm_double_rate_rules(runtime); | ||
| 372 | |||
| 369 | /* | 373 | /* |
| 370 | * FIXME: ALSA specifies fifo_size in bytes. If we're in normal | 374 | * FIXME: ALSA specifies fifo_size in bytes. If we're in normal |
| 371 | * mode, each 32-bit word contains one sample. If we're in | 375 | * mode, each 32-bit word contains one sample. If we're in |
| @@ -439,9 +443,12 @@ static int aaci_pcm_hw_params(struct snd_pcm_substream *substream, | |||
| 439 | err = snd_pcm_lib_malloc_pages(substream, | 443 | err = snd_pcm_lib_malloc_pages(substream, |
| 440 | params_buffer_bytes(params)); | 444 | params_buffer_bytes(params)); |
| 441 | if (err >= 0) { | 445 | if (err >= 0) { |
| 442 | err = snd_ac97_pcm_open(aacirun->pcm, params_rate(params), | 446 | unsigned int rate = params_rate(params); |
| 447 | int dbl = rate > 48000; | ||
| 448 | |||
| 449 | err = snd_ac97_pcm_open(aacirun->pcm, rate, | ||
| 443 | params_channels(params), | 450 | params_channels(params), |
| 444 | aacirun->pcm->r[0].slots); | 451 | aacirun->pcm->r[dbl].slots); |
| 445 | 452 | ||
| 446 | aacirun->pcm_open = err == 0; | 453 | aacirun->pcm_open = err == 0; |
| 447 | aacirun->cr = CR_FEN | CR_COMPACT | CR_SZ16; | 454 | aacirun->cr = CR_FEN | CR_COMPACT | CR_SZ16; |
| @@ -808,6 +815,12 @@ static struct ac97_pcm ac97_defs[] __devinitdata = { | |||
| 808 | (1 << AC97_SLOT_PCM_SRIGHT) | | 815 | (1 << AC97_SLOT_PCM_SRIGHT) | |
| 809 | (1 << AC97_SLOT_LFE), | 816 | (1 << AC97_SLOT_LFE), |
| 810 | }, | 817 | }, |
| 818 | [1] = { | ||
| 819 | .slots = (1 << AC97_SLOT_PCM_LEFT) | | ||
| 820 | (1 << AC97_SLOT_PCM_RIGHT) | | ||
| 821 | (1 << AC97_SLOT_PCM_LEFT_0) | | ||
| 822 | (1 << AC97_SLOT_PCM_RIGHT_0), | ||
| 823 | }, | ||
| 811 | }, | 824 | }, |
| 812 | }, | 825 | }, |
| 813 | [1] = { /* PCM in */ | 826 | [1] = { /* PCM in */ |
