Merge branch 'locking-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[firefly-linux-kernel-4.4.55.git] / sound / soc / rockchip / rockchip_i2s.c
index f07833b42eddc241196e2825a99876ee81eb83ad..58ee64594f075efb7327d1480113f1401e97f248 100644 (file)
@@ -226,6 +226,7 @@ static int rockchip_i2s_hw_params(struct snd_pcm_substream *substream,
                                  struct snd_soc_dai *dai)
 {
        struct rk_i2s_dev *i2s = to_info(dai);
+       struct snd_soc_pcm_runtime *rtd = substream->private_data;
        unsigned int val = 0;
 
        switch (params_format(params)) {
@@ -278,6 +279,13 @@ static int rockchip_i2s_hw_params(struct snd_pcm_substream *substream,
        regmap_update_bits(i2s->regmap, I2S_DMACR, I2S_DMACR_RDL_MASK,
                           I2S_DMACR_RDL(16));
 
+       val = I2S_CKR_TRCM_TXRX;
+       if (dai->driver->symmetric_rates || rtd->dai_link->symmetric_rates)
+               val = I2S_CKR_TRCM_TXSHARE;
+
+       regmap_update_bits(i2s->regmap, I2S_CKR,
+                          I2S_CKR_TRCM_MASK,
+                          val);
        return 0;
 }