diff options
Diffstat (limited to 'sound/soc/fsl/imx-ssi.c')
-rw-r--r-- | sound/soc/fsl/imx-ssi.c | 25 |
1 files changed, 6 insertions, 19 deletions
diff --git a/sound/soc/fsl/imx-ssi.c b/sound/soc/fsl/imx-ssi.c index 28dd76c7cb1c..3c520c46fa4a 100644 --- a/sound/soc/fsl/imx-ssi.c +++ b/sound/soc/fsl/imx-ssi.c | |||
@@ -523,7 +523,7 @@ static int imx_ssi_probe(struct platform_device *pdev) | |||
523 | int ret = 0; | 523 | int ret = 0; |
524 | struct snd_soc_dai_driver *dai; | 524 | struct snd_soc_dai_driver *dai; |
525 | 525 | ||
526 | ssi = kzalloc(sizeof(*ssi), GFP_KERNEL); | 526 | ssi = devm_kzalloc(&pdev->dev, sizeof(*ssi), GFP_KERNEL); |
527 | if (!ssi) | 527 | if (!ssi) |
528 | return -ENOMEM; | 528 | return -ENOMEM; |
529 | dev_set_drvdata(&pdev->dev, ssi); | 529 | dev_set_drvdata(&pdev->dev, ssi); |
@@ -536,7 +536,7 @@ static int imx_ssi_probe(struct platform_device *pdev) | |||
536 | 536 | ||
537 | ssi->irq = platform_get_irq(pdev, 0); | 537 | ssi->irq = platform_get_irq(pdev, 0); |
538 | 538 | ||
539 | ssi->clk = clk_get(&pdev->dev, NULL); | 539 | ssi->clk = devm_clk_get(&pdev->dev, NULL); |
540 | if (IS_ERR(ssi->clk)) { | 540 | if (IS_ERR(ssi->clk)) { |
541 | ret = PTR_ERR(ssi->clk); | 541 | ret = PTR_ERR(ssi->clk); |
542 | dev_err(&pdev->dev, "Cannot get the clock: %d\n", | 542 | dev_err(&pdev->dev, "Cannot get the clock: %d\n", |
@@ -551,23 +551,18 @@ static int imx_ssi_probe(struct platform_device *pdev) | |||
551 | goto failed_get_resource; | 551 | goto failed_get_resource; |
552 | } | 552 | } |
553 | 553 | ||
554 | if (!request_mem_region(res->start, resource_size(res), DRV_NAME)) { | 554 | ssi->base = devm_request_and_ioremap(&pdev->dev, res); |
555 | dev_err(&pdev->dev, "request_mem_region failed\n"); | ||
556 | ret = -EBUSY; | ||
557 | goto failed_get_resource; | ||
558 | } | ||
559 | |||
560 | ssi->base = ioremap(res->start, resource_size(res)); | ||
561 | if (!ssi->base) { | 555 | if (!ssi->base) { |
562 | dev_err(&pdev->dev, "ioremap failed\n"); | 556 | dev_err(&pdev->dev, "ioremap failed\n"); |
563 | ret = -ENODEV; | 557 | ret = -ENODEV; |
564 | goto failed_ioremap; | 558 | goto failed_register; |
565 | } | 559 | } |
566 | 560 | ||
567 | if (ssi->flags & IMX_SSI_USE_AC97) { | 561 | if (ssi->flags & IMX_SSI_USE_AC97) { |
568 | if (ac97_ssi) { | 562 | if (ac97_ssi) { |
563 | dev_err(&pdev->dev, "AC'97 SSI already registered\n"); | ||
569 | ret = -EBUSY; | 564 | ret = -EBUSY; |
570 | goto failed_ac97; | 565 | goto failed_register; |
571 | } | 566 | } |
572 | ac97_ssi = ssi; | 567 | ac97_ssi = ssi; |
573 | setup_channel_to_ac97(ssi); | 568 | setup_channel_to_ac97(ssi); |
@@ -636,15 +631,10 @@ failed_pdev_fiq_add: | |||
636 | failed_pdev_fiq_alloc: | 631 | failed_pdev_fiq_alloc: |
637 | snd_soc_unregister_dai(&pdev->dev); | 632 | snd_soc_unregister_dai(&pdev->dev); |
638 | failed_register: | 633 | failed_register: |
639 | failed_ac97: | ||
640 | iounmap(ssi->base); | ||
641 | failed_ioremap: | ||
642 | release_mem_region(res->start, resource_size(res)); | 634 | release_mem_region(res->start, resource_size(res)); |
643 | failed_get_resource: | 635 | failed_get_resource: |
644 | clk_disable_unprepare(ssi->clk); | 636 | clk_disable_unprepare(ssi->clk); |
645 | clk_put(ssi->clk); | ||
646 | failed_clk: | 637 | failed_clk: |
647 | kfree(ssi); | ||
648 | 638 | ||
649 | return ret; | 639 | return ret; |
650 | } | 640 | } |
@@ -662,11 +652,8 @@ static int __devexit imx_ssi_remove(struct platform_device *pdev) | |||
662 | if (ssi->flags & IMX_SSI_USE_AC97) | 652 | if (ssi->flags & IMX_SSI_USE_AC97) |
663 | ac97_ssi = NULL; | 653 | ac97_ssi = NULL; |
664 | 654 | ||
665 | iounmap(ssi->base); | ||
666 | release_mem_region(res->start, resource_size(res)); | 655 | release_mem_region(res->start, resource_size(res)); |
667 | clk_disable_unprepare(ssi->clk); | 656 | clk_disable_unprepare(ssi->clk); |
668 | clk_put(ssi->clk); | ||
669 | kfree(ssi); | ||
670 | 657 | ||
671 | return 0; | 658 | return 0; |
672 | } | 659 | } |