diff options
Diffstat (limited to 'drivers/spi')
57 files changed, 220 insertions, 175 deletions
diff --git a/drivers/spi/spi-adi-v3.c b/drivers/spi/spi-adi-v3.c index 19ea8fb78cc7..a16b25dcd1e6 100644 --- a/drivers/spi/spi-adi-v3.c +++ b/drivers/spi/spi-adi-v3.c @@ -972,7 +972,6 @@ MODULE_ALIAS("platform:adi-spi3"); static struct platform_driver adi_spi_driver = { .driver = { .name = "adi-spi3", - .owner = THIS_MODULE, .pm = &adi_spi_pm_ops, }, .remove = adi_spi_remove, diff --git a/drivers/spi/spi-altera.c b/drivers/spi/spi-altera.c index 5b5709a5c957..b95010e72452 100644 --- a/drivers/spi/spi-altera.c +++ b/drivers/spi/spi-altera.c @@ -282,7 +282,6 @@ static struct platform_driver altera_spi_driver = { .remove = altera_spi_remove, .driver = { .name = DRV_NAME, - .owner = THIS_MODULE, .pm = NULL, .of_match_table = of_match_ptr(altera_spi_match), }, diff --git a/drivers/spi/spi-ath79.c b/drivers/spi/spi-ath79.c index 058db0fe8dc7..b02eb4ac0218 100644 --- a/drivers/spi/spi-ath79.c +++ b/drivers/spi/spi-ath79.c @@ -307,7 +307,6 @@ static struct platform_driver ath79_spi_driver = { .shutdown = ath79_spi_shutdown, .driver = { .name = DRV_NAME, - .owner = THIS_MODULE, }, }; module_platform_driver(ath79_spi_driver); diff --git a/drivers/spi/spi-atmel.c b/drivers/spi/spi-atmel.c index e4193ccc4970..23d8f5f56579 100644 --- a/drivers/spi/spi-atmel.c +++ b/drivers/spi/spi-atmel.c @@ -1522,7 +1522,6 @@ MODULE_DEVICE_TABLE(of, atmel_spi_dt_ids); static struct platform_driver atmel_spi_driver = { .driver = { .name = "atmel_spi", - .owner = THIS_MODULE, .pm = ATMEL_SPI_PM_OPS, .of_match_table = of_match_ptr(atmel_spi_dt_ids), }, diff --git a/drivers/spi/spi-au1550.c b/drivers/spi/spi-au1550.c index f40b34cdf2fc..326f47973684 100644 --- a/drivers/spi/spi-au1550.c +++ b/drivers/spi/spi-au1550.c @@ -965,7 +965,6 @@ static struct platform_driver au1550_spi_drv = { .remove = au1550_spi_remove, .driver = { .name = "au1550-spi", - .owner = THIS_MODULE, }, }; diff --git a/drivers/spi/spi-bcm2835.c b/drivers/spi/spi-bcm2835.c index 69167456ec1e..98aab457b24d 100644 --- a/drivers/spi/spi-bcm2835.c +++ b/drivers/spi/spi-bcm2835.c @@ -395,7 +395,6 @@ MODULE_DEVICE_TABLE(of, bcm2835_spi_match); static struct platform_driver bcm2835_spi_driver = { .driver = { .name = DRV_NAME, - .owner = THIS_MODULE, .of_match_table = bcm2835_spi_match, }, .probe = bcm2835_spi_probe, diff --git a/drivers/spi/spi-bcm63xx-hsspi.c b/drivers/spi/spi-bcm63xx-hsspi.c index 86f5a98aa7a2..f5ca6dc3a157 100644 --- a/drivers/spi/spi-bcm63xx-hsspi.c +++ b/drivers/spi/spi-bcm63xx-hsspi.c @@ -459,7 +459,6 @@ static SIMPLE_DEV_PM_OPS(bcm63xx_hsspi_pm_ops, bcm63xx_hsspi_suspend, static struct platform_driver bcm63xx_hsspi_driver = { .driver = { .name = "bcm63xx-hsspi", - .owner = THIS_MODULE, .pm = &bcm63xx_hsspi_pm_ops, }, .probe = bcm63xx_hsspi_probe, diff --git a/drivers/spi/spi-bcm63xx.c b/drivers/spi/spi-bcm63xx.c index 8510400e7867..c20530982e26 100644 --- a/drivers/spi/spi-bcm63xx.c +++ b/drivers/spi/spi-bcm63xx.c @@ -469,7 +469,6 @@ static const struct dev_pm_ops bcm63xx_spi_pm_ops = { static struct platform_driver bcm63xx_spi_driver = { .driver = { .name = "bcm63xx-spi", - .owner = THIS_MODULE, .pm = &bcm63xx_spi_pm_ops, }, .probe = bcm63xx_spi_probe, diff --git a/drivers/spi/spi-bfin-sport.c b/drivers/spi/spi-bfin-sport.c index f515c5e9db57..a78693189f45 100644 --- a/drivers/spi/spi-bfin-sport.c +++ b/drivers/spi/spi-bfin-sport.c @@ -921,7 +921,6 @@ static SIMPLE_DEV_PM_OPS(bfin_sport_spi_pm_ops, bfin_sport_spi_suspend, static struct platform_driver bfin_sport_spi_driver = { .driver = { .name = DRV_NAME, - .owner = THIS_MODULE, .pm = BFIN_SPORT_SPI_PM_OPS, }, .probe = bfin_sport_spi_probe, diff --git a/drivers/spi/spi-bfin5xx.c b/drivers/spi/spi-bfin5xx.c index ebf720b88a2a..37079937d2f7 100644 --- a/drivers/spi/spi-bfin5xx.c +++ b/drivers/spi/spi-bfin5xx.c @@ -1455,7 +1455,6 @@ MODULE_ALIAS("platform:bfin-spi"); static struct platform_driver bfin_spi_driver = { .driver = { .name = DRV_NAME, - .owner = THIS_MODULE, .pm = BFIN_SPI_PM_OPS, }, .probe = bfin_spi_probe, diff --git a/drivers/spi/spi-clps711x.c b/drivers/spi/spi-clps711x.c index 181cf2262006..8c30de0315e7 100644 --- a/drivers/spi/spi-clps711x.c +++ b/drivers/spi/spi-clps711x.c @@ -203,7 +203,6 @@ err_out: static struct platform_driver clps711x_spi_driver = { .driver = { .name = DRIVER_NAME, - .owner = THIS_MODULE, }, .probe = spi_clps711x_probe, }; diff --git a/drivers/spi/spi-coldfire-qspi.c b/drivers/spi/spi-coldfire-qspi.c index e2fa628e55e7..41b5dc4445f6 100644 --- a/drivers/spi/spi-coldfire-qspi.c +++ b/drivers/spi/spi-coldfire-qspi.c @@ -491,7 +491,7 @@ static int mcfqspi_resume(struct device *dev) } #endif -#ifdef CONFIG_PM_RUNTIME +#ifdef CONFIG_PM static int mcfqspi_runtime_suspend(struct device *dev) { struct spi_master *master = dev_get_drvdata(dev); diff --git a/drivers/spi/spi-davinci.c b/drivers/spi/spi-davinci.c index 63700ab7bd9f..b3707badb1e5 100644 --- a/drivers/spi/spi-davinci.c +++ b/drivers/spi/spi-davinci.c @@ -1119,7 +1119,6 @@ static int davinci_spi_remove(struct platform_device *pdev) static struct platform_driver davinci_spi_driver = { .driver = { .name = "spi_davinci", - .owner = THIS_MODULE, .of_match_table = of_match_ptr(davinci_spi_of_match), }, .probe = davinci_spi_probe, diff --git a/drivers/spi/spi-dw-mmio.c b/drivers/spi/spi-dw-mmio.c index 21ce0e36fa00..eb03e1215195 100644 --- a/drivers/spi/spi-dw-mmio.c +++ b/drivers/spi/spi-dw-mmio.c @@ -135,7 +135,6 @@ static struct platform_driver dw_spi_mmio_driver = { .remove = dw_spi_mmio_remove, .driver = { .name = DRIVER_NAME, - .owner = THIS_MODULE, .of_match_table = dw_spi_mmio_of_match, }, }; diff --git a/drivers/spi/spi-efm32.c b/drivers/spi/spi-efm32.c index 6caeb1cac0f3..065fe8744989 100644 --- a/drivers/spi/spi-efm32.c +++ b/drivers/spi/spi-efm32.c @@ -494,7 +494,6 @@ static struct platform_driver efm32_spi_driver = { .driver = { .name = DRIVER_NAME, - .owner = THIS_MODULE, .of_match_table = efm32_spi_dt_ids, }, }; diff --git a/drivers/spi/spi-ep93xx.c b/drivers/spi/spi-ep93xx.c index bf9728773247..bb00be8d1851 100644 --- a/drivers/spi/spi-ep93xx.c +++ b/drivers/spi/spi-ep93xx.c @@ -964,7 +964,6 @@ static int ep93xx_spi_remove(struct platform_device *pdev) static struct platform_driver ep93xx_spi_driver = { .driver = { .name = "ep93xx-spi", - .owner = THIS_MODULE, }, .probe = ep93xx_spi_probe, .remove = ep93xx_spi_remove, diff --git a/drivers/spi/spi-falcon.c b/drivers/spi/spi-falcon.c index f73b3004d6d3..912b9037e9cf 100644 --- a/drivers/spi/spi-falcon.c +++ b/drivers/spi/spi-falcon.c @@ -441,7 +441,6 @@ static struct platform_driver falcon_sflash_driver = { .probe = falcon_sflash_probe, .driver = { .name = DRV_NAME, - .owner = THIS_MODULE, .of_match_table = falcon_sflash_match, } }; diff --git a/drivers/spi/spi-fsl-espi.c b/drivers/spi/spi-fsl-espi.c index 56cadf13519e..d0a73a09a9bd 100644 --- a/drivers/spi/spi-fsl-espi.c +++ b/drivers/spi/spi-fsl-espi.c @@ -850,7 +850,6 @@ MODULE_DEVICE_TABLE(of, of_fsl_espi_match); static struct platform_driver fsl_espi_driver = { .driver = { .name = "fsl_espi", - .owner = THIS_MODULE, .of_match_table = of_fsl_espi_match, .pm = &espi_pm, }, diff --git a/drivers/spi/spi-fsl-spi.c b/drivers/spi/spi-fsl-spi.c index 3b159364c459..60c590790854 100644 --- a/drivers/spi/spi-fsl-spi.c +++ b/drivers/spi/spi-fsl-spi.c @@ -879,7 +879,6 @@ static int of_fsl_spi_remove(struct platform_device *ofdev) static struct platform_driver of_fsl_spi_driver = { .driver = { .name = "fsl_spi", - .owner = THIS_MODULE, .of_match_table = of_fsl_spi_match, }, .probe = of_fsl_spi_probe, @@ -926,7 +925,6 @@ static struct platform_driver mpc8xxx_spi_driver = { .remove = plat_mpc8xxx_spi_remove, .driver = { .name = "mpc8xxx_spi", - .owner = THIS_MODULE, }, }; diff --git a/drivers/spi/spi-gpio.c b/drivers/spi/spi-gpio.c index 4b600d4f8548..aee4e7589568 100644 --- a/drivers/spi/spi-gpio.c +++ b/drivers/spi/spi-gpio.c @@ -539,7 +539,6 @@ MODULE_ALIAS("platform:" DRIVER_NAME); static struct platform_driver spi_gpio_driver = { .driver = { .name = DRIVER_NAME, - .owner = THIS_MODULE, .of_match_table = of_match_ptr(spi_gpio_dt_ids), }, .probe = spi_gpio_probe, diff --git a/drivers/spi/spi-img-spfi.c b/drivers/spi/spi-img-spfi.c index 43781c9fe521..aad6683db81b 100644 --- a/drivers/spi/spi-img-spfi.c +++ b/drivers/spi/spi-img-spfi.c @@ -341,7 +341,7 @@ static int img_spfi_start_dma(struct spi_master *master, default: rxconf.src_addr = spfi->phys + SPFI_RX_8BIT_VALID_DATA; rxconf.src_addr_width = 1; - rxconf.src_maxburst = 1; + rxconf.src_maxburst = 4; } dmaengine_slave_config(spfi->rx_ch, &rxconf); @@ -368,7 +368,7 @@ static int img_spfi_start_dma(struct spi_master *master, default: txconf.dst_addr = spfi->phys + SPFI_TX_8BIT_VALID_DATA; txconf.dst_addr_width = 1; - txconf.dst_maxburst = 1; + txconf.dst_maxburst = 4; break; } dmaengine_slave_config(spfi->tx_ch, &txconf); @@ -390,14 +390,14 @@ static int img_spfi_start_dma(struct spi_master *master, dma_async_issue_pending(spfi->rx_ch); } + spfi_start(spfi); + if (xfer->tx_buf) { spfi->tx_dma_busy = true; dmaengine_submit(txdesc); dma_async_issue_pending(spfi->tx_ch); } - spfi_start(spfi); - return 1; stop_dma: @@ -663,7 +663,7 @@ static int img_spfi_remove(struct platform_device *pdev) return 0; } -#ifdef CONFIG_PM_RUNTIME +#ifdef CONFIG_PM static int img_spfi_runtime_suspend(struct device *dev) { struct spi_master *master = dev_get_drvdata(dev); @@ -692,7 +692,7 @@ static int img_spfi_runtime_resume(struct device *dev) return 0; } -#endif /* CONFIG_PM_RUNTIME */ +#endif /* CONFIG_PM */ #ifdef CONFIG_PM_SLEEP static int img_spfi_suspend(struct device *dev) diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c index 3637847b5370..961b97d43b43 100644 --- a/drivers/spi/spi-imx.c +++ b/drivers/spi/spi-imx.c @@ -1231,7 +1231,6 @@ static int spi_imx_remove(struct platform_device *pdev) static struct platform_driver spi_imx_driver = { .driver = { .name = DRIVER_NAME, - .owner = THIS_MODULE, .of_match_table = spi_imx_dt_ids, }, .id_table = spi_imx_devtype, diff --git a/drivers/spi/spi-meson-spifc.c b/drivers/spi/spi-meson-spifc.c index 0e48f8c2037d..1bbac0378bf7 100644 --- a/drivers/spi/spi-meson-spifc.c +++ b/drivers/spi/spi-meson-spifc.c @@ -413,7 +413,7 @@ static int meson_spifc_resume(struct device *dev) } #endif /* CONFIG_PM_SLEEP */ -#ifdef CONFIG_PM_RUNTIME +#ifdef CONFIG_PM static int meson_spifc_runtime_suspend(struct device *dev) { struct spi_master *master = dev_get_drvdata(dev); @@ -431,7 +431,7 @@ static int meson_spifc_runtime_resume(struct device *dev) return clk_prepare_enable(spifc->clk); } -#endif /* CONFIG_PM_RUNTIME */ +#endif /* CONFIG_PM */ static const struct dev_pm_ops meson_spifc_pm_ops = { SET_SYSTEM_SLEEP_PM_OPS(meson_spifc_suspend, meson_spifc_resume) diff --git a/drivers/spi/spi-mpc512x-psc.c b/drivers/spi/spi-mpc512x-psc.c index 577d23a12763..ecae0d4e2945 100644 --- a/drivers/spi/spi-mpc512x-psc.c +++ b/drivers/spi/spi-mpc512x-psc.c @@ -600,7 +600,6 @@ static struct platform_driver mpc512x_psc_spi_of_driver = { .remove = mpc512x_psc_spi_of_remove, .driver = { .name = "mpc512x-psc-spi", - .owner = THIS_MODULE, .of_match_table = mpc512x_psc_spi_of_match, }, }; diff --git a/drivers/spi/spi-mpc52xx-psc.c b/drivers/spi/spi-mpc52xx-psc.c index de532aa11d34..72d11ebefb28 100644 --- a/drivers/spi/spi-mpc52xx-psc.c +++ b/drivers/spi/spi-mpc52xx-psc.c @@ -508,7 +508,6 @@ static struct platform_driver mpc52xx_psc_spi_of_driver = { .remove = mpc52xx_psc_spi_of_remove, .driver = { .name = "mpc52xx-psc-spi", - .owner = THIS_MODULE, .of_match_table = mpc52xx_psc_spi_of_match, }, }; diff --git a/drivers/spi/spi-mpc52xx.c b/drivers/spi/spi-mpc52xx.c index b07db4b62d80..c36002110c30 100644 --- a/drivers/spi/spi-mpc52xx.c +++ b/drivers/spi/spi-mpc52xx.c @@ -543,7 +543,6 @@ MODULE_DEVICE_TABLE(of, mpc52xx_spi_match); static struct platform_driver mpc52xx_spi_of_driver = { .driver = { .name = "mpc52xx-spi", - .owner = THIS_MODULE, .of_match_table = mpc52xx_spi_match, }, .probe = mpc52xx_spi_probe, diff --git a/drivers/spi/spi-mxs.c b/drivers/spi/spi-mxs.c index 06a11546a1a7..4045a1e580e1 100644 --- a/drivers/spi/spi-mxs.c +++ b/drivers/spi/spi-mxs.c @@ -572,7 +572,6 @@ static struct platform_driver mxs_spi_driver = { .remove = mxs_spi_remove, .driver = { .name = DRIVER_NAME, - .owner = THIS_MODULE, .of_match_table = mxs_spi_dt_ids, }, }; diff --git a/drivers/spi/spi-nuc900.c b/drivers/spi/spi-nuc900.c index 73e91d5a43df..f51a058e7678 100644 --- a/drivers/spi/spi-nuc900.c +++ b/drivers/spi/spi-nuc900.c @@ -423,7 +423,6 @@ static struct platform_driver nuc900_spi_driver = { .remove = nuc900_spi_remove, .driver = { .name = "nuc900-spi", - .owner = THIS_MODULE, }, }; module_platform_driver(nuc900_spi_driver); diff --git a/drivers/spi/spi-oc-tiny.c b/drivers/spi/spi-oc-tiny.c index 8998d11c7238..76656a77ec12 100644 --- a/drivers/spi/spi-oc-tiny.c +++ b/drivers/spi/spi-oc-tiny.c @@ -351,7 +351,6 @@ static struct platform_driver tiny_spi_driver = { .remove = tiny_spi_remove, .driver = { .name = DRV_NAME, - .owner = THIS_MODULE, .pm = NULL, .of_match_table = of_match_ptr(tiny_spi_match), }, diff --git a/drivers/spi/spi-octeon.c b/drivers/spi/spi-octeon.c index c5e2f718eebd..b283d537d16a 100644 --- a/drivers/spi/spi-octeon.c +++ b/drivers/spi/spi-octeon.c @@ -247,7 +247,6 @@ MODULE_DEVICE_TABLE(of, octeon_spi_match); static struct platform_driver octeon_spi_driver = { .driver = { .name = "spi-octeon", - .owner = THIS_MODULE, .of_match_table = octeon_spi_match, }, .probe = octeon_spi_probe, diff --git a/drivers/spi/spi-omap-100k.c b/drivers/spi/spi-omap-100k.c index fb522765ce5a..79399ae9c84c 100644 --- a/drivers/spi/spi-omap-100k.c +++ b/drivers/spi/spi-omap-100k.c @@ -453,7 +453,6 @@ err: static struct platform_driver omap1_spi100k_driver = { .driver = { .name = "omap1_spi100k", - .owner = THIS_MODULE, }, .probe = omap1_spi100k_probe, }; diff --git a/drivers/spi/spi-omap-uwire.c b/drivers/spi/spi-omap-uwire.c index 8bca90a19dd1..daf1ada5cd11 100644 --- a/drivers/spi/spi-omap-uwire.c +++ b/drivers/spi/spi-omap-uwire.c @@ -527,7 +527,6 @@ MODULE_ALIAS("platform:omap_uwire"); static struct platform_driver uwire_driver = { .driver = { .name = "omap_uwire", - .owner = THIS_MODULE, }, .probe = uwire_probe, .remove = uwire_remove, diff --git a/drivers/spi/spi-omap2-mcspi.c b/drivers/spi/spi-omap2-mcspi.c index 352eed7463ac..3bc3cbabbbc0 100644 --- a/drivers/spi/spi-omap2-mcspi.c +++ b/drivers/spi/spi-omap2-mcspi.c @@ -1521,7 +1521,6 @@ static const struct dev_pm_ops omap2_mcspi_pm_ops = { static struct platform_driver omap2_mcspi_driver = { .driver = { .name = "omap2_mcspi", - .owner = THIS_MODULE, .pm = &omap2_mcspi_pm_ops, .of_match_table = omap_mcspi_of_match, }, diff --git a/drivers/spi/spi-orion.c b/drivers/spi/spi-orion.c index c76b7d7879df..3dec9e0b99b8 100644 --- a/drivers/spi/spi-orion.c +++ b/drivers/spi/spi-orion.c @@ -523,7 +523,7 @@ static int orion_spi_remove(struct platform_device *pdev) MODULE_ALIAS("platform:" DRIVER_NAME); -#ifdef CONFIG_PM_RUNTIME +#ifdef CONFIG_PM static int orion_spi_runtime_suspend(struct device *dev) { struct spi_master *master = dev_get_drvdata(dev); @@ -551,7 +551,6 @@ static const struct dev_pm_ops orion_spi_pm_ops = { static struct platform_driver orion_spi_driver = { .driver = { .name = DRIVER_NAME, - .owner = THIS_MODULE, .pm = &orion_spi_pm_ops, .of_match_table = of_match_ptr(orion_spi_of_match_table), }, diff --git a/drivers/spi/spi-pl022.c b/drivers/spi/spi-pl022.c index fc2dd8441608..89ca162801da 100644 --- a/drivers/spi/spi-pl022.c +++ b/drivers/spi/spi-pl022.c @@ -2377,7 +2377,7 @@ static int pl022_runtime_resume(struct device *dev) static const struct dev_pm_ops pl022_dev_pm_ops = { SET_SYSTEM_SLEEP_PM_OPS(pl022_suspend, pl022_resume) - SET_PM_RUNTIME_PM_OPS(pl022_runtime_suspend, pl022_runtime_resume, NULL) + SET_RUNTIME_PM_OPS(pl022_runtime_suspend, pl022_runtime_resume, NULL) }; static struct vendor_data vendor_arm = { diff --git a/drivers/spi/spi-ppc4xx.c b/drivers/spi/spi-ppc4xx.c index 80b8408ac3e3..54fb984a3e17 100644 --- a/drivers/spi/spi-ppc4xx.c +++ b/drivers/spi/spi-ppc4xx.c @@ -575,7 +575,6 @@ static struct platform_driver spi_ppc4xx_of_driver = { .remove = spi_ppc4xx_of_remove, .driver = { .name = DRIVER_NAME, - .owner = THIS_MODULE, .of_match_table = spi_ppc4xx_of_match, }, }; diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c index 1a1df5092aca..05c623cfb078 100644 --- a/drivers/spi/spi-pxa2xx.c +++ b/drivers/spi/spi-pxa2xx.c @@ -1531,7 +1531,7 @@ static int pxa2xx_spi_resume(struct device *dev) } #endif -#ifdef CONFIG_PM_RUNTIME +#ifdef CONFIG_PM static int pxa2xx_spi_runtime_suspend(struct device *dev) { struct driver_data *drv_data = dev_get_drvdata(dev); @@ -1558,7 +1558,6 @@ static const struct dev_pm_ops pxa2xx_spi_pm_ops = { static struct platform_driver driver = { .driver = { .name = "pxa2xx-spi", - .owner = THIS_MODULE, .pm = &pxa2xx_spi_pm_ops, .acpi_match_table = ACPI_PTR(pxa2xx_spi_acpi_match), }, diff --git a/drivers/spi/spi-qup.c b/drivers/spi/spi-qup.c index 9f83d2950748..e7fb5a0d2e8d 100644 --- a/drivers/spi/spi-qup.c +++ b/drivers/spi/spi-qup.c @@ -646,7 +646,7 @@ error: return ret; } -#ifdef CONFIG_PM_RUNTIME +#ifdef CONFIG_PM static int spi_qup_pm_suspend_runtime(struct device *device) { struct spi_master *master = dev_get_drvdata(device); @@ -672,7 +672,7 @@ static int spi_qup_pm_resume_runtime(struct device *device) writel_relaxed(config, controller->base + QUP_CONFIG); return 0; } -#endif /* CONFIG_PM_RUNTIME */ +#endif /* CONFIG_PM */ #ifdef CONFIG_PM_SLEEP static int spi_qup_suspend(struct device *device) @@ -756,7 +756,6 @@ static const struct dev_pm_ops spi_qup_dev_pm_ops = { static struct platform_driver spi_qup_driver = { .driver = { .name = "spi_qup", - .owner = THIS_MODULE, .pm = &spi_qup_dev_pm_ops, .of_match_table = spi_qup_dt_match, }, diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c index 80637e9406e2..daabbabd26b0 100644 --- a/drivers/spi/spi-rockchip.c +++ b/drivers/spi/spi-rockchip.c @@ -799,7 +799,7 @@ static int rockchip_spi_resume(struct device *dev) } #endif /* CONFIG_PM_SLEEP */ -#ifdef CONFIG_PM_RUNTIME +#ifdef CONFIG_PM static int rockchip_spi_runtime_suspend(struct device *dev) { struct spi_master *master = dev_get_drvdata(dev); @@ -827,7 +827,7 @@ static int rockchip_spi_runtime_resume(struct device *dev) return ret; } -#endif /* CONFIG_PM_RUNTIME */ +#endif /* CONFIG_PM */ static const struct dev_pm_ops rockchip_spi_pm = { SET_SYSTEM_SLEEP_PM_OPS(rockchip_spi_suspend, rockchip_spi_resume) @@ -846,7 +846,6 @@ MODULE_DEVICE_TABLE(of, rockchip_spi_dt_match); static struct platform_driver rockchip_spi_driver = { .driver = { .name = DRIVER_NAME, - .owner = THIS_MODULE, .pm = &rockchip_spi_pm, .of_match_table = of_match_ptr(rockchip_spi_dt_match), }, diff --git a/drivers/spi/spi-rspi.c b/drivers/spi/spi-rspi.c index 54bb0faec155..2071f788c6fb 100644 --- a/drivers/spi/spi-rspi.c +++ b/drivers/spi/spi-rspi.c @@ -1211,7 +1211,6 @@ static struct platform_driver rspi_driver = { .id_table = spi_driver_ids, .driver = { .name = "renesas_spi", - .owner = THIS_MODULE, .of_match_table = of_match_ptr(rspi_of_match), }, }; diff --git a/drivers/spi/spi-s3c24xx.c b/drivers/spi/spi-s3c24xx.c index e713737d784f..f747ca269986 100644 --- a/drivers/spi/spi-s3c24xx.c +++ b/drivers/spi/spi-s3c24xx.c @@ -663,7 +663,6 @@ static struct platform_driver s3c24xx_spi_driver = { .remove = s3c24xx_spi_remove, .driver = { .name = "s3c2410-spi", - .owner = THIS_MODULE, .pm = S3C24XX_SPI_PMOPS, }, }; diff --git a/drivers/spi/spi-s3c64xx.c b/drivers/spi/spi-s3c64xx.c index 0f602cba1989..37b19836f5cb 100644 --- a/drivers/spi/spi-s3c64xx.c +++ b/drivers/spi/spi-s3c64xx.c @@ -1267,7 +1267,7 @@ static int s3c64xx_spi_resume(struct device *dev) } #endif /* CONFIG_PM_SLEEP */ -#ifdef CONFIG_PM_RUNTIME +#ifdef CONFIG_PM static int s3c64xx_spi_runtime_suspend(struct device *dev) { struct spi_master *master = dev_get_drvdata(dev); @@ -1297,7 +1297,7 @@ static int s3c64xx_spi_runtime_resume(struct device *dev) return 0; } -#endif /* CONFIG_PM_RUNTIME */ +#endif /* CONFIG_PM */ static const struct dev_pm_ops s3c64xx_spi_pm = { SET_SYSTEM_SLEEP_PM_OPS(s3c64xx_spi_suspend, s3c64xx_spi_resume) @@ -1394,7 +1394,6 @@ MODULE_DEVICE_TABLE(of, s3c64xx_spi_dt_match); static struct platform_driver s3c64xx_spi_driver = { .driver = { .name = "s3c64xx-spi", - .owner = THIS_MODULE, .pm = &s3c64xx_spi_pm, .of_match_table = of_match_ptr(s3c64xx_spi_dt_match), }, diff --git a/drivers/spi/spi-sh-hspi.c b/drivers/spi/spi-sh-hspi.c index 94b5faed21e2..fc29233d0650 100644 --- a/drivers/spi/spi-sh-hspi.c +++ b/drivers/spi/spi-sh-hspi.c @@ -315,7 +315,6 @@ static struct platform_driver hspi_driver = { .remove = hspi_remove, .driver = { .name = "sh-hspi", - .owner = THIS_MODULE, .of_match_table = hspi_of_match, }, }; diff --git a/drivers/spi/spi-sh-msiof.c b/drivers/spi/spi-sh-msiof.c index 14052936b1c5..96a5fc0878d8 100644 --- a/drivers/spi/spi-sh-msiof.c +++ b/drivers/spi/spi-sh-msiof.c @@ -1240,7 +1240,6 @@ static struct platform_driver sh_msiof_spi_drv = { .id_table = spi_driver_ids, .driver = { .name = "spi_sh_msiof", - .owner = THIS_MODULE, .of_match_table = of_match_ptr(sh_msiof_match), }, }; diff --git a/drivers/spi/spi-sh-sci.c b/drivers/spi/spi-sh-sci.c index b83dd733684c..a9beeeed812c 100644 --- a/drivers/spi/spi-sh-sci.c +++ b/drivers/spi/spi-sh-sci.c @@ -187,7 +187,6 @@ static struct platform_driver sh_sci_spi_drv = { .remove = sh_sci_spi_remove, .driver = { .name = "spi_sh_sci", - .owner = THIS_MODULE, }, }; module_platform_driver(sh_sci_spi_drv); diff --git a/drivers/spi/spi-sh.c b/drivers/spi/spi-sh.c index 8e171a76049f..1cfc906dd174 100644 --- a/drivers/spi/spi-sh.c +++ b/drivers/spi/spi-sh.c @@ -532,7 +532,6 @@ static struct platform_driver spi_sh_driver = { .remove = spi_sh_remove, .driver = { .name = "sh_spi", - .owner = THIS_MODULE, }, }; module_platform_driver(spi_sh_driver); diff --git a/drivers/spi/spi-sirf.c b/drivers/spi/spi-sirf.c index 73a88b33f810..d075191476f0 100644 --- a/drivers/spi/spi-sirf.c +++ b/drivers/spi/spi-sirf.c @@ -826,7 +826,6 @@ MODULE_DEVICE_TABLE(of, spi_sirfsoc_of_match); static struct platform_driver spi_sirfsoc_driver = { .driver = { .name = DRIVER_NAME, - .owner = THIS_MODULE, .pm = &spi_sirfsoc_pm_ops, .of_match_table = spi_sirfsoc_of_match, }, diff --git a/drivers/spi/spi-sun4i.c b/drivers/spi/spi-sun4i.c index 85204c93f3d3..fbb0a4d74e91 100644 --- a/drivers/spi/spi-sun4i.c +++ b/drivers/spi/spi-sun4i.c @@ -464,7 +464,6 @@ static struct platform_driver sun4i_spi_driver = { .remove = sun4i_spi_remove, .driver = { .name = "sun4i-spi", - .owner = THIS_MODULE, .of_match_table = sun4i_spi_match, .pm = &sun4i_spi_pm_ops, }, diff --git a/drivers/spi/spi-sun6i.c b/drivers/spi/spi-sun6i.c index bd24093f4038..ac48f59705a8 100644 --- a/drivers/spi/spi-sun6i.c +++ b/drivers/spi/spi-sun6i.c @@ -470,7 +470,6 @@ static struct platform_driver sun6i_spi_driver = { .remove = sun6i_spi_remove, .driver = { .name = "sun6i-spi", - .owner = THIS_MODULE, .of_match_table = sun6i_spi_match, .pm = &sun6i_spi_pm_ops, }, diff --git a/drivers/spi/spi-tegra114.c b/drivers/spi/spi-tegra114.c index 795bcbc0131b..73779cecc3bb 100644 --- a/drivers/spi/spi-tegra114.c +++ b/drivers/spi/spi-tegra114.c @@ -1223,7 +1223,6 @@ static const struct dev_pm_ops tegra_spi_pm_ops = { static struct platform_driver tegra_spi_driver = { .driver = { .name = "spi-tegra114", - .owner = THIS_MODULE, .pm = &tegra_spi_pm_ops, .of_match_table = tegra_spi_of_match, }, diff --git a/drivers/spi/spi-tegra20-sflash.c b/drivers/spi/spi-tegra20-sflash.c index cd66fe7b78a9..b6558bb6f9df 100644 --- a/drivers/spi/spi-tegra20-sflash.c +++ b/drivers/spi/spi-tegra20-sflash.c @@ -608,7 +608,6 @@ static const struct dev_pm_ops slink_pm_ops = { static struct platform_driver tegra_sflash_driver = { .driver = { .name = "spi-tegra-sflash", - .owner = THIS_MODULE, .pm = &slink_pm_ops, .of_match_table = tegra_sflash_of_match, }, diff --git a/drivers/spi/spi-tegra20-slink.c b/drivers/spi/spi-tegra20-slink.c index 0b9e32e9f493..85c91f58b42f 100644 --- a/drivers/spi/spi-tegra20-slink.c +++ b/drivers/spi/spi-tegra20-slink.c @@ -1224,7 +1224,6 @@ static const struct dev_pm_ops slink_pm_ops = { static struct platform_driver tegra_slink_driver = { .driver = { .name = "spi-tegra-slink", - .owner = THIS_MODULE, .pm = &slink_pm_ops, .of_match_table = tegra_slink_of_match, }, diff --git a/drivers/spi/spi-ti-qspi.c b/drivers/spi/spi-ti-qspi.c index 6c211d1910b0..6146c4cd6583 100644 --- a/drivers/spi/spi-ti-qspi.c +++ b/drivers/spi/spi-ti-qspi.c @@ -567,7 +567,6 @@ static struct platform_driver ti_qspi_driver = { .remove = ti_qspi_remove, .driver = { .name = "ti-qspi", - .owner = THIS_MODULE, .pm = &ti_qspi_pm_ops, .of_match_table = ti_qspi_match, } diff --git a/drivers/spi/spi-topcliff-pch.c b/drivers/spi/spi-topcliff-pch.c index 0a87ec39f619..be692ad50442 100644 --- a/drivers/spi/spi-topcliff-pch.c +++ b/drivers/spi/spi-topcliff-pch.c @@ -1561,7 +1561,6 @@ static int pch_spi_pd_resume(struct platform_device *pd_dev) static struct platform_driver pch_spi_pd_driver = { .driver = { .name = "pch-spi", - .owner = THIS_MODULE, }, .probe = pch_spi_pd_probe, .remove = pch_spi_pd_remove, diff --git a/drivers/spi/spi-txx9.c b/drivers/spi/spi-txx9.c index f2ab827c81bb..9190124b6d90 100644 --- a/drivers/spi/spi-txx9.c +++ b/drivers/spi/spi-txx9.c @@ -425,7 +425,6 @@ static struct platform_driver txx9spi_driver = { .remove = txx9spi_remove, .driver = { .name = "spi_txx9", - .owner = THIS_MODULE, }, }; diff --git a/drivers/spi/spi-xtensa-xtfpga.c b/drivers/spi/spi-xtensa-xtfpga.c index 0dc5df5233a9..2e32ea2f194f 100644 --- a/drivers/spi/spi-xtensa-xtfpga.c +++ b/drivers/spi/spi-xtensa-xtfpga.c @@ -160,7 +160,6 @@ static struct platform_driver xtfpga_spi_driver = { .remove = xtfpga_spi_remove, .driver = { .name = XTFPGA_SPI_NAME, - .owner = THIS_MODULE, .of_match_table = of_match_ptr(xtfpga_spi_of_match), }, }; diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index da7e6225b8f6..66a70e9bc743 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -1220,6 +1220,121 @@ err_init_queue: /*-------------------------------------------------------------------------*/ #if defined(CONFIG_OF) +static struct spi_device * +of_register_spi_device(struct spi_master *master, struct device_node *nc) +{ + struct spi_device *spi; + int rc; + u32 value; + + /* Alloc an spi_device */ + spi = spi_alloc_device(master); + if (!spi) { + dev_err(&master->dev, "spi_device alloc error for %s\n", + nc->full_name); + rc = -ENOMEM; + goto err_out; + } + + /* Select device driver */ + rc = of_modalias_node(nc, spi->modalias, + sizeof(spi->modalias)); + if (rc < 0) { + dev_err(&master->dev, "cannot find modalias for %s\n", + nc->full_name); + goto err_out; + } + + /* Device address */ + rc = of_property_read_u32(nc, "reg", &value); + if (rc) { + dev_err(&master->dev, "%s has no valid 'reg' property (%d)\n", + nc->full_name, rc); + goto err_out; + } + spi->chip_select = value; + + /* Mode (clock phase/polarity/etc.) */ + if (of_find_property(nc, "spi-cpha", NULL)) + spi->mode |= SPI_CPHA; + if (of_find_property(nc, "spi-cpol", NULL)) + spi->mode |= SPI_CPOL; + if (of_find_property(nc, "spi-cs-high", NULL)) + spi->mode |= SPI_CS_HIGH; + if (of_find_property(nc, "spi-3wire", NULL)) + spi->mode |= SPI_3WIRE; + if (of_find_property(nc, "spi-lsb-first", NULL)) + spi->mode |= SPI_LSB_FIRST; + + /* Device DUAL/QUAD mode */ + if (!of_property_read_u32(nc, "spi-tx-bus-width", &value)) { + switch (value) { + case 1: + break; + case 2: + spi->mode |= SPI_TX_DUAL; + break; + case 4: + spi->mode |= SPI_TX_QUAD; + break; + default: + dev_warn(&master->dev, + "spi-tx-bus-width %d not supported\n", + value); + break; + } + } + + if (!of_property_read_u32(nc, "spi-rx-bus-width", &value)) { + switch (value) { + case 1: + break; + case 2: + spi->mode |= SPI_RX_DUAL; + break; + case 4: + spi->mode |= SPI_RX_QUAD; + break; + default: + dev_warn(&master->dev, + "spi-rx-bus-width %d not supported\n", + value); + break; + } + } + + /* Device speed */ + rc = of_property_read_u32(nc, "spi-max-frequency", &value); + if (rc) { + dev_err(&master->dev, "%s has no valid 'spi-max-frequency' property (%d)\n", + nc->full_name, rc); + goto err_out; + } + spi->max_speed_hz = value; + + /* IRQ */ + spi->irq = irq_of_parse_and_map(nc, 0); + + /* Store a pointer to the node in the device structure */ + of_node_get(nc); + spi->dev.of_node = nc; + + /* Register the new device */ + request_module("%s%s", SPI_MODULE_PREFIX, spi->modalias); + rc = spi_add_device(spi); + if (rc) { + dev_err(&master->dev, "spi_device register error %s\n", + nc->full_name); + goto err_out; + } + + return spi; + +err_out: + spi_dev_put(spi); + return ERR_PTR(rc); +} + /** * of_register_spi_devices() - Register child devices onto the SPI bus * @master: Pointer to spi_master device @@ -1231,116 +1346,15 @@ static void of_register_spi_devices(struct spi_master *master) { struct spi_device *spi; struct device_node *nc; - int rc; - u32 value; if (!master->dev.of_node) return; for_each_available_child_of_node(master->dev.of_node, nc) { - /* Alloc an spi_device */ - spi = spi_alloc_device(master); - if (!spi) { - dev_err(&master->dev, "spi_device alloc error for %s\n", + spi = of_register_spi_device(master, nc); + if (IS_ERR(spi)) + dev_warn(&master->dev, "Failed to create SPI device for %s\n", nc->full_name); - spi_dev_put(spi); - continue; - } - - /* Select device driver */ - if (of_modalias_node(nc, spi->modalias, - sizeof(spi->modalias)) < 0) { - dev_err(&master->dev, "cannot find modalias for %s\n", - nc->full_name); - spi_dev_put(spi); - continue; - } - - /* Device address */ - rc = of_property_read_u32(nc, "reg", &value); - if (rc) { - dev_err(&master->dev, "%s has no valid 'reg' property (%d)\n", - nc->full_name, rc); - spi_dev_put(spi); - continue; - } - spi->chip_select = value; - - /* Mode (clock phase/polarity/etc.) */ - if (of_find_property(nc, "spi-cpha", NULL)) - spi->mode |= SPI_CPHA; - if (of_find_property(nc, "spi-cpol", NULL)) - spi->mode |= SPI_CPOL; - if (of_find_property(nc, "spi-cs-high", NULL)) - spi->mode |= SPI_CS_HIGH; - if (of_find_property(nc, "spi-3wire", NULL)) - spi->mode |= SPI_3WIRE; - if (of_find_property(nc, "spi-lsb-first", NULL)) - spi->mode |= SPI_LSB_FIRST; - - /* Device DUAL/QUAD mode */ - if (!of_property_read_u32(nc, "spi-tx-bus-width", &value)) { - switch (value) { - case 1: - break; - case 2: - spi->mode |= SPI_TX_DUAL; - break; - case 4: - spi->mode |= SPI_TX_QUAD; - break; - default: - dev_warn(&master->dev, - "spi-tx-bus-width %d not supported\n", - value); - break; - } - } - - if (!of_property_read_u32(nc, "spi-rx-bus-width", &value)) { - switch (value) { - case 1: - break; - case 2: - spi->mode |= SPI_RX_DUAL; - break; - case 4: - spi->mode |= SPI_RX_QUAD; - break; - default: - dev_warn(&master->dev, - "spi-rx-bus-width %d not supported\n", - value); - break; - } - } - - /* Device speed */ - rc = of_property_read_u32(nc, "spi-max-frequency", &value); - if (rc) { - dev_err(&master->dev, "%s has no valid 'spi-max-frequency' property (%d)\n", - nc->full_name, rc); - spi_dev_put(spi); - continue; - } - spi->max_speed_hz = value; - - /* IRQ */ - spi->irq = irq_of_parse_and_map(nc, 0); - - /* Store a pointer to the node in the device structure */ - of_node_get(nc); - spi->dev.of_node = nc; - - /* Register the new device */ - request_module("%s%s", SPI_MODULE_PREFIX, spi->modalias); - rc = spi_add_device(spi); - if (rc) { - dev_err(&master->dev, "spi_device register error %s\n", - nc->full_name); - spi_dev_put(spi); - } - } } #else @@ -2303,6 +2317,86 @@ EXPORT_SYMBOL_GPL(spi_write_then_read); /*-------------------------------------------------------------------------*/ +#if IS_ENABLED(CONFIG_OF_DYNAMIC) +static int __spi_of_device_match(struct device *dev, void *data) +{ + return dev->of_node == data; +} + +/* must call put_device() when done with returned spi_device device */ +static struct spi_device *of_find_spi_device_by_node(struct device_node *node) +{ + struct device *dev = bus_find_device(&spi_bus_type, NULL, node, + __spi_of_device_match); + return dev ? to_spi_device(dev) : NULL; +} + +static int __spi_of_master_match(struct device *dev, const void *data) +{ + return dev->of_node == data; +} + +/* the spi masters are not using spi_bus, so we find it with another way */ +static struct spi_master *of_find_spi_master_by_node(struct device_node *node) +{ + struct device *dev; + + dev = class_find_device(&spi_master_class, NULL, node, + __spi_of_master_match); + if (!dev) + return NULL; + + /* reference got in class_find_device */ + return container_of(dev, struct spi_master, dev); +} + +static int of_spi_notify(struct notifier_block *nb, unsigned long action, + void *arg) +{ + struct of_reconfig_data *rd = arg; + struct spi_master *master; + struct spi_device *spi; + + switch (of_reconfig_get_state_change(action, arg)) { + case OF_RECONFIG_CHANGE_ADD: + master = of_find_spi_master_by_node(rd->dn->parent); + if (master == NULL) + return NOTIFY_OK; /* not for us */ + + spi = of_register_spi_device(master, rd->dn); + put_device(&master->dev); + + if (IS_ERR(spi)) { + pr_err("%s: failed to create for '%s'\n", + __func__, rd->dn->full_name); + return notifier_from_errno(PTR_ERR(spi)); + } + break; + + case OF_RECONFIG_CHANGE_REMOVE: + /* find our device by node */ + spi = of_find_spi_device_by_node(rd->dn); + if (spi == NULL) + return NOTIFY_OK; /* no? not meant for us */ + + /* unregister takes one ref away */ + spi_unregister_device(spi); + + /* and put the reference of the find */ + put_device(&spi->dev); + break; + } + + return NOTIFY_OK; +} + +static struct notifier_block spi_of_notifier = { + .notifier_call = of_spi_notify, +}; +#else /* IS_ENABLED(CONFIG_OF_DYNAMIC) */ +extern struct notifier_block spi_of_notifier; +#endif /* IS_ENABLED(CONFIG_OF_DYNAMIC) */ + static int __init spi_init(void) { int status; @@ -2320,6 +2414,10 @@ static int __init spi_init(void) status = class_register(&spi_master_class); if (status < 0) goto err2; + + if (IS_ENABLED(CONFIG_OF_DYNAMIC)) + WARN_ON(of_reconfig_notifier_register(&spi_of_notifier)); + return 0; err2: |