Lines Matching full:codec
16 static int hda_codec_create_dais(struct hda_codec *codec, int pcm_count, in hda_codec_create_dais() argument
19 struct device *dev = &codec->core.dev; in hda_codec_create_dais()
28 pcm = list_first_entry(&codec->pcm_list_head, struct hda_pcm, list); in hda_codec_create_dais()
83 static int hda_codec_register_dais(struct hda_codec *codec, struct snd_soc_component *component) in hda_codec_register_dais() argument
90 if (list_empty(&codec->pcm_list_head)) in hda_codec_register_dais()
92 list_for_each_entry(pcm, &codec->pcm_list_head, list) in hda_codec_register_dais()
95 ret = hda_codec_create_dais(codec, pcm_count, &drvs); in hda_codec_register_dais()
101 list_for_each_entry(pcm, &codec->pcm_list_head, list) { in hda_codec_register_dais()
124 static void hda_codec_unregister_dais(struct hda_codec *codec, in hda_codec_unregister_dais() argument
133 list_for_each_entry(pcm, &codec->pcm_list_head, list) { in hda_codec_unregister_dais()
146 int hda_codec_probe_complete(struct hda_codec *codec) in hda_codec_probe_complete() argument
148 struct hdac_device *hdev = &codec->core; in hda_codec_probe_complete()
152 ret = snd_hda_codec_build_controls(codec); in hda_codec_probe_complete()
161 snd_hda_codec_set_power_save(codec, 2000); in hda_codec_probe_complete()
162 snd_hda_codec_register(codec); in hda_codec_probe_complete()
172 /* Expects codec with usage_count=1 and status=suspended */
175 struct hda_codec *codec = dev_to_hda_codec(component->dev); in hda_codec_probe() local
176 struct hdac_device *hdev = &codec->core; in hda_codec_probe()
194 if (hda_codec_is_display(codec)) in hda_codec_probe()
198 ret = snd_hda_codec_device_new(codec->bus, component->card->snd_card, hdev->addr, codec, in hda_codec_probe()
201 dev_err(&hdev->dev, "codec create failed: %d\n", ret); in hda_codec_probe()
205 ret = snd_hda_codec_set_name(codec, codec->preset->name); in hda_codec_probe()
207 dev_err(&hdev->dev, "set name: %s failed: %d\n", codec->preset->name, ret); in hda_codec_probe()
211 ret = snd_hdac_regmap_init(&codec->core); in hda_codec_probe()
217 patch = (hda_codec_patch_t)codec->preset->driver_data; in hda_codec_probe()
224 ret = patch(codec); in hda_codec_probe()
226 dev_err(&hdev->dev, "codec init failed: %d\n", ret); in hda_codec_probe()
230 ret = snd_hda_codec_parse_pcms(codec); in hda_codec_probe()
236 ret = hda_codec_register_dais(codec, component); in hda_codec_probe()
242 if (!hda_codec_is_display(codec)) { in hda_codec_probe()
243 ret = hda_codec_probe_complete(codec); in hda_codec_probe()
248 codec->core.lazy_cache = true; in hda_codec_probe()
253 hda_codec_unregister_dais(codec, component); in hda_codec_probe()
255 if (codec->patch_ops.free) in hda_codec_probe()
256 codec->patch_ops.free(codec); in hda_codec_probe()
258 snd_hda_codec_cleanup_for_unbind(codec); in hda_codec_probe()
260 if (hda_codec_is_display(codec)) in hda_codec_probe()
270 /* Leaves codec with usage_count=1 and status=suspended */
273 struct hda_codec *codec = dev_to_hda_codec(component->dev); in hda_codec_remove() local
274 struct hdac_device *hdev = &codec->core; in hda_codec_remove()
277 bool was_registered = codec->core.registered; in hda_codec_remove()
282 hda_codec_unregister_dais(codec, component); in hda_codec_remove()
284 if (codec->patch_ops.free) in hda_codec_remove()
285 codec->patch_ops.free(codec); in hda_codec_remove()
287 snd_hda_codec_cleanup_for_unbind(codec); in hda_codec_remove()
292 if (hda_codec_is_display(codec)) in hda_codec_remove()
314 {"AIF1TX", NULL, "Codec Input Pin1"},
315 {"AIF2TX", NULL, "Codec Input Pin2"},
316 {"AIF3TX", NULL, "Codec Input Pin3"},
318 {"Codec Output Pin1", NULL, "AIF1RX"},
319 {"Codec Output Pin2", NULL, "AIF2RX"},
320 {"Codec Output Pin3", NULL, "AIF3RX"},
325 SND_SOC_DAPM_AIF_IN("AIF1RX", "Analog Codec Playback", 0, SND_SOC_NOPM, 0, 0),
326 SND_SOC_DAPM_AIF_IN("AIF2RX", "Digital Codec Playback", 0, SND_SOC_NOPM, 0, 0),
327 SND_SOC_DAPM_AIF_IN("AIF3RX", "Alt Analog Codec Playback", 0, SND_SOC_NOPM, 0, 0),
328 SND_SOC_DAPM_AIF_OUT("AIF1TX", "Analog Codec Capture", 0, SND_SOC_NOPM, 0, 0),
329 SND_SOC_DAPM_AIF_OUT("AIF2TX", "Digital Codec Capture", 0, SND_SOC_NOPM, 0, 0),
330 SND_SOC_DAPM_AIF_OUT("AIF3TX", "Alt Analog Codec Capture", 0, SND_SOC_NOPM, 0, 0),
333 SND_SOC_DAPM_INPUT("Codec Input Pin1"),
334 SND_SOC_DAPM_INPUT("Codec Input Pin2"),
335 SND_SOC_DAPM_INPUT("Codec Input Pin3"),
338 SND_SOC_DAPM_OUTPUT("Codec Output Pin1"),
339 SND_SOC_DAPM_OUTPUT("Codec Output Pin2"),
340 SND_SOC_DAPM_OUTPUT("Codec Output Pin3"),
345 .name = "codec-probing-DAI",
350 struct hda_codec *codec = dev_to_hda_codec(&hdev->dev); in hda_hdev_attach() local
353 if (hda_codec_is_display(codec) && !hdev->bus->audio_component) { in hda_hdev_attach()
364 * driver's lifetime is directly tied to hda codec one in hda_hdev_attach()
370 if (!hda_codec_is_display(codec)) { in hda_hdev_attach()
382 struct hda_codec *codec = dev_to_hda_codec(&hdev->dev); in hda_hdev_detach() local
384 if (codec->core.registered) in hda_hdev_detach()
385 cancel_delayed_work_sync(&codec->jackpoll_work); in hda_hdev_detach()
398 MODULE_DESCRIPTION("HD-Audio codec driver");