Lines Matching +full:hdmi +full:- +full:codec
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Non-generic simple HDMI codec support
11 int snd_hda_hdmi_simple_build_pcms(struct hda_codec *codec) in snd_hda_hdmi_simple_build_pcms() argument
13 struct hdmi_spec *spec = codec->spec; in snd_hda_hdmi_simple_build_pcms()
20 chans = get_wcaps(codec, per_cvt->cvt_nid); in snd_hda_hdmi_simple_build_pcms()
23 info = snd_hda_codec_pcm_new(codec, "HDMI 0"); in snd_hda_hdmi_simple_build_pcms()
25 return -ENOMEM; in snd_hda_hdmi_simple_build_pcms()
26 spec->pcm_rec[0].pcm = info; in snd_hda_hdmi_simple_build_pcms()
27 info->pcm_type = HDA_PCM_TYPE_HDMI; in snd_hda_hdmi_simple_build_pcms()
28 pstr = &info->stream[SNDRV_PCM_STREAM_PLAYBACK]; in snd_hda_hdmi_simple_build_pcms()
29 *pstr = spec->pcm_playback; in snd_hda_hdmi_simple_build_pcms()
30 pstr->nid = per_cvt->cvt_nid; in snd_hda_hdmi_simple_build_pcms()
31 if (pstr->channels_max <= 2 && chans && chans <= 16) in snd_hda_hdmi_simple_build_pcms()
32 pstr->channels_max = chans; in snd_hda_hdmi_simple_build_pcms()
39 void snd_hda_hdmi_simple_unsol_event(struct hda_codec *codec, in snd_hda_hdmi_simple_unsol_event() argument
42 snd_hda_jack_set_dirty_all(codec); in snd_hda_hdmi_simple_unsol_event()
43 snd_hda_jack_report_sync(codec); in snd_hda_hdmi_simple_unsol_event()
49 struct hdmi_pcm *pcm = jack->private_data; in free_hdmi_jack_priv()
51 pcm->jack = NULL; in free_hdmi_jack_priv()
54 static int simple_hdmi_build_jack(struct hda_codec *codec) in simple_hdmi_build_jack() argument
56 char hdmi_str[32] = "HDMI/DP"; in simple_hdmi_build_jack()
57 struct hdmi_spec *spec = codec->spec; in simple_hdmi_build_jack()
60 int pcmdev = pcmp->pcm->device; in simple_hdmi_build_jack()
66 err = snd_jack_new(codec->card, hdmi_str, SND_JACK_AVOUT, &jack, in simple_hdmi_build_jack()
71 pcmp->jack = jack; in simple_hdmi_build_jack()
72 jack->private_data = pcmp; in simple_hdmi_build_jack()
73 jack->private_free = free_hdmi_jack_priv; in simple_hdmi_build_jack()
77 int snd_hda_hdmi_simple_build_controls(struct hda_codec *codec) in snd_hda_hdmi_simple_build_controls() argument
79 struct hdmi_spec *spec = codec->spec; in snd_hda_hdmi_simple_build_controls()
84 err = snd_hda_create_dig_out_ctls(codec, per_cvt->cvt_nid, in snd_hda_hdmi_simple_build_controls()
85 per_cvt->cvt_nid, in snd_hda_hdmi_simple_build_controls()
89 return simple_hdmi_build_jack(codec); in snd_hda_hdmi_simple_build_controls()
93 int snd_hda_hdmi_simple_init(struct hda_codec *codec) in snd_hda_hdmi_simple_init() argument
95 struct hdmi_spec *spec = codec->spec; in snd_hda_hdmi_simple_init()
97 hda_nid_t pin = per_pin->pin_nid; in snd_hda_hdmi_simple_init()
99 snd_hda_codec_write(codec, pin, 0, in snd_hda_hdmi_simple_init()
102 if (get_wcaps(codec, pin) & AC_WCAP_OUT_AMP) in snd_hda_hdmi_simple_init()
103 snd_hda_codec_write(codec, pin, 0, AC_VERB_SET_AMP_GAIN_MUTE, in snd_hda_hdmi_simple_init()
105 snd_hda_jack_detect_enable(codec, pin, per_pin->dev_id); in snd_hda_hdmi_simple_init()
110 void snd_hda_hdmi_simple_remove(struct hda_codec *codec) in snd_hda_hdmi_simple_remove() argument
112 struct hdmi_spec *spec = codec->spec; in snd_hda_hdmi_simple_remove()
114 snd_array_free(&spec->pins); in snd_hda_hdmi_simple_remove()
115 snd_array_free(&spec->cvts); in snd_hda_hdmi_simple_remove()
121 struct hda_codec *codec, in snd_hda_hdmi_simple_pcm_open() argument
124 struct hdmi_spec *spec = codec->spec; in snd_hda_hdmi_simple_pcm_open()
126 if (spec->hw_constraints_channels) { in snd_hda_hdmi_simple_pcm_open()
127 snd_pcm_hw_constraint_list(substream->runtime, 0, in snd_hda_hdmi_simple_pcm_open()
129 spec->hw_constraints_channels); in snd_hda_hdmi_simple_pcm_open()
131 snd_pcm_hw_constraint_step(substream->runtime, 0, in snd_hda_hdmi_simple_pcm_open()
135 return snd_hda_multi_out_dig_open(codec, &spec->multiout); in snd_hda_hdmi_simple_pcm_open()
140 struct hda_codec *codec, in simple_playback_pcm_close() argument
143 struct hdmi_spec *spec = codec->spec; in simple_playback_pcm_close()
145 return snd_hda_multi_out_dig_close(codec, &spec->multiout); in simple_playback_pcm_close()
149 struct hda_codec *codec, in simple_playback_pcm_prepare() argument
154 struct hdmi_spec *spec = codec->spec; in simple_playback_pcm_prepare()
156 return snd_hda_multi_out_dig_prepare(codec, &spec->multiout, in simple_playback_pcm_prepare()
171 int snd_hda_hdmi_simple_probe(struct hda_codec *codec, in snd_hda_hdmi_simple_probe() argument
180 return -ENOMEM; in snd_hda_hdmi_simple_probe()
182 spec->codec = codec; in snd_hda_hdmi_simple_probe()
183 codec->spec = spec; in snd_hda_hdmi_simple_probe()
184 snd_array_init(&spec->pins, sizeof(struct hdmi_spec_per_pin), 1); in snd_hda_hdmi_simple_probe()
185 snd_array_init(&spec->cvts, sizeof(struct hdmi_spec_per_cvt), 1); in snd_hda_hdmi_simple_probe()
187 spec->multiout.num_dacs = 0; /* no analog */ in snd_hda_hdmi_simple_probe()
188 spec->multiout.max_channels = 2; in snd_hda_hdmi_simple_probe()
189 spec->multiout.dig_out_nid = cvt_nid; in snd_hda_hdmi_simple_probe()
190 spec->num_cvts = 1; in snd_hda_hdmi_simple_probe()
191 spec->num_pins = 1; in snd_hda_hdmi_simple_probe()
192 per_pin = snd_array_new(&spec->pins); in snd_hda_hdmi_simple_probe()
193 per_cvt = snd_array_new(&spec->cvts); in snd_hda_hdmi_simple_probe()
195 snd_hda_hdmi_simple_remove(codec); in snd_hda_hdmi_simple_probe()
196 return -ENOMEM; in snd_hda_hdmi_simple_probe()
198 per_cvt->cvt_nid = cvt_nid; in snd_hda_hdmi_simple_probe()
199 per_pin->pin_nid = pin_nid; in snd_hda_hdmi_simple_probe()
200 spec->pcm_playback = simple_pcm_playback; in snd_hda_hdmi_simple_probe()
212 /* VIA HDMI Implementation */
214 #define VIAHDMI_PIN_NID 0x03 /* HDMI output pin1 */
216 static int simplehdmi_probe(struct hda_codec *codec, in simplehdmi_probe() argument
219 switch (id->driver_data) { in simplehdmi_probe()
221 return snd_hda_hdmi_simple_probe(codec, VIAHDMI_CVT_NID, in simplehdmi_probe()
224 return -EINVAL; in simplehdmi_probe()
238 HDA_CODEC_ID_MODEL(0x11069f80, "VX900 HDMI/DP", MODEL_VIA),
239 HDA_CODEC_ID_MODEL(0x11069f81, "VX900 HDMI/DP", MODEL_VIA),
244 MODULE_DESCRIPTION("Simple HDMI HD-audio codec support");