mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 19:13:47 +02:00
drm/mediatek: mtk_hdmi: Move audio params selection to new function
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>
This commit is contained in:
parent
b506ff3316
commit
332de7d7c2
|
|
@ -1450,19 +1450,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);
|
||||
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user