aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/pxa/pxa2xx-ac97.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/pxa/pxa2xx-ac97.c')
-rw-r--r--sound/soc/pxa/pxa2xx-ac97.c46
1 files changed, 12 insertions, 34 deletions
diff --git a/sound/soc/pxa/pxa2xx-ac97.c b/sound/soc/pxa/pxa2xx-ac97.c
index d314115e3dd7..ac51c6d25c42 100644
--- a/sound/soc/pxa/pxa2xx-ac97.c
+++ b/sound/soc/pxa/pxa2xx-ac97.c
@@ -24,7 +24,6 @@
24#include <mach/dma.h> 24#include <mach/dma.h>
25#include <mach/audio.h> 25#include <mach/audio.h>
26 26
27#include "pxa2xx-pcm.h"
28#include "pxa2xx-ac97.h" 27#include "pxa2xx-ac97.h"
29 28
30static void pxa2xx_ac97_warm_reset(struct snd_ac97 *ac97) 29static void pxa2xx_ac97_warm_reset(struct snd_ac97 *ac97)
@@ -104,24 +103,21 @@ static int pxa2xx_ac97_resume(struct snd_soc_dai *dai)
104#define pxa2xx_ac97_resume NULL 103#define pxa2xx_ac97_resume NULL
105#endif 104#endif
106 105
107static int pxa2xx_ac97_probe(struct platform_device *pdev, 106static int pxa2xx_ac97_probe(struct snd_soc_dai *dai)
108 struct snd_soc_dai *dai)
109{ 107{
110 return pxa2xx_ac97_hw_probe(to_platform_device(dai->dev)); 108 return pxa2xx_ac97_hw_probe(to_platform_device(dai->dev));
111} 109}
112 110
113static void pxa2xx_ac97_remove(struct platform_device *pdev, 111static int pxa2xx_ac97_remove(struct snd_soc_dai *dai)
114 struct snd_soc_dai *dai)
115{ 112{
116 pxa2xx_ac97_hw_remove(to_platform_device(dai->dev)); 113 pxa2xx_ac97_hw_remove(to_platform_device(dai->dev));
114 return 0;
117} 115}
118 116
119static int pxa2xx_ac97_hw_params(struct snd_pcm_substream *substream, 117static int pxa2xx_ac97_hw_params(struct snd_pcm_substream *substream,
120 struct snd_pcm_hw_params *params, 118 struct snd_pcm_hw_params *params,
121 struct snd_soc_dai *dai) 119 struct snd_soc_dai *cpu_dai)
122{ 120{
123 struct snd_soc_pcm_runtime *rtd = substream->private_data;
124 struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
125 struct pxa2xx_pcm_dma_params *dma_data; 121 struct pxa2xx_pcm_dma_params *dma_data;
126 122
127 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) 123 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
@@ -136,10 +132,8 @@ static int pxa2xx_ac97_hw_params(struct snd_pcm_substream *substream,
136 132
137static int pxa2xx_ac97_hw_aux_params(struct snd_pcm_substream *substream, 133static int pxa2xx_ac97_hw_aux_params(struct snd_pcm_substream *substream,
138 struct snd_pcm_hw_params *params, 134 struct snd_pcm_hw_params *params,
139 struct snd_soc_dai *dai) 135 struct snd_soc_dai *cpu_dai)
140{ 136{
141 struct snd_soc_pcm_runtime *rtd = substream->private_data;
142 struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
143 struct pxa2xx_pcm_dma_params *dma_data; 137 struct pxa2xx_pcm_dma_params *dma_data;
144 138
145 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) 139 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
@@ -154,11 +148,8 @@ static int pxa2xx_ac97_hw_aux_params(struct snd_pcm_substream *substream,
154 148
155static int pxa2xx_ac97_hw_mic_params(struct snd_pcm_substream *substream, 149static int pxa2xx_ac97_hw_mic_params(struct snd_pcm_substream *substream,
156 struct snd_pcm_hw_params *params, 150 struct snd_pcm_hw_params *params,
157 struct snd_soc_dai *dai) 151 struct snd_soc_dai *cpu_dai)
158{ 152{
159 struct snd_soc_pcm_runtime *rtd = substream->private_data;
160 struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
161
162 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) 153 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
163 return -ENODEV; 154 return -ENODEV;
164 else 155 else
@@ -188,10 +179,9 @@ static struct snd_soc_dai_ops pxa_ac97_mic_dai_ops = {
188 * There is only 1 physical AC97 interface for pxa2xx, but it 179 * There is only 1 physical AC97 interface for pxa2xx, but it
189 * has extra fifo's that can be used for aux DACs and ADCs. 180 * has extra fifo's that can be used for aux DACs and ADCs.
190 */ 181 */
191struct snd_soc_dai pxa_ac97_dai[] = { 182static struct snd_soc_dai_driver pxa_ac97_dai[] = {
192{ 183{
193 .name = "pxa2xx-ac97", 184 .name = "pxa2xx-ac97",
194 .id = 0,
195 .ac97_control = 1, 185 .ac97_control = 1,
196 .probe = pxa2xx_ac97_probe, 186 .probe = pxa2xx_ac97_probe,
197 .remove = pxa2xx_ac97_remove, 187 .remove = pxa2xx_ac97_remove,
@@ -213,7 +203,6 @@ struct snd_soc_dai pxa_ac97_dai[] = {
213}, 203},
214{ 204{
215 .name = "pxa2xx-ac97-aux", 205 .name = "pxa2xx-ac97-aux",
216 .id = 1,
217 .ac97_control = 1, 206 .ac97_control = 1,
218 .playback = { 207 .playback = {
219 .stream_name = "AC97 Aux Playback", 208 .stream_name = "AC97 Aux Playback",
@@ -231,7 +220,6 @@ struct snd_soc_dai pxa_ac97_dai[] = {
231}, 220},
232{ 221{
233 .name = "pxa2xx-ac97-mic", 222 .name = "pxa2xx-ac97-mic",
234 .id = 2,
235 .ac97_control = 1, 223 .ac97_control = 1,
236 .capture = { 224 .capture = {
237 .stream_name = "AC97 Mic Capture", 225 .stream_name = "AC97 Mic Capture",
@@ -243,36 +231,26 @@ struct snd_soc_dai pxa_ac97_dai[] = {
243}, 231},
244}; 232};
245 233
246EXPORT_SYMBOL_GPL(pxa_ac97_dai);
247EXPORT_SYMBOL_GPL(soc_ac97_ops); 234EXPORT_SYMBOL_GPL(soc_ac97_ops);
248 235
249static int __devinit pxa2xx_ac97_dev_probe(struct platform_device *pdev) 236static __devinit int pxa2xx_ac97_dev_probe(struct platform_device *pdev)
250{ 237{
251 int i; 238 if (pdev->id != -1) {
252 pxa2xx_audio_ops_t *pdata = pdev->dev.platform_data;
253
254 if (pdev->id >= 0) {
255 dev_err(&pdev->dev, "PXA2xx has only one AC97 port.\n"); 239 dev_err(&pdev->dev, "PXA2xx has only one AC97 port.\n");
256 return -ENXIO; 240 return -ENXIO;
257 } 241 }
258 242
259 for (i = 0; i < ARRAY_SIZE(pxa_ac97_dai); i++) {
260 pxa_ac97_dai[i].dev = &pdev->dev;
261 if (pdata && pdata->codec_pdata[0])
262 pxa_ac97_dai[i].ac97_pdata = pdata->codec_pdata[0];
263 }
264
265 /* Punt most of the init to the SoC probe; we may need the machine 243 /* Punt most of the init to the SoC probe; we may need the machine
266 * driver to do interesting things with the clocking to get us up 244 * driver to do interesting things with the clocking to get us up
267 * and running. 245 * and running.
268 */ 246 */
269 return snd_soc_register_dais(pxa_ac97_dai, ARRAY_SIZE(pxa_ac97_dai)); 247 return snd_soc_register_dais(&pdev->dev, pxa_ac97_dai,
248 ARRAY_SIZE(pxa_ac97_dai));
270} 249}
271 250
272static int __devexit pxa2xx_ac97_dev_remove(struct platform_device *pdev) 251static int __devexit pxa2xx_ac97_dev_remove(struct platform_device *pdev)
273{ 252{
274 snd_soc_unregister_dais(pxa_ac97_dai, ARRAY_SIZE(pxa_ac97_dai)); 253 snd_soc_unregister_dais(&pdev->dev, ARRAY_SIZE(pxa_ac97_dai));
275
276 return 0; 254 return 0;
277} 255}
278 256