]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/mediatek: mtk_hdmi: Move audio params selection to new function
authorAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Tue, 15 Apr 2025 10:43:07 +0000 (12:43 +0200)
committerChun-Kuang Hu <chunkuang.hu@kernel.org>
Mon, 21 Apr 2025 13:36:32 +0000 (13:36 +0000)
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>
Link: https://patchwork.kernel.org/project/dri-devel/patch/20250415104321.51149-10-angelogioacchino.delregno@collabora.com/
Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
drivers/gpu/drm/mediatek/mtk_hdmi.c

index be4b34d83db1fe51410235accffa99ba49c39c09..697508edfa41fd3e36318b305276e38b2d4c1e73 100644 (file)
@@ -1450,19 +1450,13 @@ put_device:
  * 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);
 
@@ -1471,16 +1465,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);
@@ -1504,31 +1498,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;