summaryrefslogtreecommitdiffstats
path: root/drivers/spi/spi-dw.c
diff options
context:
space:
mode:
authorshaftarger2018-12-28 09:33:12 +0100
committerMark Brown2019-01-07 19:15:54 +0100
commite1bc204894eae69b153eb63d9fd65414466fb639 (patch)
treec11e400be917d452bdea0c7f96ba1c9d4a10c8ee /drivers/spi/spi-dw.c
parentspi: add cpu details to fsl-dspi Kconfig help (diff)
downloadkernel-qcow2-linux-e1bc204894eae69b153eb63d9fd65414466fb639.tar.gz
kernel-qcow2-linux-e1bc204894eae69b153eb63d9fd65414466fb639.tar.xz
kernel-qcow2-linux-e1bc204894eae69b153eb63d9fd65414466fb639.zip
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/spi-dw.c')
-rw-r--r--drivers/spi/spi-dw.c3
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);
/*