xref: /linux/sound/soc/intel/boards/sof_sdw_hdmi.c (revision 3a39d672e7f48b8d6b91a09afa4b55352773b4b5)
1 // SPDX-License-Identifier: GPL-2.0-only
2 // Copyright (c) 2020 Intel Corporation
3 
4 /*
5  *  sof_sdw_hdmi - Helpers to handle HDMI from generic machine driver
6  */
7 
8 #include <linux/acpi.h>
9 #include <linux/device.h>
10 #include <linux/errno.h>
11 #include <linux/kernel.h>
12 #include <linux/list.h>
13 #include <linux/soundwire/sdw_intel.h>
14 #include <sound/soc.h>
15 #include <sound/soc-acpi.h>
16 #include <sound/jack.h>
17 #include "sof_sdw_common.h"
18 #include "hda_dsp_common.h"
19 
sof_sdw_hdmi_init(struct snd_soc_pcm_runtime * rtd)20 int sof_sdw_hdmi_init(struct snd_soc_pcm_runtime *rtd)
21 {
22 	struct asoc_sdw_mc_private *ctx = snd_soc_card_get_drvdata(rtd->card);
23 	struct intel_mc_ctx *intel_ctx = (struct intel_mc_ctx *)ctx->private;
24 	struct snd_soc_dai *dai = snd_soc_rtd_to_codec(rtd, 0);
25 
26 	intel_ctx->hdmi.hdmi_comp = dai->component;
27 
28 	return 0;
29 }
30 
sof_sdw_hdmi_card_late_probe(struct snd_soc_card * card)31 int sof_sdw_hdmi_card_late_probe(struct snd_soc_card *card)
32 {
33 	struct asoc_sdw_mc_private *ctx = snd_soc_card_get_drvdata(card);
34 	struct intel_mc_ctx *intel_ctx = (struct intel_mc_ctx *)ctx->private;
35 
36 	if (!intel_ctx->hdmi.idisp_codec)
37 		return 0;
38 
39 	if (!intel_ctx->hdmi.hdmi_comp)
40 		return -EINVAL;
41 
42 	return hda_dsp_hdmi_build_controls(card, intel_ctx->hdmi.hdmi_comp);
43 }
44