brintos

brintos / linux-shallow public Read only

0
0
Text · 1.3 KiB · 62c4b3f Raw
65 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * Copyright 2023 Google LLC.4 */5 6#include <linux/device.h>7#include <linux/spmi.h>8 9static void devm_spmi_controller_release(struct device *parent, void *res)10{11	spmi_controller_put(*(struct spmi_controller **)res);12}13 14struct spmi_controller *devm_spmi_controller_alloc(struct device *parent, size_t size)15{16	struct spmi_controller **ptr, *ctrl;17 18	ptr = devres_alloc(devm_spmi_controller_release, sizeof(*ptr), GFP_KERNEL);19	if (!ptr)20		return ERR_PTR(-ENOMEM);21 22	ctrl = spmi_controller_alloc(parent, size);23	if (IS_ERR(ctrl)) {24		devres_free(ptr);25		return ctrl;26	}27 28	*ptr = ctrl;29	devres_add(parent, ptr);30 31	return ctrl;32}33EXPORT_SYMBOL_GPL(devm_spmi_controller_alloc);34 35static void devm_spmi_controller_remove(struct device *parent, void *res)36{37	spmi_controller_remove(*(struct spmi_controller **)res);38}39 40int devm_spmi_controller_add(struct device *parent, struct spmi_controller *ctrl)41{42	struct spmi_controller **ptr;43	int ret;44 45	ptr = devres_alloc(devm_spmi_controller_remove, sizeof(*ptr), GFP_KERNEL);46	if (!ptr)47		return -ENOMEM;48 49	ret = spmi_controller_add(ctrl);50	if (ret) {51		devres_free(ptr);52		return ret;53	}54 55	*ptr = ctrl;56	devres_add(parent, ptr);57 58	return 0;59 60}61EXPORT_SYMBOL_GPL(devm_spmi_controller_add);62 63MODULE_LICENSE("GPL");64MODULE_DESCRIPTION("SPMI devres helpers");65