diff options
author | Ned Forrester <nforrester@whoi.edu> | 2008-02-23 18:23:40 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-23 20:12:14 -0500 |
commit | b97c74bddce4e2c6fef6b3b58910b4fd9eb7f3b8 (patch) | |
tree | 36e48f2687ba0c54350f740da796f321c7d2500c /include/asm-arm/arch-pxa | |
parent | f6febccd7f86fbe94858a4a32d9384cc014c9f40 (diff) |
spi: pxa2xx_spi clock polarity fix
Fixes a sequencing bug in spi driver pxa2xx_spi.c in which the chip select
for a transfer may be asserted before the clock polarity is set on the
interface. As a result of this bug, the clock signal may have the wrong
polarity at transfer start, so it may need to make an extra half transition
before the intended clock/data signals begin. (This probably means all
transfers are one bit out of sequence.)
This only occurs on the first transfer following a change in clock polarity
in systems using more than one more than one such polarity. The fix
assures that the clock mode is properly set before asserting chip select.
This bug was introduced in a patch merged on 2006/12/10, kernel 2.6.20.
The patch defines an additional bit in: include/asm-arm/arch-pxa/regs-ssp.h
for 2.6.25 and newer kernels but this addition must be made in:
include/asm-arm/arch-pxa/pxa-regs.h for kernels between 2.6.20 and 2.6.24,
inclusive
Signed-off-by: Ned Forrester <nforrester@whoi.edu>
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Cc: Russell King <rmk@arm.linux.org.uk>
Cc: <stable@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/asm-arm/arch-pxa')
-rw-r--r-- | include/asm-arm/arch-pxa/regs-ssp.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/asm-arm/arch-pxa/regs-ssp.h b/include/asm-arm/arch-pxa/regs-ssp.h index 991cb688db75..0255328c3c18 100644 --- a/include/asm-arm/arch-pxa/regs-ssp.h +++ b/include/asm-arm/arch-pxa/regs-ssp.h | |||
@@ -85,6 +85,7 @@ | |||
85 | #define SSCR1_RSRE (1 << 20) /* Receive Service Request Enable */ | 85 | #define SSCR1_RSRE (1 << 20) /* Receive Service Request Enable */ |
86 | #define SSCR1_TINTE (1 << 19) /* Receiver Time-out Interrupt enable */ | 86 | #define SSCR1_TINTE (1 << 19) /* Receiver Time-out Interrupt enable */ |
87 | #define SSCR1_PINTE (1 << 18) /* Peripheral Trailing Byte Interupt Enable */ | 87 | #define SSCR1_PINTE (1 << 18) /* Peripheral Trailing Byte Interupt Enable */ |
88 | #define SSCR1_IFS (1 << 16) /* Invert Frame Signal */ | ||
88 | #define SSCR1_STRF (1 << 15) /* Select FIFO or EFWR */ | 89 | #define SSCR1_STRF (1 << 15) /* Select FIFO or EFWR */ |
89 | #define SSCR1_EFWR (1 << 14) /* Enable FIFO Write/Read */ | 90 | #define SSCR1_EFWR (1 << 14) /* Enable FIFO Write/Read */ |
90 | 91 | ||