Unverified Commit 5b33b756 authored by Mark Brown's avatar Mark Brown
Browse files

spi: imx: Three fixes for the i.MX SPI driver

John Madieu <john.madieu@gmail.com> says:

This series independent fixes found in the i.MX SPI driver.

These are:

1/3 fixes a precedence bug in spi_imx_dma_max_wml_find() that makes
    the watermark-finding logic effectively dead code. The function
    currently always returns wml = 1 because of how the !-operator
    binds to the modulo expression.

2/3 fixes a missing return on the package-1 failure path in
    spi_imx_dma_data_prepare(). The error path frees the
    dma_data array and the package-0 buffers, then falls through
    to "return 0" - the caller proceeds with a freed pointer.

3/3 makes spi_imx_setupxfer() propagate the prepare_transfer()
    return value. Currently a -EINVAL from mx51_ecspi_prepare_transfer
    (e.g. on a word_delay overflow) is silently swallowed and the
    transfer proceeds with a partially-configured controller.
parents 7fd2df20 894e04b7
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -1382,9 +1382,7 @@ static int spi_imx_setupxfer(struct spi_device *spi,
		spi_imx->target_burst = t->len;
	}

	spi_imx->devtype_data->prepare_transfer(spi_imx, spi, t);

	return 0;
	return spi_imx->devtype_data->prepare_transfer(spi_imx, spi, t);
}

static void spi_imx_sdma_exit(struct spi_imx_data *spi_imx)
@@ -1709,6 +1707,7 @@ static int spi_imx_dma_data_prepare(struct spi_imx_data *spi_imx,
			kfree(spi_imx->dma_data[0].dma_tx_buf);
			kfree(spi_imx->dma_data[0].dma_rx_buf);
			kfree(spi_imx->dma_data);
			return ret;
		}
	}

@@ -1836,7 +1835,7 @@ static void spi_imx_dma_max_wml_find(struct spi_imx_data *spi_imx,
	unsigned int i;

	for (i = spi_imx->devtype_data->fifo_size / 2; i > 0; i--) {
		if (!dma_data->dma_len % (i * bytes_per_word))
		if (!(dma_data->dma_len % (i * bytes_per_word)))
			break;
	}
	/* Use 1 as wml in case no available burst length got */