ASoC: da7213: fix DAI_CLK_EN register bit overwrite
authorLogesh <logesh.kolandavel@timesys.com>
Wed, 1 May 2019 09:04:24 +0000 (14:34 +0530)
committerMark Brown <broonie@kernel.org>
Thu, 2 May 2019 01:57:47 +0000 (10:57 +0900)
If the da7213 codec is configured as Master with the DAPM power down
delay time set, 'snd_soc_component_write' function overwrites the
DAI_CLK_EN bit of DAI_CLK_MODE register which leads to audio play
only once until it re-initialize after codec power up.

Signed-off-by: Logesh <logesh.kolandavel@timesys.com>
Reviewed-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/da7213.c
sound/soc/codecs/da7213.h

index 92d006a5283ed71d74f4f8047509218fcc7d162f..425c11d63e49a7995d106b9977385c1a5c5ffe75 100644 (file)
@@ -1305,7 +1305,10 @@ static int da7213_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
        /* By default only 64 BCLK per WCLK is supported */
        dai_clk_mode |= DA7213_DAI_BCLKS_PER_WCLK_64;
 
-       snd_soc_component_write(component, DA7213_DAI_CLK_MODE, dai_clk_mode);
+       snd_soc_component_update_bits(component, DA7213_DAI_CLK_MODE,
+                           DA7213_DAI_BCLKS_PER_WCLK_MASK |
+                           DA7213_DAI_CLK_POL_MASK | DA7213_DAI_WCLK_POL_MASK,
+                           dai_clk_mode);
        snd_soc_component_update_bits(component, DA7213_DAI_CTRL, DA7213_DAI_FORMAT_MASK,
                            dai_ctrl);
        snd_soc_component_write(component, DA7213_DAI_OFFSET, dai_offset);
index 5a78dba1dcb58bcdccdc7693a3eec43beaba44b6..9d31efc3cfe589c0dada7940304ba3542ef5d20e 100644 (file)
 #define DA7213_DAI_BCLKS_PER_WCLK_256                          (0x3 << 0)
 #define DA7213_DAI_BCLKS_PER_WCLK_MASK                         (0x3 << 0)
 #define DA7213_DAI_CLK_POL_INV                                 (0x1 << 2)
+#define DA7213_DAI_CLK_POL_MASK                                        (0x1 << 2)
 #define DA7213_DAI_WCLK_POL_INV                                        (0x1 << 3)
+#define DA7213_DAI_WCLK_POL_MASK                               (0x1 << 3)
 #define DA7213_DAI_CLK_EN_MASK                                 (0x1 << 7)
 
 /* DA7213_DAI_CTRL = 0x29 */