diff options
author | Mark Brown <broonie@linaro.org> | 2014-01-14 09:14:47 -0500 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2014-01-14 09:14:47 -0500 |
commit | 13ea3300100ec3461560b1e061033cd167333a86 (patch) | |
tree | c60a016a06c488adada6959516e2a2de96d6d7d3 /drivers/spi/spi-rspi.c | |
parent | b7ed6b88b2a5e961eeb939ef637a3cbb435a23a7 (diff) | |
parent | 68e67d97e1f91ed11e041b67f3a1336f518c608f (diff) |
Merge branch 'topic/rcar' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi into spi-rspi
Diffstat (limited to 'drivers/spi/spi-rspi.c')
-rw-r--r-- | drivers/spi/spi-rspi.c | 46 |
1 files changed, 16 insertions, 30 deletions
diff --git a/drivers/spi/spi-rspi.c b/drivers/spi/spi-rspi.c index 90c81b3f3431..587722495cf2 100644 --- a/drivers/spi/spi-rspi.c +++ b/drivers/spi/spi-rspi.c | |||
@@ -300,7 +300,7 @@ static int qspi_set_config_register(const struct rspi_data *rspi, | |||
300 | spcmd = SPCMD_SPB_8BIT; | 300 | spcmd = SPCMD_SPB_8BIT; |
301 | else if (access_size == 16) | 301 | else if (access_size == 16) |
302 | spcmd = SPCMD_SPB_16BIT; | 302 | spcmd = SPCMD_SPB_16BIT; |
303 | else if (access_size == 32) | 303 | else |
304 | spcmd = SPCMD_SPB_32BIT; | 304 | spcmd = SPCMD_SPB_32BIT; |
305 | 305 | ||
306 | spcmd |= SPCMD_SCKDEN | SPCMD_SLNDEN | rspi->spcmd | SPCMD_SPNDEN; | 306 | spcmd |= SPCMD_SCKDEN | SPCMD_SLNDEN | rspi->spcmd | SPCMD_SPNDEN; |
@@ -922,14 +922,9 @@ static void rspi_release_dma(struct rspi_data *rspi) | |||
922 | 922 | ||
923 | static int rspi_remove(struct platform_device *pdev) | 923 | static int rspi_remove(struct platform_device *pdev) |
924 | { | 924 | { |
925 | struct rspi_data *rspi = spi_master_get(platform_get_drvdata(pdev)); | 925 | struct rspi_data *rspi = platform_get_drvdata(pdev); |
926 | 926 | ||
927 | spi_unregister_master(rspi->master); | ||
928 | rspi_release_dma(rspi); | 927 | rspi_release_dma(rspi); |
929 | free_irq(platform_get_irq(pdev, 0), rspi); | ||
930 | clk_put(rspi->clk); | ||
931 | iounmap(rspi->addr); | ||
932 | spi_master_put(rspi->master); | ||
933 | 928 | ||
934 | return 0; | 929 | return 0; |
935 | } | 930 | } |
@@ -951,12 +946,6 @@ static int rspi_probe(struct platform_device *pdev) | |||
951 | dev_err(&pdev->dev, "there is no set_config_register\n"); | 946 | dev_err(&pdev->dev, "there is no set_config_register\n"); |
952 | return -ENODEV; | 947 | return -ENODEV; |
953 | } | 948 | } |
954 | /* get base addr */ | ||
955 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
956 | if (unlikely(res == NULL)) { | ||
957 | dev_err(&pdev->dev, "invalid resource\n"); | ||
958 | return -EINVAL; | ||
959 | } | ||
960 | 949 | ||
961 | irq = platform_get_irq(pdev, 0); | 950 | irq = platform_get_irq(pdev, 0); |
962 | if (irq < 0) { | 951 | if (irq < 0) { |
@@ -974,19 +963,20 @@ static int rspi_probe(struct platform_device *pdev) | |||
974 | platform_set_drvdata(pdev, rspi); | 963 | platform_set_drvdata(pdev, rspi); |
975 | rspi->ops = ops; | 964 | rspi->ops = ops; |
976 | rspi->master = master; | 965 | rspi->master = master; |
977 | rspi->addr = ioremap(res->start, resource_size(res)); | 966 | |
978 | if (rspi->addr == NULL) { | 967 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
979 | dev_err(&pdev->dev, "ioremap error.\n"); | 968 | rspi->addr = devm_ioremap_resource(&pdev->dev, res); |
980 | ret = -ENOMEM; | 969 | if (IS_ERR(rspi->addr)) { |
970 | ret = PTR_ERR(rspi->addr); | ||
981 | goto error1; | 971 | goto error1; |
982 | } | 972 | } |
983 | 973 | ||
984 | snprintf(clk_name, sizeof(clk_name), "%s%d", id_entry->name, pdev->id); | 974 | snprintf(clk_name, sizeof(clk_name), "%s%d", id_entry->name, pdev->id); |
985 | rspi->clk = clk_get(&pdev->dev, clk_name); | 975 | rspi->clk = devm_clk_get(&pdev->dev, clk_name); |
986 | if (IS_ERR(rspi->clk)) { | 976 | if (IS_ERR(rspi->clk)) { |
987 | dev_err(&pdev->dev, "cannot get clock\n"); | 977 | dev_err(&pdev->dev, "cannot get clock\n"); |
988 | ret = PTR_ERR(rspi->clk); | 978 | ret = PTR_ERR(rspi->clk); |
989 | goto error2; | 979 | goto error1; |
990 | } | 980 | } |
991 | clk_enable(rspi->clk); | 981 | clk_enable(rspi->clk); |
992 | 982 | ||
@@ -1005,36 +995,32 @@ static int rspi_probe(struct platform_device *pdev) | |||
1005 | master->cleanup = rspi_cleanup; | 995 | master->cleanup = rspi_cleanup; |
1006 | master->mode_bits = SPI_CPHA | SPI_CPOL; | 996 | master->mode_bits = SPI_CPHA | SPI_CPOL; |
1007 | 997 | ||
1008 | ret = request_irq(irq, rspi_irq, 0, dev_name(&pdev->dev), rspi); | 998 | ret = devm_request_irq(&pdev->dev, irq, rspi_irq, 0, |
999 | dev_name(&pdev->dev), rspi); | ||
1009 | if (ret < 0) { | 1000 | if (ret < 0) { |
1010 | dev_err(&pdev->dev, "request_irq error\n"); | 1001 | dev_err(&pdev->dev, "request_irq error\n"); |
1011 | goto error3; | 1002 | goto error1; |
1012 | } | 1003 | } |
1013 | 1004 | ||
1014 | rspi->irq = irq; | 1005 | rspi->irq = irq; |
1015 | ret = rspi_request_dma(rspi, pdev); | 1006 | ret = rspi_request_dma(rspi, pdev); |
1016 | if (ret < 0) { | 1007 | if (ret < 0) { |
1017 | dev_err(&pdev->dev, "rspi_request_dma failed.\n"); | 1008 | dev_err(&pdev->dev, "rspi_request_dma failed.\n"); |
1018 | goto error4; | 1009 | goto error2; |
1019 | } | 1010 | } |
1020 | 1011 | ||
1021 | ret = spi_register_master(master); | 1012 | ret = devm_spi_register_master(&pdev->dev, master); |
1022 | if (ret < 0) { | 1013 | if (ret < 0) { |
1023 | dev_err(&pdev->dev, "spi_register_master error.\n"); | 1014 | dev_err(&pdev->dev, "spi_register_master error.\n"); |
1024 | goto error4; | 1015 | goto error2; |
1025 | } | 1016 | } |
1026 | 1017 | ||
1027 | dev_info(&pdev->dev, "probed\n"); | 1018 | dev_info(&pdev->dev, "probed\n"); |
1028 | 1019 | ||
1029 | return 0; | 1020 | return 0; |
1030 | 1021 | ||
1031 | error4: | ||
1032 | rspi_release_dma(rspi); | ||
1033 | free_irq(irq, rspi); | ||
1034 | error3: | ||
1035 | clk_put(rspi->clk); | ||
1036 | error2: | 1022 | error2: |
1037 | iounmap(rspi->addr); | 1023 | rspi_release_dma(rspi); |
1038 | error1: | 1024 | error1: |
1039 | spi_master_put(master); | 1025 | spi_master_put(master); |
1040 | 1026 | ||