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@xxxxxxxxxxxx> > > Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@xxxxxxxxxxxxx> > --- > 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 >