// 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");
// 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");