]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commitdiff
ASoC: intel: sof_rt5682: common hdmi codec support
authorKai Vehmanen <kai.vehmanen@linux.intel.com>
Mon, 9 Dec 2019 08:45:21 +0000 (16:45 +0800)
committerSeth Forshee <seth.forshee@canonical.com>
Mon, 16 Dec 2019 17:37:25 +0000 (11:37 -0600)
BugLink: https://bugs.launchpad.net/bugs/1855666
Add support for using snd-hda-codec-hdmi driver for HDMI/DP
instead of ASoC hdac-hdmi. This is aligned with how other
HDA codecs are already handled.

Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Reviewed-by: Takashi Iwai <tiwai@suse.de>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20191029134017.18901-9-kai.vehmanen@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
(cherry picked from commit 59bbd703ea2eae7c2766713135e4742c07fbbad7)
Signed-off-by: Hui Wang <hui.wang@canonical.com>
Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
sound/soc/intel/boards/Makefile
sound/soc/intel/boards/sof_rt5682.c

index b36f44906c918828dbf7e3a35bd83ed1ad30ad8f..255cee8c7906526bdc5113ca03e2663d8c91a79b 100644 (file)
@@ -17,7 +17,7 @@ snd-soc-sst-byt-cht-cx2072x-objs := bytcht_cx2072x.o
 snd-soc-sst-byt-cht-da7213-objs := bytcht_da7213.o
 snd-soc-sst-byt-cht-es8316-objs := bytcht_es8316.o
 snd-soc-sst-byt-cht-nocodec-objs := bytcht_nocodec.o
-snd-soc-sof_rt5682-objs := sof_rt5682.o
+snd-soc-sof_rt5682-objs := sof_rt5682.o hda_dsp_common.o
 snd-soc-kbl_da7219_max98357a-objs := kbl_da7219_max98357a.o
 snd-soc-kbl_da7219_max98927-objs := kbl_da7219_max98927.o
 snd-soc-kbl_rt5663_max98927-objs := kbl_rt5663_max98927.o
index 4f6e58c3954a220fd0050c5d8c29089c0ee16622..4ef9d1ae142d23cdb76932e4a8cea11528d08d43 100644 (file)
@@ -21,6 +21,7 @@
 #include "../../codecs/rt5682.h"
 #include "../../codecs/hdac_hdmi.h"
 #include "../common/soc-intel-quirks.h"
+#include "hda_dsp_common.h"
 
 #define NAME_SIZE 32
 
@@ -53,6 +54,7 @@ struct sof_card_private {
        struct clk *mclk;
        struct snd_soc_jack sof_headset;
        struct list_head hdmi_pcm_list;
+       bool common_hdmi_codec_drv;
 };
 
 static int sof_rt5682_quirk_cb(const struct dmi_system_id *id)
@@ -274,6 +276,13 @@ static int sof_card_late_probe(struct snd_soc_card *card)
        if (is_legacy_cpu)
                return 0;
 
+       pcm = list_first_entry(&ctx->hdmi_pcm_list, struct sof_hdmi_pcm,
+                              head);
+       component = pcm->codec_dai->component;
+
+       if (ctx->common_hdmi_codec_drv)
+               return hda_dsp_hdmi_build_controls(card, component);
+
        list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) {
                component = pcm->codec_dai->component;
                snprintf(jack_name, sizeof(jack_name),
@@ -651,6 +660,8 @@ static int sof_audio_probe(struct platform_device *pdev)
        if (ret)
                return ret;
 
+       ctx->common_hdmi_codec_drv = mach->mach_params.common_hdmi_codec_drv;
+
        snd_soc_card_set_drvdata(&sof_audio_card_rt5682, ctx);
 
        return devm_snd_soc_register_card(&pdev->dev,