aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Brown <broonie@linaro.org>2013-10-09 07:06:34 -0400
committerMark Brown <broonie@linaro.org>2013-10-09 07:06:34 -0400
commit557667f643888e55c92243ff2af961c9fe052ce4 (patch)
treef544780da94bf9dd6284b8e6e533f54fe389322d
parent673d6e1767ee06496f0f94e5087c817003983ffd (diff)
parent2fe7e4add3e53df7c1b97e32076f8390dd81c6b3 (diff)
Merge remote-tracking branch 'spi/topic/devm' into spi-bfin
-rw-r--r--Documentation/driver-model/devres.txt3
-rw-r--r--drivers/spi/spi-bcm2835.c4
-rw-r--r--drivers/spi/spi-bcm63xx.c6
-rw-r--r--drivers/spi/spi-bfin-v3.c3
-rw-r--r--drivers/spi/spi-clps711x.c6
-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
-rw-r--r--include/linux/spi/spi.h2
22 files changed, 59 insertions, 65 deletions
diff --git a/Documentation/driver-model/devres.txt b/Documentation/driver-model/devres.txt
index fcb34a5697ea..84ea8216cc7d 100644
--- a/Documentation/driver-model/devres.txt
+++ b/Documentation/driver-model/devres.txt
@@ -302,3 +302,6 @@ PHY
302 302
303SLAVE DMA ENGINE 303SLAVE DMA ENGINE
304 devm_acpi_dma_controller_register() 304 devm_acpi_dma_controller_register()
305
306SPI
307 devm_spi_register_master()
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-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-clps711x.c b/drivers/spi/spi-clps711x.c
index 5655acf55bfe..f2b1a1c33907 100644
--- a/drivers/spi/spi-clps711x.c
+++ b/drivers/spi/spi-clps711x.c
@@ -230,7 +230,7 @@ static int spi_clps711x_probe(struct platform_device *pdev)
230 goto clk_out; 230 goto clk_out;
231 } 231 }
232 232
233 ret = spi_register_master(master); 233 ret = devm_spi_register_master(&pdev->dev, master);
234 if (!ret) { 234 if (!ret) {
235 dev_info(&pdev->dev, 235 dev_info(&pdev->dev,
236 "SPI bus driver initialized. Master clock %u Hz\n", 236 "SPI bus driver initialized. Master clock %u Hz\n",
@@ -247,7 +247,6 @@ err_out:
247 gpio_free(hw->chipselect[i]); 247 gpio_free(hw->chipselect[i]);
248 248
249 spi_master_put(master); 249 spi_master_put(master);
250 kfree(master);
251 250
252 return ret; 251 return ret;
253} 252}
@@ -262,9 +261,6 @@ static int spi_clps711x_remove(struct platform_device *pdev)
262 if (gpio_is_valid(hw->chipselect[i])) 261 if (gpio_is_valid(hw->chipselect[i]))
263 gpio_free(hw->chipselect[i]); 262 gpio_free(hw->chipselect[i]);
264 263
265 spi_unregister_master(master);
266 kfree(master);
267
268 return 0; 264 return 0;
269} 265}
270 266
diff --git a/drivers/spi/spi-ep93xx.c b/drivers/spi/spi-ep93xx.c
index d22c00a227b6..486fb6deab05 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 dbc5e999a1f5..b4426dd8a0c3 100644
--- a/drivers/spi/spi-mpc512x-psc.c
+++ b/drivers/spi/spi-mpc512x-psc.c
@@ -534,7 +534,7 @@ static int mpc512x_psc_spi_do_probe(struct device *dev, u32 regaddr,
534 if (ret < 0) 534 if (ret < 0)
535 goto free_clock; 535 goto free_clock;
536 536
537 ret = spi_register_master(master); 537 ret = devm_spi_register_master(dev, master);
538 if (ret < 0) 538 if (ret < 0)
539 goto free_clock; 539 goto free_clock;
540 540
@@ -557,12 +557,10 @@ static int mpc512x_psc_spi_do_remove(struct device *dev)
557 struct spi_master *master = spi_master_get(dev_get_drvdata(dev)); 557 struct spi_master *master = spi_master_get(dev_get_drvdata(dev));
558 struct mpc512x_psc_spi *mps = spi_master_get_devdata(master); 558 struct mpc512x_psc_spi *mps = spi_master_get_devdata(master);
559 559
560 spi_unregister_master(master);
561 clk_disable_unprepare(mps->clk_mclk); 560 clk_disable_unprepare(mps->clk_mclk);
562 free_irq(mps->irq, mps); 561 free_irq(mps->irq, mps);
563 if (mps->psc) 562 if (mps->psc)
564 iounmap(mps->psc); 563 iounmap(mps->psc);
565 spi_master_put(master);
566 564
567 return 0; 565 return 0;
568} 566}
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 ed4af4708d9a..2f7fd35a9ac8 100644
--- a/drivers/spi/spi-omap2-mcspi.c
+++ b/drivers/spi/spi-omap2-mcspi.c
@@ -1407,7 +1407,7 @@ static int omap2_mcspi_probe(struct platform_device *pdev)
1407 if (status < 0) 1407 if (status < 0)
1408 goto disable_pm; 1408 goto disable_pm;
1409 1409
1410 status = spi_register_master(master); 1410 status = devm_spi_register_master(&pdev->dev, master);
1411 if (status < 0) 1411 if (status < 0)
1412 goto disable_pm; 1412 goto disable_pm;
1413 1413
@@ -1435,7 +1435,6 @@ static int omap2_mcspi_remove(struct platform_device *pdev)
1435 pm_runtime_put_sync(mcspi->dev); 1435 pm_runtime_put_sync(mcspi->dev);
1436 pm_runtime_disable(&pdev->dev); 1436 pm_runtime_disable(&pdev->dev);
1437 1437
1438 spi_unregister_master(master);
1439 kfree(dma_channels); 1438 kfree(dma_channels);
1440 1439
1441 return 0; 1440 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 2eb06ee0b326..669306aa6c29 100644
--- a/drivers/spi/spi-pxa2xx.c
+++ b/drivers/spi/spi-pxa2xx.c
@@ -1196,7 +1196,7 @@ static int pxa2xx_spi_probe(struct platform_device *pdev)
1196 1196
1197 /* Register with the SPI framework */ 1197 /* Register with the SPI framework */
1198 platform_set_drvdata(pdev, drv_data); 1198 platform_set_drvdata(pdev, drv_data);
1199 status = spi_register_master(master); 1199 status = devm_spi_register_master(&pdev->dev, master);
1200 if (status != 0) { 1200 if (status != 0) {
1201 dev_err(&pdev->dev, "problem registering spi master\n"); 1201 dev_err(&pdev->dev, "problem registering spi master\n");
1202 goto out_error_clock_enabled; 1202 goto out_error_clock_enabled;
@@ -1248,9 +1248,6 @@ static int pxa2xx_spi_remove(struct platform_device *pdev)
1248 /* Release SSP */ 1248 /* Release SSP */
1249 pxa_ssp_free(ssp); 1249 pxa_ssp_free(ssp);
1250 1250
1251 /* Disconnect from the SPI framework */
1252 spi_unregister_master(drv_data->master);
1253
1254 return 0; 1251 return 0;
1255} 1252}
1256 1253
diff --git a/drivers/spi/spi-sh-hspi.c b/drivers/spi/spi-sh-hspi.c
index 0b68cb592fa4..97e913d225f3 100644
--- a/drivers/spi/spi-sh-hspi.c
+++ b/drivers/spi/spi-sh-hspi.c
@@ -303,7 +303,7 @@ static int hspi_probe(struct platform_device *pdev)
303 master->mode_bits = SPI_CPOL | SPI_CPHA; 303 master->mode_bits = SPI_CPOL | SPI_CPHA;
304 master->auto_runtime_pm = true; 304 master->auto_runtime_pm = true;
305 master->transfer_one_message = hspi_transfer_one_message; 305 master->transfer_one_message = hspi_transfer_one_message;
306 ret = spi_register_master(master); 306 ret = devm_spi_register_master(&pdev->dev, master);
307 if (ret < 0) { 307 if (ret < 0) {
308 dev_err(&pdev->dev, "spi_register_master error.\n"); 308 dev_err(&pdev->dev, "spi_register_master error.\n");
309 goto error1; 309 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 9e039c60c068..a586ceb111fc 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));
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h
index 887116dbce2c..4d634d66ba0b 100644
--- a/include/linux/spi/spi.h
+++ b/include/linux/spi/spi.h
@@ -434,6 +434,8 @@ extern struct spi_master *
434spi_alloc_master(struct device *host, unsigned size); 434spi_alloc_master(struct device *host, unsigned size);
435 435
436extern int spi_register_master(struct spi_master *master); 436extern int spi_register_master(struct spi_master *master);
437extern int devm_spi_register_master(struct device *dev,
438 struct spi_master *master);
437extern void spi_unregister_master(struct spi_master *master); 439extern void spi_unregister_master(struct spi_master *master);
438 440
439extern struct spi_master *spi_busnum_to_master(u16 busnum); 441extern struct spi_master *spi_busnum_to_master(u16 busnum);