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.c25
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:
636failed_pdev_fiq_alloc: 631failed_pdev_fiq_alloc:
637 snd_soc_unregister_dai(&pdev->dev); 632 snd_soc_unregister_dai(&pdev->dev);
638failed_register: 633failed_register:
639failed_ac97:
640 iounmap(ssi->base);
641failed_ioremap:
642 release_mem_region(res->start, resource_size(res)); 634 release_mem_region(res->start, resource_size(res));
643failed_get_resource: 635failed_get_resource:
644 clk_disable_unprepare(ssi->clk); 636 clk_disable_unprepare(ssi->clk);
645 clk_put(ssi->clk);
646failed_clk: 637failed_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}