Lines Matching refs:ctrl

152 static int slim_add_device(struct slim_controller *ctrl,  in slim_add_device()  argument
157 sbdev->dev.parent = ctrl->dev; in slim_add_device()
160 sbdev->ctrl = ctrl; in slim_add_device()
175 static struct slim_device *slim_alloc_device(struct slim_controller *ctrl, in slim_alloc_device() argument
187 ret = slim_add_device(ctrl, sbdev, node); in slim_alloc_device()
196 static void of_register_slim_devices(struct slim_controller *ctrl) in of_register_slim_devices() argument
198 struct device *dev = ctrl->dev; in of_register_slim_devices()
201 if (!ctrl->dev->of_node) in of_register_slim_devices()
204 for_each_child_of_node(ctrl->dev->of_node, node) { in of_register_slim_devices()
234 sbdev = slim_alloc_device(ctrl, &e_addr, node); in of_register_slim_devices()
249 int slim_register_controller(struct slim_controller *ctrl) in slim_register_controller() argument
257 ctrl->id = id; in slim_register_controller()
259 if (!ctrl->min_cg) in slim_register_controller()
260 ctrl->min_cg = SLIM_MIN_CLK_GEAR; in slim_register_controller()
261 if (!ctrl->max_cg) in slim_register_controller()
262 ctrl->max_cg = SLIM_MAX_CLK_GEAR; in slim_register_controller()
264 ida_init(&ctrl->laddr_ida); in slim_register_controller()
265 idr_init(&ctrl->tid_idr); in slim_register_controller()
266 mutex_init(&ctrl->lock); in slim_register_controller()
267 mutex_init(&ctrl->sched.m_reconf); in slim_register_controller()
268 init_completion(&ctrl->sched.pause_comp); in slim_register_controller()
269 spin_lock_init(&ctrl->txn_lock); in slim_register_controller()
271 dev_dbg(ctrl->dev, "Bus [%s] registered:dev:%p\n", in slim_register_controller()
272 ctrl->name, ctrl->dev); in slim_register_controller()
274 of_register_slim_devices(ctrl); in slim_register_controller()
298 int slim_unregister_controller(struct slim_controller *ctrl) in slim_unregister_controller() argument
301 device_for_each_child(ctrl->dev, NULL, slim_ctrl_remove_device); in slim_unregister_controller()
302 ida_free(&ctrl_ida, ctrl->id); in slim_unregister_controller()
316 struct slim_controller *ctrl = sbdev->ctrl; in slim_report_absent() local
318 if (!ctrl) in slim_report_absent()
322 mutex_lock(&ctrl->lock); in slim_report_absent()
324 mutex_unlock(&ctrl->lock); in slim_report_absent()
325 if (!ctrl->get_laddr) in slim_report_absent()
326 ida_free(&ctrl->laddr_ida, sbdev->laddr); in slim_report_absent()
348 static struct slim_device *find_slim_device(struct slim_controller *ctrl, in find_slim_device() argument
354 dev = device_find_child(ctrl->dev, eaddr, slim_match_dev); in find_slim_device()
372 struct slim_device *slim_get_device(struct slim_controller *ctrl, in slim_get_device() argument
377 sbdev = find_slim_device(ctrl, e_addr); in slim_get_device()
379 sbdev = slim_alloc_device(ctrl, e_addr, NULL); in slim_get_device()
388 static struct slim_device *of_find_slim_device(struct slim_controller *ctrl, in of_find_slim_device() argument
394 dev = device_find_child(ctrl->dev, np, device_match_of_node); in of_find_slim_device()
412 struct slim_device *of_slim_get_device(struct slim_controller *ctrl, in of_slim_get_device() argument
415 return of_find_slim_device(ctrl, np); in of_slim_get_device()
422 struct slim_controller *ctrl = sbdev->ctrl; in slim_device_alloc_laddr() local
426 mutex_lock(&ctrl->lock); in slim_device_alloc_laddr()
427 if (ctrl->get_laddr) { in slim_device_alloc_laddr()
428 ret = ctrl->get_laddr(ctrl, &sbdev->e_addr, &laddr); in slim_device_alloc_laddr()
432 ret = ida_alloc_max(&ctrl->laddr_ida, in slim_device_alloc_laddr()
443 if (ctrl->set_laddr) { in slim_device_alloc_laddr()
444 ret = ctrl->set_laddr(ctrl, &sbdev->e_addr, laddr); in slim_device_alloc_laddr()
453 mutex_unlock(&ctrl->lock); in slim_device_alloc_laddr()
457 dev_dbg(ctrl->dev, "setting slimbus l-addr:%x, ea:%x,%x,%x,%x\n", in slim_device_alloc_laddr()
464 mutex_unlock(&ctrl->lock); in slim_device_alloc_laddr()
481 int slim_device_report_present(struct slim_controller *ctrl, in slim_device_report_present() argument
487 ret = pm_runtime_get_sync(ctrl->dev); in slim_device_report_present()
489 if (ctrl->sched.clk_state != SLIM_CLK_ACTIVE) { in slim_device_report_present()
490 dev_err(ctrl->dev, "slim ctrl not active,state:%d, ret:%d\n", in slim_device_report_present()
491 ctrl->sched.clk_state, ret); in slim_device_report_present()
495 sbdev = slim_get_device(ctrl, e_addr); in slim_device_report_present()
507 pm_runtime_mark_last_busy(ctrl->dev); in slim_device_report_present()
508 pm_runtime_put_autosuspend(ctrl->dev); in slim_device_report_present()