Lines Matching +full:codec +full:- +full:driver

1 // SPDX-License-Identifier: GPL-2.0-only
24 static int hda_codec_mask = -1;
26 MODULE_PARM_DESC(codec_mask, "SOF HDA codec mask for probing");
28 /* load the legacy HDA codec driver */
29 static int request_codec_module(struct hda_codec *codec) in request_codec_module() argument
35 switch (codec->probe_id) { in request_codec_module()
38 mod = "snd-hda-codec-generic"; in request_codec_module()
42 snd_hdac_codec_modalias(&codec->core, alias, sizeof(alias)); in request_codec_module()
48 dev_dbg(&codec->core.dev, "loading codec module: %s\n", mod); in request_codec_module()
52 return device_attach(hda_codec_dev(codec)); in request_codec_module()
55 static int hda_codec_load_module(struct hda_codec *codec) in hda_codec_load_module() argument
59 ret = snd_hdac_device_register(&codec->core); in hda_codec_load_module()
61 dev_err(&codec->core.dev, "failed to register hdac device\n"); in hda_codec_load_module()
62 put_device(&codec->core.dev); in hda_codec_load_module()
66 ret = request_codec_module(codec); in hda_codec_load_module()
68 codec->probe_id = HDA_CODEC_ID_GENERIC; in hda_codec_load_module()
69 ret = request_codec_module(codec); in hda_codec_load_module()
80 struct hda_codec *codec; in hda_codec_jack_wake_enable() local
89 list_for_each_codec(codec, hbus) { in hda_codec_jack_wake_enable()
91 mask |= BIT(codec->core.addr); in hda_codec_jack_wake_enable()
92 if (codec->jacktbl.used) in hda_codec_jack_wake_enable()
93 val |= BIT(codec->core.addr); in hda_codec_jack_wake_enable()
96 list_for_each_codec(codec, hbus) { in hda_codec_jack_wake_enable()
98 mask |= BIT(codec->core.addr); in hda_codec_jack_wake_enable()
110 struct hda_codec *codec; in hda_codec_jack_check() local
116 list_for_each_codec(codec, hbus) in hda_codec_jack_check()
118 * Wake up all jack-detecting codecs regardless whether an event in hda_codec_jack_check()
121 if (codec->jacktbl.used) in hda_codec_jack_check()
122 pm_request_resume(&codec->core.dev); in hda_codec_jack_check()
128 ((bus)->modelname && !strcmp((bus)->modelname, "generic"))
135 struct hda_codec *codec; in hda_codec_device_init() local
137 codec = snd_hda_codec_device_init(to_hda_bus(bus), addr, "ehdaudio%dD%d", bus->idx, addr); in hda_codec_device_init()
138 if (IS_ERR(codec)) { in hda_codec_device_init()
139 dev_err(bus->dev, "device init failed for hdac device\n"); in hda_codec_device_init()
140 return codec; in hda_codec_device_init()
143 codec->core.type = type; in hda_codec_device_init()
145 return codec; in hda_codec_device_init()
148 /* probe individual codec */
153 struct hda_codec *codec; in hda_codec_probe() local
156 u32 resp = -1; in hda_codec_probe()
160 mutex_lock(&hbus->core.cmd_mutex); in hda_codec_probe()
161 snd_hdac_bus_send_cmd(&hbus->core, hda_cmd); in hda_codec_probe()
162 snd_hdac_bus_get_response(&hbus->core, address, &resp); in hda_codec_probe()
163 mutex_unlock(&hbus->core.cmd_mutex); in hda_codec_probe()
164 } while (resp == -1 && retry++ < CODEC_PROBE_RETRIES); in hda_codec_probe()
166 if (resp == -1) in hda_codec_probe()
167 return -EIO; in hda_codec_probe()
168 dev_dbg(sdev->dev, "HDA codec #%d probed OK: response: %x\n", in hda_codec_probe()
171 hda_priv = devm_kzalloc(sdev->dev, sizeof(*hda_priv), GFP_KERNEL); in hda_codec_probe()
173 return -ENOMEM; in hda_codec_probe()
175 codec = hda_codec_device_init(&hbus->core, address, HDA_DEV_LEGACY); in hda_codec_probe()
176 ret = PTR_ERR_OR_ZERO(codec); in hda_codec_probe()
180 hda_priv->codec = codec; in hda_codec_probe()
181 hda_priv->dev_index = address; in hda_codec_probe()
182 dev_set_drvdata(&codec->core.dev, hda_priv); in hda_codec_probe()
185 if (!hbus->core.audio_component) { in hda_codec_probe()
186 dev_dbg(sdev->dev, in hda_codec_probe()
187 "iDisp hw present but no driver\n"); in hda_codec_probe()
188 ret = -ENOENT; in hda_codec_probe()
191 hda_priv->need_display_power = true; in hda_codec_probe()
195 codec->probe_id = HDA_CODEC_ID_GENERIC; in hda_codec_probe()
197 codec->probe_id = 0; in hda_codec_probe()
199 ret = hda_codec_load_module(codec); in hda_codec_probe()
201 * handle ret==0 (no driver bound) as an error, but pass in hda_codec_probe()
205 ret = -ENOENT; in hda_codec_probe()
209 snd_hdac_device_unregister(&codec->core); in hda_codec_probe()
210 put_device(&codec->core.dev); in hda_codec_probe()
216 /* Codec initialization */
229 if (!(bus->codec_mask & (1 << i))) in hda_codec_probe_bus()
234 dev_warn(bus->dev, "codec #%d probe error, ret: %d\n", in hda_codec_probe_bus()
236 bus->codec_mask &= ~BIT(i); in hda_codec_probe_bus()
267 if (!bus->codec_mask) { in hda_codec_detect_mask()
268 bus->codec_mask = snd_hdac_chip_readw(bus, STATESTS); in hda_codec_detect_mask()
269 dev_dbg(bus->dev, "codec_mask = 0x%lx\n", bus->codec_mask); in hda_codec_detect_mask()
272 if (hda_codec_mask != -1) { in hda_codec_detect_mask()
273 bus->codec_mask &= hda_codec_mask; in hda_codec_detect_mask()
274 dev_dbg(bus->dev, "filtered codec_mask = 0x%lx\n", in hda_codec_detect_mask()
275 bus->codec_mask); in hda_codec_detect_mask()
288 /* initialize the codec command I/O */ in hda_codec_init_cmd_io()
302 if (bus->cmd_dma_state) in hda_codec_resume_cmd_io()
315 /* initialize the codec command I/O */ in hda_codec_stop_cmd_io()
329 if (bus->cmd_dma_state) in hda_codec_suspend_cmd_io()
394 /* codec removal, invoke bus_device_remove */ in hda_codec_device_remove()
411 if (HDA_IDISP_CODEC(bus->codec_mask)) { in hda_codec_i915_display_power()
412 dev_dbg(bus->dev, "Turning i915 HDAC power %d\n", enable); in hda_codec_i915_display_power()
427 /* i915 exposes a HDA codec for HDMI audio */ in hda_codec_i915_init()
447 if (!bus->audio_component) in hda_codec_i915_exit()
457 MODULE_SOFTDEP("pre: snd-hda-codec-hdmi");