summaryrefslogtreecommitdiffstats
path: root/drivers/spi
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2015-10-05 09:47:37 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2015-10-05 09:47:37 +0200
commit694c5b87943d4f2e913f78b040c0cbbc1682087b (patch)
treee37401b8ac6a82fb6790bba3e721fce91a6f4f4e /drivers/spi
parent4a1379886fd508db95e337f230fe3c1ec5c110d8 (diff)
downloadbarebox-694c5b87943d4f2e913f78b040c0cbbc1682087b.tar.gz
barebox-694c5b87943d4f2e913f78b040c0cbbc1682087b.tar.xz
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.
Diffstat (limited to 'drivers/spi')
-rw-r--r--drivers/spi/imx_spi.c73
1 files changed, 1 insertions, 72 deletions
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,
};