summaryrefslogtreecommitdiff
path: root/packages/linux/linux-2.6.18/atmel_spi-send-zeroes-when-tx_buf-is-not-set.patch
blob: 0cf703d3df9e0374fb293cb978cc44c1c88146de (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
From e9bce56d6d8913505049cde45d800bb69943f166 Mon Sep 17 00:00:00 2001
From: Nicolas Ferre <nicolas.ferre@rfo.atmel.com>
Date: Tue, 16 Jan 2007 15:15:36 +0100
Subject: [ATMEL SPI] Send zeroes when tx_buf is not set

send zeros when tx_buf is not set (according to the new spi
specification by D.Brownell) cf.
  http://lkml.org/lkml/2006/12/22/171
  http://kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=4b1badf5d9ddfc46ad075ca5bfc465972c85cc7c

Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
---
 drivers/spi/atmel_spi.c |   21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

Index: linux-2.6.18-avr32/drivers/spi/atmel_spi.c
===================================================================
--- linux-2.6.18-avr32.orig/drivers/spi/atmel_spi.c	2007-01-16 18:20:06.000000000 +0100
+++ linux-2.6.18-avr32/drivers/spi/atmel_spi.c	2007-01-16 18:20:57.000000000 +0100
@@ -120,18 +120,17 @@ static void atmel_spi_next_xfer(struct s
 			len = BUFFER_SIZE;
 	}
 	if (tx_dma == INVALID_DMA_ADDRESS) {
-		if (xfer->tx_buf) {
-			tx_dma = as->buffer_dma;
-			if (len > BUFFER_SIZE)
-				len = BUFFER_SIZE;
+		tx_dma = as->buffer_dma;
+		if (len > BUFFER_SIZE)
+			len = BUFFER_SIZE;
+		if (xfer->tx_buf)
 			memcpy(as->buffer, xfer->tx_buf, len);
-			dma_sync_single_for_device(&as->pdev->dev,
-						   as->buffer_dma, len,
-						   DMA_TO_DEVICE);
-		} else {
-			/* Send undefined data; rx_dma is handy */
-			tx_dma = rx_dma;
-		}
+		else
+			/* no tx data: send zeros */
+			memset(as->buffer, 0, len);
+		dma_sync_single_for_device(&as->pdev->dev,
+					   as->buffer_dma, len,
+					   DMA_TO_DEVICE);
 	}
 
 	spi_writel(as, RPR, rx_dma);