aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorJingoo Han <jg1.han@samsung.com>2013-12-09 05:12:03 -0500
committerMark Brown <broonie@linaro.org>2013-12-17 17:51:09 -0500
commit5b3bb5963ff23a344062aba04937533a6f575761 (patch)
tree18089591c1ef101e2261dfb961edd10d4dc8a702 /drivers
parenta4ee96e4886768a177e4dc4935ac676513913581 (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.c41
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);
1016free_clk: 1010free_clk:
1017 clk_disable_unprepare(dspi->clk); 1011 clk_disable_unprepare(dspi->clk);
1018 clk_put(dspi->clk);
1019irq_free:
1020 free_irq(dspi->irq, dspi);
1021unmap_io:
1022 iounmap(dspi->base);
1023release_region:
1024 release_mem_region(dspi->pbase, resource_size(r));
1025free_master: 1012free_master:
1026 spi_master_put(master); 1013 spi_master_put(master);
1027err: 1014err:
@@ -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;