From: Marcus Cooper <codekip...@gmail.com>

Bypass the regmap cache when flushing the i2s FIFOs and modify the tables
to reflect this.

Signed-off-by: Marcus Cooper <codekip...@gmail.com>
---
 sound/soc/sunxi/sun4i-i2s.c | 29 +++++++++--------------------
 1 file changed, 9 insertions(+), 20 deletions(-)

diff --git a/sound/soc/sunxi/sun4i-i2s.c b/sound/soc/sunxi/sun4i-i2s.c
index 351b8021173b..92828a84902d 100644
--- a/sound/soc/sunxi/sun4i-i2s.c
+++ b/sound/soc/sunxi/sun4i-i2s.c
@@ -595,9 +595,11 @@ static int sun4i_i2s_set_fmt(struct snd_soc_dai *dai, 
unsigned int fmt)
 static void sun4i_i2s_start_capture(struct sun4i_i2s *i2s)
 {
        /* Flush RX FIFO */
+       regcache_cache_bypass(i2s->regmap, true);
        regmap_update_bits(i2s->regmap, SUN4I_I2S_FIFO_CTRL_REG,
                           SUN4I_I2S_FIFO_CTRL_FLUSH_RX,
                           SUN4I_I2S_FIFO_CTRL_FLUSH_RX);
+       regcache_cache_bypass(i2s->regmap, false);
 
        /* Clear RX counter */
        regmap_write(i2s->regmap, SUN4I_I2S_RX_CNT_REG, 0);
@@ -616,9 +618,11 @@ static void sun4i_i2s_start_capture(struct sun4i_i2s *i2s)
 static void sun4i_i2s_start_playback(struct sun4i_i2s *i2s)
 {
        /* Flush TX FIFO */
+       regcache_cache_bypass(i2s->regmap, true);
        regmap_update_bits(i2s->regmap, SUN4I_I2S_FIFO_CTRL_REG,
                           SUN4I_I2S_FIFO_CTRL_FLUSH_TX,
                           SUN4I_I2S_FIFO_CTRL_FLUSH_TX);
+       regcache_cache_bypass(i2s->regmap, false);
 
        /* Clear TX counter */
        regmap_write(i2s->regmap, SUN4I_I2S_TX_CNT_REG, 0);
@@ -771,13 +775,7 @@ static const struct snd_soc_component_driver 
sun4i_i2s_component = {
 
 static bool sun4i_i2s_rd_reg(struct device *dev, unsigned int reg)
 {
-       switch (reg) {
-       case SUN4I_I2S_FIFO_TX_REG:
-               return false;
-
-       default:
-               return true;
-       }
+       return true;
 }
 
 static bool sun4i_i2s_wr_reg(struct device *dev, unsigned int reg)
@@ -796,6 +794,8 @@ static bool sun4i_i2s_volatile_reg(struct device *dev, 
unsigned int reg)
 {
        switch (reg) {
        case SUN4I_I2S_FIFO_RX_REG:
+       case SUN4I_I2S_FIFO_TX_REG:
+       case SUN4I_I2S_FIFO_STA_REG:
        case SUN4I_I2S_INT_STA_REG:
        case SUN4I_I2S_RX_CNT_REG:
        case SUN4I_I2S_TX_CNT_REG:
@@ -806,23 +806,12 @@ static bool sun4i_i2s_volatile_reg(struct device *dev, 
unsigned int reg)
        }
 }
 
-static bool sun8i_i2s_rd_reg(struct device *dev, unsigned int reg)
-{
-       switch (reg) {
-       case SUN8I_I2S_FIFO_TX_REG:
-               return false;
-
-       default:
-               return true;
-       }
-}
-
 static bool sun8i_i2s_volatile_reg(struct device *dev, unsigned int reg)
 {
        if (reg == SUN8I_I2S_INT_STA_REG)
                return true;
        if (reg == SUN8I_I2S_FIFO_TX_REG)
-               return false;
+               return true;
 
        return sun4i_i2s_volatile_reg(dev, reg);
 }
@@ -877,7 +866,7 @@ static const struct regmap_config sun8i_i2s_regmap_config = 
{
        .reg_defaults   = sun8i_i2s_reg_defaults,
        .num_reg_defaults       = ARRAY_SIZE(sun8i_i2s_reg_defaults),
        .writeable_reg  = sun4i_i2s_wr_reg,
-       .readable_reg   = sun8i_i2s_rd_reg,
+       .readable_reg   = sun4i_i2s_rd_reg,
        .volatile_reg   = sun8i_i2s_volatile_reg,
 };
 
-- 
2.21.0

-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to linux-sunxi+unsubscr...@googlegroups.com.
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/linux-sunxi/20190603174735.21002-10-codekipper%40gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to