You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by je...@apache.org on 2021/05/20 05:24:02 UTC
[incubator-nuttx] 05/21: arch: cxd56xx: Fix SPI setmode function
This is an automated email from the ASF dual-hosted git repository.
jerpelea pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit a276de741f448dd4b9cbebd792fc38b1d4bdddd1
Author: SPRESENSE <41...@users.noreply.github.com>
AuthorDate: Wed May 19 17:04:05 2021 +0900
arch: cxd56xx: Fix SPI setmode function
When SSP mode is changed, SSE bit of SSPCR1 register must be disabled.
---
arch/arm/src/cxd56xx/cxd56_spi.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/arch/arm/src/cxd56xx/cxd56_spi.c b/arch/arm/src/cxd56xx/cxd56_spi.c
index f537e60..ac3c60c 100644
--- a/arch/arm/src/cxd56xx/cxd56_spi.c
+++ b/arch/arm/src/cxd56xx/cxd56_spi.c
@@ -509,6 +509,7 @@ static void spi_setmode(FAR struct spi_dev_s *dev, enum spi_mode_e mode)
{
FAR struct cxd56_spidev_s *priv = (FAR struct cxd56_spidev_s *)dev;
uint32_t regval;
+ uint32_t cr1val;
/* Has the mode changed? */
@@ -551,8 +552,19 @@ static void spi_setmode(FAR struct spi_dev_s *dev, enum spi_mode_e mode)
return;
}
+ /* Disable SSE */
+
+ cr1val = spi_getreg(priv, CXD56_SPI_CR1_OFFSET);
+ spi_putreg(priv, CXD56_SPI_CR1_OFFSET, cr1val & ~SPI_CR1_SSE);
+
spi_putreg(priv, CXD56_SPI_CR0_OFFSET, regval);
+ /* Enable SSE after a few microseconds delay */
+
+ up_udelay(3);
+
+ spi_putreg(priv, CXD56_SPI_CR1_OFFSET, cr1val);
+
/* Enable clock gating (clock disable) */
cxd56_spi_clock_gate_enable(priv->port);