diff options
author | Lars-Peter Clausen <lars@metafoo.de> | 2014-11-27 10:12:18 -0500 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2014-11-28 06:42:11 -0500 |
commit | ee0ebe81004bd0bedf7abe8a2f3eb745da0264dc (patch) | |
tree | e70b68a84922836fc2154bf4f4703e3e6a5f0c35 | |
parent | f114040e3ea6e07372334ade75d1ee0775c355e1 (diff) |
spi: cadence: Fix 3-to-8 mux mode
In 3-to-8 mux mode for the CS pins we need to set the PERI_SEL bit in the
control register. Currently the driver never sets this bit even when
configured for 3-to-8 mux mode. This patch adds code which sets the bit
during device initialization when necessary.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Acked-by: Harini Katakam <harinik@xilinx.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | drivers/spi/spi-cadence.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/spi/spi-cadence.c b/drivers/spi/spi-cadence.c index 7b811e38c7ad..33f0bec1a7eb 100644 --- a/drivers/spi/spi-cadence.c +++ b/drivers/spi/spi-cadence.c | |||
@@ -47,6 +47,7 @@ | |||
47 | #define CDNS_SPI_CR_CPHA_MASK 0x00000004 /* Clock Phase Control */ | 47 | #define CDNS_SPI_CR_CPHA_MASK 0x00000004 /* Clock Phase Control */ |
48 | #define CDNS_SPI_CR_CPOL_MASK 0x00000002 /* Clock Polarity Control */ | 48 | #define CDNS_SPI_CR_CPOL_MASK 0x00000002 /* Clock Polarity Control */ |
49 | #define CDNS_SPI_CR_SSCTRL_MASK 0x00003C00 /* Slave Select Mask */ | 49 | #define CDNS_SPI_CR_SSCTRL_MASK 0x00003C00 /* Slave Select Mask */ |
50 | #define CDNS_SPI_CR_PERI_SEL_MASK 0x00000200 /* Peripheral Select Decode */ | ||
50 | #define CDNS_SPI_CR_BAUD_DIV_MASK 0x00000038 /* Baud Rate Divisor Mask */ | 51 | #define CDNS_SPI_CR_BAUD_DIV_MASK 0x00000038 /* Baud Rate Divisor Mask */ |
51 | #define CDNS_SPI_CR_MSTREN_MASK 0x00000001 /* Master Enable Mask */ | 52 | #define CDNS_SPI_CR_MSTREN_MASK 0x00000001 /* Master Enable Mask */ |
52 | #define CDNS_SPI_CR_MANSTRTEN_MASK 0x00008000 /* Manual TX Enable Mask */ | 53 | #define CDNS_SPI_CR_MANSTRTEN_MASK 0x00008000 /* Manual TX Enable Mask */ |
@@ -148,6 +149,11 @@ static inline void cdns_spi_write(struct cdns_spi *xspi, u32 offset, u32 val) | |||
148 | */ | 149 | */ |
149 | static void cdns_spi_init_hw(struct cdns_spi *xspi) | 150 | static void cdns_spi_init_hw(struct cdns_spi *xspi) |
150 | { | 151 | { |
152 | u32 ctrl_reg = CDNS_SPI_CR_DEFAULT_MASK; | ||
153 | |||
154 | if (xspi->is_decoded_cs) | ||
155 | ctrl_reg |= CDNS_SPI_CR_PERI_SEL_MASK; | ||
156 | |||
151 | cdns_spi_write(xspi, CDNS_SPI_ER_OFFSET, | 157 | cdns_spi_write(xspi, CDNS_SPI_ER_OFFSET, |
152 | CDNS_SPI_ER_DISABLE_MASK); | 158 | CDNS_SPI_ER_DISABLE_MASK); |
153 | cdns_spi_write(xspi, CDNS_SPI_IDR_OFFSET, | 159 | cdns_spi_write(xspi, CDNS_SPI_IDR_OFFSET, |
@@ -160,8 +166,7 @@ static void cdns_spi_init_hw(struct cdns_spi *xspi) | |||
160 | 166 | ||
161 | cdns_spi_write(xspi, CDNS_SPI_ISR_OFFSET, | 167 | cdns_spi_write(xspi, CDNS_SPI_ISR_OFFSET, |
162 | CDNS_SPI_IXR_ALL_MASK); | 168 | CDNS_SPI_IXR_ALL_MASK); |
163 | cdns_spi_write(xspi, CDNS_SPI_CR_OFFSET, | 169 | cdns_spi_write(xspi, CDNS_SPI_CR_OFFSET, ctrl_reg); |
164 | CDNS_SPI_CR_DEFAULT_MASK); | ||
165 | cdns_spi_write(xspi, CDNS_SPI_ER_OFFSET, | 170 | cdns_spi_write(xspi, CDNS_SPI_ER_OFFSET, |
166 | CDNS_SPI_ER_ENABLE_MASK); | 171 | CDNS_SPI_ER_ENABLE_MASK); |
167 | } | 172 | } |