[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>
This commit is contained in:
parent
8736b9270c
commit
7f6ee1adc7
|
@ -1169,8 +1169,9 @@ static int setup(struct spi_device *spi)
|
||||||
spi->bits_per_word - 16 : spi->bits_per_word)
|
spi->bits_per_word - 16 : spi->bits_per_word)
|
||||||
| SSCR0_SSE
|
| SSCR0_SSE
|
||||||
| (spi->bits_per_word > 16 ? SSCR0_EDSS : 0);
|
| (spi->bits_per_word > 16 ? SSCR0_EDSS : 0);
|
||||||
chip->cr1 |= (((spi->mode & SPI_CPHA) != 0) << 4)
|
chip->cr1 &= ~(SSCR1_SPO | SSCR1_SPH);
|
||||||
| (((spi->mode & SPI_CPOL) != 0) << 3);
|
chip->cr1 |= (((spi->mode & SPI_CPHA) != 0) ? SSCR1_SPH : 0)
|
||||||
|
| (((spi->mode & SPI_CPOL) != 0) ? SSCR1_SPO : 0);
|
||||||
|
|
||||||
/* NOTE: PXA25x_SSP _could_ use external clocking ... */
|
/* NOTE: PXA25x_SSP _could_ use external clocking ... */
|
||||||
if (drv_data->ssp_type != PXA25x_SSP)
|
if (drv_data->ssp_type != PXA25x_SSP)
|
||||||
|
|
Loading…
Reference in a new issue