Lines Matching refs:ac97_ctrl
60 ac97_codec_find(struct ac97_controller *ac97_ctrl, unsigned int codec_num) in ac97_codec_find() argument
65 return ac97_ctrl->codecs[codec_num]; in ac97_codec_find()
69 ac97_of_get_child_device(struct ac97_controller *ac97_ctrl, int idx, in ac97_of_get_child_device() argument
79 for_each_child_of_node(ac97_ctrl->parent->of_node, node) { in ac97_of_get_child_device()
92 struct ac97_controller *ac97_ctrl; in ac97_codec_release() local
95 ac97_ctrl = adev->ac97_ctrl; in ac97_codec_release()
96 ac97_ctrl->codecs[adev->num] = NULL; in ac97_codec_release()
101 static int ac97_codec_add(struct ac97_controller *ac97_ctrl, int idx, in ac97_codec_add() argument
110 ac97_ctrl->codecs[idx] = codec; in ac97_codec_add()
114 codec->dev.parent = &ac97_ctrl->adap; in ac97_codec_add()
116 codec->ac97_ctrl = ac97_ctrl; in ac97_codec_add()
119 dev_set_name(&codec->dev, "%s:%u", dev_name(ac97_ctrl->parent), idx); in ac97_codec_add()
120 codec->dev.of_node = ac97_of_get_child_device(ac97_ctrl, idx, in ac97_codec_add()
153 static int ac97_bus_scan(struct ac97_controller *ac97_ctrl) in ac97_bus_scan() argument
159 if (ac97_codec_find(ac97_ctrl, i)) in ac97_bus_scan()
161 if (!(ac97_ctrl->slots_available & BIT(i))) in ac97_bus_scan()
163 vendor_id = snd_ac97_bus_scan_one(ac97_ctrl, i); in ac97_bus_scan()
167 ret = ac97_codec_add(ac97_ctrl, i, vendor_id); in ac97_bus_scan()
174 static int ac97_bus_reset(struct ac97_controller *ac97_ctrl) in ac97_bus_reset() argument
176 ac97_ctrl->ops->reset(ac97_ctrl); in ac97_bus_reset()
221 struct ac97_controller *ac97_ctrl = adev->ac97_ctrl; in snd_ac97_codec_get_platdata() local
223 return ac97_ctrl->codecs_pdata[adev->num]; in snd_ac97_codec_get_platdata()
227 static void ac97_ctrl_codecs_unregister(struct ac97_controller *ac97_ctrl) in ac97_ctrl_codecs_unregister() argument
232 if (ac97_ctrl->codecs[i]) { in ac97_ctrl_codecs_unregister()
233 ac97_ctrl->codecs[i]->ac97_ctrl = &ac97_unbound_ctrl; in ac97_ctrl_codecs_unregister()
234 device_unregister(&ac97_ctrl->codecs[i]->dev); in ac97_ctrl_codecs_unregister()
242 struct ac97_controller *ac97_ctrl; in cold_reset_store() local
245 ac97_ctrl = to_ac97_controller(dev); in cold_reset_store()
246 ac97_ctrl->ops->reset(ac97_ctrl); in cold_reset_store()
255 struct ac97_controller *ac97_ctrl; in warm_reset_store() local
261 ac97_ctrl = to_ac97_controller(dev); in warm_reset_store()
262 ac97_ctrl->ops->warm_reset(ac97_ctrl); in warm_reset_store()
283 static void ac97_del_adapter(struct ac97_controller *ac97_ctrl) in ac97_del_adapter() argument
286 ac97_ctrl_codecs_unregister(ac97_ctrl); in ac97_del_adapter()
287 list_del(&ac97_ctrl->controllers); in ac97_del_adapter()
290 device_unregister(&ac97_ctrl->adap); in ac97_del_adapter()
295 struct ac97_controller *ac97_ctrl; in ac97_adapter_release() local
297 ac97_ctrl = to_ac97_controller(dev); in ac97_adapter_release()
298 idr_remove(&ac97_adapter_idr, ac97_ctrl->nr); in ac97_adapter_release()
299 dev_dbg(&ac97_ctrl->adap, "adapter unregistered by %s\n", in ac97_adapter_release()
300 dev_name(ac97_ctrl->parent)); in ac97_adapter_release()
301 kfree(ac97_ctrl); in ac97_adapter_release()
309 static int ac97_add_adapter(struct ac97_controller *ac97_ctrl) in ac97_add_adapter() argument
314 ret = idr_alloc(&ac97_adapter_idr, ac97_ctrl, 0, 0, GFP_KERNEL); in ac97_add_adapter()
315 ac97_ctrl->nr = ret; in ac97_add_adapter()
317 dev_set_name(&ac97_ctrl->adap, "ac97-%d", ret); in ac97_add_adapter()
318 ac97_ctrl->adap.type = &ac97_adapter_type; in ac97_add_adapter()
319 ac97_ctrl->adap.parent = ac97_ctrl->parent; in ac97_add_adapter()
320 ret = device_register(&ac97_ctrl->adap); in ac97_add_adapter()
322 put_device(&ac97_ctrl->adap); in ac97_add_adapter()
324 kfree(ac97_ctrl); in ac97_add_adapter()
327 list_add(&ac97_ctrl->controllers, &ac97_controllers); in ac97_add_adapter()
328 dev_dbg(&ac97_ctrl->adap, "adapter registered by %s\n", in ac97_add_adapter()
329 dev_name(ac97_ctrl->parent)); in ac97_add_adapter()
351 struct ac97_controller *ac97_ctrl; in snd_ac97_controller_register() local
354 ac97_ctrl = kzalloc(sizeof(*ac97_ctrl), GFP_KERNEL); in snd_ac97_controller_register()
355 if (!ac97_ctrl) in snd_ac97_controller_register()
359 ac97_ctrl->codecs_pdata[i] = codecs_pdata[i]; in snd_ac97_controller_register()
361 ac97_ctrl->ops = ops; in snd_ac97_controller_register()
362 ac97_ctrl->slots_available = slots_available; in snd_ac97_controller_register()
363 ac97_ctrl->parent = dev; in snd_ac97_controller_register()
364 ret = ac97_add_adapter(ac97_ctrl); in snd_ac97_controller_register()
368 ac97_bus_reset(ac97_ctrl); in snd_ac97_controller_register()
369 ac97_bus_scan(ac97_ctrl); in snd_ac97_controller_register()
371 return ac97_ctrl; in snd_ac97_controller_register()
380 void snd_ac97_controller_unregister(struct ac97_controller *ac97_ctrl) in snd_ac97_controller_unregister() argument
382 ac97_del_adapter(ac97_ctrl); in snd_ac97_controller_unregister()