Signed-off-by: Jiri Vlasak <[email protected]>
---
 arch/arm/src/kinetis/kinetis_spi.c | 32 ++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/arch/arm/src/kinetis/kinetis_spi.c 
b/arch/arm/src/kinetis/kinetis_spi.c
index 216640f8e1..5d06ee7c60 100644
--- a/arch/arm/src/kinetis/kinetis_spi.c
+++ b/arch/arm/src/kinetis/kinetis_spi.c
@@ -1974,4 +1974,36 @@ void kinetis_spisetpcs(struct spi_dev_s *dev, int8_t 
which)
     }
 }
 
+/****************************************************************************
+ * Name: spi_flush
+ *
+ * Description:
+ *   Ensure that no SPI transfer happens.
+ *
+ * Input Parameters:
+ *   dev - Device-specific state data
+ *
+ * Returned Value:
+ *   None
+ *
+ ****************************************************************************/
+
+void spi_flush(struct spi_dev_s *dev)
+{
+  struct kinetis_spidev_s *priv = (struct kinetis_spidev_s *)dev;
+
+  /* Wait for not full TX FIFO. */
+
+  while (0 == (spi_getreg(priv, KINETIS_SPI_SR_OFFSET) & SPI_SR_TFFF));
+
+  /* Read from RX FIFO until not empty. */
+
+  while (0 != (spi_getreg(priv, KINETIS_SPI_SR_OFFSET) & SPI_SR_RXCTR_MASK))
+    {
+      spi_getreg(priv, KINETIS_SPI_POPR_OFFSET);
+    }
+
+  spi_write_status(priv, SPI_SR_RFDF);
+}
+
 #endif /* CONFIG_KINETIS_SPI0 || CONFIG_KINETIS_SPI1 ||  CONFIG_KINETIS_SPI2 */
-- 
2.47.3

Reply via email to