diff options
author | Fabio Estevam <fabio.estevam@freescale.com> | 2013-07-11 00:26:48 -0400 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2013-07-15 06:37:56 -0400 |
commit | 130b82c047675cf398ac49b7d230288f1b9ac9ad (patch) | |
tree | 4e5ca8bad27170476601dc0271ec13dd4f8fdd87 | |
parent | ad81f0545ef01ea651886dddac4bef6cec930092 (diff) |
spi: spi-imx: Use devm functions
Using devm functions can make the code smaller and cleaner.
Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
-rw-r--r-- | drivers/spi/spi-imx.c | 61 |
1 files changed, 15 insertions, 46 deletions
diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c index 7db4f43ee4d8..756cd466cfaf 100644 --- a/drivers/spi/spi-imx.c +++ b/drivers/spi/spi-imx.c | |||
@@ -796,10 +796,11 @@ static int spi_imx_probe(struct platform_device *pdev) | |||
796 | if (!gpio_is_valid(cs_gpio)) | 796 | if (!gpio_is_valid(cs_gpio)) |
797 | continue; | 797 | continue; |
798 | 798 | ||
799 | ret = gpio_request(spi_imx->chipselect[i], DRIVER_NAME); | 799 | ret = devm_gpio_request(&pdev->dev, spi_imx->chipselect[i], |
800 | DRIVER_NAME); | ||
800 | if (ret) { | 801 | if (ret) { |
801 | dev_err(&pdev->dev, "can't get cs gpios\n"); | 802 | dev_err(&pdev->dev, "can't get cs gpios\n"); |
802 | goto out_gpio_free; | 803 | goto out_master_put; |
803 | } | 804 | } |
804 | } | 805 | } |
805 | 806 | ||
@@ -816,46 +817,35 @@ static int spi_imx_probe(struct platform_device *pdev) | |||
816 | (struct spi_imx_devtype_data *) pdev->id_entry->driver_data; | 817 | (struct spi_imx_devtype_data *) pdev->id_entry->driver_data; |
817 | 818 | ||
818 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 819 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
819 | if (!res) { | 820 | spi_imx->base = devm_ioremap_resource(&pdev->dev, res); |
820 | dev_err(&pdev->dev, "can't get platform resource\n"); | 821 | if (IS_ERR(spi_imx->base)) { |
821 | ret = -ENOMEM; | 822 | ret = PTR_ERR(spi_imx->base); |
822 | goto out_gpio_free; | 823 | goto out_master_put; |
823 | } | ||
824 | |||
825 | if (!request_mem_region(res->start, resource_size(res), pdev->name)) { | ||
826 | dev_err(&pdev->dev, "request_mem_region failed\n"); | ||
827 | ret = -EBUSY; | ||
828 | goto out_gpio_free; | ||
829 | } | ||
830 | |||
831 | spi_imx->base = ioremap(res->start, resource_size(res)); | ||
832 | if (!spi_imx->base) { | ||
833 | ret = -EINVAL; | ||
834 | goto out_release_mem; | ||
835 | } | 824 | } |
836 | 825 | ||
837 | spi_imx->irq = platform_get_irq(pdev, 0); | 826 | spi_imx->irq = platform_get_irq(pdev, 0); |
838 | if (spi_imx->irq < 0) { | 827 | if (spi_imx->irq < 0) { |
839 | ret = -EINVAL; | 828 | ret = -EINVAL; |
840 | goto out_iounmap; | 829 | goto out_master_put; |
841 | } | 830 | } |
842 | 831 | ||
843 | ret = request_irq(spi_imx->irq, spi_imx_isr, 0, DRIVER_NAME, spi_imx); | 832 | ret = devm_request_irq(&pdev->dev, spi_imx->irq, spi_imx_isr, 0, |
833 | DRIVER_NAME, spi_imx); | ||
844 | if (ret) { | 834 | if (ret) { |
845 | dev_err(&pdev->dev, "can't get irq%d: %d\n", spi_imx->irq, ret); | 835 | dev_err(&pdev->dev, "can't get irq%d: %d\n", spi_imx->irq, ret); |
846 | goto out_iounmap; | 836 | goto out_master_put; |
847 | } | 837 | } |
848 | 838 | ||
849 | spi_imx->clk_ipg = devm_clk_get(&pdev->dev, "ipg"); | 839 | spi_imx->clk_ipg = devm_clk_get(&pdev->dev, "ipg"); |
850 | if (IS_ERR(spi_imx->clk_ipg)) { | 840 | if (IS_ERR(spi_imx->clk_ipg)) { |
851 | ret = PTR_ERR(spi_imx->clk_ipg); | 841 | ret = PTR_ERR(spi_imx->clk_ipg); |
852 | goto out_free_irq; | 842 | goto out_master_put; |
853 | } | 843 | } |
854 | 844 | ||
855 | spi_imx->clk_per = devm_clk_get(&pdev->dev, "per"); | 845 | spi_imx->clk_per = devm_clk_get(&pdev->dev, "per"); |
856 | if (IS_ERR(spi_imx->clk_per)) { | 846 | if (IS_ERR(spi_imx->clk_per)) { |
857 | ret = PTR_ERR(spi_imx->clk_per); | 847 | ret = PTR_ERR(spi_imx->clk_per); |
858 | goto out_free_irq; | 848 | goto out_master_put; |
859 | } | 849 | } |
860 | 850 | ||
861 | clk_prepare_enable(spi_imx->clk_per); | 851 | clk_prepare_enable(spi_imx->clk_per); |
@@ -881,45 +871,24 @@ static int spi_imx_probe(struct platform_device *pdev) | |||
881 | out_clk_put: | 871 | out_clk_put: |
882 | clk_disable_unprepare(spi_imx->clk_per); | 872 | clk_disable_unprepare(spi_imx->clk_per); |
883 | clk_disable_unprepare(spi_imx->clk_ipg); | 873 | clk_disable_unprepare(spi_imx->clk_ipg); |
884 | out_free_irq: | 874 | out_master_put: |
885 | free_irq(spi_imx->irq, spi_imx); | ||
886 | out_iounmap: | ||
887 | iounmap(spi_imx->base); | ||
888 | out_release_mem: | ||
889 | release_mem_region(res->start, resource_size(res)); | ||
890 | out_gpio_free: | ||
891 | while (--i >= 0) { | ||
892 | if (gpio_is_valid(spi_imx->chipselect[i])) | ||
893 | gpio_free(spi_imx->chipselect[i]); | ||
894 | } | ||
895 | spi_master_put(master); | 875 | spi_master_put(master); |
896 | kfree(master); | 876 | |
897 | return ret; | 877 | return ret; |
898 | } | 878 | } |
899 | 879 | ||
900 | static int spi_imx_remove(struct platform_device *pdev) | 880 | static int spi_imx_remove(struct platform_device *pdev) |
901 | { | 881 | { |
902 | struct spi_master *master = platform_get_drvdata(pdev); | 882 | struct spi_master *master = platform_get_drvdata(pdev); |
903 | struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
904 | struct spi_imx_data *spi_imx = spi_master_get_devdata(master); | 883 | struct spi_imx_data *spi_imx = spi_master_get_devdata(master); |
905 | int i; | ||
906 | 884 | ||
907 | spi_bitbang_stop(&spi_imx->bitbang); | 885 | spi_bitbang_stop(&spi_imx->bitbang); |
908 | 886 | ||
909 | writel(0, spi_imx->base + MXC_CSPICTRL); | 887 | writel(0, spi_imx->base + MXC_CSPICTRL); |
910 | clk_disable_unprepare(spi_imx->clk_per); | 888 | clk_disable_unprepare(spi_imx->clk_per); |
911 | clk_disable_unprepare(spi_imx->clk_ipg); | 889 | clk_disable_unprepare(spi_imx->clk_ipg); |
912 | free_irq(spi_imx->irq, spi_imx); | ||
913 | iounmap(spi_imx->base); | ||
914 | |||
915 | for (i = 0; i < master->num_chipselect; i++) | ||
916 | if (gpio_is_valid(spi_imx->chipselect[i])) | ||
917 | gpio_free(spi_imx->chipselect[i]); | ||
918 | |||
919 | spi_master_put(master); | 890 | spi_master_put(master); |
920 | 891 | ||
921 | release_mem_region(res->start, resource_size(res)); | ||
922 | |||
923 | return 0; | 892 | return 0; |
924 | } | 893 | } |
925 | 894 | ||