aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/spi
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/spi')
-rw-r--r--drivers/spi/spi-bcm2835.c4
-rw-r--r--drivers/spi/spi-bcm63xx.c6
-rw-r--r--drivers/spi/spi-bfin-sport.c27
-rw-r--r--drivers/spi/spi-bfin-v3.c3
-rw-r--r--drivers/spi/spi-bfin5xx.c27
-rw-r--r--drivers/spi/spi-clps711x.c4
-rw-r--r--drivers/spi/spi-ep93xx.c3
-rw-r--r--drivers/spi/spi-mpc512x-psc.c4
-rw-r--r--drivers/spi/spi-mxs.c4
-rw-r--r--drivers/spi/spi-octeon.c4
-rw-r--r--drivers/spi/spi-omap-100k.c4
-rw-r--r--drivers/spi/spi-omap2-mcspi.c3
-rw-r--r--drivers/spi/spi-orion.c4
-rw-r--r--drivers/spi/spi-pl022.c6
-rw-r--r--drivers/spi/spi-pxa2xx.c5
-rw-r--r--drivers/spi/spi-sh-hspi.c3
-rw-r--r--drivers/spi/spi-tegra114.c3
-rw-r--r--drivers/spi/spi-tegra20-sflash.c3
-rw-r--r--drivers/spi/spi-tegra20-slink.c3
-rw-r--r--drivers/spi/spi-ti-qspi.c12
-rw-r--r--drivers/spi/spi-txx9.c4
-rw-r--r--drivers/spi/spi.c35
22 files changed, 83 insertions, 88 deletions
diff --git a/drivers/spi/spi-bcm2835.c b/drivers/spi/spi-bcm2835.c
index 52c81481c5c7..4c332143a310 100644
--- a/drivers/spi/spi-bcm2835.c
+++ b/drivers/spi/spi-bcm2835.c
@@ -358,7 +358,7 @@ static int bcm2835_spi_probe(struct platform_device *pdev)
358 bcm2835_wr(bs, BCM2835_SPI_CS, 358 bcm2835_wr(bs, BCM2835_SPI_CS,
359 BCM2835_SPI_CS_CLEAR_RX | BCM2835_SPI_CS_CLEAR_TX); 359 BCM2835_SPI_CS_CLEAR_RX | BCM2835_SPI_CS_CLEAR_TX);
360 360
361 err = spi_register_master(master); 361 err = devm_spi_register_master(&pdev->dev, master);
362 if (err) { 362 if (err) {
363 dev_err(&pdev->dev, "could not register SPI master: %d\n", err); 363 dev_err(&pdev->dev, "could not register SPI master: %d\n", err);
364 goto out_free_irq; 364 goto out_free_irq;
@@ -381,14 +381,12 @@ static int bcm2835_spi_remove(struct platform_device *pdev)
381 struct bcm2835_spi *bs = spi_master_get_devdata(master); 381 struct bcm2835_spi *bs = spi_master_get_devdata(master);
382 382
383 free_irq(bs->irq, master); 383 free_irq(bs->irq, master);
384 spi_unregister_master(master);
385 384
386 /* Clear FIFOs, and disable the HW block */ 385 /* Clear FIFOs, and disable the HW block */
387 bcm2835_wr(bs, BCM2835_SPI_CS, 386 bcm2835_wr(bs, BCM2835_SPI_CS,
388 BCM2835_SPI_CS_CLEAR_RX | BCM2835_SPI_CS_CLEAR_TX); 387 BCM2835_SPI_CS_CLEAR_RX | BCM2835_SPI_CS_CLEAR_TX);
389 388
390 clk_disable_unprepare(bs->clk); 389 clk_disable_unprepare(bs->clk);
391 spi_master_put(master);
392 390
393 return 0; 391 return 0;
394} 392}
diff --git a/drivers/spi/spi-bcm63xx.c b/drivers/spi/spi-bcm63xx.c
index 536b0e363826..80d56b214eb5 100644
--- a/drivers/spi/spi-bcm63xx.c
+++ b/drivers/spi/spi-bcm63xx.c
@@ -412,7 +412,7 @@ static int bcm63xx_spi_probe(struct platform_device *pdev)
412 bcm_spi_writeb(bs, SPI_INTR_CLEAR_ALL, SPI_INT_STATUS); 412 bcm_spi_writeb(bs, SPI_INTR_CLEAR_ALL, SPI_INT_STATUS);
413 413
414 /* register and we are done */ 414 /* register and we are done */
415 ret = spi_register_master(master); 415 ret = devm_spi_register_master(dev, master);
416 if (ret) { 416 if (ret) {
417 dev_err(dev, "spi register failed\n"); 417 dev_err(dev, "spi register failed\n");
418 goto out_clk_disable; 418 goto out_clk_disable;
@@ -438,8 +438,6 @@ static int bcm63xx_spi_remove(struct platform_device *pdev)
438 struct spi_master *master = spi_master_get(platform_get_drvdata(pdev)); 438 struct spi_master *master = spi_master_get(platform_get_drvdata(pdev));
439 struct bcm63xx_spi *bs = spi_master_get_devdata(master); 439 struct bcm63xx_spi *bs = spi_master_get_devdata(master);
440 440
441 spi_unregister_master(master);
442
443 /* reset spi block */ 441 /* reset spi block */
444 bcm_spi_writeb(bs, 0, SPI_INT_MASK); 442 bcm_spi_writeb(bs, 0, SPI_INT_MASK);
445 443
@@ -447,8 +445,6 @@ static int bcm63xx_spi_remove(struct platform_device *pdev)
447 clk_disable_unprepare(bs->clk); 445 clk_disable_unprepare(bs->clk);
448 clk_put(bs->clk); 446 clk_put(bs->clk);
449 447
450 spi_master_put(master);
451
452 return 0; 448 return 0;
453} 449}
454 450
diff --git a/drivers/spi/spi-bfin-sport.c b/drivers/spi/spi-bfin-sport.c
index 7b2cda0747d5..38941e5920b5 100644
--- a/drivers/spi/spi-bfin-sport.c
+++ b/drivers/spi/spi-bfin-sport.c
@@ -879,11 +879,10 @@ static int bfin_sport_spi_remove(struct platform_device *pdev)
879 return 0; 879 return 0;
880} 880}
881 881
882#ifdef CONFIG_PM 882#ifdef CONFIG_PM_SLEEP
883static int 883static int bfin_sport_spi_suspend(struct device *dev)
884bfin_sport_spi_suspend(struct platform_device *pdev, pm_message_t state)
885{ 884{
886 struct bfin_sport_spi_master_data *drv_data = platform_get_drvdata(pdev); 885 struct bfin_sport_spi_master_data *drv_data = dev_get_drvdata(dev);
887 int status; 886 int status;
888 887
889 status = bfin_sport_spi_stop_queue(drv_data); 888 status = bfin_sport_spi_stop_queue(drv_data);
@@ -896,10 +895,9 @@ bfin_sport_spi_suspend(struct platform_device *pdev, pm_message_t state)
896 return status; 895 return status;
897} 896}
898 897
899static int 898static int bfin_sport_spi_resume(struct device *dev)
900bfin_sport_spi_resume(struct platform_device *pdev)
901{ 899{
902 struct bfin_sport_spi_master_data *drv_data = platform_get_drvdata(pdev); 900 struct bfin_sport_spi_master_data *drv_data = dev_get_drvdata(dev);
903 int status; 901 int status;
904 902
905 /* Enable the SPI interface */ 903 /* Enable the SPI interface */
@@ -912,19 +910,22 @@ bfin_sport_spi_resume(struct platform_device *pdev)
912 910
913 return status; 911 return status;
914} 912}
913
914static SIMPLE_DEV_PM_OPS(bfin_sport_spi_pm_ops, bfin_sport_spi_suspend,
915 bfin_sport_spi_resume);
916
917#define BFIN_SPORT_SPI_PM_OPS (&bfin_sport_spi_pm_ops)
915#else 918#else
916# define bfin_sport_spi_suspend NULL 919#define BFIN_SPORT_SPI_PM_OPS NULL
917# define bfin_sport_spi_resume NULL
918#endif 920#endif
919 921
920static struct platform_driver bfin_sport_spi_driver = { 922static struct platform_driver bfin_sport_spi_driver = {
921 .driver = { 923 .driver = {
922 .name = DRV_NAME, 924 .name = DRV_NAME,
923 .owner = THIS_MODULE, 925 .owner = THIS_MODULE,
926 .pm = BFIN_SPORT_SPI_PM_OPS,
924 }, 927 },
925 .probe = bfin_sport_spi_probe, 928 .probe = bfin_sport_spi_probe,
926 .remove = bfin_sport_spi_remove, 929 .remove = bfin_sport_spi_remove,
927 .suspend = bfin_sport_spi_suspend,
928 .resume = bfin_sport_spi_resume,
929}; 930};
930module_platform_driver(bfin_sport_spi_driver); 931module_platform_driver(bfin_sport_spi_driver);
diff --git a/drivers/spi/spi-bfin-v3.c b/drivers/spi/spi-bfin-v3.c
index f4bf81347d68..8f8598834b30 100644
--- a/drivers/spi/spi-bfin-v3.c
+++ b/drivers/spi/spi-bfin-v3.c
@@ -867,7 +867,7 @@ static int bfin_spi_probe(struct platform_device *pdev)
867 tasklet_init(&drv_data->pump_transfers, 867 tasklet_init(&drv_data->pump_transfers,
868 bfin_spi_pump_transfers, (unsigned long)drv_data); 868 bfin_spi_pump_transfers, (unsigned long)drv_data);
869 /* register with the SPI framework */ 869 /* register with the SPI framework */
870 ret = spi_register_master(master); 870 ret = devm_spi_register_master(dev, master);
871 if (ret) { 871 if (ret) {
872 dev_err(dev, "can not register spi master\n"); 872 dev_err(dev, "can not register spi master\n");
873 goto err_free_peripheral; 873 goto err_free_peripheral;
@@ -898,7 +898,6 @@ static int bfin_spi_remove(struct platform_device *pdev)
898 free_dma(drv_data->rx_dma); 898 free_dma(drv_data->rx_dma);
899 free_dma(drv_data->tx_dma); 899 free_dma(drv_data->tx_dma);
900 900
901 spi_unregister_master(drv_data->master);
902 return 0; 901 return 0;
903} 902}
904 903
diff --git a/drivers/spi/spi-bfin5xx.c b/drivers/spi/spi-bfin5xx.c
index b70a2bd9324d..f0f195af75d4 100644
--- a/drivers/spi/spi-bfin5xx.c
+++ b/drivers/spi/spi-bfin5xx.c
@@ -1411,10 +1411,10 @@ static int bfin_spi_remove(struct platform_device *pdev)
1411 return 0; 1411 return 0;
1412} 1412}
1413 1413
1414#ifdef CONFIG_PM 1414#ifdef CONFIG_PM_SLEEP
1415static int bfin_spi_suspend(struct platform_device *pdev, pm_message_t state) 1415static int bfin_spi_suspend(struct device *dev)
1416{ 1416{
1417 struct bfin_spi_master_data *drv_data = platform_get_drvdata(pdev); 1417 struct bfin_spi_master_data *drv_data = dev_get_drvdata(dev);
1418 int status = 0; 1418 int status = 0;
1419 1419
1420 status = bfin_spi_stop_queue(drv_data); 1420 status = bfin_spi_stop_queue(drv_data);
@@ -1433,9 +1433,9 @@ static int bfin_spi_suspend(struct platform_device *pdev, pm_message_t state)
1433 return 0; 1433 return 0;
1434} 1434}
1435 1435
1436static int bfin_spi_resume(struct platform_device *pdev) 1436static int bfin_spi_resume(struct device *dev)
1437{ 1437{
1438 struct bfin_spi_master_data *drv_data = platform_get_drvdata(pdev); 1438 struct bfin_spi_master_data *drv_data = dev_get_drvdata(dev);
1439 int status = 0; 1439 int status = 0;
1440 1440
1441 bfin_write(&drv_data->regs->ctl, drv_data->ctrl_reg); 1441 bfin_write(&drv_data->regs->ctl, drv_data->ctrl_reg);
@@ -1444,31 +1444,34 @@ static int bfin_spi_resume(struct platform_device *pdev)
1444 /* Start the queue running */ 1444 /* Start the queue running */
1445 status = bfin_spi_start_queue(drv_data); 1445 status = bfin_spi_start_queue(drv_data);
1446 if (status != 0) { 1446 if (status != 0) {
1447 dev_err(&pdev->dev, "problem starting queue (%d)\n", status); 1447 dev_err(dev, "problem starting queue (%d)\n", status);
1448 return status; 1448 return status;
1449 } 1449 }
1450 1450
1451 return 0; 1451 return 0;
1452} 1452}
1453
1454static SIMPLE_DEV_PM_OPS(bfin_spi_pm_ops, bfin_spi_suspend, bfin_spi_resume);
1455
1456#define BFIN_SPI_PM_OPS (&bfin_spi_pm_ops)
1453#else 1457#else
1454#define bfin_spi_suspend NULL 1458#define BFIN_SPI_PM_OPS NULL
1455#define bfin_spi_resume NULL 1459#endif
1456#endif /* CONFIG_PM */
1457 1460
1458MODULE_ALIAS("platform:bfin-spi"); 1461MODULE_ALIAS("platform:bfin-spi");
1459static struct platform_driver bfin_spi_driver = { 1462static struct platform_driver bfin_spi_driver = {
1460 .driver = { 1463 .driver = {
1461 .name = DRV_NAME, 1464 .name = DRV_NAME,
1462 .owner = THIS_MODULE, 1465 .owner = THIS_MODULE,
1466 .pm = BFIN_SPI_PM_OPS,
1463 }, 1467 },
1464 .suspend = bfin_spi_suspend, 1468 .probe = bfin_spi_probe,
1465 .resume = bfin_spi_resume,
1466 .remove = bfin_spi_remove, 1469 .remove = bfin_spi_remove,
1467}; 1470};
1468 1471
1469static int __init bfin_spi_init(void) 1472static int __init bfin_spi_init(void)
1470{ 1473{
1471 return platform_driver_probe(&bfin_spi_driver, bfin_spi_probe); 1474 return platform_driver_register(&bfin_spi_driver);
1472} 1475}
1473subsys_initcall(bfin_spi_init); 1476subsys_initcall(bfin_spi_init);
1474 1477
diff --git a/drivers/spi/spi-clps711x.c b/drivers/spi/spi-clps711x.c
index 6416798828e7..7f2fd33ad4d9 100644
--- a/drivers/spi/spi-clps711x.c
+++ b/drivers/spi/spi-clps711x.c
@@ -229,7 +229,7 @@ static int spi_clps711x_probe(struct platform_device *pdev)
229 goto clk_out; 229 goto clk_out;
230 } 230 }
231 231
232 ret = spi_register_master(master); 232 ret = devm_spi_register_master(&pdev->dev, master);
233 if (!ret) { 233 if (!ret) {
234 dev_info(&pdev->dev, 234 dev_info(&pdev->dev,
235 "SPI bus driver initialized. Master clock %u Hz\n", 235 "SPI bus driver initialized. Master clock %u Hz\n",
@@ -260,8 +260,6 @@ static int spi_clps711x_remove(struct platform_device *pdev)
260 if (gpio_is_valid(hw->chipselect[i])) 260 if (gpio_is_valid(hw->chipselect[i]))
261 gpio_free(hw->chipselect[i]); 261 gpio_free(hw->chipselect[i]);
262 262
263 spi_unregister_master(master);
264
265 return 0; 263 return 0;
266} 264}
267 265
diff --git a/drivers/spi/spi-ep93xx.c b/drivers/spi/spi-ep93xx.c
index b57a341d3e1c..1bfaed6e4073 100644
--- a/drivers/spi/spi-ep93xx.c
+++ b/drivers/spi/spi-ep93xx.c
@@ -942,7 +942,7 @@ static int ep93xx_spi_probe(struct platform_device *pdev)
942 /* make sure that the hardware is disabled */ 942 /* make sure that the hardware is disabled */
943 ep93xx_spi_write_u8(espi, SSPCR1, 0); 943 ep93xx_spi_write_u8(espi, SSPCR1, 0);
944 944
945 error = spi_register_master(master); 945 error = devm_spi_register_master(&pdev->dev, master);
946 if (error) { 946 if (error) {
947 dev_err(&pdev->dev, "failed to register SPI master\n"); 947 dev_err(&pdev->dev, "failed to register SPI master\n");
948 goto fail_free_dma; 948 goto fail_free_dma;
@@ -968,7 +968,6 @@ static int ep93xx_spi_remove(struct platform_device *pdev)
968 968
969 ep93xx_spi_release_dma(espi); 969 ep93xx_spi_release_dma(espi);
970 970
971 spi_unregister_master(master);
972 return 0; 971 return 0;
973} 972}
974 973
diff --git a/drivers/spi/spi-mpc512x-psc.c b/drivers/spi/spi-mpc512x-psc.c
index 6adf4e35816d..ee6e61cbf7f5 100644
--- a/drivers/spi/spi-mpc512x-psc.c
+++ b/drivers/spi/spi-mpc512x-psc.c
@@ -536,7 +536,7 @@ static int mpc512x_psc_spi_do_probe(struct device *dev, u32 regaddr,
536 if (ret < 0) 536 if (ret < 0)
537 goto free_clock; 537 goto free_clock;
538 538
539 ret = spi_register_master(master); 539 ret = devm_spi_register_master(dev, master);
540 if (ret < 0) 540 if (ret < 0)
541 goto free_clock; 541 goto free_clock;
542 542
@@ -559,12 +559,10 @@ static int mpc512x_psc_spi_do_remove(struct device *dev)
559 struct spi_master *master = spi_master_get(dev_get_drvdata(dev)); 559 struct spi_master *master = spi_master_get(dev_get_drvdata(dev));
560 struct mpc512x_psc_spi *mps = spi_master_get_devdata(master); 560 struct mpc512x_psc_spi *mps = spi_master_get_devdata(master);
561 561
562 spi_unregister_master(master);
563 clk_disable_unprepare(mps->clk_mclk); 562 clk_disable_unprepare(mps->clk_mclk);
564 free_irq(mps->irq, mps); 563 free_irq(mps->irq, mps);
565 if (mps->psc) 564 if (mps->psc)
566 iounmap(mps->psc); 565 iounmap(mps->psc);
567 spi_master_put(master);
568 566
569 return 0; 567 return 0;
570} 568}
diff --git a/drivers/spi/spi-mxs.c b/drivers/spi/spi-mxs.c
index de7b1141b90f..312c7f99c4a7 100644
--- a/drivers/spi/spi-mxs.c
+++ b/drivers/spi/spi-mxs.c
@@ -571,7 +571,7 @@ static int mxs_spi_probe(struct platform_device *pdev)
571 571
572 platform_set_drvdata(pdev, master); 572 platform_set_drvdata(pdev, master);
573 573
574 ret = spi_register_master(master); 574 ret = devm_spi_register_master(&pdev->dev, master);
575 if (ret) { 575 if (ret) {
576 dev_err(&pdev->dev, "Cannot register SPI master, %d\n", ret); 576 dev_err(&pdev->dev, "Cannot register SPI master, %d\n", ret);
577 goto out_disable_clk; 577 goto out_disable_clk;
@@ -598,10 +598,8 @@ static int mxs_spi_remove(struct platform_device *pdev)
598 spi = spi_master_get_devdata(master); 598 spi = spi_master_get_devdata(master);
599 ssp = &spi->ssp; 599 ssp = &spi->ssp;
600 600
601 spi_unregister_master(master);
602 clk_disable_unprepare(ssp->clk); 601 clk_disable_unprepare(ssp->clk);
603 dma_release_channel(ssp->dmach); 602 dma_release_channel(ssp->dmach);
604 spi_master_put(master);
605 603
606 return 0; 604 return 0;
607} 605}
diff --git a/drivers/spi/spi-octeon.c b/drivers/spi/spi-octeon.c
index 5f28ddbe4f7e..67249a48b391 100644
--- a/drivers/spi/spi-octeon.c
+++ b/drivers/spi/spi-octeon.c
@@ -272,7 +272,7 @@ static int octeon_spi_probe(struct platform_device *pdev)
272 master->bits_per_word_mask = SPI_BPW_MASK(8); 272 master->bits_per_word_mask = SPI_BPW_MASK(8);
273 273
274 master->dev.of_node = pdev->dev.of_node; 274 master->dev.of_node = pdev->dev.of_node;
275 err = spi_register_master(master); 275 err = devm_spi_register_master(&pdev->dev, master);
276 if (err) { 276 if (err) {
277 dev_err(&pdev->dev, "register master failed: %d\n", err); 277 dev_err(&pdev->dev, "register master failed: %d\n", err);
278 goto fail; 278 goto fail;
@@ -292,8 +292,6 @@ static int octeon_spi_remove(struct platform_device *pdev)
292 struct octeon_spi *p = spi_master_get_devdata(master); 292 struct octeon_spi *p = spi_master_get_devdata(master);
293 u64 register_base = p->register_base; 293 u64 register_base = p->register_base;
294 294
295 spi_unregister_master(master);
296
297 /* Clear the CSENA* and put everything in a known state. */ 295 /* Clear the CSENA* and put everything in a known state. */
298 cvmx_write_csr(register_base + OCTEON_SPI_CFG, 0); 296 cvmx_write_csr(register_base + OCTEON_SPI_CFG, 0);
299 297
diff --git a/drivers/spi/spi-omap-100k.c b/drivers/spi/spi-omap-100k.c
index 69ecf05757dd..b6ed82beb01d 100644
--- a/drivers/spi/spi-omap-100k.c
+++ b/drivers/spi/spi-omap-100k.c
@@ -457,7 +457,7 @@ static int omap1_spi100k_probe(struct platform_device *pdev)
457 goto err; 457 goto err;
458 } 458 }
459 459
460 status = spi_register_master(master); 460 status = devm_spi_register_master(&pdev->dev, master);
461 if (status < 0) 461 if (status < 0)
462 goto err; 462 goto err;
463 463
@@ -485,8 +485,6 @@ static int omap1_spi100k_remove(struct platform_device *pdev)
485 485
486 r = platform_get_resource(pdev, IORESOURCE_MEM, 0); 486 r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
487 487
488 spi_unregister_master(master);
489
490 return 0; 488 return 0;
491} 489}
492 490
diff --git a/drivers/spi/spi-omap2-mcspi.c b/drivers/spi/spi-omap2-mcspi.c
index c4e4868913c7..443df39840bc 100644
--- a/drivers/spi/spi-omap2-mcspi.c
+++ b/drivers/spi/spi-omap2-mcspi.c
@@ -1413,7 +1413,7 @@ static int omap2_mcspi_probe(struct platform_device *pdev)
1413 if (status < 0) 1413 if (status < 0)
1414 goto disable_pm; 1414 goto disable_pm;
1415 1415
1416 status = spi_register_master(master); 1416 status = devm_spi_register_master(&pdev->dev, master);
1417 if (status < 0) 1417 if (status < 0)
1418 goto disable_pm; 1418 goto disable_pm;
1419 1419
@@ -1441,7 +1441,6 @@ static int omap2_mcspi_remove(struct platform_device *pdev)
1441 pm_runtime_put_sync(mcspi->dev); 1441 pm_runtime_put_sync(mcspi->dev);
1442 pm_runtime_disable(&pdev->dev); 1442 pm_runtime_disable(&pdev->dev);
1443 1443
1444 spi_unregister_master(master);
1445 kfree(dma_channels); 1444 kfree(dma_channels);
1446 1445
1447 return 0; 1446 return 0;
diff --git a/drivers/spi/spi-orion.c b/drivers/spi/spi-orion.c
index 1d1d321d90c4..d96d67869d7b 100644
--- a/drivers/spi/spi-orion.c
+++ b/drivers/spi/spi-orion.c
@@ -457,7 +457,7 @@ static int orion_spi_probe(struct platform_device *pdev)
457 goto out_rel_clk; 457 goto out_rel_clk;
458 458
459 master->dev.of_node = pdev->dev.of_node; 459 master->dev.of_node = pdev->dev.of_node;
460 status = spi_register_master(master); 460 status = devm_spi_register_master(&pdev->dev, master);
461 if (status < 0) 461 if (status < 0)
462 goto out_rel_clk; 462 goto out_rel_clk;
463 463
@@ -483,8 +483,6 @@ static int orion_spi_remove(struct platform_device *pdev)
483 clk_disable_unprepare(spi->clk); 483 clk_disable_unprepare(spi->clk);
484 clk_put(spi->clk); 484 clk_put(spi->clk);
485 485
486 spi_unregister_master(master);
487
488 return 0; 486 return 0;
489} 487}
490 488
diff --git a/drivers/spi/spi-pl022.c b/drivers/spi/spi-pl022.c
index 9c511a954d21..5e3011094eb6 100644
--- a/drivers/spi/spi-pl022.c
+++ b/drivers/spi/spi-pl022.c
@@ -1619,7 +1619,6 @@ static int verify_controller_parameters(struct pl022 *pl022,
1619 dev_err(&pl022->adev->dev, 1619 dev_err(&pl022->adev->dev,
1620 "RX FIFO Trigger Level is configured incorrectly\n"); 1620 "RX FIFO Trigger Level is configured incorrectly\n");
1621 return -EINVAL; 1621 return -EINVAL;
1622 break;
1623 } 1622 }
1624 switch (chip_info->tx_lev_trig) { 1623 switch (chip_info->tx_lev_trig) {
1625 case SSP_TX_1_OR_MORE_EMPTY_LOC: 1624 case SSP_TX_1_OR_MORE_EMPTY_LOC:
@@ -1645,7 +1644,6 @@ static int verify_controller_parameters(struct pl022 *pl022,
1645 dev_err(&pl022->adev->dev, 1644 dev_err(&pl022->adev->dev,
1646 "TX FIFO Trigger Level is configured incorrectly\n"); 1645 "TX FIFO Trigger Level is configured incorrectly\n");
1647 return -EINVAL; 1646 return -EINVAL;
1648 break;
1649 } 1647 }
1650 if (chip_info->iface == SSP_INTERFACE_NATIONAL_MICROWIRE) { 1648 if (chip_info->iface == SSP_INTERFACE_NATIONAL_MICROWIRE) {
1651 if ((chip_info->ctrl_len < SSP_BITS_4) 1649 if ((chip_info->ctrl_len < SSP_BITS_4)
@@ -2227,7 +2225,7 @@ static int pl022_probe(struct amba_device *adev, const struct amba_id *id)
2227 2225
2228 /* Register with the SPI framework */ 2226 /* Register with the SPI framework */
2229 amba_set_drvdata(adev, pl022); 2227 amba_set_drvdata(adev, pl022);
2230 status = spi_register_master(master); 2228 status = devm_spi_register_master(&adev->dev, master);
2231 if (status != 0) { 2229 if (status != 0) {
2232 dev_err(&adev->dev, 2230 dev_err(&adev->dev,
2233 "probe - problem registering spi master\n"); 2231 "probe - problem registering spi master\n");
@@ -2287,8 +2285,6 @@ pl022_remove(struct amba_device *adev)
2287 clk_unprepare(pl022->clk); 2285 clk_unprepare(pl022->clk);
2288 amba_release_regions(adev); 2286 amba_release_regions(adev);
2289 tasklet_disable(&pl022->pump_transfers); 2287 tasklet_disable(&pl022->pump_transfers);
2290 spi_unregister_master(pl022->master);
2291 amba_set_drvdata(adev, NULL);
2292 return 0; 2288 return 0;
2293} 2289}
2294 2290
diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c
index 64e1682c39b1..cb0e1f1137ad 100644
--- a/drivers/spi/spi-pxa2xx.c
+++ b/drivers/spi/spi-pxa2xx.c
@@ -1201,7 +1201,7 @@ static int pxa2xx_spi_probe(struct platform_device *pdev)
1201 1201
1202 /* Register with the SPI framework */ 1202 /* Register with the SPI framework */
1203 platform_set_drvdata(pdev, drv_data); 1203 platform_set_drvdata(pdev, drv_data);
1204 status = spi_register_master(master); 1204 status = devm_spi_register_master(&pdev->dev, master);
1205 if (status != 0) { 1205 if (status != 0) {
1206 dev_err(&pdev->dev, "problem registering spi master\n"); 1206 dev_err(&pdev->dev, "problem registering spi master\n");
1207 goto out_error_clock_enabled; 1207 goto out_error_clock_enabled;
@@ -1253,9 +1253,6 @@ static int pxa2xx_spi_remove(struct platform_device *pdev)
1253 /* Release SSP */ 1253 /* Release SSP */
1254 pxa_ssp_free(ssp); 1254 pxa_ssp_free(ssp);
1255 1255
1256 /* Disconnect from the SPI framework */
1257 spi_unregister_master(drv_data->master);
1258
1259 return 0; 1256 return 0;
1260} 1257}
1261 1258
diff --git a/drivers/spi/spi-sh-hspi.c b/drivers/spi/spi-sh-hspi.c
index e488a90a98b8..7e749a22f51e 100644
--- a/drivers/spi/spi-sh-hspi.c
+++ b/drivers/spi/spi-sh-hspi.c
@@ -305,7 +305,7 @@ static int hspi_probe(struct platform_device *pdev)
305 master->mode_bits = SPI_CPOL | SPI_CPHA; 305 master->mode_bits = SPI_CPOL | SPI_CPHA;
306 master->auto_runtime_pm = true; 306 master->auto_runtime_pm = true;
307 master->transfer_one_message = hspi_transfer_one_message; 307 master->transfer_one_message = hspi_transfer_one_message;
308 ret = spi_register_master(master); 308 ret = devm_spi_register_master(&pdev->dev, master);
309 if (ret < 0) { 309 if (ret < 0) {
310 dev_err(&pdev->dev, "spi_register_master error.\n"); 310 dev_err(&pdev->dev, "spi_register_master error.\n");
311 goto error1; 311 goto error1;
@@ -328,7 +328,6 @@ static int hspi_remove(struct platform_device *pdev)
328 pm_runtime_disable(&pdev->dev); 328 pm_runtime_disable(&pdev->dev);
329 329
330 clk_put(hspi->clk); 330 clk_put(hspi->clk);
331 spi_unregister_master(hspi->master);
332 331
333 return 0; 332 return 0;
334} 333}
diff --git a/drivers/spi/spi-tegra114.c b/drivers/spi/spi-tegra114.c
index 145dd435483b..bb3a19f2ed39 100644
--- a/drivers/spi/spi-tegra114.c
+++ b/drivers/spi/spi-tegra114.c
@@ -1115,7 +1115,7 @@ static int tegra_spi_probe(struct platform_device *pdev)
1115 pm_runtime_put(&pdev->dev); 1115 pm_runtime_put(&pdev->dev);
1116 1116
1117 master->dev.of_node = pdev->dev.of_node; 1117 master->dev.of_node = pdev->dev.of_node;
1118 ret = spi_register_master(master); 1118 ret = devm_spi_register_master(&pdev->dev, master);
1119 if (ret < 0) { 1119 if (ret < 0) {
1120 dev_err(&pdev->dev, "can not register to master err %d\n", ret); 1120 dev_err(&pdev->dev, "can not register to master err %d\n", ret);
1121 goto exit_pm_disable; 1121 goto exit_pm_disable;
@@ -1142,7 +1142,6 @@ static int tegra_spi_remove(struct platform_device *pdev)
1142 struct tegra_spi_data *tspi = spi_master_get_devdata(master); 1142 struct tegra_spi_data *tspi = spi_master_get_devdata(master);
1143 1143
1144 free_irq(tspi->irq, tspi); 1144 free_irq(tspi->irq, tspi);
1145 spi_unregister_master(master);
1146 1145
1147 if (tspi->tx_dma_chan) 1146 if (tspi->tx_dma_chan)
1148 tegra_spi_deinit_dma_param(tspi, false); 1147 tegra_spi_deinit_dma_param(tspi, false);
diff --git a/drivers/spi/spi-tegra20-sflash.c b/drivers/spi/spi-tegra20-sflash.c
index 1d814dc6e000..a68d7797a8ec 100644
--- a/drivers/spi/spi-tegra20-sflash.c
+++ b/drivers/spi/spi-tegra20-sflash.c
@@ -529,7 +529,7 @@ static int tegra_sflash_probe(struct platform_device *pdev)
529 pm_runtime_put(&pdev->dev); 529 pm_runtime_put(&pdev->dev);
530 530
531 master->dev.of_node = pdev->dev.of_node; 531 master->dev.of_node = pdev->dev.of_node;
532 ret = spi_register_master(master); 532 ret = devm_spi_register_master(&pdev->dev, master);
533 if (ret < 0) { 533 if (ret < 0) {
534 dev_err(&pdev->dev, "can not register to master err %d\n", ret); 534 dev_err(&pdev->dev, "can not register to master err %d\n", ret);
535 goto exit_pm_disable; 535 goto exit_pm_disable;
@@ -553,7 +553,6 @@ static int tegra_sflash_remove(struct platform_device *pdev)
553 struct tegra_sflash_data *tsd = spi_master_get_devdata(master); 553 struct tegra_sflash_data *tsd = spi_master_get_devdata(master);
554 554
555 free_irq(tsd->irq, tsd); 555 free_irq(tsd->irq, tsd);
556 spi_unregister_master(master);
557 556
558 pm_runtime_disable(&pdev->dev); 557 pm_runtime_disable(&pdev->dev);
559 if (!pm_runtime_status_suspended(&pdev->dev)) 558 if (!pm_runtime_status_suspended(&pdev->dev))
diff --git a/drivers/spi/spi-tegra20-slink.c b/drivers/spi/spi-tegra20-slink.c
index c70353672a23..829283e785d9 100644
--- a/drivers/spi/spi-tegra20-slink.c
+++ b/drivers/spi/spi-tegra20-slink.c
@@ -1164,7 +1164,7 @@ static int tegra_slink_probe(struct platform_device *pdev)
1164 pm_runtime_put(&pdev->dev); 1164 pm_runtime_put(&pdev->dev);
1165 1165
1166 master->dev.of_node = pdev->dev.of_node; 1166 master->dev.of_node = pdev->dev.of_node;
1167 ret = spi_register_master(master); 1167 ret = devm_spi_register_master(&pdev->dev, master);
1168 if (ret < 0) { 1168 if (ret < 0) {
1169 dev_err(&pdev->dev, "can not register to master err %d\n", ret); 1169 dev_err(&pdev->dev, "can not register to master err %d\n", ret);
1170 goto exit_pm_disable; 1170 goto exit_pm_disable;
@@ -1191,7 +1191,6 @@ static int tegra_slink_remove(struct platform_device *pdev)
1191 struct tegra_slink_data *tspi = spi_master_get_devdata(master); 1191 struct tegra_slink_data *tspi = spi_master_get_devdata(master);
1192 1192
1193 free_irq(tspi->irq, tspi); 1193 free_irq(tspi->irq, tspi);
1194 spi_unregister_master(master);
1195 1194
1196 if (tspi->tx_dma_chan) 1195 if (tspi->tx_dma_chan)
1197 tegra_slink_deinit_dma_param(tspi, false); 1196 tegra_slink_deinit_dma_param(tspi, false);
diff --git a/drivers/spi/spi-ti-qspi.c b/drivers/spi/spi-ti-qspi.c
index e12d962a289f..4e2109d9853d 100644
--- a/drivers/spi/spi-ti-qspi.c
+++ b/drivers/spi/spi-ti-qspi.c
@@ -532,7 +532,7 @@ static int ti_qspi_probe(struct platform_device *pdev)
532 if (!of_property_read_u32(np, "spi-max-frequency", &max_freq)) 532 if (!of_property_read_u32(np, "spi-max-frequency", &max_freq))
533 qspi->spi_max_frequency = max_freq; 533 qspi->spi_max_frequency = max_freq;
534 534
535 ret = spi_register_master(master); 535 ret = devm_spi_register_master(&pdev->dev, master);
536 if (ret) 536 if (ret)
537 goto free_master; 537 goto free_master;
538 538
@@ -543,22 +543,12 @@ free_master:
543 return ret; 543 return ret;
544} 544}
545 545
546static int ti_qspi_remove(struct platform_device *pdev)
547{
548 struct ti_qspi *qspi = platform_get_drvdata(pdev);
549
550 spi_unregister_master(qspi->master);
551
552 return 0;
553}
554
555static const struct dev_pm_ops ti_qspi_pm_ops = { 546static const struct dev_pm_ops ti_qspi_pm_ops = {
556 .runtime_resume = ti_qspi_runtime_resume, 547 .runtime_resume = ti_qspi_runtime_resume,
557}; 548};
558 549
559static struct platform_driver ti_qspi_driver = { 550static struct platform_driver ti_qspi_driver = {
560 .probe = ti_qspi_probe, 551 .probe = ti_qspi_probe,
561 .remove = ti_qspi_remove,
562 .driver = { 552 .driver = {
563 .name = "ti,dra7xxx-qspi", 553 .name = "ti,dra7xxx-qspi",
564 .owner = THIS_MODULE, 554 .owner = THIS_MODULE,
diff --git a/drivers/spi/spi-txx9.c b/drivers/spi/spi-txx9.c
index 7c6d15766c72..69eb88627d40 100644
--- a/drivers/spi/spi-txx9.c
+++ b/drivers/spi/spi-txx9.c
@@ -406,7 +406,7 @@ static int txx9spi_probe(struct platform_device *dev)
406 master->num_chipselect = (u16)UINT_MAX; /* any GPIO numbers */ 406 master->num_chipselect = (u16)UINT_MAX; /* any GPIO numbers */
407 master->bits_per_word_mask = SPI_BPW_MASK(8) | SPI_BPW_MASK(16); 407 master->bits_per_word_mask = SPI_BPW_MASK(8) | SPI_BPW_MASK(16);
408 408
409 ret = spi_register_master(master); 409 ret = devm_spi_register_master(&dev->dev, master);
410 if (ret) 410 if (ret)
411 goto exit; 411 goto exit;
412 return 0; 412 return 0;
@@ -428,11 +428,9 @@ static int txx9spi_remove(struct platform_device *dev)
428 struct spi_master *master = spi_master_get(platform_get_drvdata(dev)); 428 struct spi_master *master = spi_master_get(platform_get_drvdata(dev));
429 struct txx9spi *c = spi_master_get_devdata(master); 429 struct txx9spi *c = spi_master_get_devdata(master);
430 430
431 spi_unregister_master(master);
432 destroy_workqueue(c->workqueue); 431 destroy_workqueue(c->workqueue);
433 clk_disable(c->clk); 432 clk_disable(c->clk);
434 clk_put(c->clk); 433 clk_put(c->clk);
435 spi_master_put(master);
436 return 0; 434 return 0;
437} 435}
438 436
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index e57e9acd75cb..f7d792366b6a 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -1245,6 +1245,41 @@ done:
1245} 1245}
1246EXPORT_SYMBOL_GPL(spi_register_master); 1246EXPORT_SYMBOL_GPL(spi_register_master);
1247 1247
1248static void devm_spi_unregister(struct device *dev, void *res)
1249{
1250 spi_unregister_master(*(struct spi_master **)res);
1251}
1252
1253/**
1254 * dev_spi_register_master - register managed SPI master controller
1255 * @dev: device managing SPI master
1256 * @master: initialized master, originally from spi_alloc_master()
1257 * Context: can sleep
1258 *
1259 * Register a SPI device as with spi_register_master() which will
1260 * automatically be unregister
1261 */
1262int devm_spi_register_master(struct device *dev, struct spi_master *master)
1263{
1264 struct spi_master **ptr;
1265 int ret;
1266
1267 ptr = devres_alloc(devm_spi_unregister, sizeof(*ptr), GFP_KERNEL);
1268 if (!ptr)
1269 return -ENOMEM;
1270
1271 ret = spi_register_master(master);
1272 if (ret != 0) {
1273 *ptr = master;
1274 devres_add(dev, ptr);
1275 } else {
1276 devres_free(ptr);
1277 }
1278
1279 return ret;
1280}
1281EXPORT_SYMBOL_GPL(devm_spi_register_master);
1282
1248static int __unregister(struct device *dev, void *null) 1283static int __unregister(struct device *dev, void *null)
1249{ 1284{
1250 spi_unregister_device(to_spi_device(dev)); 1285 spi_unregister_device(to_spi_device(dev));