Lines Matching +full:codec +full:- +full:driver
1 // SPDX-License-Identifier: GPL-2.0-only
18 #include <sound/ac97/codec.h>
42 return -ENODEV; in ac97_unbound_ctrl_write()
48 return -ENODEV; in ac97_unbound_ctrl_read()
64 return ERR_PTR(-EINVAL); in ac97_codec_find()
66 return ac97_ctrl->codecs[codec_num]; in ac97_codec_find()
80 for_each_child_of_node(ac97_ctrl->parent->of_node, node) { in ac97_of_get_child_device()
96 ac97_ctrl = adev->ac97_ctrl; in ac97_codec_release()
97 ac97_ctrl->codecs[adev->num] = NULL; in ac97_codec_release()
98 of_node_put(dev->of_node); in ac97_codec_release()
105 struct ac97_codec_device *codec; in ac97_codec_add() local
108 codec = kzalloc(sizeof(*codec), GFP_KERNEL); in ac97_codec_add()
109 if (!codec) in ac97_codec_add()
110 return -ENOMEM; in ac97_codec_add()
111 ac97_ctrl->codecs[idx] = codec; in ac97_codec_add()
112 codec->vendor_id = vendor_id; in ac97_codec_add()
113 codec->dev.release = ac97_codec_release; in ac97_codec_add()
114 codec->dev.bus = &ac97_bus_type; in ac97_codec_add()
115 codec->dev.parent = &ac97_ctrl->adap; in ac97_codec_add()
116 codec->num = idx; in ac97_codec_add()
117 codec->ac97_ctrl = ac97_ctrl; in ac97_codec_add()
119 device_initialize(&codec->dev); in ac97_codec_add()
120 dev_set_name(&codec->dev, "%s:%u", dev_name(ac97_ctrl->parent), idx); in ac97_codec_add()
121 codec->dev.of_node = ac97_of_get_child_device(ac97_ctrl, idx, in ac97_codec_add()
124 ret = device_add(&codec->dev); in ac97_codec_add()
126 put_device(&codec->dev); in ac97_codec_add()
139 ret = adrv->ops->read(adrv, codec_num, AC97_VENDOR_ID1); in snd_ac97_bus_scan_one()
144 ret = adrv->ops->read(adrv, codec_num, AC97_VENDOR_ID2); in snd_ac97_bus_scan_one()
149 dev_dbg(&adrv->adap, "%s(codec_num=%u): vendor_id=0x%08x\n", in snd_ac97_bus_scan_one()
162 if (!(ac97_ctrl->slots_available & BIT(i))) in ac97_bus_scan()
177 ac97_ctrl->ops->reset(ac97_ctrl); in ac97_bus_reset()
183 * snd_ac97_codec_driver_register - register an AC97 codec driver
184 * @dev: AC97 driver codec to register
186 * Register an AC97 codec driver to the ac97 bus driver, aka. the AC97 digital
193 drv->driver.bus = &ac97_bus_type; in snd_ac97_codec_driver_register()
194 return driver_register(&drv->driver); in snd_ac97_codec_driver_register()
199 * snd_ac97_codec_driver_unregister - unregister an AC97 codec driver
200 * @dev: AC97 codec driver to unregister
202 * Unregister a previously registered ac97 codec driver.
206 driver_unregister(&drv->driver); in snd_ac97_codec_driver_unregister()
211 * snd_ac97_codec_get_platdata - get platform_data
212 * @adev: the ac97 codec device
214 * For legacy platforms, in order to have platform_data in codec drivers
215 * available, while ac97 device are auto-created upon probe, this retrieves the
222 struct ac97_controller *ac97_ctrl = adev->ac97_ctrl; in snd_ac97_codec_get_platdata()
224 return ac97_ctrl->codecs_pdata[adev->num]; in snd_ac97_codec_get_platdata()
233 if (ac97_ctrl->codecs[i]) { in ac97_ctrl_codecs_unregister()
234 ac97_ctrl->codecs[i]->ac97_ctrl = &ac97_unbound_ctrl; in ac97_ctrl_codecs_unregister()
235 device_unregister(&ac97_ctrl->codecs[i]->dev); in ac97_ctrl_codecs_unregister()
247 ac97_ctrl->ops->reset(ac97_ctrl); in cold_reset_store()
260 return -ENODEV; in warm_reset_store()
264 ac97_ctrl->ops->warm_reset(ac97_ctrl); in warm_reset_store()
290 list_del(&ac97_ctrl->controllers); in ac97_del_adapter()
293 device_unregister(&ac97_ctrl->adap); in ac97_del_adapter()
301 idr_remove(&ac97_adapter_idr, ac97_ctrl->nr); in ac97_adapter_release()
302 dev_dbg(&ac97_ctrl->adap, "adapter unregistered by %s\n", in ac97_adapter_release()
303 dev_name(ac97_ctrl->parent)); in ac97_adapter_release()
317 ac97_ctrl->nr = ret; in ac97_add_adapter()
319 dev_set_name(&ac97_ctrl->adap, "ac97-%d", ret); in ac97_add_adapter()
320 ac97_ctrl->adap.type = &ac97_adapter_type; in ac97_add_adapter()
321 ac97_ctrl->adap.parent = ac97_ctrl->parent; in ac97_add_adapter()
322 ret = device_register(&ac97_ctrl->adap); in ac97_add_adapter()
324 put_device(&ac97_ctrl->adap); in ac97_add_adapter()
327 list_add(&ac97_ctrl->controllers, &ac97_controllers); in ac97_add_adapter()
331 dev_dbg(&ac97_ctrl->adap, "adapter registered by %s\n", in ac97_add_adapter()
332 dev_name(ac97_ctrl->parent)); in ac97_add_adapter()
337 * snd_ac97_controller_register - register an ac97 controller
341 * bit0 => codec 0, bit1 => codec 1 ... bit 3 => codec 3
344 * the controller side of the AC97 AC-link, while the slave side are the codecs.
357 return ERR_PTR(-ENOMEM); in snd_ac97_controller_register()
360 ac97_ctrl->codecs_pdata[i] = codecs_pdata[i]; in snd_ac97_controller_register()
362 ac97_ctrl->ops = ops; in snd_ac97_controller_register()
363 ac97_ctrl->slots_available = slots_available; in snd_ac97_controller_register()
364 ac97_ctrl->parent = dev; in snd_ac97_controller_register()
380 * snd_ac97_controller_unregister - unregister an ac97 controller
393 struct ac97_codec_device *codec = to_ac97_device(dev); in ac97_pm_runtime_suspend() local
396 if (ret == 0 && dev->driver) { in ac97_pm_runtime_suspend()
398 clk_disable(codec->clk); in ac97_pm_runtime_suspend()
400 clk_disable_unprepare(codec->clk); in ac97_pm_runtime_suspend()
408 struct ac97_codec_device *codec = to_ac97_device(dev); in ac97_pm_runtime_resume() local
411 if (dev->driver) { in ac97_pm_runtime_resume()
413 ret = clk_enable(codec->clk); in ac97_pm_runtime_resume()
415 ret = clk_prepare_enable(codec->clk); in ac97_pm_runtime_resume()
441 adev->clk = clk_get(&adev->dev, "ac97_clk"); in ac97_get_enable_clk()
442 if (IS_ERR(adev->clk)) in ac97_get_enable_clk()
443 return PTR_ERR(adev->clk); in ac97_get_enable_clk()
445 ret = clk_prepare_enable(adev->clk); in ac97_get_enable_clk()
447 clk_put(adev->clk); in ac97_get_enable_clk()
454 clk_disable_unprepare(adev->clk); in ac97_put_disable_clk()
455 clk_put(adev->clk); in ac97_put_disable_clk()
461 struct ac97_codec_device *codec = to_ac97_device(dev); in vendor_id_show() local
463 return sysfs_emit(buf, "%08x", codec->vendor_id); in vendor_id_show()
477 const struct ac97_id *id = adrv->id_table; in ac97_bus_match()
480 if (adev->vendor_id == 0x0 || adev->vendor_id == 0xffffffff) in ac97_bus_match()
484 if (ac97_ids_match(id[i].id, adev->vendor_id, id[i].mask)) in ac97_bus_match()
494 struct ac97_codec_driver *adrv = to_ac97_driver(dev->driver); in ac97_bus_probe()
505 ret = adrv->probe(adev); in ac97_bus_probe()
520 struct ac97_codec_driver *adrv = to_ac97_driver(dev->driver); in ac97_bus_remove()
527 ret = adrv->remove(adev); in ac97_bus_remove()