diff options
Diffstat (limited to 'target/linux/bcm27xx/patches-5.10/950-0632-ASoC-hdmi-codec-Rework-to-support-more-controls.patch')
-rw-r--r-- | target/linux/bcm27xx/patches-5.10/950-0632-ASoC-hdmi-codec-Rework-to-support-more-controls.patch | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.10/950-0632-ASoC-hdmi-codec-Rework-to-support-more-controls.patch b/target/linux/bcm27xx/patches-5.10/950-0632-ASoC-hdmi-codec-Rework-to-support-more-controls.patch new file mode 100644 index 0000000000..b0c403304f --- /dev/null +++ b/target/linux/bcm27xx/patches-5.10/950-0632-ASoC-hdmi-codec-Rework-to-support-more-controls.patch @@ -0,0 +1,76 @@ +From 0ddc79efb48c97f0e678807fbe2471f122fd41f6 Mon Sep 17 00:00:00 2001 +From: Maxime Ripard <maxime@cerno.tech> +Date: Wed, 28 Apr 2021 11:56:26 +0200 +Subject: [PATCH] ASoC: hdmi-codec: Rework to support more controls + +We're going to add more controls to support the IEC958 output, so let's +rework the control registration a bit to support more of them. + +Signed-off-by: Maxime Ripard <maxime@cerno.tech> +--- + sound/soc/codecs/hdmi-codec.c | 41 ++++++++++++++++++++++------------- + 1 file changed, 26 insertions(+), 15 deletions(-) + +--- a/sound/soc/codecs/hdmi-codec.c ++++ b/sound/soc/codecs/hdmi-codec.c +@@ -619,21 +619,23 @@ static const struct snd_soc_dai_ops hdmi + SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S32_BE |\ + SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE) + ++struct snd_kcontrol_new hdmi_codec_controls[] = { ++ { ++ .access = (SNDRV_CTL_ELEM_ACCESS_READ | ++ SNDRV_CTL_ELEM_ACCESS_VOLATILE), ++ .iface = SNDRV_CTL_ELEM_IFACE_PCM, ++ .name = "ELD", ++ .info = hdmi_eld_ctl_info, ++ .get = hdmi_eld_ctl_get, ++ }, ++}; ++ + static int hdmi_codec_pcm_new(struct snd_soc_pcm_runtime *rtd, + struct snd_soc_dai *dai) + { + struct snd_soc_dai_driver *drv = dai->driver; + struct hdmi_codec_priv *hcp = snd_soc_dai_get_drvdata(dai); +- struct snd_kcontrol *kctl; +- struct snd_kcontrol_new hdmi_eld_ctl = { +- .access = SNDRV_CTL_ELEM_ACCESS_READ | +- SNDRV_CTL_ELEM_ACCESS_VOLATILE, +- .iface = SNDRV_CTL_ELEM_IFACE_PCM, +- .name = "ELD", +- .info = hdmi_eld_ctl_info, +- .get = hdmi_eld_ctl_get, +- .device = rtd->pcm->device, +- }; ++ unsigned int i; + int ret; + + ret = snd_pcm_add_chmap_ctls(rtd->pcm, SNDRV_PCM_STREAM_PLAYBACK, +@@ -650,12 +652,21 @@ static int hdmi_codec_pcm_new(struct snd + hcp->chmap_info->chmap = hdmi_codec_stereo_chmaps; + hcp->chmap_idx = HDMI_CODEC_CHMAP_IDX_UNKNOWN; + +- /* add ELD ctl with the device number corresponding to the PCM stream */ +- kctl = snd_ctl_new1(&hdmi_eld_ctl, dai->component); +- if (!kctl) +- return -ENOMEM; ++ for (i = 0; i < ARRAY_SIZE(hdmi_codec_controls); i++) { ++ struct snd_kcontrol *kctl; ++ ++ /* add ELD ctl with the device number corresponding to the PCM stream */ ++ kctl = snd_ctl_new1(&hdmi_codec_controls[i], dai->component); ++ if (!kctl) ++ return -ENOMEM; ++ ++ kctl->id.device = rtd->pcm->device; ++ ret = snd_ctl_add(rtd->card->snd_card, kctl); ++ if (ret < 0) ++ return ret; ++ } + +- return snd_ctl_add(rtd->card->snd_card, kctl); ++ return 0; + } + + static int hdmi_dai_probe(struct snd_soc_dai *dai) |