summaryrefslogtreecommitdiffstats
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
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.
-rw-r--r--drivers/spi/imx_spi.c73
-rw-r--r--include/spi/imx-spi.h3
2 files changed, 2 insertions, 74 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,
};
diff --git a/include/spi/imx-spi.h b/include/spi/imx-spi.h
index 221c66502f..5c89634770 100644
--- a/include/spi/imx-spi.h
+++ b/include/spi/imx-spi.h
@@ -79,7 +79,6 @@
#define CSPI_2_3_INT_RREN (1 << 3)
#define CSPI_2_3_STAT 0x18
-#define CSPI_2_3_STAT_TF (1 << 2)
-#define CSPI_2_3_STAT_RR (1 << 3)
+#define CSPI_2_3_STAT_RR (1 << 3)
#endif /* __SPI_IMX_SPI_H */