[spidev] tune the spi bitbanging driver for interaction with an AVR slave
This commit is contained in:
parent
d3dd4366da
commit
f033d465ad
|
@ -0,0 +1,59 @@
|
|||
--- a/drivers/spi/spi_gpio.c 2010-12-14 01:02:26.673204002 +0100
|
||||
+++ b/drivers/spi/spi_gpio.c 2011-01-15 00:26:44.437652996 +0100
|
||||
@@ -158,7 +158,9 @@
|
||||
static u32 spi_gpio_txrx_word_mode0(struct spi_device *spi,
|
||||
unsigned nsecs, u32 word, u8 bits)
|
||||
{
|
||||
- return bitbang_txrx_be_cpha0(spi, nsecs, 0, word, bits);
|
||||
+ /* shift out a byte in 165us, then pause for 335us */
|
||||
+ ndelay(335);
|
||||
+ return bitbang_txrx_be_cpha0(spi, 5, 0, word, 8);
|
||||
}
|
||||
|
||||
static u32 spi_gpio_txrx_word_mode1(struct spi_device *spi,
|
||||
--- a/drivers/spi/spi_bitbang.c 2009-12-04 07:00:07.000000000 +0100
|
||||
+++ b/drivers/spi/spi_bitbang.c 2011-01-15 00:45:44.257653000 +0100
|
||||
@@ -75,13 +75,28 @@
|
||||
while (likely(count > 0)) {
|
||||
u8 word = 0;
|
||||
|
||||
- if (tx)
|
||||
+ if (unlikely(tx))
|
||||
word = *tx++;
|
||||
word = txrx_word(spi, ns, word, bits);
|
||||
- if (rx)
|
||||
+ if (likely(rx)) {
|
||||
+ /* If we receive a 0x00, fetch one extra byte to sync
|
||||
+ the state machine, then break out of the while loop. */
|
||||
+ if (unlikely(!word)) {
|
||||
+ txrx_word(spi, ns, 0x00, bits); /* discard */
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
*rx++ = word;
|
||||
+ }
|
||||
count -= 1;
|
||||
}
|
||||
+
|
||||
+ if (unlikely(tx)) {
|
||||
+ /* Signal the end of tx by sending two 0x00's. */
|
||||
+ txrx_word(spi, ns, 0x00, bits);
|
||||
+ txrx_word(spi, ns, 0x00, bits);
|
||||
+ }
|
||||
+
|
||||
return t->len - count;
|
||||
}
|
||||
|
||||
@@ -346,12 +361,6 @@
|
||||
}
|
||||
if (status > 0)
|
||||
m->actual_length += status;
|
||||
- if (status != t->len) {
|
||||
- /* always report some kind of error */
|
||||
- if (status >= 0)
|
||||
- status = -EREMOTEIO;
|
||||
- break;
|
||||
- }
|
||||
status = 0;
|
||||
|
||||
/* protocol tweaks before next transfer */
|
Loading…
Reference in New Issue