Unverified Commit b1ef855c authored by Krzysztof Kozlowski's avatar Krzysztof Kozlowski Committed by Mark Brown
Browse files

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: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Link: https://patch.msgid.link/20260305201349.32734-2-krzysztof.kozlowski@oss.qualcomm.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent e7662bce
Loading
Loading
Loading
Loading
+10 −13
Original line number Diff line number Diff line
@@ -1182,9 +1182,9 @@ struct regmap *__regmap_init(struct device *dev,
}
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;
}