diff options
Diffstat (limited to 'sound/soc/jz4740')
-rw-r--r-- | sound/soc/jz4740/jz4740-i2s.c | 104 | ||||
-rw-r--r-- | sound/soc/jz4740/jz4740-i2s.h | 2 | ||||
-rw-r--r-- | sound/soc/jz4740/jz4740-pcm.c | 18 | ||||
-rw-r--r-- | sound/soc/jz4740/jz4740-pcm.h | 2 | ||||
-rw-r--r-- | sound/soc/jz4740/qi_lb60.c | 25 |
5 files changed, 67 insertions, 84 deletions
diff --git a/sound/soc/jz4740/jz4740-i2s.c b/sound/soc/jz4740/jz4740-i2s.c index eb518f0c5e01..f3cffd183401 100644 --- a/sound/soc/jz4740/jz4740-i2s.c +++ b/sound/soc/jz4740/jz4740-i2s.c | |||
@@ -106,15 +106,10 @@ static inline void jz4740_i2s_write(const struct jz4740_i2s *i2s, | |||
106 | writel(value, i2s->base + reg); | 106 | writel(value, i2s->base + reg); |
107 | } | 107 | } |
108 | 108 | ||
109 | static inline struct jz4740_i2s *jz4740_dai_to_i2s(struct snd_soc_dai *dai) | ||
110 | { | ||
111 | return dai->private_data; | ||
112 | } | ||
113 | |||
114 | static int jz4740_i2s_startup(struct snd_pcm_substream *substream, | 109 | static int jz4740_i2s_startup(struct snd_pcm_substream *substream, |
115 | struct snd_soc_dai *dai) | 110 | struct snd_soc_dai *dai) |
116 | { | 111 | { |
117 | struct jz4740_i2s *i2s = jz4740_dai_to_i2s(dai); | 112 | struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai); |
118 | uint32_t conf, ctrl; | 113 | uint32_t conf, ctrl; |
119 | 114 | ||
120 | if (dai->active) | 115 | if (dai->active) |
@@ -136,7 +131,7 @@ static int jz4740_i2s_startup(struct snd_pcm_substream *substream, | |||
136 | static void jz4740_i2s_shutdown(struct snd_pcm_substream *substream, | 131 | static void jz4740_i2s_shutdown(struct snd_pcm_substream *substream, |
137 | struct snd_soc_dai *dai) | 132 | struct snd_soc_dai *dai) |
138 | { | 133 | { |
139 | struct jz4740_i2s *i2s = jz4740_dai_to_i2s(dai); | 134 | struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai); |
140 | uint32_t conf; | 135 | uint32_t conf; |
141 | 136 | ||
142 | if (!dai->active) | 137 | if (!dai->active) |
@@ -152,7 +147,7 @@ static void jz4740_i2s_shutdown(struct snd_pcm_substream *substream, | |||
152 | static int jz4740_i2s_trigger(struct snd_pcm_substream *substream, int cmd, | 147 | static int jz4740_i2s_trigger(struct snd_pcm_substream *substream, int cmd, |
153 | struct snd_soc_dai *dai) | 148 | struct snd_soc_dai *dai) |
154 | { | 149 | { |
155 | struct jz4740_i2s *i2s = jz4740_dai_to_i2s(dai); | 150 | struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai); |
156 | 151 | ||
157 | uint32_t ctrl; | 152 | uint32_t ctrl; |
158 | uint32_t mask; | 153 | uint32_t mask; |
@@ -186,7 +181,7 @@ static int jz4740_i2s_trigger(struct snd_pcm_substream *substream, int cmd, | |||
186 | 181 | ||
187 | static int jz4740_i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) | 182 | static int jz4740_i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) |
188 | { | 183 | { |
189 | struct jz4740_i2s *i2s = jz4740_dai_to_i2s(dai); | 184 | struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai); |
190 | 185 | ||
191 | uint32_t format = 0; | 186 | uint32_t format = 0; |
192 | uint32_t conf; | 187 | uint32_t conf; |
@@ -238,7 +233,7 @@ static int jz4740_i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) | |||
238 | static int jz4740_i2s_hw_params(struct snd_pcm_substream *substream, | 233 | static int jz4740_i2s_hw_params(struct snd_pcm_substream *substream, |
239 | struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) | 234 | struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) |
240 | { | 235 | { |
241 | struct jz4740_i2s *i2s = jz4740_dai_to_i2s(dai); | 236 | struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai); |
242 | enum jz4740_dma_width dma_width; | 237 | enum jz4740_dma_width dma_width; |
243 | struct jz4740_pcm_config *pcm_config; | 238 | struct jz4740_pcm_config *pcm_config; |
244 | unsigned int sample_size; | 239 | unsigned int sample_size; |
@@ -288,7 +283,7 @@ static int jz4740_i2s_hw_params(struct snd_pcm_substream *substream, | |||
288 | static int jz4740_i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id, | 283 | static int jz4740_i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id, |
289 | unsigned int freq, int dir) | 284 | unsigned int freq, int dir) |
290 | { | 285 | { |
291 | struct jz4740_i2s *i2s = jz4740_dai_to_i2s(dai); | 286 | struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai); |
292 | struct clk *parent; | 287 | struct clk *parent; |
293 | int ret = 0; | 288 | int ret = 0; |
294 | 289 | ||
@@ -312,7 +307,7 @@ static int jz4740_i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id, | |||
312 | 307 | ||
313 | static int jz4740_i2s_suspend(struct snd_soc_dai *dai) | 308 | static int jz4740_i2s_suspend(struct snd_soc_dai *dai) |
314 | { | 309 | { |
315 | struct jz4740_i2s *i2s = jz4740_dai_to_i2s(dai); | 310 | struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai); |
316 | uint32_t conf; | 311 | uint32_t conf; |
317 | 312 | ||
318 | if (dai->active) { | 313 | if (dai->active) { |
@@ -330,7 +325,7 @@ static int jz4740_i2s_suspend(struct snd_soc_dai *dai) | |||
330 | 325 | ||
331 | static int jz4740_i2s_resume(struct snd_soc_dai *dai) | 326 | static int jz4740_i2s_resume(struct snd_soc_dai *dai) |
332 | { | 327 | { |
333 | struct jz4740_i2s *i2s = jz4740_dai_to_i2s(dai); | 328 | struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai); |
334 | uint32_t conf; | 329 | uint32_t conf; |
335 | 330 | ||
336 | clk_enable(i2s->clk_aic); | 331 | clk_enable(i2s->clk_aic); |
@@ -346,11 +341,38 @@ static int jz4740_i2s_resume(struct snd_soc_dai *dai) | |||
346 | return 0; | 341 | return 0; |
347 | } | 342 | } |
348 | 343 | ||
349 | static int jz4740_i2s_probe(struct platform_device *pdev, struct snd_soc_dai *dai) | 344 | static void jz4740_i2c_init_pcm_config(struct jz4740_i2s *i2s) |
350 | { | 345 | { |
351 | struct jz4740_i2s *i2s = jz4740_dai_to_i2s(dai); | 346 | struct jz4740_dma_config *dma_config; |
347 | |||
348 | /* Playback */ | ||
349 | dma_config = &i2s->pcm_config_playback.dma_config; | ||
350 | dma_config->src_width = JZ4740_DMA_WIDTH_32BIT, | ||
351 | dma_config->transfer_size = JZ4740_DMA_TRANSFER_SIZE_16BYTE; | ||
352 | dma_config->request_type = JZ4740_DMA_TYPE_AIC_TRANSMIT; | ||
353 | dma_config->flags = JZ4740_DMA_SRC_AUTOINC; | ||
354 | dma_config->mode = JZ4740_DMA_MODE_SINGLE; | ||
355 | i2s->pcm_config_playback.fifo_addr = i2s->phys_base + JZ_REG_AIC_FIFO; | ||
356 | |||
357 | /* Capture */ | ||
358 | dma_config = &i2s->pcm_config_capture.dma_config; | ||
359 | dma_config->dst_width = JZ4740_DMA_WIDTH_32BIT, | ||
360 | dma_config->transfer_size = JZ4740_DMA_TRANSFER_SIZE_16BYTE; | ||
361 | dma_config->request_type = JZ4740_DMA_TYPE_AIC_RECEIVE; | ||
362 | dma_config->flags = JZ4740_DMA_DST_AUTOINC; | ||
363 | dma_config->mode = JZ4740_DMA_MODE_SINGLE; | ||
364 | i2s->pcm_config_capture.fifo_addr = i2s->phys_base + JZ_REG_AIC_FIFO; | ||
365 | } | ||
366 | |||
367 | static int jz4740_i2s_dai_probe(struct snd_soc_dai *dai) | ||
368 | { | ||
369 | struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai); | ||
352 | uint32_t conf; | 370 | uint32_t conf; |
353 | 371 | ||
372 | clk_enable(i2s->clk_aic); | ||
373 | |||
374 | jz4740_i2c_init_pcm_config(i2s); | ||
375 | |||
354 | conf = (7 << JZ_AIC_CONF_FIFO_RX_THRESHOLD_OFFSET) | | 376 | conf = (7 << JZ_AIC_CONF_FIFO_RX_THRESHOLD_OFFSET) | |
355 | (8 << JZ_AIC_CONF_FIFO_TX_THRESHOLD_OFFSET) | | 377 | (8 << JZ_AIC_CONF_FIFO_TX_THRESHOLD_OFFSET) | |
356 | JZ_AIC_CONF_OVERFLOW_PLAY_LAST | | 378 | JZ_AIC_CONF_OVERFLOW_PLAY_LAST | |
@@ -363,6 +385,14 @@ static int jz4740_i2s_probe(struct platform_device *pdev, struct snd_soc_dai *da | |||
363 | return 0; | 385 | return 0; |
364 | } | 386 | } |
365 | 387 | ||
388 | static int jz4740_i2s_dai_remove(struct snd_soc_dai *dai) | ||
389 | { | ||
390 | struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai); | ||
391 | |||
392 | clk_disable(i2s->clk_aic); | ||
393 | return 0; | ||
394 | } | ||
395 | |||
366 | static struct snd_soc_dai_ops jz4740_i2s_dai_ops = { | 396 | static struct snd_soc_dai_ops jz4740_i2s_dai_ops = { |
367 | .startup = jz4740_i2s_startup, | 397 | .startup = jz4740_i2s_startup, |
368 | .shutdown = jz4740_i2s_shutdown, | 398 | .shutdown = jz4740_i2s_shutdown, |
@@ -375,9 +405,9 @@ static struct snd_soc_dai_ops jz4740_i2s_dai_ops = { | |||
375 | #define JZ4740_I2S_FMTS (SNDRV_PCM_FMTBIT_S8 | \ | 405 | #define JZ4740_I2S_FMTS (SNDRV_PCM_FMTBIT_S8 | \ |
376 | SNDRV_PCM_FMTBIT_S16_LE) | 406 | SNDRV_PCM_FMTBIT_S16_LE) |
377 | 407 | ||
378 | struct snd_soc_dai jz4740_i2s_dai = { | 408 | static struct snd_soc_dai_driver jz4740_i2s_dai = { |
379 | .name = "jz4740-i2s", | 409 | .probe = jz4740_i2s_dai_probe, |
380 | .probe = jz4740_i2s_probe, | 410 | .remove = jz4740_i2s_dai_remove, |
381 | .playback = { | 411 | .playback = { |
382 | .channels_min = 1, | 412 | .channels_min = 1, |
383 | .channels_max = 2, | 413 | .channels_max = 2, |
@@ -395,30 +425,6 @@ struct snd_soc_dai jz4740_i2s_dai = { | |||
395 | .suspend = jz4740_i2s_suspend, | 425 | .suspend = jz4740_i2s_suspend, |
396 | .resume = jz4740_i2s_resume, | 426 | .resume = jz4740_i2s_resume, |
397 | }; | 427 | }; |
398 | EXPORT_SYMBOL_GPL(jz4740_i2s_dai); | ||
399 | |||
400 | static void __devinit jz4740_i2c_init_pcm_config(struct jz4740_i2s *i2s) | ||
401 | { | ||
402 | struct jz4740_dma_config *dma_config; | ||
403 | |||
404 | /* Playback */ | ||
405 | dma_config = &i2s->pcm_config_playback.dma_config; | ||
406 | dma_config->src_width = JZ4740_DMA_WIDTH_32BIT, | ||
407 | dma_config->transfer_size = JZ4740_DMA_TRANSFER_SIZE_16BYTE; | ||
408 | dma_config->request_type = JZ4740_DMA_TYPE_AIC_TRANSMIT; | ||
409 | dma_config->flags = JZ4740_DMA_SRC_AUTOINC; | ||
410 | dma_config->mode = JZ4740_DMA_MODE_SINGLE; | ||
411 | i2s->pcm_config_playback.fifo_addr = i2s->phys_base + JZ_REG_AIC_FIFO; | ||
412 | |||
413 | /* Capture */ | ||
414 | dma_config = &i2s->pcm_config_capture.dma_config; | ||
415 | dma_config->dst_width = JZ4740_DMA_WIDTH_32BIT, | ||
416 | dma_config->transfer_size = JZ4740_DMA_TRANSFER_SIZE_16BYTE; | ||
417 | dma_config->request_type = JZ4740_DMA_TYPE_AIC_RECEIVE; | ||
418 | dma_config->flags = JZ4740_DMA_DST_AUTOINC; | ||
419 | dma_config->mode = JZ4740_DMA_MODE_SINGLE; | ||
420 | i2s->pcm_config_capture.fifo_addr = i2s->phys_base + JZ_REG_AIC_FIFO; | ||
421 | } | ||
422 | 428 | ||
423 | static int __devinit jz4740_i2s_dev_probe(struct platform_device *pdev) | 429 | static int __devinit jz4740_i2s_dev_probe(struct platform_device *pdev) |
424 | { | 430 | { |
@@ -463,24 +469,17 @@ static int __devinit jz4740_i2s_dev_probe(struct platform_device *pdev) | |||
463 | goto err_clk_put_aic; | 469 | goto err_clk_put_aic; |
464 | } | 470 | } |
465 | 471 | ||
466 | clk_enable(i2s->clk_aic); | 472 | platform_set_drvdata(pdev, i2s); |
467 | 473 | ret = snd_soc_register_dai(&pdev->dev, &jz4740_i2s_dai); | |
468 | jz4740_i2c_init_pcm_config(i2s); | ||
469 | |||
470 | jz4740_i2s_dai.private_data = i2s; | ||
471 | ret = snd_soc_register_dai(&jz4740_i2s_dai); | ||
472 | 474 | ||
473 | if (ret) { | 475 | if (ret) { |
474 | dev_err(&pdev->dev, "Failed to register DAI\n"); | 476 | dev_err(&pdev->dev, "Failed to register DAI\n"); |
475 | goto err_clk_put_i2s; | 477 | goto err_clk_put_i2s; |
476 | } | 478 | } |
477 | 479 | ||
478 | platform_set_drvdata(pdev, i2s); | ||
479 | |||
480 | return 0; | 480 | return 0; |
481 | 481 | ||
482 | err_clk_put_i2s: | 482 | err_clk_put_i2s: |
483 | clk_disable(i2s->clk_aic); | ||
484 | clk_put(i2s->clk_i2s); | 483 | clk_put(i2s->clk_i2s); |
485 | err_clk_put_aic: | 484 | err_clk_put_aic: |
486 | clk_put(i2s->clk_aic); | 485 | clk_put(i2s->clk_aic); |
@@ -498,9 +497,8 @@ static int __devexit jz4740_i2s_dev_remove(struct platform_device *pdev) | |||
498 | { | 497 | { |
499 | struct jz4740_i2s *i2s = platform_get_drvdata(pdev); | 498 | struct jz4740_i2s *i2s = platform_get_drvdata(pdev); |
500 | 499 | ||
501 | snd_soc_unregister_dai(&jz4740_i2s_dai); | 500 | snd_soc_unregister_dai(&pdev->dev); |
502 | 501 | ||
503 | clk_disable(i2s->clk_aic); | ||
504 | clk_put(i2s->clk_i2s); | 502 | clk_put(i2s->clk_i2s); |
505 | clk_put(i2s->clk_aic); | 503 | clk_put(i2s->clk_aic); |
506 | 504 | ||
diff --git a/sound/soc/jz4740/jz4740-i2s.h b/sound/soc/jz4740/jz4740-i2s.h index da22ed88a589..5e49339d8b93 100644 --- a/sound/soc/jz4740/jz4740-i2s.h +++ b/sound/soc/jz4740/jz4740-i2s.h | |||
@@ -13,6 +13,4 @@ | |||
13 | 13 | ||
14 | #define JZ4740_I2S_BIT_CLK 0 | 14 | #define JZ4740_I2S_BIT_CLK 0 |
15 | 15 | ||
16 | extern struct snd_soc_dai jz4740_i2s_dai; | ||
17 | |||
18 | #endif | 16 | #endif |
diff --git a/sound/soc/jz4740/jz4740-pcm.c b/sound/soc/jz4740/jz4740-pcm.c index ee68d850c8dd..fb1483f7c966 100644 --- a/sound/soc/jz4740/jz4740-pcm.c +++ b/sound/soc/jz4740/jz4740-pcm.c | |||
@@ -109,7 +109,7 @@ static int jz4740_pcm_hw_params(struct snd_pcm_substream *substream, | |||
109 | struct snd_soc_pcm_runtime *rtd = substream->private_data; | 109 | struct snd_soc_pcm_runtime *rtd = substream->private_data; |
110 | struct jz4740_pcm_config *config; | 110 | struct jz4740_pcm_config *config; |
111 | 111 | ||
112 | config = snd_soc_dai_get_dma_data(rtd->dai->cpu_dai, substream); | 112 | config = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream); |
113 | 113 | ||
114 | if (!config) | 114 | if (!config) |
115 | return 0; | 115 | return 0; |
@@ -310,14 +310,14 @@ int jz4740_pcm_new(struct snd_card *card, struct snd_soc_dai *dai, | |||
310 | if (!card->dev->coherent_dma_mask) | 310 | if (!card->dev->coherent_dma_mask) |
311 | card->dev->coherent_dma_mask = DMA_BIT_MASK(32); | 311 | card->dev->coherent_dma_mask = DMA_BIT_MASK(32); |
312 | 312 | ||
313 | if (dai->playback.channels_min) { | 313 | if (dai->driver->playback.channels_min) { |
314 | ret = jz4740_pcm_preallocate_dma_buffer(pcm, | 314 | ret = jz4740_pcm_preallocate_dma_buffer(pcm, |
315 | SNDRV_PCM_STREAM_PLAYBACK); | 315 | SNDRV_PCM_STREAM_PLAYBACK); |
316 | if (ret) | 316 | if (ret) |
317 | goto err; | 317 | goto err; |
318 | } | 318 | } |
319 | 319 | ||
320 | if (dai->capture.channels_min) { | 320 | if (dai->driver->capture.channels_min) { |
321 | ret = jz4740_pcm_preallocate_dma_buffer(pcm, | 321 | ret = jz4740_pcm_preallocate_dma_buffer(pcm, |
322 | SNDRV_PCM_STREAM_CAPTURE); | 322 | SNDRV_PCM_STREAM_CAPTURE); |
323 | if (ret) | 323 | if (ret) |
@@ -328,22 +328,20 @@ err: | |||
328 | return ret; | 328 | return ret; |
329 | } | 329 | } |
330 | 330 | ||
331 | struct snd_soc_platform jz4740_soc_platform = { | 331 | static struct snd_soc_platform_driver jz4740_soc_platform = { |
332 | .name = "jz4740-pcm", | 332 | .ops = &jz4740_pcm_ops, |
333 | .pcm_ops = &jz4740_pcm_ops, | ||
334 | .pcm_new = jz4740_pcm_new, | 333 | .pcm_new = jz4740_pcm_new, |
335 | .pcm_free = jz4740_pcm_free, | 334 | .pcm_free = jz4740_pcm_free, |
336 | }; | 335 | }; |
337 | EXPORT_SYMBOL_GPL(jz4740_soc_platform); | ||
338 | 336 | ||
339 | static int __devinit jz4740_pcm_probe(struct platform_device *pdev) | 337 | static int __devinit jz4740_pcm_probe(struct platform_device *pdev) |
340 | { | 338 | { |
341 | return snd_soc_register_platform(&jz4740_soc_platform); | 339 | return snd_soc_register_platform(&pdev->dev, &jz4740_soc_platform); |
342 | } | 340 | } |
343 | 341 | ||
344 | static int __devexit jz4740_pcm_remove(struct platform_device *pdev) | 342 | static int __devexit jz4740_pcm_remove(struct platform_device *pdev) |
345 | { | 343 | { |
346 | snd_soc_unregister_platform(&jz4740_soc_platform); | 344 | snd_soc_unregister_platform(&pdev->dev); |
347 | return 0; | 345 | return 0; |
348 | } | 346 | } |
349 | 347 | ||
@@ -351,7 +349,7 @@ static struct platform_driver jz4740_pcm_driver = { | |||
351 | .probe = jz4740_pcm_probe, | 349 | .probe = jz4740_pcm_probe, |
352 | .remove = __devexit_p(jz4740_pcm_remove), | 350 | .remove = __devexit_p(jz4740_pcm_remove), |
353 | .driver = { | 351 | .driver = { |
354 | .name = "jz4740-pcm", | 352 | .name = "jz4740-pcm-audio", |
355 | .owner = THIS_MODULE, | 353 | .owner = THIS_MODULE, |
356 | }, | 354 | }, |
357 | }; | 355 | }; |
diff --git a/sound/soc/jz4740/jz4740-pcm.h b/sound/soc/jz4740/jz4740-pcm.h index e3f221e2779c..1220cbb4382c 100644 --- a/sound/soc/jz4740/jz4740-pcm.h +++ b/sound/soc/jz4740/jz4740-pcm.h | |||
@@ -11,8 +11,6 @@ | |||
11 | #include <linux/dma-mapping.h> | 11 | #include <linux/dma-mapping.h> |
12 | #include <asm/mach-jz4740/dma.h> | 12 | #include <asm/mach-jz4740/dma.h> |
13 | 13 | ||
14 | /* platform data */ | ||
15 | extern struct snd_soc_platform jz4740_soc_platform; | ||
16 | 14 | ||
17 | struct jz4740_pcm_config { | 15 | struct jz4740_pcm_config { |
18 | struct jz4740_dma_config dma_config; | 16 | struct jz4740_dma_config dma_config; |
diff --git a/sound/soc/jz4740/qi_lb60.c b/sound/soc/jz4740/qi_lb60.c index f15f4918f15f..ef1a99e6a3bd 100644 --- a/sound/soc/jz4740/qi_lb60.c +++ b/sound/soc/jz4740/qi_lb60.c | |||
@@ -22,11 +22,6 @@ | |||
22 | #include <sound/soc-dapm.h> | 22 | #include <sound/soc-dapm.h> |
23 | #include <linux/gpio.h> | 23 | #include <linux/gpio.h> |
24 | 24 | ||
25 | #include "../codecs/jz4740.h" | ||
26 | #include "jz4740-pcm.h" | ||
27 | #include "jz4740-i2s.h" | ||
28 | |||
29 | |||
30 | #define QI_LB60_SND_GPIO JZ_GPIO_PORTB(29) | 25 | #define QI_LB60_SND_GPIO JZ_GPIO_PORTB(29) |
31 | #define QI_LB60_AMP_GPIO JZ_GPIO_PORTD(4) | 26 | #define QI_LB60_AMP_GPIO JZ_GPIO_PORTD(4) |
32 | 27 | ||
@@ -60,10 +55,11 @@ static const struct snd_soc_dapm_route qi_lb60_routes[] = { | |||
60 | SND_SOC_DAIFMT_NB_NF | \ | 55 | SND_SOC_DAIFMT_NB_NF | \ |
61 | SND_SOC_DAIFMT_CBM_CFM) | 56 | SND_SOC_DAIFMT_CBM_CFM) |
62 | 57 | ||
63 | static int qi_lb60_codec_init(struct snd_soc_codec *codec) | 58 | static int qi_lb60_codec_init(struct snd_soc_pcm_runtime *rtd) |
64 | { | 59 | { |
60 | struct snd_soc_codec *codec = rtd->codec; | ||
61 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; | ||
65 | int ret; | 62 | int ret; |
66 | struct snd_soc_dai *cpu_dai = codec->socdev->card->dai_link->cpu_dai; | ||
67 | 63 | ||
68 | snd_soc_dapm_nc_pin(codec, "LIN"); | 64 | snd_soc_dapm_nc_pin(codec, "LIN"); |
69 | snd_soc_dapm_nc_pin(codec, "RIN"); | 65 | snd_soc_dapm_nc_pin(codec, "RIN"); |
@@ -84,8 +80,10 @@ static int qi_lb60_codec_init(struct snd_soc_codec *codec) | |||
84 | static struct snd_soc_dai_link qi_lb60_dai = { | 80 | static struct snd_soc_dai_link qi_lb60_dai = { |
85 | .name = "jz4740", | 81 | .name = "jz4740", |
86 | .stream_name = "jz4740", | 82 | .stream_name = "jz4740", |
87 | .cpu_dai = &jz4740_i2s_dai, | 83 | .cpu_dai_name = "jz4740-i2s", |
88 | .codec_dai = &jz4740_codec_dai, | 84 | .platform_name = "jz4740-pcm-audio", |
85 | .codec_dai_name = "jz4740-hifi", | ||
86 | .codec_name = "jz4740-codec", | ||
89 | .init = qi_lb60_codec_init, | 87 | .init = qi_lb60_codec_init, |
90 | }; | 88 | }; |
91 | 89 | ||
@@ -93,12 +91,6 @@ static struct snd_soc_card qi_lb60 = { | |||
93 | .name = "QI LB60", | 91 | .name = "QI LB60", |
94 | .dai_link = &qi_lb60_dai, | 92 | .dai_link = &qi_lb60_dai, |
95 | .num_links = 1, | 93 | .num_links = 1, |
96 | .platform = &jz4740_soc_platform, | ||
97 | }; | ||
98 | |||
99 | static struct snd_soc_device qi_lb60_snd_devdata = { | ||
100 | .card = &qi_lb60, | ||
101 | .codec_dev = &soc_codec_dev_jz4740_codec, | ||
102 | }; | 94 | }; |
103 | 95 | ||
104 | static struct platform_device *qi_lb60_snd_device; | 96 | static struct platform_device *qi_lb60_snd_device; |
@@ -129,8 +121,7 @@ static int __init qi_lb60_init(void) | |||
129 | gpio_direction_output(QI_LB60_SND_GPIO, 0); | 121 | gpio_direction_output(QI_LB60_SND_GPIO, 0); |
130 | gpio_direction_output(QI_LB60_AMP_GPIO, 0); | 122 | gpio_direction_output(QI_LB60_AMP_GPIO, 0); |
131 | 123 | ||
132 | platform_set_drvdata(qi_lb60_snd_device, &qi_lb60_snd_devdata); | 124 | platform_set_drvdata(qi_lb60_snd_device, &qi_lb60); |
133 | qi_lb60_snd_devdata.dev = &qi_lb60_snd_device->dev; | ||
134 | 125 | ||
135 | ret = platform_device_add(qi_lb60_snd_device); | 126 | ret = platform_device_add(qi_lb60_snd_device); |
136 | if (ret) { | 127 | if (ret) { |