64 lines · 1.3 KB · C
RawDownload
// SPDX-License-Identifier: GPL-2.0/* * Copyright 2023 Google LLC. */ #include <linux/device.h>#include <linux/spmi.h> static void devm_spmi_controller_release(struct device *parent, void *res){	spmi_controller_put(*(struct spmi_controller **)res);} struct spmi_controller *devm_spmi_controller_alloc(struct device *parent, size_t size){	struct spmi_controller **ptr, *ctrl; 	ptr = devres_alloc(devm_spmi_controller_release, sizeof(*ptr), GFP_KERNEL);	if (!ptr)		return ERR_PTR(-ENOMEM); 	ctrl = spmi_controller_alloc(parent, size);	if (IS_ERR(ctrl)) {		devres_free(ptr);		return ctrl;	} 	*ptr = ctrl;	devres_add(parent, ptr); 	return ctrl;}EXPORT_SYMBOL_GPL(devm_spmi_controller_alloc); static void devm_spmi_controller_remove(struct device *parent, void *res){	spmi_controller_remove(*(struct spmi_controller **)res);} int devm_spmi_controller_add(struct device *parent, struct spmi_controller *ctrl){	struct spmi_controller **ptr;	int ret; 	ptr = devres_alloc(devm_spmi_controller_remove, sizeof(*ptr), GFP_KERNEL);	if (!ptr)		return -ENOMEM; 	ret = spmi_controller_add(ctrl);	if (ret) {		devres_free(ptr);		return ret;	} 	*ptr = ctrl;	devres_add(parent, ptr); 	return 0; }EXPORT_SYMBOL_GPL(devm_spmi_controller_add); MODULE_LICENSE("GPL");MODULE_DESCRIPTION("SPMI devres helpers");