summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/spi/spi-tegra.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/spi/spi-tegra.c b/drivers/spi/spi-tegra.c
index 0a0a72f3437f..070cc1581efd 100644
--- a/drivers/spi/spi-tegra.c
+++ b/drivers/spi/spi-tegra.c
@@ -264,6 +264,9 @@ static inline void spi_tegra_writel(struct spi_tegra_data *tspi,
if (!tspi->clk_state)
BUG();
writel(val, tspi->base + reg);
+
+ /* Synchronize write by reading back the register */
+ readl(tspi->base + SLINK_MAS_DATA);
}
static void cancel_dma(struct tegra_dma_channel *dma_chan,
@@ -1584,6 +1587,9 @@ static int tegra_spi_runtime_idle(struct device *dev)
struct spi_master *master = dev_get_drvdata(dev);
struct spi_tegra_data *tspi = spi_master_get_devdata(master);
+ /* Flush all write which are in PPSB queue by reading back */
+ spi_tegra_readl(tspi, SLINK_MAS_DATA);
+
tspi->clk_state = 0;
clk_disable(tspi->clk);
clk_disable(tspi->sclk);