diff options
author | shaftarger <sholchen@gmail.com> | 2018-12-28 16:33:12 +0800 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2019-01-07 18:15:54 +0000 |
commit | e1bc204894eae69b153eb63d9fd65414466fb639 (patch) | |
tree | c11e400be917d452bdea0c7f96ba1c9d4a10c8ee /drivers/spi | |
parent | 0dcdcd0e42d33cd5e592935aa7a93e5461c1ddb9 (diff) | |
download | linux-e1bc204894eae69b153eb63d9fd65414466fb639.tar.bz2 |
spi: dw: fix potential variable assignment error
spi::mode is defined by framework for several SPI capabilities,
such as polarity, phase, bit-endian, wire number. Directly use this
variable for setting controller's polarity and phase causes other
bit in register being set. Since SPI framework has its definition,
SPI_CPOL and SPI_CPHA offset may be changed by framwork change.
Instead of just mask off the relevant bits,
fetch required bit in spi::mode and set to register.
Signed-off-by: shaftarger <shol@livemail.tw>
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'drivers/spi')
-rw-r--r-- | drivers/spi/spi-dw.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/spi/spi-dw.c b/drivers/spi/spi-dw.c index 2e822a56576a..a945fad3db62 100644 --- a/drivers/spi/spi-dw.c +++ b/drivers/spi/spi-dw.c @@ -317,7 +317,8 @@ static int dw_spi_transfer_one(struct spi_controller *master, /* Default SPI mode is SCPOL = 0, SCPH = 0 */ cr0 = (transfer->bits_per_word - 1) | (chip->type << SPI_FRF_OFFSET) - | (spi->mode << SPI_MODE_OFFSET) + | ((((spi->mode & SPI_CPOL) ? 1 : 0) << SPI_SCOL_OFFSET) | + (((spi->mode & SPI_CPHA) ? 1 : 0) << SPI_SCPH_OFFSET)) | (chip->tmode << SPI_TMOD_OFFSET); /* |