Lines Matching refs:sbdev
20 const struct slim_device *sbdev)
23 if (id->manf_id == sbdev->e_addr.manf_id &&
24 id->prod_code == sbdev->e_addr.prod_code &&
25 id->dev_index == sbdev->e_addr.dev_index &&
26 id->instance == sbdev->e_addr.instance)
35 struct slim_device *sbdev = to_slim_device(dev);
42 return !!slim_match(sbdrv->id_table, sbdev);
45 static void slim_device_update_status(struct slim_device *sbdev,
50 if (sbdev->status == status)
53 sbdev->status = status;
54 if (!sbdev->dev.driver)
57 sbdrv = to_slim_driver(sbdev->dev.driver);
59 sbdrv->device_status(sbdev, sbdev->status);
64 struct slim_device *sbdev = to_slim_device(dev);
68 ret = sbdrv->probe(sbdev);
73 ret = slim_get_logical_addr(sbdev);
75 slim_device_update_status(sbdev, SLIM_DEVICE_STATUS_UP);
77 dev_err(&sbdev->dev, "Failed to get logical address\n");
86 struct slim_device *sbdev = to_slim_device(dev);
92 sbdrv->remove(sbdev);
100 struct slim_device *sbdev = to_slim_device(dev);
102 return add_uevent_var(env, "MODALIAS=slim:%s", dev_name(&sbdev->dev));
149 struct slim_device *sbdev = to_slim_device(dev);
151 kfree(sbdev);
155 struct slim_device *sbdev,
158 sbdev->dev.bus = &slimbus_bus;
159 sbdev->dev.parent = ctrl->dev;
160 sbdev->dev.release = slim_dev_release;
161 sbdev->dev.driver = NULL;
162 sbdev->ctrl = ctrl;
163 INIT_LIST_HEAD(&sbdev->stream_list);
164 spin_lock_init(&sbdev->stream_list_lock);
165 sbdev->dev.of_node = of_node_get(node);
166 sbdev->dev.fwnode = of_fwnode_handle(node);
168 dev_set_name(&sbdev->dev, "%x:%x:%x:%x",
169 sbdev->e_addr.manf_id,
170 sbdev->e_addr.prod_code,
171 sbdev->e_addr.dev_index,
172 sbdev->e_addr.instance);
174 return device_register(&sbdev->dev);
181 struct slim_device *sbdev;
184 sbdev = kzalloc(sizeof(*sbdev), GFP_KERNEL);
185 if (!sbdev)
188 sbdev->e_addr = *eaddr;
189 ret = slim_add_device(ctrl, sbdev, node);
191 put_device(&sbdev->dev);
195 return sbdev;
207 struct slim_device *sbdev;
236 sbdev = slim_alloc_device(ctrl, &e_addr, node);
237 if (!sbdev)
283 static void slim_remove_device(struct slim_device *sbdev)
285 of_node_put(sbdev->dev.of_node);
286 device_unregister(&sbdev->dev);
314 * @sbdev: Device that cannot be reached, or sent report absent
316 void slim_report_absent(struct slim_device *sbdev)
318 struct slim_controller *ctrl = sbdev->ctrl;
325 sbdev->is_laddr_valid = false;
328 ida_simple_remove(&ctrl->laddr_ida, sbdev->laddr);
329 slim_device_update_status(sbdev, SLIM_DEVICE_STATUS_DOWN);
344 struct slim_device *sbdev = to_slim_device(dev);
346 return slim_eaddr_equal(&sbdev->e_addr, e_addr);
352 struct slim_device *sbdev;
357 sbdev = to_slim_device(dev);
358 return sbdev;
376 struct slim_device *sbdev;
378 sbdev = find_slim_device(ctrl, e_addr);
379 if (!sbdev) {
380 sbdev = slim_alloc_device(ctrl, e_addr, NULL);
381 if (!sbdev)
385 return sbdev;
392 struct slim_device *sbdev = to_slim_device(dev);
394 return (sbdev->dev.of_node == np);
400 struct slim_device *sbdev;
405 sbdev = to_slim_device(dev);
406 return sbdev;
428 static int slim_device_alloc_laddr(struct slim_device *sbdev,
431 struct slim_controller *ctrl = sbdev->ctrl;
437 ret = ctrl->get_laddr(ctrl, &sbdev->e_addr, &laddr);
453 ret = ctrl->set_laddr(ctrl, &sbdev->e_addr, laddr);
460 sbdev->laddr = laddr;
461 sbdev->is_laddr_valid = true;
464 slim_device_update_status(sbdev, SLIM_DEVICE_STATUS_UP);
467 laddr, sbdev->e_addr.manf_id, sbdev->e_addr.prod_code,
468 sbdev->e_addr.dev_index, sbdev->e_addr.instance);
493 struct slim_device *sbdev;
504 sbdev = slim_get_device(ctrl, e_addr);
505 if (IS_ERR(sbdev))
508 if (sbdev->is_laddr_valid) {
509 *laddr = sbdev->laddr;
513 ret = slim_device_alloc_laddr(sbdev, true);
525 * @sbdev: client handle requesting the address.
530 int slim_get_logical_addr(struct slim_device *sbdev)
532 if (!sbdev->is_laddr_valid)
533 return slim_device_alloc_laddr(sbdev, false);