diff options
author | Jingoo Han <jg1.han@samsung.com> | 2013-12-09 05:12:03 -0500 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2013-12-17 17:51:09 -0500 |
commit | 5b3bb5963ff23a344062aba04937533a6f575761 (patch) | |
tree | 18089591c1ef101e2261dfb961edd10d4dc8a702 /drivers | |
parent | a4ee96e4886768a177e4dc4935ac676513913581 (diff) |
spi: davinci: Use devm_*() functions
Use devm_*() functions to make cleanup paths simpler.
Signed-off-by: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/spi/spi-davinci.c | 41 |
1 files changed, 11 insertions, 30 deletions
diff --git a/drivers/spi/spi-davinci.c b/drivers/spi/spi-davinci.c index d3f638613b40..79d40c8b1cd0 100644 --- a/drivers/spi/spi-davinci.c +++ b/drivers/spi/spi-davinci.c | |||
@@ -853,7 +853,7 @@ static int davinci_spi_probe(struct platform_device *pdev) | |||
853 | struct spi_master *master; | 853 | struct spi_master *master; |
854 | struct davinci_spi *dspi; | 854 | struct davinci_spi *dspi; |
855 | struct davinci_spi_platform_data *pdata; | 855 | struct davinci_spi_platform_data *pdata; |
856 | struct resource *r, *mem; | 856 | struct resource *r; |
857 | resource_size_t dma_rx_chan = SPI_NO_RESOURCE; | 857 | resource_size_t dma_rx_chan = SPI_NO_RESOURCE; |
858 | resource_size_t dma_tx_chan = SPI_NO_RESOURCE; | 858 | resource_size_t dma_tx_chan = SPI_NO_RESOURCE; |
859 | int i = 0, ret = 0; | 859 | int i = 0, ret = 0; |
@@ -894,39 +894,33 @@ static int davinci_spi_probe(struct platform_device *pdev) | |||
894 | 894 | ||
895 | dspi->pbase = r->start; | 895 | dspi->pbase = r->start; |
896 | 896 | ||
897 | mem = request_mem_region(r->start, resource_size(r), pdev->name); | 897 | dspi->base = devm_ioremap_resource(&pdev->dev, r); |
898 | if (mem == NULL) { | 898 | if (IS_ERR(dspi->base)) { |
899 | ret = -EBUSY; | 899 | ret = PTR_ERR(dspi->base); |
900 | goto free_master; | 900 | goto free_master; |
901 | } | 901 | } |
902 | 902 | ||
903 | dspi->base = ioremap(r->start, resource_size(r)); | ||
904 | if (dspi->base == NULL) { | ||
905 | ret = -ENOMEM; | ||
906 | goto release_region; | ||
907 | } | ||
908 | |||
909 | dspi->irq = platform_get_irq(pdev, 0); | 903 | dspi->irq = platform_get_irq(pdev, 0); |
910 | if (dspi->irq <= 0) { | 904 | if (dspi->irq <= 0) { |
911 | ret = -EINVAL; | 905 | ret = -EINVAL; |
912 | goto unmap_io; | 906 | goto free_master; |
913 | } | 907 | } |
914 | 908 | ||
915 | ret = request_threaded_irq(dspi->irq, davinci_spi_irq, dummy_thread_fn, | 909 | ret = devm_request_threaded_irq(&pdev->dev, dspi->irq, davinci_spi_irq, |
916 | 0, dev_name(&pdev->dev), dspi); | 910 | dummy_thread_fn, 0, dev_name(&pdev->dev), dspi); |
917 | if (ret) | 911 | if (ret) |
918 | goto unmap_io; | 912 | goto free_master; |
919 | 913 | ||
920 | dspi->bitbang.master = master; | 914 | dspi->bitbang.master = master; |
921 | if (dspi->bitbang.master == NULL) { | 915 | if (dspi->bitbang.master == NULL) { |
922 | ret = -ENODEV; | 916 | ret = -ENODEV; |
923 | goto irq_free; | 917 | goto free_master; |
924 | } | 918 | } |
925 | 919 | ||
926 | dspi->clk = clk_get(&pdev->dev, NULL); | 920 | dspi->clk = devm_clk_get(&pdev->dev, NULL); |
927 | if (IS_ERR(dspi->clk)) { | 921 | if (IS_ERR(dspi->clk)) { |
928 | ret = -ENODEV; | 922 | ret = -ENODEV; |
929 | goto irq_free; | 923 | goto free_master; |
930 | } | 924 | } |
931 | clk_prepare_enable(dspi->clk); | 925 | clk_prepare_enable(dspi->clk); |
932 | 926 | ||
@@ -1015,13 +1009,6 @@ free_dma: | |||
1015 | dma_release_channel(dspi->dma_tx); | 1009 | dma_release_channel(dspi->dma_tx); |
1016 | free_clk: | 1010 | free_clk: |
1017 | clk_disable_unprepare(dspi->clk); | 1011 | clk_disable_unprepare(dspi->clk); |
1018 | clk_put(dspi->clk); | ||
1019 | irq_free: | ||
1020 | free_irq(dspi->irq, dspi); | ||
1021 | unmap_io: | ||
1022 | iounmap(dspi->base); | ||
1023 | release_region: | ||
1024 | release_mem_region(dspi->pbase, resource_size(r)); | ||
1025 | free_master: | 1012 | free_master: |
1026 | spi_master_put(master); | 1013 | spi_master_put(master); |
1027 | err: | 1014 | err: |
@@ -1041,7 +1028,6 @@ static int davinci_spi_remove(struct platform_device *pdev) | |||
1041 | { | 1028 | { |
1042 | struct davinci_spi *dspi; | 1029 | struct davinci_spi *dspi; |
1043 | struct spi_master *master; | 1030 | struct spi_master *master; |
1044 | struct resource *r; | ||
1045 | 1031 | ||
1046 | master = platform_get_drvdata(pdev); | 1032 | master = platform_get_drvdata(pdev); |
1047 | dspi = spi_master_get_devdata(master); | 1033 | dspi = spi_master_get_devdata(master); |
@@ -1049,11 +1035,6 @@ static int davinci_spi_remove(struct platform_device *pdev) | |||
1049 | spi_bitbang_stop(&dspi->bitbang); | 1035 | spi_bitbang_stop(&dspi->bitbang); |
1050 | 1036 | ||
1051 | clk_disable_unprepare(dspi->clk); | 1037 | clk_disable_unprepare(dspi->clk); |
1052 | clk_put(dspi->clk); | ||
1053 | free_irq(dspi->irq, dspi); | ||
1054 | iounmap(dspi->base); | ||
1055 | r = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
1056 | release_mem_region(dspi->pbase, resource_size(r)); | ||
1057 | spi_master_put(master); | 1038 | spi_master_put(master); |
1058 | 1039 | ||
1059 | return 0; | 1040 | return 0; |