]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
regmap: Simplify devres handling
authorKrzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Thu, 5 Mar 2026 20:13:50 +0000 (21:13 +0100)
committerMark Brown <broonie@kernel.org>
Thu, 5 Mar 2026 21:14:54 +0000 (21:14 +0000)
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 <krzysztof.kozlowski@oss.qualcomm.com>
Link: https://patch.msgid.link/20260305201349.32734-2-krzysztof.kozlowski@oss.qualcomm.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/base/regmap/regmap.c

index 607c1246d994a17a7f4c73e3492f61be17d19b16..f888a83aa9c307d391adbb251e26ddd16e95fa27 100644 (file)
@@ -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;
 }