gpio: Add devm_gpiod_unhinge()
This adds a function named devm_gpiod_unhinge() that removes the resource management from a GPIO descriptor. I am not sure if this is the best anglosaxon name for the function, no other managed resources have an equivalent currently, but I chose "unhinge" as the closest intuitive thing I could imagine that fits Rusty Russell's API design criterions "the obvious use is the correct one" and "the name tells you how to use it". The idea came out of a remark from Mark Brown that it should be possible to handle over management of a resource from devres to the regulator core, and indeed we can do that. Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Reviewed-by: Marek Szyprowski <m.szyprowski@samsung.com> Tested-by: Marek Szyprowski <m.szyprowski@samsung.com> Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:

committed by
Mark Brown

parent
cb28ee388e
commit
891ddbc79a
@@ -346,6 +346,36 @@ void devm_gpiod_put(struct device *dev, struct gpio_desc *desc)
|
||||
}
|
||||
EXPORT_SYMBOL(devm_gpiod_put);
|
||||
|
||||
/**
|
||||
* devm_gpiod_unhinge - Remove resource management from a gpio descriptor
|
||||
* @dev: GPIO consumer
|
||||
* @desc: GPIO descriptor to remove resource management from
|
||||
*
|
||||
* Remove resource management from a GPIO descriptor. This is needed when
|
||||
* you want to hand over lifecycle management of a descriptor to another
|
||||
* mechanism.
|
||||
*/
|
||||
|
||||
void devm_gpiod_unhinge(struct device *dev, struct gpio_desc *desc)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (IS_ERR_OR_NULL(desc))
|
||||
return;
|
||||
ret = devres_destroy(dev, devm_gpiod_release,
|
||||
devm_gpiod_match, &desc);
|
||||
/*
|
||||
* If the GPIO descriptor is requested as nonexclusive, we
|
||||
* may call this function several times on the same descriptor
|
||||
* so it is OK if devres_destroy() returns -ENOENT.
|
||||
*/
|
||||
if (ret == -ENOENT)
|
||||
return;
|
||||
/* Anything else we should warn about */
|
||||
WARN_ON(ret);
|
||||
}
|
||||
EXPORT_SYMBOL(devm_gpiod_unhinge);
|
||||
|
||||
/**
|
||||
* devm_gpiod_put_array - Resource-managed gpiod_put_array()
|
||||
* @dev: GPIO consumer
|
||||
|
Reference in New Issue
Block a user