Lines Matching +full:protocol +full:- +full:id

1 // SPDX-License-Identifier: GPL-2.0
3 * System Control and Management Interface (SCMI) Message Protocol bus layer
25 const struct scmi_device_id *id = scmi_drv->id_table; in scmi_dev_match_id() local
27 if (!id) in scmi_dev_match_id()
30 for (; id->protocol_id; id++) in scmi_dev_match_id()
31 if (id->protocol_id == scmi_dev->protocol_id) { in scmi_dev_match_id()
32 if (!id->name) in scmi_dev_match_id()
33 return id; in scmi_dev_match_id()
34 else if (!strcmp(id->name, scmi_dev->name)) in scmi_dev_match_id()
35 return id; in scmi_dev_match_id()
45 const struct scmi_device_id *id; in scmi_dev_match() local
47 id = scmi_dev_match_id(scmi_dev, scmi_drv); in scmi_dev_match()
48 if (id) in scmi_dev_match()
59 return -EINVAL; in scmi_protocol_init()
70 struct scmi_driver *scmi_drv = to_scmi_driver(dev->driver); in scmi_dev_probe()
72 const struct scmi_device_id *id; in scmi_dev_probe() local
75 id = scmi_dev_match_id(scmi_dev, scmi_drv); in scmi_dev_probe()
76 if (!id) in scmi_dev_probe()
77 return -ENODEV; in scmi_dev_probe()
79 if (!scmi_dev->handle) in scmi_dev_probe()
80 return -EPROBE_DEFER; in scmi_dev_probe()
82 ret = scmi_protocol_init(scmi_dev->protocol_id, scmi_dev->handle); in scmi_dev_probe()
86 /* Skip protocol initialisation for additional devices */ in scmi_dev_probe()
88 scmi_dev->protocol_id); in scmi_dev_probe()
90 return scmi_drv->probe(scmi_dev); in scmi_dev_probe()
95 struct scmi_driver *scmi_drv = to_scmi_driver(dev->driver); in scmi_dev_remove()
98 if (scmi_drv->remove) in scmi_dev_remove()
99 scmi_drv->remove(scmi_dev); in scmi_dev_remove()
116 driver->driver.bus = &scmi_bus_type; in scmi_driver_register()
117 driver->driver.name = driver->name; in scmi_driver_register()
118 driver->driver.owner = owner; in scmi_driver_register()
119 driver->driver.mod_name = mod_name; in scmi_driver_register()
121 retval = driver_register(&driver->driver); in scmi_driver_register()
123 pr_debug("registered new scmi driver %s\n", driver->name); in scmi_driver_register()
131 driver_unregister(&driver->driver); in scmi_driver_unregister()
141 scmi_device_create(struct device_node *np, struct device *parent, int protocol, in scmi_device_create() argument
144 int id, retval; in scmi_device_create() local
151 scmi_dev->name = kstrdup_const(name ?: "unknown", GFP_KERNEL); in scmi_device_create()
152 if (!scmi_dev->name) { in scmi_device_create()
157 id = ida_simple_get(&scmi_bus_id, 1, 0, GFP_KERNEL); in scmi_device_create()
158 if (id < 0) { in scmi_device_create()
159 kfree_const(scmi_dev->name); in scmi_device_create()
164 scmi_dev->id = id; in scmi_device_create()
165 scmi_dev->protocol_id = protocol; in scmi_device_create()
166 scmi_dev->dev.parent = parent; in scmi_device_create()
167 scmi_dev->dev.of_node = np; in scmi_device_create()
168 scmi_dev->dev.bus = &scmi_bus_type; in scmi_device_create()
169 scmi_dev->dev.release = scmi_device_release; in scmi_device_create()
170 dev_set_name(&scmi_dev->dev, "scmi_dev.%d", id); in scmi_device_create()
172 retval = device_register(&scmi_dev->dev); in scmi_device_create()
178 kfree_const(scmi_dev->name); in scmi_device_create()
179 put_device(&scmi_dev->dev); in scmi_device_create()
180 ida_simple_remove(&scmi_bus_id, id); in scmi_device_create()
186 kfree_const(scmi_dev->name); in scmi_device_destroy()
187 scmi_handle_put(scmi_dev->handle); in scmi_device_destroy()
188 ida_simple_remove(&scmi_bus_id, scmi_dev->id); in scmi_device_destroy()
189 device_unregister(&scmi_dev->dev); in scmi_device_destroy()
194 scmi_dev->handle = scmi_handle_get(&scmi_dev->dev); in scmi_set_handle()
239 pr_err("scmi protocol bus register failed (%d)\n", retval); in scmi_bus_init()