forked from luck/tmp_suning_uos_patched
spi: Fixes for v4.5
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. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAABAgAGBQJWwcN2AAoJECTWi3JdVIfQM9IH/2WWGIU4ByQeHLd7FnNHQwZk wh4g7xpo/SRzob2rz2yqeKgkIg4Ew4+BsD5jslvGhBn9ph5HIFYHVcHt3vjVUNRE EyOoM8X4lLc97LYog10ieXk5dFkvcCTDYoQDcTxVDmMPRsRrt2Z7htTB4jAbhlk/ kH5nJCir4Cwk5qDTw7+9W8d5hCXl3ESM7KoTCqtvpA8JmTD++vRcphp39NWZejAw ukO/EAJcwqlTmds3zki1/lM6R4NBtbAE2BGy9j0eUQnL3/37Sl77hAxcsKjey1Zj dVa8ow9ZRTEZtbCQjrK8WpD3V26TNuUGZs4qEQ+nizQnvAnrqgkfOOg6wBJ6LDg= =imJW -----END PGP SIGNATURE----- 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
This commit is contained in:
commit
e5310a1cb4
|
@ -1571,6 +1571,7 @@ static int atmel_spi_probe(struct platform_device *pdev)
|
|||
|
||||
as->use_cs_gpios = true;
|
||||
if (atmel_spi_is_v2(as) &&
|
||||
pdev->dev.of_node &&
|
||||
!of_get_property(pdev->dev.of_node, "cs-gpios", NULL)) {
|
||||
as->use_cs_gpios = false;
|
||||
master->num_chipselect = 4;
|
||||
|
|
|
@ -73,8 +73,8 @@
|
|||
|
||||
/* Bitfields in CNTL1 */
|
||||
#define BCM2835_AUX_SPI_CNTL1_CSHIGH 0x00000700
|
||||
#define BCM2835_AUX_SPI_CNTL1_IDLE 0x00000080
|
||||
#define BCM2835_AUX_SPI_CNTL1_TXEMPTY 0x00000040
|
||||
#define BCM2835_AUX_SPI_CNTL1_TXEMPTY 0x00000080
|
||||
#define BCM2835_AUX_SPI_CNTL1_IDLE 0x00000040
|
||||
#define BCM2835_AUX_SPI_CNTL1_MSBF_IN 0x00000002
|
||||
#define BCM2835_AUX_SPI_CNTL1_KEEP_IN 0x00000001
|
||||
|
||||
|
|
|
@ -84,7 +84,7 @@ struct fsl_espi_transfer {
|
|||
/* SPCOM register values */
|
||||
#define SPCOM_CS(x) ((x) << 30)
|
||||
#define SPCOM_TRANLEN(x) ((x) << 0)
|
||||
#define SPCOM_TRANLEN_MAX 0xFFFF /* Max transaction length */
|
||||
#define SPCOM_TRANLEN_MAX 0x10000 /* Max transaction length */
|
||||
|
||||
#define AUTOSUSPEND_TIMEOUT 2000
|
||||
|
||||
|
@ -233,7 +233,7 @@ static int fsl_espi_bufs(struct spi_device *spi, struct spi_transfer *t)
|
|||
reinit_completion(&mpc8xxx_spi->done);
|
||||
|
||||
/* Set SPCOM[CS] and SPCOM[TRANLEN] field */
|
||||
if ((t->len - 1) > SPCOM_TRANLEN_MAX) {
|
||||
if (t->len > SPCOM_TRANLEN_MAX) {
|
||||
dev_err(mpc8xxx_spi->dev, "Transaction length (%d)"
|
||||
" beyond the SPCOM[TRANLEN] field\n", t->len);
|
||||
return -EINVAL;
|
||||
|
|
|
@ -929,7 +929,7 @@ static int spi_imx_dma_transfer(struct spi_imx_data *spi_imx,
|
|||
tx->sgl, tx->nents, DMA_MEM_TO_DEV,
|
||||
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
||||
if (!desc_tx)
|
||||
goto no_dma;
|
||||
goto tx_nodma;
|
||||
|
||||
desc_tx->callback = spi_imx_dma_tx_callback;
|
||||
desc_tx->callback_param = (void *)spi_imx;
|
||||
|
@ -941,7 +941,7 @@ static int spi_imx_dma_transfer(struct spi_imx_data *spi_imx,
|
|||
rx->sgl, rx->nents, DMA_DEV_TO_MEM,
|
||||
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
||||
if (!desc_rx)
|
||||
goto no_dma;
|
||||
goto rx_nodma;
|
||||
|
||||
desc_rx->callback = spi_imx_dma_rx_callback;
|
||||
desc_rx->callback_param = (void *)spi_imx;
|
||||
|
@ -1008,7 +1008,9 @@ static int spi_imx_dma_transfer(struct spi_imx_data *spi_imx,
|
|||
|
||||
return ret;
|
||||
|
||||
no_dma:
|
||||
rx_nodma:
|
||||
dmaengine_terminate_all(master->dma_tx);
|
||||
tx_nodma:
|
||||
pr_warn_once("%s %s: DMA not available, falling back to PIO\n",
|
||||
dev_driver_string(&master->dev),
|
||||
dev_name(&master->dev));
|
||||
|
|
|
@ -761,6 +761,7 @@ static int spi_test_run_iter(struct spi_device *spi,
|
|||
test.iterate_transfer_mask = 1;
|
||||
|
||||
/* count number of transfers with tx/rx_buf != NULL */
|
||||
rx_count = tx_count = 0;
|
||||
for (i = 0; i < test.transfer_count; i++) {
|
||||
if (test.transfers[i].tx_buf)
|
||||
tx_count++;
|
||||
|
|
|
@ -1490,6 +1490,8 @@ static int omap2_mcspi_probe(struct platform_device *pdev)
|
|||
return status;
|
||||
|
||||
disable_pm:
|
||||
pm_runtime_dont_use_autosuspend(&pdev->dev);
|
||||
pm_runtime_put_sync(&pdev->dev);
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
free_master:
|
||||
spi_master_put(master);
|
||||
|
@ -1501,6 +1503,7 @@ static int omap2_mcspi_remove(struct platform_device *pdev)
|
|||
struct spi_master *master = platform_get_drvdata(pdev);
|
||||
struct omap2_mcspi *mcspi = spi_master_get_devdata(master);
|
||||
|
||||
pm_runtime_dont_use_autosuspend(mcspi->dev);
|
||||
pm_runtime_put_sync(mcspi->dev);
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user