~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/sound/soc/intel/boards/skl_hda_dsp_common.c

Version: ~ [ linux-6.3-rc3 ] ~ [ linux-6.2.7 ] ~ [ linux-6.1.20 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.103 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.175 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.237 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.278 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.310 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0-only
  2 // Copyright(c) 2015-18 Intel Corporation.
  3 
  4 /*
  5  * Common functions used in different Intel machine drivers
  6  */
  7 #include <linux/module.h>
  8 #include <linux/platform_device.h>
  9 #include <sound/core.h>
 10 #include <sound/jack.h>
 11 #include <sound/pcm.h>
 12 #include <sound/pcm_params.h>
 13 #include <sound/soc.h>
 14 #include "../../codecs/hdac_hdmi.h"
 15 #include "skl_hda_dsp_common.h"
 16 
 17 #include <sound/hda_codec.h>
 18 #include "../../codecs/hdac_hda.h"
 19 
 20 #define NAME_SIZE       32
 21 
 22 int skl_hda_hdmi_add_pcm(struct snd_soc_card *card, int device)
 23 {
 24         struct skl_hda_private *ctx = snd_soc_card_get_drvdata(card);
 25         struct skl_hda_hdmi_pcm *pcm;
 26         char dai_name[NAME_SIZE];
 27 
 28         pcm = devm_kzalloc(card->dev, sizeof(*pcm), GFP_KERNEL);
 29         if (!pcm)
 30                 return -ENOMEM;
 31 
 32         snprintf(dai_name, sizeof(dai_name), "intel-hdmi-hifi%d",
 33                  ctx->dai_index);
 34         pcm->codec_dai = snd_soc_card_get_codec_dai(card, dai_name);
 35         if (!pcm->codec_dai)
 36                 return -EINVAL;
 37 
 38         pcm->device = device;
 39         list_add_tail(&pcm->head, &ctx->hdmi_pcm_list);
 40 
 41         return 0;
 42 }
 43 
 44 SND_SOC_DAILINK_DEF(idisp1_cpu,
 45         DAILINK_COMP_ARRAY(COMP_CPU("iDisp1 Pin")));
 46 SND_SOC_DAILINK_DEF(idisp1_codec,
 47         DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi1")));
 48 
 49 SND_SOC_DAILINK_DEF(idisp2_cpu,
 50         DAILINK_COMP_ARRAY(COMP_CPU("iDisp2 Pin")));
 51 SND_SOC_DAILINK_DEF(idisp2_codec,
 52         DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi2")));
 53 
 54 SND_SOC_DAILINK_DEF(idisp3_cpu,
 55         DAILINK_COMP_ARRAY(COMP_CPU("iDisp3 Pin")));
 56 SND_SOC_DAILINK_DEF(idisp3_codec,
 57         DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi3")));
 58 
 59 SND_SOC_DAILINK_DEF(analog_cpu,
 60         DAILINK_COMP_ARRAY(COMP_CPU("Analog CPU DAI")));
 61 SND_SOC_DAILINK_DEF(analog_codec,
 62         DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D0", "Analog Codec DAI")));
 63 
 64 SND_SOC_DAILINK_DEF(digital_cpu,
 65         DAILINK_COMP_ARRAY(COMP_CPU("Digital CPU DAI")));
 66 SND_SOC_DAILINK_DEF(digital_codec,
 67         DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D0", "Digital Codec DAI")));
 68 
 69 SND_SOC_DAILINK_DEF(dmic_pin,
 70         DAILINK_COMP_ARRAY(COMP_CPU("DMIC01 Pin")));
 71 
 72 SND_SOC_DAILINK_DEF(dmic_codec,
 73         DAILINK_COMP_ARRAY(COMP_CODEC("dmic-codec", "dmic-hifi")));
 74 
 75 SND_SOC_DAILINK_DEF(dmic16k,
 76         DAILINK_COMP_ARRAY(COMP_CPU("DMIC16k Pin")));
 77 
 78 SND_SOC_DAILINK_DEF(platform,
 79         DAILINK_COMP_ARRAY(COMP_PLATFORM("0000:00:1f.3")));
 80 
 81 /* skl_hda_digital audio interface glue - connects codec <--> CPU */
 82 struct snd_soc_dai_link skl_hda_be_dai_links[HDA_DSP_MAX_BE_DAI_LINKS] = {
 83         /* Back End DAI links */
 84         {
 85                 .name = "iDisp1",
 86                 .id = 1,
 87                 .dpcm_playback = 1,
 88                 .no_pcm = 1,
 89                 SND_SOC_DAILINK_REG(idisp1_cpu, idisp1_codec, platform),
 90         },
 91         {
 92                 .name = "iDisp2",
 93                 .id = 2,
 94                 .dpcm_playback = 1,
 95                 .no_pcm = 1,
 96                 SND_SOC_DAILINK_REG(idisp2_cpu, idisp2_codec, platform),
 97         },
 98         {
 99                 .name = "iDisp3",
100                 .id = 3,
101                 .dpcm_playback = 1,
102                 .no_pcm = 1,
103                 SND_SOC_DAILINK_REG(idisp3_cpu, idisp3_codec, platform),
104         },
105         {
106                 .name = "Analog Playback and Capture",
107                 .id = 4,
108                 .dpcm_playback = 1,
109                 .dpcm_capture = 1,
110                 .no_pcm = 1,
111                 SND_SOC_DAILINK_REG(analog_cpu, analog_codec, platform),
112         },
113         {
114                 .name = "Digital Playback and Capture",
115                 .id = 5,
116                 .dpcm_playback = 1,
117                 .dpcm_capture = 1,
118                 .no_pcm = 1,
119                 SND_SOC_DAILINK_REG(digital_cpu, digital_codec, platform),
120         },
121         {
122                 .name = "dmic01",
123                 .id = 6,
124                 .dpcm_capture = 1,
125                 .no_pcm = 1,
126                 SND_SOC_DAILINK_REG(dmic_pin, dmic_codec, platform),
127         },
128         {
129                 .name = "dmic16k",
130                 .id = 7,
131                 .dpcm_capture = 1,
132                 .no_pcm = 1,
133                 SND_SOC_DAILINK_REG(dmic16k, dmic_codec, platform),
134         },
135 };
136 
137 int skl_hda_hdmi_jack_init(struct snd_soc_card *card)
138 {
139         struct skl_hda_private *ctx = snd_soc_card_get_drvdata(card);
140         struct snd_soc_component *component = NULL;
141         struct skl_hda_hdmi_pcm *pcm;
142         char jack_name[NAME_SIZE];
143         int err;
144 
145         if (ctx->common_hdmi_codec_drv)
146                 return skl_hda_hdmi_build_controls(card);
147 
148         list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) {
149                 component = pcm->codec_dai->component;
150                 snprintf(jack_name, sizeof(jack_name),
151                          "HDMI/DP, pcm=%d Jack", pcm->device);
152                 err = snd_soc_card_jack_new(card, jack_name,
153                                             SND_JACK_AVOUT, &pcm->hdmi_jack,
154                                             NULL, 0);
155 
156                 if (err)
157                         return err;
158 
159                 err = snd_jack_add_new_kctl(pcm->hdmi_jack.jack,
160                                             jack_name, SND_JACK_AVOUT);
161                 if (err)
162                         dev_warn(component->dev, "failed creating Jack kctl\n");
163 
164                 err = hdac_hdmi_jack_init(pcm->codec_dai, pcm->device,
165                                           &pcm->hdmi_jack);
166                 if (err < 0)
167                         return err;
168         }
169 
170         if (!component)
171                 return -EINVAL;
172 
173         return hdac_hdmi_jack_port_init(component, &card->dapm);
174 }
175 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp