Commit 7f6ee1adc75bf31d1b76814338f76a88e653cb60
Committed by
Linus Torvalds
1 parent
8736b9270c
Exists in
master
and in
4 other branches
[PATCH] spi: fix error setting the spi mode in pxa2xx_spi.c
Currently the spi mode can be set to the wrong mode if you are switching from any mode other than mode 0. This is because the mode is set using a bitwise or on uncleared bits. The following patch clears the mode bits before setting the new mode. I've also modified it to use the appropriate defines from pxa-regs.h for readability. Signed-off-by: Justin Clacherty <justin@redfish-group.com> Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Showing 1 changed file with 3 additions and 2 deletions Side-by-side Diff
drivers/spi/pxa2xx_spi.c
| ... | ... | @@ -1169,8 +1169,9 @@ |
| 1169 | 1169 | spi->bits_per_word - 16 : spi->bits_per_word) |
| 1170 | 1170 | | SSCR0_SSE |
| 1171 | 1171 | | (spi->bits_per_word > 16 ? SSCR0_EDSS : 0); |
| 1172 | - chip->cr1 |= (((spi->mode & SPI_CPHA) != 0) << 4) | |
| 1173 | - | (((spi->mode & SPI_CPOL) != 0) << 3); | |
| 1172 | + chip->cr1 &= ~(SSCR1_SPO | SSCR1_SPH); | |
| 1173 | + chip->cr1 |= (((spi->mode & SPI_CPHA) != 0) ? SSCR1_SPH : 0) | |
| 1174 | + | (((spi->mode & SPI_CPOL) != 0) ? SSCR1_SPO : 0); | |
| 1174 | 1175 | |
| 1175 | 1176 | /* NOTE: PXA25x_SSP _could_ use external clocking ... */ |
| 1176 | 1177 | if (drv_data->ssp_type != PXA25x_SSP) |