diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-02-16 10:15:20 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-02-16 10:15:20 -0500 |
commit | e5310a1cb4f56c54488ecaf29b1abf3b790cfddc (patch) | |
tree | 9024ca83c94993aca4940c2d32835f2d3f500f8c | |
parent | 2a4be2c52556ded8df08904f4032aed98654a017 (diff) | |
parent | 4dd638f8ac6b4ed020297b5d994d9346b84f2009 (diff) |
Merge tag 'spi-fix-v4.5-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi
Pull spi fixes from Mark Brown:
"A small clutch of driver specific fixes.
The OMAP one is a bit worrying since it seems to be triggered by some
changes in the runtime PM core code and I suspect there's other
drivers across that are going to be using the same pattern outside of
OMAP but nothing seems to be coming up in the testing people are
doing"
* tag 'spi-fix-v4.5-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi:
spi: omap2-mcspi: Fix PM regression with deferred probe for pm_runtime_reinit
spi: bcm2835aux: fix bitmask defines
spi: atmel: fix gpio chip-select in case of non-DT platform
spi/fsl-espi: Correct the maximum transaction length
spi: imx: fix spi resource leak with dma transfer
spi: fix counting in spi-loopback-test code
-rw-r--r-- | drivers/spi/spi-atmel.c | 1 | ||||
-rw-r--r-- | drivers/spi/spi-bcm2835aux.c | 4 | ||||
-rw-r--r-- | drivers/spi/spi-fsl-espi.c | 4 | ||||
-rw-r--r-- | drivers/spi/spi-imx.c | 8 | ||||
-rw-r--r-- | drivers/spi/spi-loopback-test.c | 1 | ||||
-rw-r--r-- | drivers/spi/spi-omap2-mcspi.c | 3 |
6 files changed, 14 insertions, 7 deletions
diff --git a/drivers/spi/spi-atmel.c b/drivers/spi/spi-atmel.c index aebad36391c9..8feac599e9ab 100644 --- a/drivers/spi/spi-atmel.c +++ b/drivers/spi/spi-atmel.c | |||
@@ -1571,6 +1571,7 @@ static int atmel_spi_probe(struct platform_device *pdev) | |||
1571 | 1571 | ||
1572 | as->use_cs_gpios = true; | 1572 | as->use_cs_gpios = true; |
1573 | if (atmel_spi_is_v2(as) && | 1573 | if (atmel_spi_is_v2(as) && |
1574 | pdev->dev.of_node && | ||
1574 | !of_get_property(pdev->dev.of_node, "cs-gpios", NULL)) { | 1575 | !of_get_property(pdev->dev.of_node, "cs-gpios", NULL)) { |
1575 | as->use_cs_gpios = false; | 1576 | as->use_cs_gpios = false; |
1576 | master->num_chipselect = 4; | 1577 | master->num_chipselect = 4; |
diff --git a/drivers/spi/spi-bcm2835aux.c b/drivers/spi/spi-bcm2835aux.c index 7de6f8472a81..ecc73c0a97cf 100644 --- a/drivers/spi/spi-bcm2835aux.c +++ b/drivers/spi/spi-bcm2835aux.c | |||
@@ -73,8 +73,8 @@ | |||
73 | 73 | ||
74 | /* Bitfields in CNTL1 */ | 74 | /* Bitfields in CNTL1 */ |
75 | #define BCM2835_AUX_SPI_CNTL1_CSHIGH 0x00000700 | 75 | #define BCM2835_AUX_SPI_CNTL1_CSHIGH 0x00000700 |
76 | #define BCM2835_AUX_SPI_CNTL1_IDLE 0x00000080 | 76 | #define BCM2835_AUX_SPI_CNTL1_TXEMPTY 0x00000080 |
77 | #define BCM2835_AUX_SPI_CNTL1_TXEMPTY 0x00000040 | 77 | #define BCM2835_AUX_SPI_CNTL1_IDLE 0x00000040 |
78 | #define BCM2835_AUX_SPI_CNTL1_MSBF_IN 0x00000002 | 78 | #define BCM2835_AUX_SPI_CNTL1_MSBF_IN 0x00000002 |
79 | #define BCM2835_AUX_SPI_CNTL1_KEEP_IN 0x00000001 | 79 | #define BCM2835_AUX_SPI_CNTL1_KEEP_IN 0x00000001 |
80 | 80 | ||
diff --git a/drivers/spi/spi-fsl-espi.c b/drivers/spi/spi-fsl-espi.c index 7fd6a4c009d2..7cb0c1921495 100644 --- a/drivers/spi/spi-fsl-espi.c +++ b/drivers/spi/spi-fsl-espi.c | |||
@@ -84,7 +84,7 @@ struct fsl_espi_transfer { | |||
84 | /* SPCOM register values */ | 84 | /* SPCOM register values */ |
85 | #define SPCOM_CS(x) ((x) << 30) | 85 | #define SPCOM_CS(x) ((x) << 30) |
86 | #define SPCOM_TRANLEN(x) ((x) << 0) | 86 | #define SPCOM_TRANLEN(x) ((x) << 0) |
87 | #define SPCOM_TRANLEN_MAX 0xFFFF /* Max transaction length */ | 87 | #define SPCOM_TRANLEN_MAX 0x10000 /* Max transaction length */ |
88 | 88 | ||
89 | #define AUTOSUSPEND_TIMEOUT 2000 | 89 | #define AUTOSUSPEND_TIMEOUT 2000 |
90 | 90 | ||
@@ -233,7 +233,7 @@ static int fsl_espi_bufs(struct spi_device *spi, struct spi_transfer *t) | |||
233 | reinit_completion(&mpc8xxx_spi->done); | 233 | reinit_completion(&mpc8xxx_spi->done); |
234 | 234 | ||
235 | /* Set SPCOM[CS] and SPCOM[TRANLEN] field */ | 235 | /* Set SPCOM[CS] and SPCOM[TRANLEN] field */ |
236 | if ((t->len - 1) > SPCOM_TRANLEN_MAX) { | 236 | if (t->len > SPCOM_TRANLEN_MAX) { |
237 | dev_err(mpc8xxx_spi->dev, "Transaction length (%d)" | 237 | dev_err(mpc8xxx_spi->dev, "Transaction length (%d)" |
238 | " beyond the SPCOM[TRANLEN] field\n", t->len); | 238 | " beyond the SPCOM[TRANLEN] field\n", t->len); |
239 | return -EINVAL; | 239 | return -EINVAL; |
diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c index d98c33cb64f9..6a4ff27f4357 100644 --- a/drivers/spi/spi-imx.c +++ b/drivers/spi/spi-imx.c | |||
@@ -929,7 +929,7 @@ static int spi_imx_dma_transfer(struct spi_imx_data *spi_imx, | |||
929 | tx->sgl, tx->nents, DMA_MEM_TO_DEV, | 929 | tx->sgl, tx->nents, DMA_MEM_TO_DEV, |
930 | DMA_PREP_INTERRUPT | DMA_CTRL_ACK); | 930 | DMA_PREP_INTERRUPT | DMA_CTRL_ACK); |
931 | if (!desc_tx) | 931 | if (!desc_tx) |
932 | goto no_dma; | 932 | goto tx_nodma; |
933 | 933 | ||
934 | desc_tx->callback = spi_imx_dma_tx_callback; | 934 | desc_tx->callback = spi_imx_dma_tx_callback; |
935 | desc_tx->callback_param = (void *)spi_imx; | 935 | desc_tx->callback_param = (void *)spi_imx; |
@@ -941,7 +941,7 @@ static int spi_imx_dma_transfer(struct spi_imx_data *spi_imx, | |||
941 | rx->sgl, rx->nents, DMA_DEV_TO_MEM, | 941 | rx->sgl, rx->nents, DMA_DEV_TO_MEM, |
942 | DMA_PREP_INTERRUPT | DMA_CTRL_ACK); | 942 | DMA_PREP_INTERRUPT | DMA_CTRL_ACK); |
943 | if (!desc_rx) | 943 | if (!desc_rx) |
944 | goto no_dma; | 944 | goto rx_nodma; |
945 | 945 | ||
946 | desc_rx->callback = spi_imx_dma_rx_callback; | 946 | desc_rx->callback = spi_imx_dma_rx_callback; |
947 | desc_rx->callback_param = (void *)spi_imx; | 947 | desc_rx->callback_param = (void *)spi_imx; |
@@ -1008,7 +1008,9 @@ static int spi_imx_dma_transfer(struct spi_imx_data *spi_imx, | |||
1008 | 1008 | ||
1009 | return ret; | 1009 | return ret; |
1010 | 1010 | ||
1011 | no_dma: | 1011 | rx_nodma: |
1012 | dmaengine_terminate_all(master->dma_tx); | ||
1013 | tx_nodma: | ||
1012 | pr_warn_once("%s %s: DMA not available, falling back to PIO\n", | 1014 | pr_warn_once("%s %s: DMA not available, falling back to PIO\n", |
1013 | dev_driver_string(&master->dev), | 1015 | dev_driver_string(&master->dev), |
1014 | dev_name(&master->dev)); | 1016 | dev_name(&master->dev)); |
diff --git a/drivers/spi/spi-loopback-test.c b/drivers/spi/spi-loopback-test.c index 894616f687b0..cf4bb36bee25 100644 --- a/drivers/spi/spi-loopback-test.c +++ b/drivers/spi/spi-loopback-test.c | |||
@@ -761,6 +761,7 @@ static int spi_test_run_iter(struct spi_device *spi, | |||
761 | test.iterate_transfer_mask = 1; | 761 | test.iterate_transfer_mask = 1; |
762 | 762 | ||
763 | /* count number of transfers with tx/rx_buf != NULL */ | 763 | /* count number of transfers with tx/rx_buf != NULL */ |
764 | rx_count = tx_count = 0; | ||
764 | for (i = 0; i < test.transfer_count; i++) { | 765 | for (i = 0; i < test.transfer_count; i++) { |
765 | if (test.transfers[i].tx_buf) | 766 | if (test.transfers[i].tx_buf) |
766 | tx_count++; | 767 | tx_count++; |
diff --git a/drivers/spi/spi-omap2-mcspi.c b/drivers/spi/spi-omap2-mcspi.c index 7273820275e9..0caa3c8bef46 100644 --- a/drivers/spi/spi-omap2-mcspi.c +++ b/drivers/spi/spi-omap2-mcspi.c | |||
@@ -1490,6 +1490,8 @@ static int omap2_mcspi_probe(struct platform_device *pdev) | |||
1490 | return status; | 1490 | return status; |
1491 | 1491 | ||
1492 | disable_pm: | 1492 | disable_pm: |
1493 | pm_runtime_dont_use_autosuspend(&pdev->dev); | ||
1494 | pm_runtime_put_sync(&pdev->dev); | ||
1493 | pm_runtime_disable(&pdev->dev); | 1495 | pm_runtime_disable(&pdev->dev); |
1494 | free_master: | 1496 | free_master: |
1495 | spi_master_put(master); | 1497 | spi_master_put(master); |
@@ -1501,6 +1503,7 @@ static int omap2_mcspi_remove(struct platform_device *pdev) | |||
1501 | struct spi_master *master = platform_get_drvdata(pdev); | 1503 | struct spi_master *master = platform_get_drvdata(pdev); |
1502 | struct omap2_mcspi *mcspi = spi_master_get_devdata(master); | 1504 | struct omap2_mcspi *mcspi = spi_master_get_devdata(master); |
1503 | 1505 | ||
1506 | pm_runtime_dont_use_autosuspend(mcspi->dev); | ||
1504 | pm_runtime_put_sync(mcspi->dev); | 1507 | pm_runtime_put_sync(mcspi->dev); |
1505 | pm_runtime_disable(&pdev->dev); | 1508 | pm_runtime_disable(&pdev->dev); |
1506 | 1509 | ||