aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/spi/spi-rspi.c
diff options
context:
space:
mode:
authorMark Brown <broonie@linaro.org>2014-01-14 09:14:47 -0500
committerMark Brown <broonie@linaro.org>2014-01-14 09:14:47 -0500
commit13ea3300100ec3461560b1e061033cd167333a86 (patch)
treec60a016a06c488adada6959516e2a2de96d6d7d3 /drivers/spi/spi-rspi.c
parentb7ed6b88b2a5e961eeb939ef637a3cbb435a23a7 (diff)
parent68e67d97e1f91ed11e041b67f3a1336f518c608f (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.c46
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
923static int rspi_remove(struct platform_device *pdev) 923static 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
1031error4:
1032 rspi_release_dma(rspi);
1033 free_irq(irq, rspi);
1034error3:
1035 clk_put(rspi->clk);
1036error2: 1022error2:
1037 iounmap(rspi->addr); 1023 rspi_release_dma(rspi);
1038error1: 1024error1:
1039 spi_master_put(master); 1025 spi_master_put(master);
1040 1026