mirror of
https://github.com/torvalds/linux.git
synced 2026-06-07 05:55:44 +02:00
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:
parent
fcd99057b0
commit
b87d415824
|
|
@ -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));
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user