Lines Matching refs:sbdev
20 const struct slim_device *sbdev) in slim_match() argument
23 if (id->manf_id == sbdev->e_addr.manf_id && in slim_match()
24 id->prod_code == sbdev->e_addr.prod_code && in slim_match()
25 id->dev_index == sbdev->e_addr.dev_index && in slim_match()
26 id->instance == sbdev->e_addr.instance) in slim_match()
35 struct slim_device *sbdev = to_slim_device(dev); in slim_device_match() local
42 return !!slim_match(sbdrv->id_table, sbdev); in slim_device_match()
45 static void slim_device_update_status(struct slim_device *sbdev, in slim_device_update_status() argument
50 if (sbdev->status == status) in slim_device_update_status()
53 sbdev->status = status; in slim_device_update_status()
54 if (!sbdev->dev.driver) in slim_device_update_status()
57 sbdrv = to_slim_driver(sbdev->dev.driver); in slim_device_update_status()
59 sbdrv->device_status(sbdev, sbdev->status); in slim_device_update_status()
64 struct slim_device *sbdev = to_slim_device(dev); in slim_device_probe() local
68 ret = sbdrv->probe(sbdev); in slim_device_probe()
73 ret = slim_get_logical_addr(sbdev); in slim_device_probe()
75 slim_device_update_status(sbdev, SLIM_DEVICE_STATUS_UP); in slim_device_probe()
77 dev_err(&sbdev->dev, "Failed to get logical address\n"); in slim_device_probe()
86 struct slim_device *sbdev = to_slim_device(dev); in slim_device_remove() local
92 sbdrv->remove(sbdev); in slim_device_remove()
100 struct slim_device *sbdev = to_slim_device(dev); in slim_device_uevent() local
102 return add_uevent_var(env, "MODALIAS=slim:%s", dev_name(&sbdev->dev)); in slim_device_uevent()
149 struct slim_device *sbdev = to_slim_device(dev); in slim_dev_release() local
151 kfree(sbdev); in slim_dev_release()
155 struct slim_device *sbdev, in slim_add_device() argument
158 sbdev->dev.bus = &slimbus_bus; in slim_add_device()
159 sbdev->dev.parent = ctrl->dev; in slim_add_device()
160 sbdev->dev.release = slim_dev_release; in slim_add_device()
161 sbdev->dev.driver = NULL; in slim_add_device()
162 sbdev->ctrl = ctrl; in slim_add_device()
163 INIT_LIST_HEAD(&sbdev->stream_list); in slim_add_device()
164 spin_lock_init(&sbdev->stream_list_lock); in slim_add_device()
167 sbdev->dev.of_node = of_node_get(node); in slim_add_device()
169 dev_set_name(&sbdev->dev, "%x:%x:%x:%x", in slim_add_device()
170 sbdev->e_addr.manf_id, in slim_add_device()
171 sbdev->e_addr.prod_code, in slim_add_device()
172 sbdev->e_addr.dev_index, in slim_add_device()
173 sbdev->e_addr.instance); in slim_add_device()
175 return device_register(&sbdev->dev); in slim_add_device()
182 struct slim_device *sbdev; in slim_alloc_device() local
185 sbdev = kzalloc(sizeof(*sbdev), GFP_KERNEL); in slim_alloc_device()
186 if (!sbdev) in slim_alloc_device()
189 sbdev->e_addr = *eaddr; in slim_alloc_device()
190 ret = slim_add_device(ctrl, sbdev, node); in slim_alloc_device()
192 put_device(&sbdev->dev); in slim_alloc_device()
196 return sbdev; in slim_alloc_device()
208 struct slim_device *sbdev; in of_register_slim_devices() local
237 sbdev = slim_alloc_device(ctrl, &e_addr, node); in of_register_slim_devices()
238 if (!sbdev) in of_register_slim_devices()
284 static void slim_remove_device(struct slim_device *sbdev) in slim_remove_device() argument
286 device_unregister(&sbdev->dev); in slim_remove_device()
318 void slim_report_absent(struct slim_device *sbdev) in slim_report_absent() argument
320 struct slim_controller *ctrl = sbdev->ctrl; in slim_report_absent()
327 sbdev->is_laddr_valid = false; in slim_report_absent()
330 ida_simple_remove(&ctrl->laddr_ida, sbdev->laddr); in slim_report_absent()
331 slim_device_update_status(sbdev, SLIM_DEVICE_STATUS_DOWN); in slim_report_absent()
346 struct slim_device *sbdev = to_slim_device(dev); in slim_match_dev() local
348 return slim_eaddr_equal(&sbdev->e_addr, e_addr); in slim_match_dev()
354 struct slim_device *sbdev; in find_slim_device() local
359 sbdev = to_slim_device(dev); in find_slim_device()
360 return sbdev; in find_slim_device()
378 struct slim_device *sbdev; in slim_get_device() local
380 sbdev = find_slim_device(ctrl, e_addr); in slim_get_device()
381 if (!sbdev) { in slim_get_device()
382 sbdev = slim_alloc_device(ctrl, e_addr, NULL); in slim_get_device()
383 if (!sbdev) in slim_get_device()
387 return sbdev; in slim_get_device()
394 struct slim_device *sbdev = to_slim_device(dev); in of_slim_match_dev() local
396 return (sbdev->dev.of_node == np); in of_slim_match_dev()
402 struct slim_device *sbdev; in of_find_slim_device() local
407 sbdev = to_slim_device(dev); in of_find_slim_device()
408 return sbdev; in of_find_slim_device()
430 static int slim_device_alloc_laddr(struct slim_device *sbdev, in slim_device_alloc_laddr() argument
433 struct slim_controller *ctrl = sbdev->ctrl; in slim_device_alloc_laddr()
439 ret = ctrl->get_laddr(ctrl, &sbdev->e_addr, &laddr); in slim_device_alloc_laddr()
455 ret = ctrl->set_laddr(ctrl, &sbdev->e_addr, laddr); in slim_device_alloc_laddr()
462 sbdev->laddr = laddr; in slim_device_alloc_laddr()
463 sbdev->is_laddr_valid = true; in slim_device_alloc_laddr()
466 slim_device_update_status(sbdev, SLIM_DEVICE_STATUS_UP); in slim_device_alloc_laddr()
469 laddr, sbdev->e_addr.manf_id, sbdev->e_addr.prod_code, in slim_device_alloc_laddr()
470 sbdev->e_addr.dev_index, sbdev->e_addr.instance); in slim_device_alloc_laddr()
495 struct slim_device *sbdev; in slim_device_report_present() local
506 sbdev = slim_get_device(ctrl, e_addr); in slim_device_report_present()
507 if (IS_ERR(sbdev)) in slim_device_report_present()
510 if (sbdev->is_laddr_valid) { in slim_device_report_present()
511 *laddr = sbdev->laddr; in slim_device_report_present()
515 ret = slim_device_alloc_laddr(sbdev, true); in slim_device_report_present()
532 int slim_get_logical_addr(struct slim_device *sbdev) in slim_get_logical_addr() argument
534 if (!sbdev->is_laddr_valid) in slim_get_logical_addr()
535 return slim_device_alloc_laddr(sbdev, false); in slim_get_logical_addr()