From: Krzysztof Kozlowski Date: Thu, 5 Mar 2026 20:13:50 +0000 (+0100) Subject: regmap: Simplify devres handling X-Git-Tag: v7.1-rc1~155^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b1ef855c62601ed4de2c4b0ff75a075877e3dac8;p=thirdparty%2Fkernel%2Flinux.git regmap: Simplify devres handling The resource-managed devm_regmap_init() can be a bit simpler by using devm_add_action_or_reset() instead of devres_alloc(). This allows to drop the less-obvious pointer to pointer (struct regmap **ptr) and make devm_regmap_release() interface simpler. Code is functionally equivalent with minor difference: devres_alloc() will happen now after successful resource init (__regmap_init()). Signed-off-by: Krzysztof Kozlowski Link: https://patch.msgid.link/20260305201349.32734-2-krzysztof.kozlowski@oss.qualcomm.com Signed-off-by: Mark Brown --- diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c index 607c1246d994a..f888a83aa9c30 100644 --- a/drivers/base/regmap/regmap.c +++ b/drivers/base/regmap/regmap.c @@ -1182,9 +1182,9 @@ err: } EXPORT_SYMBOL_GPL(__regmap_init); -static void devm_regmap_release(struct device *dev, void *res) +static void devm_regmap_release(void *regmap) { - regmap_exit(*(struct regmap **)res); + regmap_exit(regmap); } struct regmap *__devm_regmap_init(struct device *dev, @@ -1194,20 +1194,17 @@ struct regmap *__devm_regmap_init(struct device *dev, struct lock_class_key *lock_key, const char *lock_name) { - struct regmap **ptr, *regmap; - - ptr = devres_alloc(devm_regmap_release, sizeof(*ptr), GFP_KERNEL); - if (!ptr) - return ERR_PTR(-ENOMEM); + struct regmap *regmap; + int ret; regmap = __regmap_init(dev, bus, bus_context, config, lock_key, lock_name); - if (!IS_ERR(regmap)) { - *ptr = regmap; - devres_add(dev, ptr); - } else { - devres_free(ptr); - } + if (IS_ERR(regmap)) + return regmap; + + ret = devm_add_action_or_reset(dev, devm_regmap_release, regmap); + if (ret) + return ERR_PTR(ret); return regmap; }