Every time a descriptor is retrieved from the gpiolib, we issue
module_get() to reference count the module supplying the GPIOs.
We also need to call device_get() and device_put() as we also
reference the backing gpio_device when doing this.
Since the sysfs GPIO interface is using gpiod_get() this will
also reference count the sysfs requests until all GPIOs are
unexported.
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
status = __gpiod_request(desc, label);
if (status < 0)
module_put(gdev->owner);
+ else
+ get_device(&gdev->dev);
}
if (status)
void gpiod_free(struct gpio_desc *desc)
{
- if (desc && __gpiod_free(desc))
+ if (desc && desc->gdev && __gpiod_free(desc)) {
module_put(desc->gdev->owner);
- else
+ put_device(&desc->gdev->dev);
+ } else {
WARN_ON(extra_checks);
+ }
}
/**