diff options
author | Liam Girdwood <lg@opensource.wolfsonmicro.com> | 2007-02-02 17:21:16 +0100 |
---|---|---|
committer | Jaroslav Kysela <perex@suse.cz> | 2007-02-09 09:03:46 +0100 |
commit | 596ce32b74dccf53ef59cc9ba2e95a2a34ba921c (patch) | |
tree | 6ecffb595a5839c1011eb8eb5a6e737f6d7a50e1 /sound | |
parent | eaff2ae702f937020bfde96eea552caae3815784 (diff) | |
download | linux-596ce32b74dccf53ef59cc9ba2e95a2a34ba921c.tar.gz linux-596ce32b74dccf53ef59cc9ba2e95a2a34ba921c.tar.bz2 linux-596ce32b74dccf53ef59cc9ba2e95a2a34ba921c.zip |
[ALSA] soc - ASoC 0.13 pxa2xx AC97 driver
This patch updates the pxa2xx AC97 driver to the new API in ASoC 0.13.
Changes:-
o Removed DAI capabilities matching code in favour of manual matching in
the machine drivers.
o Added DAI operations for codec and CPU interfaces.
o Added pxa2xx-ac97.h header
Signed-off-by: Liam Girdwood <lg@opensource.wolfsonmicro.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
Diffstat (limited to 'sound')
-rw-r--r-- | sound/soc/pxa/pxa2xx-ac97.c | 64 | ||||
-rw-r--r-- | sound/soc/pxa/pxa2xx-ac97.h | 22 |
2 files changed, 51 insertions, 35 deletions
diff --git a/sound/soc/pxa/pxa2xx-ac97.c b/sound/soc/pxa/pxa2xx-ac97.c index 28b1985edc05..1bbbeff84ef0 100644 --- a/sound/soc/pxa/pxa2xx-ac97.c +++ b/sound/soc/pxa/pxa2xx-ac97.c @@ -31,27 +31,12 @@ #include <asm/arch/audio.h> #include "pxa2xx-pcm.h" +#include "pxa2xx-ac97.h" static DEFINE_MUTEX(car_mutex); static DECLARE_WAIT_QUEUE_HEAD(gsr_wq); static volatile long gsr_bits; -#define AC97_DIR \ - (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE) - -#define AC97_RATES \ - (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \ - SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000) - -/* may need to expand this */ -static struct snd_soc_dai_mode pxa2xx_ac97_modes[] = { - { - .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE, - .pcmrate = AC97_RATES, - .pcmdir = AC97_DIR, - }, -}; - /* * Beware PXA27x bugs: * @@ -334,11 +319,12 @@ static int pxa2xx_ac97_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { struct snd_soc_pcm_runtime *rtd = substream->private_data; + struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai; if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) - rtd->cpu_dai->dma_data = &pxa2xx_ac97_pcm_stereo_out; + cpu_dai->dma_data = &pxa2xx_ac97_pcm_stereo_out; else - rtd->cpu_dai->dma_data = &pxa2xx_ac97_pcm_stereo_in; + cpu_dai->dma_data = &pxa2xx_ac97_pcm_stereo_in; return 0; } @@ -347,11 +333,12 @@ static int pxa2xx_ac97_hw_aux_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { struct snd_soc_pcm_runtime *rtd = substream->private_data; + struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai; if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) - rtd->cpu_dai->dma_data = &pxa2xx_ac97_pcm_aux_mono_out; + cpu_dai->dma_data = &pxa2xx_ac97_pcm_aux_mono_out; else - rtd->cpu_dai->dma_data = &pxa2xx_ac97_pcm_aux_mono_in; + cpu_dai->dma_data = &pxa2xx_ac97_pcm_aux_mono_in; return 0; } @@ -360,15 +347,20 @@ static int pxa2xx_ac97_hw_mic_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { struct snd_soc_pcm_runtime *rtd = substream->private_data; + struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai; if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) return -ENODEV; else - rtd->cpu_dai->dma_data = &pxa2xx_ac97_pcm_mic_mono_in; + cpu_dai->dma_data = &pxa2xx_ac97_pcm_mic_mono_in; return 0; } +#define PXA2XX_AC97_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |\ + SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_44100 | \ + SNDRV_PCM_RATE_48000) + /* * There is only 1 physical AC97 interface for pxa2xx, but it * has extra fifo's that can be used for aux DACs and ADCs. @@ -385,16 +377,17 @@ struct snd_soc_cpu_dai pxa_ac97_dai[] = { .playback = { .stream_name = "AC97 Playback", .channels_min = 2, - .channels_max = 2,}, + .channels_max = 2, + .rates = PXA2XX_AC97_RATES, + .formats = SNDRV_PCM_FMTBIT_S16_LE,}, .capture = { .stream_name = "AC97 Capture", .channels_min = 2, - .channels_max = 2,}, + .channels_max = 2, + .rates = PXA2XX_AC97_RATES, + .formats = SNDRV_PCM_FMTBIT_S16_LE,}, .ops = { .hw_params = pxa2xx_ac97_hw_params,}, - .caps = { - .num_modes = ARRAY_SIZE(pxa2xx_ac97_modes), - .mode = pxa2xx_ac97_modes,}, }, { .name = "pxa2xx-ac97-aux", @@ -403,16 +396,17 @@ struct snd_soc_cpu_dai pxa_ac97_dai[] = { .playback = { .stream_name = "AC97 Aux Playback", .channels_min = 1, - .channels_max = 1,}, + .channels_max = 1, + .rates = PXA2XX_AC97_RATES, + .formats = SNDRV_PCM_FMTBIT_S16_LE,}, .capture = { .stream_name = "AC97 Aux Capture", .channels_min = 1, - .channels_max = 1,}, + .channels_max = 1, + .rates = PXA2XX_AC97_RATES, + .formats = SNDRV_PCM_FMTBIT_S16_LE,}, .ops = { .hw_params = pxa2xx_ac97_hw_aux_params,}, - .caps = { - .num_modes = ARRAY_SIZE(pxa2xx_ac97_modes), - .mode = pxa2xx_ac97_modes,}, }, { .name = "pxa2xx-ac97-mic", @@ -421,12 +415,12 @@ struct snd_soc_cpu_dai pxa_ac97_dai[] = { .capture = { .stream_name = "AC97 Mic Capture", .channels_min = 1, - .channels_max = 1,}, + .channels_max = 1, + .rates = PXA2XX_AC97_RATES, + .formats = SNDRV_PCM_FMTBIT_S16_LE,}, .ops = { .hw_params = pxa2xx_ac97_hw_mic_params,}, - .caps = { - .num_modes = ARRAY_SIZE(pxa2xx_ac97_modes), - .mode = pxa2xx_ac97_modes,},}, +}, }; EXPORT_SYMBOL_GPL(pxa_ac97_dai); diff --git a/sound/soc/pxa/pxa2xx-ac97.h b/sound/soc/pxa/pxa2xx-ac97.h new file mode 100644 index 000000000000..4c4b882316ac --- /dev/null +++ b/sound/soc/pxa/pxa2xx-ac97.h @@ -0,0 +1,22 @@ +/* + * linux/sound/arm/pxa2xx-ac97.h + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#ifndef _PXA2XX_AC97_H +#define _PXA2XX_AC97_H + +/* pxa2xx DAI ID's */ +#define PXA2XX_DAI_AC97_HIFI 0 +#define PXA2XX_DAI_AC97_AUX 1 +#define PXA2XX_DAI_AC97_MIC 2 + +extern struct snd_soc_cpu_dai pxa_ac97_dai[3]; + +/* platform data */ +extern struct snd_ac97_bus_ops pxa2xx_ac97_ops; + +#endif |