diff options
Diffstat (limited to 'sound/soc/pxa/pxa2xx-i2s.c')
-rw-r--r-- | sound/soc/pxa/pxa2xx-i2s.c | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/sound/soc/pxa/pxa2xx-i2s.c b/sound/soc/pxa/pxa2xx-i2s.c index e758034db5c3..517991fb1099 100644 --- a/sound/soc/pxa/pxa2xx-i2s.c +++ b/sound/soc/pxa/pxa2xx-i2s.c | |||
@@ -121,7 +121,8 @@ static struct pxa2xx_gpio gpio_bus[] = { | |||
121 | }, | 121 | }, |
122 | }; | 122 | }; |
123 | 123 | ||
124 | static int pxa2xx_i2s_startup(struct snd_pcm_substream *substream) | 124 | static int pxa2xx_i2s_startup(struct snd_pcm_substream *substream, |
125 | struct snd_soc_dai *dai) | ||
125 | { | 126 | { |
126 | struct snd_soc_pcm_runtime *rtd = substream->private_data; | 127 | struct snd_soc_pcm_runtime *rtd = substream->private_data; |
127 | struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai; | 128 | struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai; |
@@ -187,7 +188,8 @@ static int pxa2xx_i2s_set_dai_sysclk(struct snd_soc_dai *cpu_dai, | |||
187 | } | 188 | } |
188 | 189 | ||
189 | static int pxa2xx_i2s_hw_params(struct snd_pcm_substream *substream, | 190 | static int pxa2xx_i2s_hw_params(struct snd_pcm_substream *substream, |
190 | struct snd_pcm_hw_params *params) | 191 | struct snd_pcm_hw_params *params, |
192 | struct snd_soc_dai *dai) | ||
191 | { | 193 | { |
192 | struct snd_soc_pcm_runtime *rtd = substream->private_data; | 194 | struct snd_soc_pcm_runtime *rtd = substream->private_data; |
193 | struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai; | 195 | struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai; |
@@ -248,7 +250,8 @@ static int pxa2xx_i2s_hw_params(struct snd_pcm_substream *substream, | |||
248 | return 0; | 250 | return 0; |
249 | } | 251 | } |
250 | 252 | ||
251 | static int pxa2xx_i2s_trigger(struct snd_pcm_substream *substream, int cmd) | 253 | static int pxa2xx_i2s_trigger(struct snd_pcm_substream *substream, int cmd, |
254 | struct snd_soc_dai *dai) | ||
252 | { | 255 | { |
253 | int ret = 0; | 256 | int ret = 0; |
254 | 257 | ||
@@ -269,7 +272,8 @@ static int pxa2xx_i2s_trigger(struct snd_pcm_substream *substream, int cmd) | |||
269 | return ret; | 272 | return ret; |
270 | } | 273 | } |
271 | 274 | ||
272 | static void pxa2xx_i2s_shutdown(struct snd_pcm_substream *substream) | 275 | static void pxa2xx_i2s_shutdown(struct snd_pcm_substream *substream, |
276 | struct snd_soc_dai *dai) | ||
273 | { | 277 | { |
274 | if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { | 278 | if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { |
275 | SACR1 |= SACR1_DRPL; | 279 | SACR1 |= SACR1_DRPL; |
@@ -289,8 +293,7 @@ static void pxa2xx_i2s_shutdown(struct snd_pcm_substream *substream) | |||
289 | } | 293 | } |
290 | 294 | ||
291 | #ifdef CONFIG_PM | 295 | #ifdef CONFIG_PM |
292 | static int pxa2xx_i2s_suspend(struct platform_device *dev, | 296 | static int pxa2xx_i2s_suspend(struct snd_soc_dai *dai) |
293 | struct snd_soc_dai *dai) | ||
294 | { | 297 | { |
295 | if (!dai->active) | 298 | if (!dai->active) |
296 | return 0; | 299 | return 0; |
@@ -307,8 +310,7 @@ static int pxa2xx_i2s_suspend(struct platform_device *dev, | |||
307 | return 0; | 310 | return 0; |
308 | } | 311 | } |
309 | 312 | ||
310 | static int pxa2xx_i2s_resume(struct platform_device *pdev, | 313 | static int pxa2xx_i2s_resume(struct snd_soc_dai *dai) |
311 | struct snd_soc_dai *dai) | ||
312 | { | 314 | { |
313 | if (!dai->active) | 315 | if (!dai->active) |
314 | return 0; | 316 | return 0; |
@@ -336,7 +338,6 @@ static int pxa2xx_i2s_resume(struct platform_device *pdev, | |||
336 | struct snd_soc_dai pxa_i2s_dai = { | 338 | struct snd_soc_dai pxa_i2s_dai = { |
337 | .name = "pxa2xx-i2s", | 339 | .name = "pxa2xx-i2s", |
338 | .id = 0, | 340 | .id = 0, |
339 | .type = SND_SOC_DAI_I2S, | ||
340 | .suspend = pxa2xx_i2s_suspend, | 341 | .suspend = pxa2xx_i2s_suspend, |
341 | .resume = pxa2xx_i2s_resume, | 342 | .resume = pxa2xx_i2s_resume, |
342 | .playback = { | 343 | .playback = { |
@@ -353,8 +354,7 @@ struct snd_soc_dai pxa_i2s_dai = { | |||
353 | .startup = pxa2xx_i2s_startup, | 354 | .startup = pxa2xx_i2s_startup, |
354 | .shutdown = pxa2xx_i2s_shutdown, | 355 | .shutdown = pxa2xx_i2s_shutdown, |
355 | .trigger = pxa2xx_i2s_trigger, | 356 | .trigger = pxa2xx_i2s_trigger, |
356 | .hw_params = pxa2xx_i2s_hw_params,}, | 357 | .hw_params = pxa2xx_i2s_hw_params, |
357 | .dai_ops = { | ||
358 | .set_fmt = pxa2xx_i2s_set_dai_fmt, | 358 | .set_fmt = pxa2xx_i2s_set_dai_fmt, |
359 | .set_sysclk = pxa2xx_i2s_set_dai_sysclk, | 359 | .set_sysclk = pxa2xx_i2s_set_dai_sysclk, |
360 | }, | 360 | }, |
@@ -364,12 +364,23 @@ EXPORT_SYMBOL_GPL(pxa_i2s_dai); | |||
364 | 364 | ||
365 | static int pxa2xx_i2s_probe(struct platform_device *dev) | 365 | static int pxa2xx_i2s_probe(struct platform_device *dev) |
366 | { | 366 | { |
367 | int ret; | ||
368 | |||
367 | clk_i2s = clk_get(&dev->dev, "I2SCLK"); | 369 | clk_i2s = clk_get(&dev->dev, "I2SCLK"); |
368 | return IS_ERR(clk_i2s) ? PTR_ERR(clk_i2s) : 0; | 370 | if (IS_ERR(clk_i2s)) |
371 | return PTR_ERR(clk_i2s); | ||
372 | |||
373 | pxa_i2s_dai.dev = &dev->dev; | ||
374 | ret = snd_soc_register_dai(&pxa_i2s_dai); | ||
375 | if (ret != 0) | ||
376 | clk_put(clk_i2s); | ||
377 | |||
378 | return ret; | ||
369 | } | 379 | } |
370 | 380 | ||
371 | static int __devexit pxa2xx_i2s_remove(struct platform_device *dev) | 381 | static int __devexit pxa2xx_i2s_remove(struct platform_device *dev) |
372 | { | 382 | { |
383 | snd_soc_unregister_dai(&pxa_i2s_dai); | ||
373 | clk_put(clk_i2s); | 384 | clk_put(clk_i2s); |
374 | clk_i2s = ERR_PTR(-ENOENT); | 385 | clk_i2s = ERR_PTR(-ENOENT); |
375 | return 0; | 386 | return 0; |