ASoC: rockchip: i2s-tdm: Simplify clk reparent on TRCM mode

This patch do reparent CLK_TX/RX to the same parent on TRCM mode
in driver instead of assign parent from DT.

Now, the assigned-parent from DT can be removed.

  -assigned-clocks = <&cru SCLK_I2S0_8CH_RX>;
  -assigned-clock-parents = <&cru SCLK_I2S0_8CH_TX_MUX>;

Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
Change-Id: I0abda09a1348d05306e4026f61f7daa2850ae323
This commit is contained in:
Sugar Zhang 2023-03-15 10:18:35 +08:00 committed by Tao Huang
parent fcd99057b0
commit b87d415824

View File

@ -916,6 +916,41 @@ static int rockchip_i2s_tdm_calibrate_mclk(struct rk_i2s_tdm_dev *i2s_tdm,
return ret;
}
static int rockchip_i2s_tdm_mclk_reparent(struct rk_i2s_tdm_dev *i2s_tdm)
{
struct clk *parent;
int ret = 0;
/* reparent to the same clk on TRCM mode */
switch (i2s_tdm->clk_trcm) {
case I2S_CKR_TRCM_TXONLY:
parent = clk_get_parent(i2s_tdm->mclk_tx);
/*
* API clk_has_parent is not available yet on GKI, so we
* use clk_set_parent directly and ignore the ret value.
* if the API has addressed on GKI, should remove it.
*/
#ifdef CONFIG_NO_GKI
if (clk_has_parent(i2s_tdm->mclk_rx, parent))
ret = clk_set_parent(i2s_tdm->mclk_rx, parent);
#else
clk_set_parent(i2s_tdm->mclk_rx, parent);
#endif
break;
case I2S_CKR_TRCM_RXONLY:
parent = clk_get_parent(i2s_tdm->mclk_rx);
#ifdef CONFIG_NO_GKI
if (clk_has_parent(i2s_tdm->mclk_tx, parent))
ret = clk_set_parent(i2s_tdm->mclk_tx, parent);
#else
clk_set_parent(i2s_tdm->mclk_tx, parent);
#endif
break;
}
return ret;
}
static int rockchip_i2s_tdm_set_mclk(struct rk_i2s_tdm_dev *i2s_tdm,
struct snd_pcm_substream *substream,
struct clk **mclk)
@ -941,6 +976,10 @@ static int rockchip_i2s_tdm_set_mclk(struct rk_i2s_tdm_dev *i2s_tdm,
if (ret)
goto err;
ret = rockchip_i2s_tdm_mclk_reparent(i2s_tdm);
if (ret)
goto err;
/* mclk_rx is also ok. */
*mclk = i2s_tdm->mclk_tx;
} else {
@ -2224,6 +2263,10 @@ static int rockchip_i2s_tdm_probe(struct platform_device *pdev)
clk_set_rate(i2s_tdm->mclk_rx, rate);
clk_set_rate(i2s_tdm->mclk_tx, rate);
ret = rockchip_i2s_tdm_mclk_reparent(i2s_tdm);
if (ret)
goto err_pm_disable;
regmap_update_bits(i2s_tdm->regmap, I2S_CLKDIV,
I2S_CLKDIV_RXM_MASK | I2S_CLKDIV_TXM_MASK,
I2S_CLKDIV_RXM(div_bclk) | I2S_CLKDIV_TXM(div_bclk));