All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wenyou Yang <wenyou.yang-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org>
To: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Cc: Richard Genoud
	<richard.genoud-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	JM.Lin-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org,
	nicolas.ferre-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org,
	wenyou.yang-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org,
	spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Subject: [PATCH 09/17] spi/atmel_spi: correct 16 bits transfers using PIO
Date: Mon, 12 Nov 2012 16:52:29 +0800	[thread overview]
Message-ID: <1352710357-3265-10-git-send-email-wenyou.yang@atmel.com> (raw)
In-Reply-To: <1352710357-3265-1-git-send-email-wenyou.yang-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org>

From: Richard Genoud <richard.genoud-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

Signed-off-by: Richard Genoud <richard.genoud-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org
Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
---
 drivers/spi/spi-atmel.c |   46 +++++++++++++++++++++++++++++++++++++---------
 1 file changed, 37 insertions(+), 9 deletions(-)

diff --git a/drivers/spi/spi-atmel.c b/drivers/spi/spi-atmel.c
index 00e729b..0007a53 100644
--- a/drivers/spi/spi-atmel.c
+++ b/drivers/spi/spi-atmel.c
@@ -518,13 +518,17 @@ static void atmel_spi_next_xfer_pio(struct spi_master *master,
 	}
 
 	if (xfer->tx_buf)
-		spi_writel(as, TDR, *(u8 *)(xfer->tx_buf));
+		if (xfer->bits_per_word > 8)
+			spi_writel(as, TDR, *(u16 *)(xfer->tx_buf));
+		else
+			spi_writel(as, TDR, *(u8 *)(xfer->tx_buf));
 	else
 		spi_writel(as, TDR, 0);
 
 	dev_dbg(master->dev.parent,
-		"  start pio xfer %p: len %u tx %p rx %p\n",
-		xfer, xfer->len, xfer->tx_buf, xfer->rx_buf);
+		"  start pio xfer %p: len %u tx %p rx %p bitpw %d\n",
+		xfer, xfer->len, xfer->tx_buf, xfer->rx_buf,
+		xfer->bits_per_word);
 
 	/* Enable relevant interrupts */
 	spi_writel(as, IER, SPI_BIT(RDRF) | SPI_BIT(OVRES));
@@ -918,21 +922,39 @@ atmel_spi_pump_pio_data(struct atmel_spi *as, struct spi_transfer *xfer)
 {
 	u8		*txp;
 	u8		*rxp;
+	u16		*txp16;
+	u16		*rxp16;
 	unsigned long	xfer_pos = xfer->len - as->current_remaining_bytes;
 
 	if (xfer->rx_buf) {
-		rxp = ((u8 *)xfer->rx_buf) + xfer_pos;
-		*rxp = spi_readl(as, RDR);
+		if (xfer->bits_per_word > 8) {
+			rxp16 = (u16 *)(((u8 *)xfer->rx_buf) + xfer_pos);
+			*rxp16 = spi_readl(as, RDR);
+		} else {
+			rxp = ((u8 *)xfer->rx_buf) + xfer_pos;
+			*rxp = spi_readl(as, RDR);
+		}
 	} else {
 		spi_readl(as, RDR);
 	}
-
-	as->current_remaining_bytes--;
+	if (xfer->bits_per_word > 8) {
+		as->current_remaining_bytes -= 2;
+		if (as->current_remaining_bytes < 0)
+			as->current_remaining_bytes = 0;
+	} else {
+		as->current_remaining_bytes--;
+	}
 
 	if (as->current_remaining_bytes) {
 		if (xfer->tx_buf) {
-			txp = ((u8 *)xfer->tx_buf) + xfer_pos + 1;
-			spi_writel(as, TDR, *txp);
+			if (xfer->bits_per_word > 8) {
+				txp16 = (u16 *)(((u8 *)xfer->tx_buf)
+							+ xfer_pos + 2);
+				spi_writel(as, TDR, *txp16);
+			} else {
+				txp = ((u8 *)xfer->tx_buf) + xfer_pos + 1;
+				spi_writel(as, TDR, *txp);
+			}
 		} else {
 			spi_writel(as, TDR, 0);
 		}
@@ -1345,6 +1367,12 @@ static int atmel_spi_transfer(struct spi_device *spi, struct spi_message *msg)
 				return -ENOPROTOOPT;
 			}
 		}
+		if (xfer->bits_per_word > 8) {
+			if (xfer->len % 2) {
+				dev_dbg(&spi->dev, "buffer len should be 16 bits aligned\n");
+				return -EINVAL;
+			}
+		}
 
 		/* FIXME implement these protocol options!! */
 		if (xfer->speed_hz) {
-- 
1.7.9.5


------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_nov

WARNING: multiple messages have this Message-ID (diff)
From: wenyou.yang@atmel.com (Wenyou Yang)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 09/17] spi/atmel_spi: correct 16 bits transfers using PIO
Date: Mon, 12 Nov 2012 16:52:29 +0800	[thread overview]
Message-ID: <1352710357-3265-10-git-send-email-wenyou.yang@atmel.com> (raw)
In-Reply-To: <1352710357-3265-1-git-send-email-wenyou.yang@atmel.com>

From: Richard Genoud <richard.genoud@gmail.com>

Signed-off-by: Richard Genoud <richard.genoud@gmail.com>
Cc: grant.likely at secretlab.ca
Cc: spi-devel-general at lists.sourceforge.net
---
 drivers/spi/spi-atmel.c |   46 +++++++++++++++++++++++++++++++++++++---------
 1 file changed, 37 insertions(+), 9 deletions(-)

diff --git a/drivers/spi/spi-atmel.c b/drivers/spi/spi-atmel.c
index 00e729b..0007a53 100644
--- a/drivers/spi/spi-atmel.c
+++ b/drivers/spi/spi-atmel.c
@@ -518,13 +518,17 @@ static void atmel_spi_next_xfer_pio(struct spi_master *master,
 	}
 
 	if (xfer->tx_buf)
-		spi_writel(as, TDR, *(u8 *)(xfer->tx_buf));
+		if (xfer->bits_per_word > 8)
+			spi_writel(as, TDR, *(u16 *)(xfer->tx_buf));
+		else
+			spi_writel(as, TDR, *(u8 *)(xfer->tx_buf));
 	else
 		spi_writel(as, TDR, 0);
 
 	dev_dbg(master->dev.parent,
-		"  start pio xfer %p: len %u tx %p rx %p\n",
-		xfer, xfer->len, xfer->tx_buf, xfer->rx_buf);
+		"  start pio xfer %p: len %u tx %p rx %p bitpw %d\n",
+		xfer, xfer->len, xfer->tx_buf, xfer->rx_buf,
+		xfer->bits_per_word);
 
 	/* Enable relevant interrupts */
 	spi_writel(as, IER, SPI_BIT(RDRF) | SPI_BIT(OVRES));
@@ -918,21 +922,39 @@ atmel_spi_pump_pio_data(struct atmel_spi *as, struct spi_transfer *xfer)
 {
 	u8		*txp;
 	u8		*rxp;
+	u16		*txp16;
+	u16		*rxp16;
 	unsigned long	xfer_pos = xfer->len - as->current_remaining_bytes;
 
 	if (xfer->rx_buf) {
-		rxp = ((u8 *)xfer->rx_buf) + xfer_pos;
-		*rxp = spi_readl(as, RDR);
+		if (xfer->bits_per_word > 8) {
+			rxp16 = (u16 *)(((u8 *)xfer->rx_buf) + xfer_pos);
+			*rxp16 = spi_readl(as, RDR);
+		} else {
+			rxp = ((u8 *)xfer->rx_buf) + xfer_pos;
+			*rxp = spi_readl(as, RDR);
+		}
 	} else {
 		spi_readl(as, RDR);
 	}
-
-	as->current_remaining_bytes--;
+	if (xfer->bits_per_word > 8) {
+		as->current_remaining_bytes -= 2;
+		if (as->current_remaining_bytes < 0)
+			as->current_remaining_bytes = 0;
+	} else {
+		as->current_remaining_bytes--;
+	}
 
 	if (as->current_remaining_bytes) {
 		if (xfer->tx_buf) {
-			txp = ((u8 *)xfer->tx_buf) + xfer_pos + 1;
-			spi_writel(as, TDR, *txp);
+			if (xfer->bits_per_word > 8) {
+				txp16 = (u16 *)(((u8 *)xfer->tx_buf)
+							+ xfer_pos + 2);
+				spi_writel(as, TDR, *txp16);
+			} else {
+				txp = ((u8 *)xfer->tx_buf) + xfer_pos + 1;
+				spi_writel(as, TDR, *txp);
+			}
 		} else {
 			spi_writel(as, TDR, 0);
 		}
@@ -1345,6 +1367,12 @@ static int atmel_spi_transfer(struct spi_device *spi, struct spi_message *msg)
 				return -ENOPROTOOPT;
 			}
 		}
+		if (xfer->bits_per_word > 8) {
+			if (xfer->len % 2) {
+				dev_dbg(&spi->dev, "buffer len should be 16 bits aligned\n");
+				return -EINVAL;
+			}
+		}
 
 		/* FIXME implement these protocol options!! */
 		if (xfer->speed_hz) {
-- 
1.7.9.5

  parent reply	other threads:[~2012-11-12  8:52 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-12  8:52 [PATCH 00/17] atmel SoC SPI controller with dmaengine and DT Wenyou Yang
2012-11-12  8:52 ` [PATCH 01/17] of: add dma-mask binding Wenyou Yang
2012-11-12  8:52   ` Wenyou Yang
     [not found]   ` <1352710357-3265-2-git-send-email-wenyou.yang-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org>
2012-11-14  3:55     ` Rob Herring
2012-11-14  3:55       ` Rob Herring
     [not found]       ` <50A3164C.3070301-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2012-11-14  6:00         ` Jean-Christophe PLAGNIOL-VILLARD
2012-11-14  6:00           ` Jean-Christophe PLAGNIOL-VILLARD
     [not found]           ` <20121114060058.GM4576-RQcB7r2h9QmfDR2tN2SG5Ni2O/JbrIOy@public.gmane.org>
2012-11-14 20:56             ` Rob Herring
2012-11-14 20:56               ` Rob Herring
     [not found]               ` <50A4056E.9090700-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2012-11-14 21:05                 ` Russell King - ARM Linux
2012-11-14 21:05                   ` Russell King - ARM Linux
     [not found] ` <1352710357-3265-1-git-send-email-wenyou.yang-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org>
2012-11-12  8:52   ` [PATCH 02/17] of_spi: add generic binding support to specify cs gpio Wenyou Yang
2012-11-12  8:52     ` Wenyou Yang
2012-11-12  8:52   ` [PATCH 03/17] spi/atmel_spi: add physical base address Wenyou Yang
2012-11-12  8:52     ` Wenyou Yang
2012-11-12  8:52   ` [PATCH 04/17] spi/atmel_spi: call unmapping on transfers buffers Wenyou Yang
2012-11-12  8:52     ` Wenyou Yang
2012-11-12  8:52   ` [PATCH 05/17] spi/atmel_spi: status information passed through controller data Wenyou Yang
2012-11-12  8:52     ` Wenyou Yang
2012-11-12  8:52   ` [PATCH 06/17] spi/atmel_spi: add flag to controller data for lock operations Wenyou Yang
2012-11-12  8:52     ` Wenyou Yang
     [not found]     ` <1352710357-3265-7-git-send-email-wenyou.yang-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org>
2012-11-15  9:36       ` Shubhrajyoti Datta
2012-11-15  9:36         ` Shubhrajyoti Datta
2012-11-12  8:52   ` [PATCH 07/17] spi/atmel_spi: add dmaengine support Wenyou Yang
2012-11-12  8:52     ` Wenyou Yang
2012-11-12  8:52   ` [PATCH 08/17] spi/atmel_spi: Fix spi-atmel driver to adapt to slave_config changes Wenyou Yang
2012-11-12  8:52     ` Wenyou Yang
2012-11-12  8:52   ` Wenyou Yang [this message]
2012-11-12  8:52     ` [PATCH 09/17] spi/atmel_spi: correct 16 bits transfers using PIO Wenyou Yang
2012-11-12  8:52   ` [PATCH 10/17] spi/atmel_spi: correct 16 bits transfer with DMA Wenyou Yang
2012-11-12  8:52     ` Wenyou Yang
2012-11-12  8:52   ` [PATCH 12/17] spi/atmel_spi: add version propety as the spi data Wenyou Yang
2012-11-12  8:52     ` Wenyou Yang
2012-11-12  8:52   ` [PATCH 13/17] spi/atmel_spi: add function to read the spi data from the dts Wenyou Yang
2012-11-12  8:52     ` Wenyou Yang
2012-11-12  8:52 ` [PATCH 11/17] spi/atmel_spi: add DT support Wenyou Yang
2012-11-12  8:52   ` Wenyou Yang
2012-11-12  8:52 ` [PATCH 14/17] ARM: at91: add clocks for spi DT entries Wenyou Yang
2012-11-12  8:52 ` [PATCH 15/17] ARM: dts: add spi nodes for atmel SoC Wenyou Yang
2012-11-12  8:52 ` [PATCH 16/17] ARM: dts: add spi nodes for atmel boards Wenyou Yang
2012-11-12  8:52 ` [PATCH 17/17] mtd: m25p80: change the m25p80_read to reading page to page Wenyou Yang
2012-11-12  8:52   ` Wenyou Yang
2012-11-12  9:12   ` Baruch Siach
2012-11-12  9:12     ` Baruch Siach
2012-11-16  6:45     ` Yang, Wenyou
2012-11-16  6:45       ` Yang, Wenyou

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1352710357-3265-10-git-send-email-wenyou.yang@atmel.com \
    --to=wenyou.yang-aife0yeh4naavxtiumwx3w@public.gmane.org \
    --cc=JM.Lin-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org \
    --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=nicolas.ferre-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org \
    --cc=richard.genoud-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.