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
next prev 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: linkBe 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.