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()
165 sbdev->dev.of_node = of_node_get(node); in slim_add_device()
166 sbdev->dev.fwnode = of_fwnode_handle(node); in slim_add_device()
168 dev_set_name(&sbdev->dev, "%x:%x:%x:%x", in slim_add_device()
169 sbdev->e_addr.manf_id, in slim_add_device()
170 sbdev->e_addr.prod_code, in slim_add_device()
171 sbdev->e_addr.dev_index, in slim_add_device()
172 sbdev->e_addr.instance); in slim_add_device()
174 return device_register(&sbdev->dev); in slim_add_device()
181 struct slim_device *sbdev; in slim_alloc_device() local
184 sbdev = kzalloc(sizeof(*sbdev), GFP_KERNEL); in slim_alloc_device()
185 if (!sbdev) in slim_alloc_device()
188 sbdev->e_addr = *eaddr; in slim_alloc_device()
189 ret = slim_add_device(ctrl, sbdev, node); in slim_alloc_device()
191 put_device(&sbdev->dev); in slim_alloc_device()
195 return sbdev; in slim_alloc_device()
207 struct slim_device *sbdev; in of_register_slim_devices() local
236 sbdev = slim_alloc_device(ctrl, &e_addr, node); in of_register_slim_devices()
237 if (!sbdev) in of_register_slim_devices()
283 static void slim_remove_device(struct slim_device *sbdev) in slim_remove_device() argument
285 of_node_put(sbdev->dev.of_node); in slim_remove_device()
286 device_unregister(&sbdev->dev); in slim_remove_device()
316 void slim_report_absent(struct slim_device *sbdev) in slim_report_absent() argument
318 struct slim_controller *ctrl = sbdev->ctrl; in slim_report_absent()
325 sbdev->is_laddr_valid = false; in slim_report_absent()
328 ida_simple_remove(&ctrl->laddr_ida, sbdev->laddr); in slim_report_absent()
329 slim_device_update_status(sbdev, SLIM_DEVICE_STATUS_DOWN); in slim_report_absent()
344 struct slim_device *sbdev = to_slim_device(dev); in slim_match_dev() local
346 return slim_eaddr_equal(&sbdev->e_addr, e_addr); in slim_match_dev()
352 struct slim_device *sbdev; in find_slim_device() local
357 sbdev = to_slim_device(dev); in find_slim_device()
358 return sbdev; in find_slim_device()
376 struct slim_device *sbdev; in slim_get_device() local
378 sbdev = find_slim_device(ctrl, e_addr); in slim_get_device()
379 if (!sbdev) { in slim_get_device()
380 sbdev = slim_alloc_device(ctrl, e_addr, NULL); in slim_get_device()
381 if (!sbdev) in slim_get_device()
385 return sbdev; in slim_get_device()
392 struct slim_device *sbdev = to_slim_device(dev); in of_slim_match_dev() local
394 return (sbdev->dev.of_node == np); in of_slim_match_dev()
400 struct slim_device *sbdev; in of_find_slim_device() local
405 sbdev = to_slim_device(dev); in of_find_slim_device()
406 return sbdev; in of_find_slim_device()
428 static int slim_device_alloc_laddr(struct slim_device *sbdev, in slim_device_alloc_laddr() argument
431 struct slim_controller *ctrl = sbdev->ctrl; in slim_device_alloc_laddr()
437 ret = ctrl->get_laddr(ctrl, &sbdev->e_addr, &laddr); in slim_device_alloc_laddr()
453 ret = ctrl->set_laddr(ctrl, &sbdev->e_addr, laddr); in slim_device_alloc_laddr()
460 sbdev->laddr = laddr; in slim_device_alloc_laddr()
461 sbdev->is_laddr_valid = true; in slim_device_alloc_laddr()
464 slim_device_update_status(sbdev, SLIM_DEVICE_STATUS_UP); in slim_device_alloc_laddr()
467 laddr, sbdev->e_addr.manf_id, sbdev->e_addr.prod_code, in slim_device_alloc_laddr()
468 sbdev->e_addr.dev_index, sbdev->e_addr.instance); in slim_device_alloc_laddr()
493 struct slim_device *sbdev; in slim_device_report_present() local
504 sbdev = slim_get_device(ctrl, e_addr); in slim_device_report_present()
505 if (IS_ERR(sbdev)) in slim_device_report_present()
508 if (sbdev->is_laddr_valid) { in slim_device_report_present()
509 *laddr = sbdev->laddr; in slim_device_report_present()
513 ret = slim_device_alloc_laddr(sbdev, true); in slim_device_report_present()
530 int slim_get_logical_addr(struct slim_device *sbdev) in slim_get_logical_addr() argument
532 if (!sbdev->is_laddr_valid) in slim_get_logical_addr()
533 return slim_device_alloc_laddr(sbdev, false); in slim_get_logical_addr()