linux-spi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V4] spi: s3c64xx: Enable Word transfer
@ 2013-10-18  5:32 Rajeshwari S Shinde
       [not found] ` <1382074356-28430-1-git-send-email-rajeshwari.s-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
  0 siblings, 1 reply; 19+ messages in thread
From: Rajeshwari S Shinde @ 2013-10-18  5:32 UTC (permalink / raw)
  To: linux-samsung-soc
  Cc: linux-spi, sjg, alim.akhtar, dianders, t.figa, broonie, broonie

This patch enables word transfer for s3c64xx spi driver.
User can set bits_per_word to 32 or 16 or 8, before calling
spi_setup, which would enable the corresponding transfer mode.

Change-Id: Ib04f9851a3ea891d2bfa527f2100acd314fe1c98
Signed-off-by: Rajeshwari S Shinde <rajeshwari.s@samsung.com>
---
Changes in V2
        - Reduced the call for s3c64xx_spi_config.
Changes in V3:
	- Corrected the coding style nits.
Chnages in V4:
	- Add switch case to support both 16 and 32 bit transfer.
	- Corrected checkpatch error.
 drivers/spi/spi-s3c64xx.c | 30 +++++++++++++++++++++++-------
 1 file changed, 23 insertions(+), 7 deletions(-)

diff --git a/drivers/spi/spi-s3c64xx.c b/drivers/spi/spi-s3c64xx.c
index 512b889..1620b74 100644
--- a/drivers/spi/spi-s3c64xx.c
+++ b/drivers/spi/spi-s3c64xx.c
@@ -491,6 +491,7 @@ static void enable_datapath(struct s3c64xx_spi_driver_data *sdd,
 {
 	void __iomem *regs = sdd->regs;
 	u32 modecfg, chcfg;
+	u32 swapcfg = 0;
 
 	modecfg = readl(regs + S3C64XX_SPI_MODE_CFG);
 	modecfg &= ~(S3C64XX_SPI_MODE_TXDMA_ON | S3C64XX_SPI_MODE_RXDMA_ON);
@@ -498,6 +499,22 @@ static void enable_datapath(struct s3c64xx_spi_driver_data *sdd,
 	chcfg = readl(regs + S3C64XX_SPI_CH_CFG);
 	chcfg &= ~S3C64XX_SPI_CH_TXCH_ON;
 
+	switch (sdd->cur_bpw) {
+	case 32:
+		swapcfg = S3C64XX_SPI_SWAP_TX_HALF_WORD |
+			S3C64XX_SPI_SWAP_RX_HALF_WORD;
+	case 16:
+		swapcfg |= S3C64XX_SPI_SWAP_TX_EN |
+			S3C64XX_SPI_SWAP_RX_EN |
+			S3C64XX_SPI_SWAP_RX_BYTE |
+			S3C64XX_SPI_SWAP_TX_BYTE;
+		writel(swapcfg, regs + S3C64XX_SPI_SWAP_CFG);
+		break;
+	default:
+		writel(0, regs + S3C64XX_SPI_SWAP_CFG);
+		break;
+	}
+
 	if (dma_mode) {
 		chcfg &= ~S3C64XX_SPI_CH_RXCH_ON;
 	} else {
@@ -905,13 +922,12 @@ static int s3c64xx_spi_transfer_one_message(struct spi_master *master,
 		bpw = xfer->bits_per_word;
 		speed = xfer->speed_hz ? : spi->max_speed_hz;
 
-		if (xfer->len % (bpw / 8)) {
-			dev_err(&spi->dev,
-				"Xfer length(%u) not a multiple of word size(%u)\n",
-				xfer->len, bpw / 8);
-			status = -EIO;
-			goto out;
-		}
+		/*
+		 * Enable byte transfer if transfer length not a multiple of
+		 * word size
+		 */
+		if (xfer->len % (bpw / 8))
+			bpw = 8;
 
 		if (bpw != sdd->cur_bpw || speed != sdd->cur_speed) {
 			sdd->cur_bpw = bpw;
-- 
1.7.12.4

^ permalink raw reply related	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2013-11-13  8:28 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-10-18  5:32 [PATCH V4] spi: s3c64xx: Enable Word transfer Rajeshwari S Shinde
     [not found] ` <1382074356-28430-1-git-send-email-rajeshwari.s-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2013-10-19 16:25   ` Mark Brown
     [not found]     ` <CAPnjgZ1A335KstnpTRwpxEbBArtqh1sYSPQJBw6LX5zUeptpfA@mail.gmail.com>
2013-10-19 20:04       ` Mark Brown
2013-10-29 10:59     ` Rajeshwari Birje
     [not found]       ` <CAPs=JDeOqkJT32quBH1tF9FtFUOt=CHP7m6ZqzhfASM2uPj-dw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-10-29 11:29         ` Rajeshwari Birje
     [not found]           ` <CAPs=JDdzvnM5BzgRLhLsJrdwcVSwxd6x8_kFz0EvB=OjFfVszw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-10-29 16:39             ` Mark Brown
     [not found]               ` <20131029163926.GA6776-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2013-10-30  6:22                 ` Rajeshwari Birje
     [not found]                   ` <CAPs=JDeDbevjOtMH0y+9aVSbNSV4zmEQxWygtB-f69XzooSinQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-10-30 17:00                     ` Mark Brown
2013-10-30 17:06                       ` Tomasz Figa
2013-10-31 10:47                         ` Rajeshwari Birje
2013-10-31 12:37                           ` Tomasz Figa
2013-11-06  4:53                             ` Rajeshwari Birje
2013-11-06  8:21                               ` Mark Brown
     [not found]                                 ` <20131106082141.GA11602-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2013-11-07  9:22                                   ` Rajeshwari Birje
     [not found]                                     ` <CAPs=JDctq1yRbuwnFH40dnQJJHF0C_D1p3iVokSPusPXA27Qeg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-11-07  9:39                                       ` Tomasz Figa
2013-11-07  9:59                                         ` Lukasz Czerwinski
2013-11-08 11:05                                         ` Mark Brown
2013-11-10 17:26                                           ` Tomasz Figa
2013-11-13  8:28                                             ` Andrzej Hajda

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).