From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752586Ab2LDH7v (ORCPT ); Tue, 4 Dec 2012 02:59:51 -0500 Received: from newsmtp5.atmel.com ([204.2.163.5]:29738 "EHLO sjogate2.atmel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751204Ab2LDH7t (ORCPT ); Tue, 4 Dec 2012 02:59:49 -0500 From: Wenyou Yang To: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org, nicolas.ferre@atmel.com, plagnioj@jcrosoft.com, richard.genoud@gmail.com, JM.Lin@atmel.com, wenyou.yang@atmel.com, grant.likely@secretlab.ca, spi-devel-general@lists.sourceforge.net Subject: [v2 PATCH 11/14] spi/atmel_spi: correct 16 bits transfer with DMA Date: Tue, 4 Dec 2012 15:53:57 +0800 Message-Id: <1354607640-13229-12-git-send-email-wenyou.yang@atmel.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1354607640-13229-1-git-send-email-wenyou.yang@atmel.com> References: <1354607640-13229-1-git-send-email-wenyou.yang@atmel.com> X-OriginalArrivalTime: 04 Dec 2012 07:59:27.0796 (UTC) FILETIME=[488C4F40:01CDD1F5] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Richard Genoud Signed-off-by: Richard Genoud Cc: grant.likely@secretlab.ca Cc: spi-devel-general@lists.sourceforge.net --- drivers/spi/spi-atmel.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/drivers/spi/spi-atmel.c b/drivers/spi/spi-atmel.c index 9616fab..61452a5 100644 --- a/drivers/spi/spi-atmel.c +++ b/drivers/spi/spi-atmel.c @@ -439,12 +439,18 @@ static inline int atmel_spi_xfer_can_be_chained(struct spi_transfer *xfer) } static int atmel_spi_dma_slave_config(struct atmel_spi *as, - struct dma_slave_config *slave_config) + struct dma_slave_config *slave_config, + u8 bits_per_word) { int err = 0; - slave_config->dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE; - slave_config->src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE; + if (bits_per_word > 8) { + slave_config->dst_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES; + slave_config->src_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES; + } else { + slave_config->dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE; + slave_config->src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE; + } slave_config->dst_addr = (dma_addr_t)as->phybase + SPI_TDR; slave_config->src_addr = (dma_addr_t)as->phybase + SPI_RDR; @@ -506,7 +512,7 @@ static int __devinit atmel_spi_configure_dma(struct atmel_spi *as) goto error; } - err = atmel_spi_dma_slave_config(as, &slave_config); + err = atmel_spi_dma_slave_config(as, &slave_config, 8); if (err) goto error; @@ -641,10 +647,9 @@ static int atmel_spi_next_xfer_dma_submit(struct spi_master *master, *plen = len; - if (atmel_spi_dma_slave_config(as, &slave_config)) + if (atmel_spi_dma_slave_config(as, &slave_config, 8)) goto err_exit; - /* Send both scatterlists */ rxdesc = rxchan->device->device_prep_slave_sg(rxchan, &as->dma.sgrx, -- 1.7.9.5