diff --git a/sound/soc/rockchip/rockchip_i2s_tdm.c b/sound/soc/rockchip/rockchip_i2s_tdm.c index f1043607ec1c..2ff2b9c4a020 100644 --- a/sound/soc/rockchip/rockchip_i2s_tdm.c +++ b/sound/soc/rockchip/rockchip_i2s_tdm.c @@ -655,6 +655,19 @@ static int rockchip_i2s_tdm_set_fmt(struct snd_soc_dai *cpu_dai, case SND_SOC_DAIFMT_CBM_CFM: val = I2S_CKR_MSS_SLAVE; i2s_tdm->is_master_mode = false; + /* + * TRCM require TX/RX enabled at the same time, or need the one + * which provide clk enabled at first for master mode. + * + * It is quite a different for slave mode which does not have + * these restrictions, because the BCLK / LRCK are provided by + * external master devices. + * + * So, we just set the right clk path value on TRCM register on + * stage probe and then drop the trcm value to make TX / RX work + * independently. + */ + i2s_tdm->clk_trcm = 0; break; default: ret = -EINVAL;