diff options
Diffstat (limited to 'sound/soc/sh/siu_dai.c')
-rw-r--r-- | sound/soc/sh/siu_dai.c | 85 |
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 | |||
804 | esocregp: | ||
805 | snd_soc_unregister_component(&pdev->dev); | ||
806 | edaiinit: | ||
807 | iounmap(info->reg); | ||
808 | emapreg: | ||
809 | iounmap(info->yram); | ||
810 | emapyram: | ||
811 | iounmap(info->xram); | ||
812 | emapxram: | ||
813 | iounmap(info->pram); | ||
814 | emappram: | ||
815 | release_mem_region(res->start, resource_size(res)); | ||
816 | ereqmemreg: | ||
817 | egetres: | ||
818 | ereqfw: | ||
819 | kfree(info); | ||
820 | |||
821 | return ret; | ||
822 | } | 801 | } |
823 | 802 | ||
824 | static int siu_remove(struct platform_device *pdev) | 803 | static 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 | ||