aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/sh/siu_dai.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/sh/siu_dai.c')
-rw-r--r--sound/soc/sh/siu_dai.c85
1 files changed, 24 insertions, 61 deletions
diff --git a/sound/soc/sh/siu_dai.c b/sound/soc/sh/siu_dai.c
index abb0d956231c..76b2ab8c2b4a 100644
--- a/sound/soc/sh/siu_dai.c
+++ b/sound/soc/sh/siu_dai.c
@@ -738,7 +738,7 @@ static int siu_probe(struct platform_device *pdev)
738 struct siu_info *info; 738 struct siu_info *info;
739 int ret; 739 int ret;
740 740
741 info = kmalloc(sizeof(*info), GFP_KERNEL); 741 info = devm_kmalloc(&pdev->dev, sizeof(*info), GFP_KERNEL);
742 if (!info) 742 if (!info)
743 return -ENOMEM; 743 return -ENOMEM;
744 siu_i2s_data = info; 744 siu_i2s_data = info;
@@ -746,7 +746,7 @@ static int siu_probe(struct platform_device *pdev)
746 746
747 ret = request_firmware(&fw_entry, "siu_spb.bin", &pdev->dev); 747 ret = request_firmware(&fw_entry, "siu_spb.bin", &pdev->dev);
748 if (ret) 748 if (ret)
749 goto ereqfw; 749 return ret;
750 750
751 /* 751 /*
752 * Loaded firmware is "const" - read only, but we have to modify it in 752 * Loaded firmware is "const" - read only, but we have to modify it in
@@ -757,89 +757,52 @@ static int siu_probe(struct platform_device *pdev)
757 release_firmware(fw_entry); 757 release_firmware(fw_entry);
758 758
759 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 759 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
760 if (!res) { 760 if (!res)
761 ret = -ENODEV; 761 return -ENODEV;
762 goto egetres;
763 }
764 762
765 region = request_mem_region(res->start, resource_size(res), 763 region = devm_request_mem_region(&pdev->dev, res->start,
766 pdev->name); 764 resource_size(res), pdev->name);
767 if (!region) { 765 if (!region) {
768 dev_err(&pdev->dev, "SIU region already claimed\n"); 766 dev_err(&pdev->dev, "SIU region already claimed\n");
769 ret = -EBUSY; 767 return -EBUSY;
770 goto ereqmemreg;
771 } 768 }
772 769
773 ret = -ENOMEM; 770 info->pram = devm_ioremap(&pdev->dev, res->start, PRAM_SIZE);
774 info->pram = ioremap(res->start, PRAM_SIZE);
775 if (!info->pram) 771 if (!info->pram)
776 goto emappram; 772 return -ENOMEM;
777 info->xram = ioremap(res->start + XRAM_OFFSET, XRAM_SIZE); 773 info->xram = devm_ioremap(&pdev->dev, res->start + XRAM_OFFSET,
774 XRAM_SIZE);
778 if (!info->xram) 775 if (!info->xram)
779 goto emapxram; 776 return -ENOMEM;
780 info->yram = ioremap(res->start + YRAM_OFFSET, YRAM_SIZE); 777 info->yram = devm_ioremap(&pdev->dev, res->start + YRAM_OFFSET,
778 YRAM_SIZE);
781 if (!info->yram) 779 if (!info->yram)
782 goto emapyram; 780 return -ENOMEM;
783 info->reg = ioremap(res->start + REG_OFFSET, resource_size(res) - 781 info->reg = devm_ioremap(&pdev->dev, res->start + REG_OFFSET,
784 REG_OFFSET); 782 resource_size(res) - REG_OFFSET);
785 if (!info->reg) 783 if (!info->reg)
786 goto emapreg; 784 return -ENOMEM;
787 785
788 dev_set_drvdata(&pdev->dev, info); 786 dev_set_drvdata(&pdev->dev, info);
789 787
790 /* register using ARRAY version so we can keep dai name */ 788 /* register using ARRAY version so we can keep dai name */
791 ret = snd_soc_register_component(&pdev->dev, &siu_i2s_component, 789 ret = devm_snd_soc_register_component(&pdev->dev, &siu_i2s_component,
792 &siu_i2s_dai, 1); 790 &siu_i2s_dai, 1);
793 if (ret < 0) 791 if (ret < 0)
794 goto edaiinit; 792 return ret;
795 793
796 ret = snd_soc_register_platform(&pdev->dev, &siu_platform); 794 ret = devm_snd_soc_register_platform(&pdev->dev, &siu_platform);
797 if (ret < 0) 795 if (ret < 0)
798 goto esocregp; 796 return ret;
799 797
800 pm_runtime_enable(&pdev->dev); 798 pm_runtime_enable(&pdev->dev);
801 799
802 return ret; 800 return 0;
803
804esocregp:
805 snd_soc_unregister_component(&pdev->dev);
806edaiinit:
807 iounmap(info->reg);
808emapreg:
809 iounmap(info->yram);
810emapyram:
811 iounmap(info->xram);
812emapxram:
813 iounmap(info->pram);
814emappram:
815 release_mem_region(res->start, resource_size(res));
816ereqmemreg:
817egetres:
818ereqfw:
819 kfree(info);
820
821 return ret;
822} 801}
823 802
824static int siu_remove(struct platform_device *pdev) 803static int siu_remove(struct platform_device *pdev)
825{ 804{
826 struct siu_info *info = dev_get_drvdata(&pdev->dev);
827 struct resource *res;
828
829 pm_runtime_disable(&pdev->dev); 805 pm_runtime_disable(&pdev->dev);
830
831 snd_soc_unregister_platform(&pdev->dev);
832 snd_soc_unregister_component(&pdev->dev);
833
834 iounmap(info->reg);
835 iounmap(info->yram);
836 iounmap(info->xram);
837 iounmap(info->pram);
838 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
839 if (res)
840 release_mem_region(res->start, resource_size(res));
841 kfree(info);
842
843 return 0; 806 return 0;
844} 807}
845 808