diff options
Diffstat (limited to 'sound/soc/pxa/pxa2xx-ac97.c')
-rw-r--r-- | sound/soc/pxa/pxa2xx-ac97.c | 46 |
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 | ||
30 | static void pxa2xx_ac97_warm_reset(struct snd_ac97 *ac97) | 29 | static 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 | ||
107 | static int pxa2xx_ac97_probe(struct platform_device *pdev, | 106 | static 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 | ||
113 | static void pxa2xx_ac97_remove(struct platform_device *pdev, | 111 | static 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 | ||
119 | static int pxa2xx_ac97_hw_params(struct snd_pcm_substream *substream, | 117 | static 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 | ||
137 | static int pxa2xx_ac97_hw_aux_params(struct snd_pcm_substream *substream, | 133 | static 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 | ||
155 | static int pxa2xx_ac97_hw_mic_params(struct snd_pcm_substream *substream, | 149 | static 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 | */ |
191 | struct snd_soc_dai pxa_ac97_dai[] = { | 182 | static 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 | ||
246 | EXPORT_SYMBOL_GPL(pxa_ac97_dai); | ||
247 | EXPORT_SYMBOL_GPL(soc_ac97_ops); | 234 | EXPORT_SYMBOL_GPL(soc_ac97_ops); |
248 | 235 | ||
249 | static int __devinit pxa2xx_ac97_dev_probe(struct platform_device *pdev) | 236 | static __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 | ||
272 | static int __devexit pxa2xx_ac97_dev_remove(struct platform_device *pdev) | 251 | static 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 | ||