<html><body><p>
<pre>
Hi, Angelo:

On Mon, 2025-01-13 at 15:52 +0100, AngeloGioacchino Del Regno wrote:
> External email : Please do not click links or open attachments until you have verified the sender or the content.
>
>
> In preparation for splitting common bits of this driver, move the
> audio params (codec, sample rate/size, input type, i2s format, etc)
> selection to a new function called mtk_hdmi_audio_params().
>
> While at it, also rename "hdmi_params" to "aud_params" both to match
> the mtk_hdmi struct member name and to clarify that those parameters
> are for HDMI Audio and not for HDMI Video configuration.

Reviewed-by: CK Hu <ck.hu@mediatek.com>

>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
> ---
> drivers/gpu/drm/mediatek/mtk_hdmi.c | 63 ++++++++++++++++-------------
> 1 file changed, 35 insertions(+), 28 deletions(-)
>
> diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c
> index 065750075d7c..5a3e0f4e553d 100644
> --- a/drivers/gpu/drm/mediatek/mtk_hdmi.c
> +++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c
> @@ -1465,19 +1465,13 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,
> * HDMI audio codec callbacks
> */
>
> -static int mtk_hdmi_audio_hw_params(struct device *dev, void *data,
> - struct hdmi_codec_daifmt *daifmt,
> - struct hdmi_codec_params *params)
> +static int mtk_hdmi_audio_params(struct mtk_hdmi *hdmi,
> + struct hdmi_codec_daifmt *daifmt,
> + struct hdmi_codec_params *params)
> {
> - struct mtk_hdmi *hdmi = dev_get_drvdata(dev);
> - struct hdmi_audio_param hdmi_params;
> + struct hdmi_audio_param aud_params = { 0 };
> unsigned int chan = params->cea.channels;
>
> - if (!hdmi->audio_enable) {
> - dev_err(hdmi->dev, "hdmi audio is in disable state!\n");
> - return -EINVAL;
> - }
> -
> dev_dbg(hdmi->dev, "%s: %u Hz, %d bit, %d channels\n", __func__,
> params->sample_rate, params->sample_width, chan);
>
> @@ -1486,16 +1480,16 @@ static int mtk_hdmi_audio_hw_params(struct device *dev, void *data,
>
> switch (chan) {
> case 2:
> - hdmi_params.aud_input_chan_type = HDMI_AUD_CHAN_TYPE_2_0;
> + aud_params.aud_input_chan_type = HDMI_AUD_CHAN_TYPE_2_0;
> break;
> case 4:
> - hdmi_params.aud_input_chan_type = HDMI_AUD_CHAN_TYPE_4_0;
> + aud_params.aud_input_chan_type = HDMI_AUD_CHAN_TYPE_4_0;
> break;
> case 6:
> - hdmi_params.aud_input_chan_type = HDMI_AUD_CHAN_TYPE_5_1;
> + aud_params.aud_input_chan_type = HDMI_AUD_CHAN_TYPE_5_1;
> break;
> case 8:
> - hdmi_params.aud_input_chan_type = HDMI_AUD_CHAN_TYPE_7_1;
> + aud_params.aud_input_chan_type = HDMI_AUD_CHAN_TYPE_7_1;
> break;
> default:
> dev_err(hdmi->dev, "channel[%d] not supported!\n", chan);
> @@ -1519,31 +1513,44 @@ static int mtk_hdmi_audio_hw_params(struct device *dev, void *data,
>
> switch (daifmt->fmt) {
> case HDMI_I2S:
> - hdmi_params.aud_codec = HDMI_AUDIO_CODING_TYPE_PCM;
> - hdmi_params.aud_sample_size = HDMI_AUDIO_SAMPLE_SIZE_16;
> - hdmi_params.aud_input_type = HDMI_AUD_INPUT_I2S;
> - hdmi_params.aud_i2s_fmt = HDMI_I2S_MODE_I2S_24BIT;
> - hdmi_params.aud_mclk = HDMI_AUD_MCLK_128FS;
> + aud_params.aud_codec = HDMI_AUDIO_CODING_TYPE_PCM;
> + aud_params.aud_sample_size = HDMI_AUDIO_SAMPLE_SIZE_16;
> + aud_params.aud_input_type = HDMI_AUD_INPUT_I2S;
> + aud_params.aud_i2s_fmt = HDMI_I2S_MODE_I2S_24BIT;
> + aud_params.aud_mclk = HDMI_AUD_MCLK_128FS;
> break;
> case HDMI_SPDIF:
> - hdmi_params.aud_codec = HDMI_AUDIO_CODING_TYPE_PCM;
> - hdmi_params.aud_sample_size = HDMI_AUDIO_SAMPLE_SIZE_16;
> - hdmi_params.aud_input_type = HDMI_AUD_INPUT_SPDIF;
> + aud_params.aud_codec = HDMI_AUDIO_CODING_TYPE_PCM;
> + aud_params.aud_sample_size = HDMI_AUDIO_SAMPLE_SIZE_16;
> + aud_params.aud_input_type = HDMI_AUD_INPUT_SPDIF;
> break;
> default:
> dev_err(hdmi->dev, "%s: Invalid DAI format %d\n", __func__,
> daifmt->fmt);
> return -EINVAL;
> }
> -
> - memcpy(&hdmi_params.codec_params, params,
> - sizeof(hdmi_params.codec_params));
> - memcpy(&hdmi->aud_param, &hdmi_params, sizeof(hdmi_params));
> + memcpy(&aud_params.codec_params, params, sizeof(aud_params.codec_params));
> + memcpy(&hdmi->aud_param, &aud_params, sizeof(aud_params));
>
> dev_dbg(hdmi->dev, "codec:%d, input:%d, channel:%d, fs:%d\n",
> - hdmi_params.aud_codec, hdmi_params.aud_input_type,
> - hdmi_params.aud_input_chan_type, hdmi_params.codec_params.sample_rate);
> + aud_params.aud_codec, aud_params.aud_input_type,
> + aud_params.aud_input_chan_type, aud_params.codec_params.sample_rate);
> +
> + return 0;
> +}
> +
> +static int mtk_hdmi_audio_hw_params(struct device *dev, void *data,
> + struct hdmi_codec_daifmt *daifmt,
> + struct hdmi_codec_params *params)
> +{
> + struct mtk_hdmi *hdmi = dev_get_drvdata(dev);
> +
> + if (!hdmi->audio_enable) {
> + dev_err(hdmi->dev, "hdmi audio is in disable state!\n");
> + return -EINVAL;
> + }
>
> + mtk_hdmi_audio_params(hdmi, daifmt, params);
> mtk_hdmi_aud_output_config(hdmi, &hdmi->mode);
>
> return 0;
> --
> 2.47.0
>


</pre>
</p></body></html><!--type:text--><!--{--><pre>************* MEDIATEK Confidentiality Notice
 ********************
The information contained in this e-mail message (including any 
attachments) may be confidential, proprietary, privileged, or otherwise
exempt from disclosure under applicable laws. It is intended to be 
conveyed only to the designated recipient(s). Any use, dissemination, 
distribution, printing, retaining or copying of this e-mail (including its 
attachments) by unintended recipient(s) is strictly prohibited and may 
be unlawful. If you are not an intended recipient of this e-mail, or believe
 
that you have received this e-mail in error, please notify the sender 
immediately (by replying to this e-mail), delete any and all copies of 
this e-mail (including any attachments) from your system, and do not
disclose the content of this e-mail to any other person. Thank you!
</pre><!--}-->