From 694c5b87943d4f2e913f78b040c0cbbc1682087b Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Mon, 5 Oct 2015 09:47:37 +0200 Subject: Revert "spi: i.MX: optimize transfers for ECSPI v2.3" This does not work on the Efika MX Smartbook which uses SPI to connect the MC13892. Needs some rework. This reverts commit 746a5530bee37c8d2ffc75609447641b3f3cb55b. --- drivers/spi/imx_spi.c | 73 +-------------------------------------------------- 1 file changed, 1 insertion(+), 72 deletions(-) (limited to 'drivers/spi') diff --git a/drivers/spi/imx_spi.c b/drivers/spi/imx_spi.c index 80dfc7819a..9a3f05cdec 100644 --- a/drivers/spi/imx_spi.c +++ b/drivers/spi/imx_spi.c @@ -380,77 +380,6 @@ static void imx_spi_do_transfer(struct spi_device *spi) } } -static int cspi_2_3_xchg_burst(struct spi_device *spi) -{ - struct imx_spi *imx = container_of(spi->master, struct imx_spi, master); - int now, txlen, rxlen; - u32 ctrl; - void __iomem *base = imx->regs; - - now = min(imx->xfer_len, 512); - now >>= 2; - - if (!now) - return 0; - - txlen = rxlen = now; - - ctrl = readl(base + CSPI_2_3_CTRL); - ctrl &= ~(0xfff << CSPI_2_3_CTRL_BL_OFFSET); - ctrl |= ((txlen * 32) - 1) << CSPI_2_3_CTRL_BL_OFFSET; - ctrl |= 1 << 3; - writel(ctrl, base + CSPI_2_3_CTRL); - - while (txlen || rxlen) { - u32 status = readl(base + CSPI_2_3_STAT); - - if (txlen && !(status & CSPI_2_3_STAT_TF)) { - if (imx->tx_buf) { - u32 data = swab32(*(u32 *)imx->tx_buf); - writel(data, base + CSPI_2_3_TXDATA); - imx->tx_buf += sizeof(u32); - } else { - writel(0, base + CSPI_2_3_TXDATA); - } - txlen--; - } - - if (rxlen && (status & CSPI_2_3_STAT_RR)) { - u32 data = readl(base + CSPI_2_3_RXDATA); - - if (imx->rx_buf) { - *(u32 *)imx->rx_buf = swab32(data); - imx->rx_buf += sizeof(u32); - } - - rxlen--; - } - } - - imx->xfer_len -= now * 4; - - return now; -} - -static void cspi_2_3_do_transfer(struct spi_device *spi) -{ - struct imx_spi *imx = container_of(spi->master, struct imx_spi, master); - u32 ctrl; - - if (imx->bits_per_word == 8 || imx->bits_per_word == 16 || imx->bits_per_word == 32) - while (cspi_2_3_xchg_burst(spi) > 0); - - if (!imx->xfer_len) - return; - - ctrl = readl(imx->regs + CSPI_2_3_CTRL); - ctrl &= ~(0xfff << CSPI_2_3_CTRL_BL_OFFSET); - ctrl |= (spi->bits_per_word - 1) << CSPI_2_3_CTRL_BL_OFFSET; - writel(ctrl, imx->regs + CSPI_2_3_CTRL); - - imx_spi_do_transfer(spi); -} - static int imx_spi_transfer(struct spi_device *spi, struct spi_message *mesg) { struct imx_spi *imx = container_of(spi->master, struct imx_spi, master); @@ -508,7 +437,7 @@ static __maybe_unused struct spi_imx_devtype_data spi_imx_devtype_data_0_7 = { static __maybe_unused struct spi_imx_devtype_data spi_imx_devtype_data_2_3 = { .chipselect = cspi_2_3_chipselect, - .do_transfer = cspi_2_3_do_transfer, + .do_transfer = imx_spi_do_transfer, .xchg_single = cspi_2_3_xchg_single, }; -- cgit v1.2.3