diff options
Diffstat (limited to 'sound/soc/fsl/imx-ssi.c')
| -rw-r--r-- | sound/soc/fsl/imx-ssi.c | 16 |
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 | ||
| 416 | static const struct snd_soc_component_driver imx_component = { | ||
| 417 | .name = DRV_NAME, | ||
| 418 | }; | ||
| 419 | |||
| 416 | static void setup_channel_to_ac97(struct imx_ssi *imx_ssi) | 420 | static 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 | ||
| 501 | static void imx_ssi_ac97_warm_reset(struct snd_ac97 *ac97) | 507 | static 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 | ||
| 509 | struct snd_ac97_bus_ops soc_ac97_ops = { | 518 | struct 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: | |||
| 627 | failed_pdev_fiq_add: | 637 | failed_pdev_fiq_add: |
| 628 | platform_device_put(ssi->soc_platform_pdev_fiq); | 638 | platform_device_put(ssi->soc_platform_pdev_fiq); |
| 629 | failed_pdev_fiq_alloc: | 639 | failed_pdev_fiq_alloc: |
| 630 | snd_soc_unregister_dai(&pdev->dev); | 640 | snd_soc_unregister_component(&pdev->dev); |
| 631 | failed_register: | 641 | failed_register: |
| 632 | release_mem_region(res->start, resource_size(res)); | 642 | release_mem_region(res->start, resource_size(res)); |
| 633 | failed_get_resource: | 643 | failed_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; |
