[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAGXv+5HW1-GByx6BEd46J_n50FxcHNukUWwREpoDne=CdAnSVQ@mail.gmail.com>
Date: Mon, 11 Aug 2025 19:24:02 +0800
From: Chen-Yu Tsai <wenst@...omium.org>
To: "Darren.Ye" <darren.ye@...iatek.com>
Cc: Liam Girdwood <lgirdwood@...il.com>, Mark Brown <broonie@...nel.org>,
Rob Herring <robh@...nel.org>, Krzysztof Kozlowski <krzk+dt@...nel.org>, Conor Dooley <conor+dt@...nel.org>,
Matthias Brugger <matthias.bgg@...il.com>,
AngeloGioacchino Del Regno <angelogioacchino.delregno@...labora.com>, Jaroslav Kysela <perex@...ex.cz>,
Takashi Iwai <tiwai@...e.com>, Linus Walleij <linus.walleij@...aro.org>,
Bartosz Golaszewski <brgl@...ev.pl>, linux-sound@...r.kernel.org, devicetree@...r.kernel.org,
linux-kernel@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
linux-mediatek@...ts.infradead.org, linux-gpio@...r.kernel.org
Subject: Re: [PATCH v6 05/10] ASoC: mediatek: mt8196: support I2S in platform driver
Sorry for another reply, but I lost some of the context I wanted to reply to.
On Tue, Jul 8, 2025 at 7:34 PM Darren.Ye <darren.ye@...iatek.com> wrote:
>
> From: Darren Ye <darren.ye@...iatek.com>
>
> Add mt8196 I2S DAI driver support.
>
> Signed-off-by: Darren Ye <darren.ye@...iatek.com>
> ---
> sound/soc/mediatek/mt8196/mt8196-dai-i2s.c | 3944 ++++++++++++++++++++
> 1 file changed, 3944 insertions(+)
> create mode 100644 sound/soc/mediatek/mt8196/mt8196-dai-i2s.c
>
> diff --git a/sound/soc/mediatek/mt8196/mt8196-dai-i2s.c b/sound/soc/mediatek/mt8196/mt8196-dai-i2s.c
> new file mode 100644
> index 000000000000..59f66ab8fa9f
> --- /dev/null
> +++ b/sound/soc/mediatek/mt8196/mt8196-dai-i2s.c
> @@ -0,0 +1,3944 @@
[...]
> +static int mtk_afe_i2s_share_connect(struct snd_soc_dapm_widget *source,
> + struct snd_soc_dapm_widget *sink)
> +{
> + struct snd_soc_dapm_widget *w = sink;
> + struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm);
> + struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
> + struct mtk_afe_i2s_priv *i2s_priv;
> + int ret = 0;
> +
> + i2s_priv = get_i2s_priv_by_name(afe, sink->name);
> +
Drop empty line between assignment and check.
> + if (!i2s_priv)
> + return 0;
> +
> + if (i2s_priv->share_i2s_id < 0)
> + return 0;
> +
> + ret = (i2s_priv->share_i2s_id == get_i2s_id_by_name(afe, source->name)) ? 1 : 0;
> +
> + return ret;
return i2s_priv->share_i2s_id == get_i2s_id_by_name(afe,
source->name);
bool casts to int implicitly in the same way you wrote explicitly.
> +}
> +
> +static int mtk_afe_i2s_hd_connect(struct snd_soc_dapm_widget *source,
> + struct snd_soc_dapm_widget *sink)
> +{
> + struct snd_soc_dapm_widget *w = sink;
> + struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm);
> + struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
> + struct mtk_afe_i2s_priv *i2s_priv;
> + int i2s_num;
Rename to "src_i2s_num" to be explicit.
> +
> + i2s_priv = get_i2s_priv_by_name(afe, sink->name);
> +
Drop empty line between assignment and check.
> + if (!i2s_priv)
> + return 0;
> +
> + i2s_num = get_i2s_id_by_name(afe, source->name);
> + if (get_i2s_id_by_name(afe, sink->name) == i2s_num)
Use i2s_priv->id?
> + return !mtk_is_i2s_low_power(i2s_num) ||
> + i2s_priv->low_jitter_en;
> +
> + /* check if share i2s need hd en */
> + if (i2s_priv->share_i2s_id < 0)
> + return 0;
> +
> + if (i2s_priv->share_i2s_id == i2s_num)
> + return !mtk_is_i2s_low_power(i2s_num) ||
> + i2s_priv->low_jitter_en;
> +
> + return 0;
> +}
> +
> +static int mtk_afe_i2s_apll_connect(struct snd_soc_dapm_widget *source,
> + struct snd_soc_dapm_widget *sink)
> +{
> + struct snd_soc_dapm_widget *w = sink;
> + struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm);
> + struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
> + struct mtk_afe_i2s_priv *i2s_priv;
> + int cur_apll;
> + int i2s_need_apll;
Rename to needed_apll or desired_apll.
> +
> + i2s_priv = get_i2s_priv_by_name(afe, w->name);
> +
Drop empty line between assignment and check.
> + if (!i2s_priv)
> + return 0;
> +
> + /* which apll */
> + cur_apll = mt8196_get_apll_by_name(afe, source->name);
> +
> + /* choose APLL from i2s rate */
> + i2s_need_apll = mt8196_get_apll_by_rate(afe, i2s_priv->rate);
> +
> + return (i2s_need_apll == cur_apll) ? 1 : 0;
return i2s_need_apll == cur_apll;
> +}
> +
> +static int mtk_afe_i2s_mclk_connect(struct snd_soc_dapm_widget *source,
> + struct snd_soc_dapm_widget *sink)
> +{
> + struct snd_soc_dapm_widget *w = sink;
> + struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm);
> + struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
> + struct mtk_afe_i2s_priv *i2s_priv;
> +
> + i2s_priv = get_i2s_priv_by_name(afe, sink->name);
> +
Drop empty line between assignment and check.
> + if (!i2s_priv)
> + return 0;
> +
> + if (get_i2s_id_by_name(afe, sink->name) ==
i2s_priv->id == ...
> + get_i2s_id_by_name(afe, source->name))
Keep a copy of the result ...
> + return (i2s_priv->mclk_rate > 0) ? 1 : 0;
return i2s_priv->mclk_rate > 0;
> +
> + /* check if share i2s need mclk */
> + if (i2s_priv->share_i2s_id < 0)
> + return 0;
> +
> + if (i2s_priv->share_i2s_id == get_i2s_id_by_name(afe, source->name))
and use it here, like in mtk_afe_i2s_hd_connect().
> + return (i2s_priv->mclk_rate > 0) ? 1 : 0;
return i2s_priv->mclk_rate > 0;
> + return 0;
> +}
> +
> +static int mtk_afe_mclk_apll_connect(struct snd_soc_dapm_widget *source,
> + struct snd_soc_dapm_widget *sink)
> +{
> + struct snd_soc_dapm_widget *w = sink;
> + struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm);
> + struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
> + struct mtk_afe_i2s_priv *i2s_priv;
> + int cur_apll;
> +
> + i2s_priv = get_i2s_priv_by_name(afe, w->name);
> +
Drop empty line between assignment and check.
> + if (!i2s_priv)
> + return 0;
> +
> + /* which apll */
> + cur_apll = mt8196_get_apll_by_name(afe, source->name);
> +
> + return (i2s_priv->mclk_apll == cur_apll) ? 1 : 0;
return i2s_priv->mclk_apll == cur_apll;
> +}
[...]
ChenYu
Powered by blists - more mailing lists