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.c45
1 files changed, 12 insertions, 33 deletions
diff --git a/sound/soc/pxa/pxa2xx-ac97.c b/sound/soc/pxa/pxa2xx-ac97.c
index d314115e3dd7..9c2bafa112ad 100644
--- a/sound/soc/pxa/pxa2xx-ac97.c
+++ b/sound/soc/pxa/pxa2xx-ac97.c
@@ -104,24 +104,21 @@ static int pxa2xx_ac97_resume(struct snd_soc_dai *dai)
104#define pxa2xx_ac97_resume NULL 104#define pxa2xx_ac97_resume NULL
105#endif 105#endif
106 106
107static int pxa2xx_ac97_probe(struct platform_device *pdev, 107static int pxa2xx_ac97_probe(struct snd_soc_dai *dai)
108 struct snd_soc_dai *dai)
109{ 108{
110 return pxa2xx_ac97_hw_probe(to_platform_device(dai->dev)); 109 return pxa2xx_ac97_hw_probe(to_platform_device(dai->dev));
111} 110}
112 111
113static void pxa2xx_ac97_remove(struct platform_device *pdev, 112static int pxa2xx_ac97_remove(struct snd_soc_dai *dai)
114 struct snd_soc_dai *dai)
115{ 113{
116 pxa2xx_ac97_hw_remove(to_platform_device(dai->dev)); 114 pxa2xx_ac97_hw_remove(to_platform_device(dai->dev));
115 return 0;
117} 116}
118 117
119static int pxa2xx_ac97_hw_params(struct snd_pcm_substream *substream, 118static int pxa2xx_ac97_hw_params(struct snd_pcm_substream *substream,
120 struct snd_pcm_hw_params *params, 119 struct snd_pcm_hw_params *params,
121 struct snd_soc_dai *dai) 120 struct snd_soc_dai *cpu_dai)
122{ 121{
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; 122 struct pxa2xx_pcm_dma_params *dma_data;
126 123
127 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) 124 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
@@ -136,10 +133,8 @@ static int pxa2xx_ac97_hw_params(struct snd_pcm_substream *substream,
136 133
137static int pxa2xx_ac97_hw_aux_params(struct snd_pcm_substream *substream, 134static int pxa2xx_ac97_hw_aux_params(struct snd_pcm_substream *substream,
138 struct snd_pcm_hw_params *params, 135 struct snd_pcm_hw_params *params,
139 struct snd_soc_dai *dai) 136 struct snd_soc_dai *cpu_dai)
140{ 137{
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; 138 struct pxa2xx_pcm_dma_params *dma_data;
144 139
145 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) 140 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
@@ -154,11 +149,8 @@ static int pxa2xx_ac97_hw_aux_params(struct snd_pcm_substream *substream,
154 149
155static int pxa2xx_ac97_hw_mic_params(struct snd_pcm_substream *substream, 150static int pxa2xx_ac97_hw_mic_params(struct snd_pcm_substream *substream,
156 struct snd_pcm_hw_params *params, 151 struct snd_pcm_hw_params *params,
157 struct snd_soc_dai *dai) 152 struct snd_soc_dai *cpu_dai)
158{ 153{
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) 154 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
163 return -ENODEV; 155 return -ENODEV;
164 else 156 else
@@ -188,10 +180,9 @@ static struct snd_soc_dai_ops pxa_ac97_mic_dai_ops = {
188 * There is only 1 physical AC97 interface for pxa2xx, but it 180 * 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. 181 * has extra fifo's that can be used for aux DACs and ADCs.
190 */ 182 */
191struct snd_soc_dai pxa_ac97_dai[] = { 183static struct snd_soc_dai_driver pxa_ac97_dai[] = {
192{ 184{
193 .name = "pxa2xx-ac97", 185 .name = "pxa2xx-ac97",
194 .id = 0,
195 .ac97_control = 1, 186 .ac97_control = 1,
196 .probe = pxa2xx_ac97_probe, 187 .probe = pxa2xx_ac97_probe,
197 .remove = pxa2xx_ac97_remove, 188 .remove = pxa2xx_ac97_remove,
@@ -213,7 +204,6 @@ struct snd_soc_dai pxa_ac97_dai[] = {
213}, 204},
214{ 205{
215 .name = "pxa2xx-ac97-aux", 206 .name = "pxa2xx-ac97-aux",
216 .id = 1,
217 .ac97_control = 1, 207 .ac97_control = 1,
218 .playback = { 208 .playback = {
219 .stream_name = "AC97 Aux Playback", 209 .stream_name = "AC97 Aux Playback",
@@ -231,7 +221,6 @@ struct snd_soc_dai pxa_ac97_dai[] = {
231}, 221},
232{ 222{
233 .name = "pxa2xx-ac97-mic", 223 .name = "pxa2xx-ac97-mic",
234 .id = 2,
235 .ac97_control = 1, 224 .ac97_control = 1,
236 .capture = { 225 .capture = {
237 .stream_name = "AC97 Mic Capture", 226 .stream_name = "AC97 Mic Capture",
@@ -243,36 +232,26 @@ struct snd_soc_dai pxa_ac97_dai[] = {
243}, 232},
244}; 233};
245 234
246EXPORT_SYMBOL_GPL(pxa_ac97_dai);
247EXPORT_SYMBOL_GPL(soc_ac97_ops); 235EXPORT_SYMBOL_GPL(soc_ac97_ops);
248 236
249static int __devinit pxa2xx_ac97_dev_probe(struct platform_device *pdev) 237static __devinit int pxa2xx_ac97_dev_probe(struct platform_device *pdev)
250{ 238{
251 int i; 239 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"); 240 dev_err(&pdev->dev, "PXA2xx has only one AC97 port.\n");
256 return -ENXIO; 241 return -ENXIO;
257 } 242 }
258 243
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 244 /* 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 245 * driver to do interesting things with the clocking to get us up
267 * and running. 246 * and running.
268 */ 247 */
269 return snd_soc_register_dais(pxa_ac97_dai, ARRAY_SIZE(pxa_ac97_dai)); 248 return snd_soc_register_dais(&pdev->dev, pxa_ac97_dai,
249 ARRAY_SIZE(pxa_ac97_dai));
270} 250}
271 251
272static int __devexit pxa2xx_ac97_dev_remove(struct platform_device *pdev) 252static int __devexit pxa2xx_ac97_dev_remove(struct platform_device *pdev)
273{ 253{
274 snd_soc_unregister_dais(pxa_ac97_dai, ARRAY_SIZE(pxa_ac97_dai)); 254 snd_soc_unregister_dais(&pdev->dev, ARRAY_SIZE(pxa_ac97_dai));
275
276 return 0; 255 return 0;
277} 256}
278 257