Lines Matching +full:peci +full:- +full:controller

1 // SPDX-License-Identifier: GPL-2.0-only
2 // Copyright (c) 2018-2021 Intel Corporation
10 #include <linux/peci.h>
21 struct peci_controller *controller = to_peci_controller(dev); in peci_controller_dev_release() local
23 mutex_destroy(&controller->bus_lock); in peci_controller_dev_release()
24 ida_free(&peci_controller_ida, controller->id); in peci_controller_dev_release()
25 kfree(controller); in peci_controller_dev_release()
32 int peci_controller_scan_devices(struct peci_controller *controller) in peci_controller_scan_devices() argument
38 ret = peci_device_create(controller, addr); in peci_controller_scan_devices()
49 struct peci_controller *controller; in peci_controller_alloc() local
52 if (!ops->xfer) in peci_controller_alloc()
53 return ERR_PTR(-EINVAL); in peci_controller_alloc()
55 controller = kzalloc(sizeof(*controller), GFP_KERNEL); in peci_controller_alloc()
56 if (!controller) in peci_controller_alloc()
57 return ERR_PTR(-ENOMEM); in peci_controller_alloc()
62 controller->id = ret; in peci_controller_alloc()
64 controller->ops = ops; in peci_controller_alloc()
66 controller->dev.parent = dev; in peci_controller_alloc()
67 controller->dev.bus = &peci_bus_type; in peci_controller_alloc()
68 controller->dev.type = &peci_controller_type; in peci_controller_alloc()
70 device_initialize(&controller->dev); in peci_controller_alloc()
72 mutex_init(&controller->bus_lock); in peci_controller_alloc()
74 return controller; in peci_controller_alloc()
77 kfree(controller); in peci_controller_alloc()
90 struct peci_controller *controller = _controller; in unregister_controller() local
93 * Detach any active PECI devices. This can't fail, thus we do not in unregister_controller()
96 device_for_each_child_reverse(&controller->dev, NULL, unregister_child); in unregister_controller()
98 device_unregister(&controller->dev); in unregister_controller()
100 fwnode_handle_put(controller->dev.fwnode); in unregister_controller()
102 pm_runtime_disable(&controller->dev); in unregister_controller()
106 * devm_peci_controller_add() - add PECI controller
108 * @ops: pointer to controller specific methods
111 * devm_peci_controller_add() to register itself with the PECI bus.
113 * Return: Pointer to the newly allocated controller or ERR_PTR() in case of failure.
118 struct peci_controller *controller; in devm_peci_controller_add() local
121 controller = peci_controller_alloc(dev, ops); in devm_peci_controller_add()
122 if (IS_ERR(controller)) in devm_peci_controller_add()
123 return controller; in devm_peci_controller_add()
125 ret = dev_set_name(&controller->dev, "peci-%d", controller->id); in devm_peci_controller_add()
129 pm_runtime_no_callbacks(&controller->dev); in devm_peci_controller_add()
130 pm_suspend_ignore_children(&controller->dev, true); in devm_peci_controller_add()
131 pm_runtime_enable(&controller->dev); in devm_peci_controller_add()
133 device_set_node(&controller->dev, fwnode_handle_get(dev_fwnode(dev))); in devm_peci_controller_add()
135 ret = device_add(&controller->dev); in devm_peci_controller_add()
139 ret = devm_add_action_or_reset(dev, unregister_controller, controller); in devm_peci_controller_add()
144 * Ignoring retval since failures during scan are non-critical for in devm_peci_controller_add()
145 * controller itself. in devm_peci_controller_add()
147 peci_controller_scan_devices(controller); in devm_peci_controller_add()
149 return controller; in devm_peci_controller_add()
152 fwnode_handle_put(controller->dev.fwnode); in devm_peci_controller_add()
154 pm_runtime_disable(&controller->dev); in devm_peci_controller_add()
157 put_device(&controller->dev); in devm_peci_controller_add()
161 EXPORT_SYMBOL_NS_GPL(devm_peci_controller_add, "PECI");
166 while (id->x86_vfm != 0) { in peci_bus_match_device_id()
167 if (id->x86_vfm == device->info.x86_vfm) in peci_bus_match_device_id()
180 if (dev->type != &peci_device_type) in peci_bus_device_match()
183 return !!peci_bus_match_device_id(peci_drv->id_table, device); in peci_bus_device_match()
189 struct peci_driver *driver = to_peci_driver(dev->driver); in peci_bus_device_probe()
191 return driver->probe(device, peci_bus_match_device_id(driver->id_table, device)); in peci_bus_device_probe()
197 struct peci_driver *driver = to_peci_driver(dev->driver); in peci_bus_device_remove()
199 if (driver->remove) in peci_bus_device_remove()
200 driver->remove(device); in peci_bus_device_remove()
204 .name = "peci",
217 pr_err("peci: failed to register PECI bus type!\n"); in peci_init()
234 MODULE_DESCRIPTION("PECI bus core module");