[PATCH v3 2/5] ASoC: mediatek: mt8183: Fix clock handling in mux disable path

Cezary Rojewski cezary.rojewski at intel.com
Mon Aug 31 02:44:14 PDT 2026


On 8/28/2026 7:05 AM, phucduc.bui at gmail.com wrote:

> @@ -339,25 +340,26 @@ static int apll2_mux_setting(struct mtk_base_afe *afe, bool enable)
>   			goto ERR_SELECT_CLK_TOP_MUX_AUD_ENG2;
>   		}
>   	} else {
> -		ret = clk_set_parent(afe_priv->clk[CLK_TOP_MUX_AUD_ENG2],
> -				     afe_priv->clk[CLK_CLK26M]);
> -		if (ret) {
> -			dev_err(afe->dev, "%s clk_set_parent %s-%s fail %d\n",
> -				__func__, aud_clks[CLK_TOP_MUX_AUD_ENG2],
> -				aud_clks[CLK_CLK26M], ret);
> -			goto EXIT;
> -		}
>   		clk_disable_unprepare(afe_priv->clk[CLK_TOP_MUX_AUD_ENG2]);
> -
> -		ret = clk_set_parent(afe_priv->clk[CLK_TOP_MUX_AUD_2],
> -				     afe_priv->clk[CLK_CLK26M]);
> -		if (ret) {
> -			dev_err(afe->dev, "%s clk_set_parent %s-%s fail %d\n",
> -				__func__, aud_clks[CLK_TOP_MUX_AUD_2],
> -				aud_clks[CLK_CLK26M], ret);
> -			goto EXIT;
> -		}
>   		clk_disable_unprepare(afe_priv->clk[CLK_TOP_MUX_AUD_2]);
> +
> +		ret = clk_set_parent(afe_priv->clk[CLK_TOP_MUX_AUD_ENG2],
> +				     afe_priv->clk[CLK_CLK26M]);
> +		if (ret) {
> +			dev_err(afe->dev, "%s clk_set_parent %s-%s fail %d\n",
> +				__func__, aud_clks[CLK_TOP_MUX_AUD_ENG2],
> +				aud_clks[CLK_CLK26M], ret);
> +			goto EXIT;
> +		}
> +
> +		ret = clk_set_parent(afe_priv->clk[CLK_TOP_MUX_AUD_2],
> +				     afe_priv->clk[CLK_CLK26M]);
> +		if (ret) {
> +			dev_err(afe->dev, "%s clk_set_parent %s-%s fail %d\n",
> +				__func__, aud_clks[CLK_TOP_MUX_AUD_2],
> +				aud_clks[CLK_CLK26M], ret);
> +			goto EXIT;
> +		}
>   	}
>   
>   	return 0;


I was thinking off a typical teardown procedure - everything is permissive:

// the disable path:
	ret = clk_set_parent(CLK_TOP_MUX_AUD_ENG2)
	if (ret)
		// just error reporting
	ret = clk_disable_unprepare(CLK_TOP_MUX_AUD_ENG2)
	if (ret)
		// just error reporting
	ret = clk_set_parent(CLK_TOP_MUX_AUD_2)
	if (ret)
		// just error reporting
	ret = clk_disable_unprepare(CLK_TOP_MUX_AUD_2)
	if (ret)
		// just error reporting

or, if one wants to do this properly: split apll1/2_mux_setting() 
functions into:
	void apll1/2_mux_disable()
	int apll1/2_mux_enable()

You do not have to go for the split, the first option is just fine.



More information about the linux-arm-kernel mailing list