aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/fsl/imx-ssi.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/fsl/imx-ssi.c')
-rw-r--r--sound/soc/fsl/imx-ssi.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/sound/soc/fsl/imx-ssi.c b/sound/soc/fsl/imx-ssi.c
index 55464a5b0706..4a26d88d7236 100644
--- a/sound/soc/fsl/imx-ssi.c
+++ b/sound/soc/fsl/imx-ssi.c
@@ -413,6 +413,10 @@ static struct snd_soc_dai_driver imx_ac97_dai = {
413 .ops = &imx_ssi_pcm_dai_ops, 413 .ops = &imx_ssi_pcm_dai_ops,
414}; 414};
415 415
416static const struct snd_soc_component_driver imx_component = {
417 .name = DRV_NAME,
418};
419
416static void setup_channel_to_ac97(struct imx_ssi *imx_ssi) 420static void setup_channel_to_ac97(struct imx_ssi *imx_ssi)
417{ 421{
418 void __iomem *base = imx_ssi->base; 422 void __iomem *base = imx_ssi->base;
@@ -496,6 +500,8 @@ static void imx_ssi_ac97_reset(struct snd_ac97 *ac97)
496 500
497 if (imx_ssi->ac97_reset) 501 if (imx_ssi->ac97_reset)
498 imx_ssi->ac97_reset(ac97); 502 imx_ssi->ac97_reset(ac97);
503 /* First read sometimes fails, do a dummy read */
504 imx_ssi_ac97_read(ac97, 0);
499} 505}
500 506
501static void imx_ssi_ac97_warm_reset(struct snd_ac97 *ac97) 507static void imx_ssi_ac97_warm_reset(struct snd_ac97 *ac97)
@@ -504,6 +510,9 @@ static void imx_ssi_ac97_warm_reset(struct snd_ac97 *ac97)
504 510
505 if (imx_ssi->ac97_warm_reset) 511 if (imx_ssi->ac97_warm_reset)
506 imx_ssi->ac97_warm_reset(ac97); 512 imx_ssi->ac97_warm_reset(ac97);
513
514 /* First read sometimes fails, do a dummy read */
515 imx_ssi_ac97_read(ac97, 0);
507} 516}
508 517
509struct snd_ac97_bus_ops soc_ac97_ops = { 518struct snd_ac97_bus_ops soc_ac97_ops = {
@@ -586,7 +595,8 @@ static int imx_ssi_probe(struct platform_device *pdev)
586 595
587 platform_set_drvdata(pdev, ssi); 596 platform_set_drvdata(pdev, ssi);
588 597
589 ret = snd_soc_register_dai(&pdev->dev, dai); 598 ret = snd_soc_register_component(&pdev->dev, &imx_component,
599 dai, 1);
590 if (ret) { 600 if (ret) {
591 dev_err(&pdev->dev, "register DAI failed\n"); 601 dev_err(&pdev->dev, "register DAI failed\n");
592 goto failed_register; 602 goto failed_register;
@@ -627,7 +637,7 @@ failed_pdev_alloc:
627failed_pdev_fiq_add: 637failed_pdev_fiq_add:
628 platform_device_put(ssi->soc_platform_pdev_fiq); 638 platform_device_put(ssi->soc_platform_pdev_fiq);
629failed_pdev_fiq_alloc: 639failed_pdev_fiq_alloc:
630 snd_soc_unregister_dai(&pdev->dev); 640 snd_soc_unregister_component(&pdev->dev);
631failed_register: 641failed_register:
632 release_mem_region(res->start, resource_size(res)); 642 release_mem_region(res->start, resource_size(res));
633failed_get_resource: 643failed_get_resource:
@@ -645,7 +655,7 @@ static int imx_ssi_remove(struct platform_device *pdev)
645 platform_device_unregister(ssi->soc_platform_pdev); 655 platform_device_unregister(ssi->soc_platform_pdev);
646 platform_device_unregister(ssi->soc_platform_pdev_fiq); 656 platform_device_unregister(ssi->soc_platform_pdev_fiq);
647 657
648 snd_soc_unregister_dai(&pdev->dev); 658 snd_soc_unregister_component(&pdev->dev);
649 659
650 if (ssi->flags & IMX_SSI_USE_AC97) 660 if (ssi->flags & IMX_SSI_USE_AC97)
651 ac97_ssi = NULL; 661 ac97_ssi = NULL;