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);
|