gpiolib: legacy: Allow to kill devm_gpio_request_one() independently

Allow to kill devm_gpio_request_one() independently by converting it
to use legacy APIs that will be alive a bit longer.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20251112093608.1481030-3-andriy.shevchenko@linux.intel.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
pull/1354/merge
Andy Shevchenko 2025-11-12 10:32:02 +01:00 committed by Bartosz Golaszewski
parent 61e1fd2abc
commit ade570c138
1 changed files with 12 additions and 14 deletions

View File

@ -68,11 +68,9 @@ int gpio_request(unsigned gpio, const char *label)
}
EXPORT_SYMBOL_GPL(gpio_request);
static void devm_gpio_release(struct device *dev, void *res)
static void devm_gpio_release(void *gpio)
{
unsigned *gpio = res;
gpio_free(*gpio);
gpio_free((unsigned)(unsigned long)gpio);
}
/**
@ -90,22 +88,22 @@ static void devm_gpio_release(struct device *dev, void *res)
int devm_gpio_request_one(struct device *dev, unsigned gpio,
unsigned long flags, const char *label)
{
unsigned *dr;
int rc;
dr = devres_alloc(devm_gpio_release, sizeof(unsigned), GFP_KERNEL);
if (!dr)
return -ENOMEM;
rc = gpio_request(gpio, label);
if (rc)
return rc;
if (flags & GPIOF_IN)
rc = gpio_direction_input(gpio);
else
rc = gpio_direction_output(gpio, !!(flags & GPIOF_OUT_INIT_HIGH));
rc = gpio_request_one(gpio, flags, label);
if (rc) {
devres_free(dr);
gpio_free(gpio);
return rc;
}
*dr = gpio;
devres_add(dev, dr);
return 0;
return devm_add_action_or_reset(dev, devm_gpio_release, (void *)(unsigned long)gpio);
}
EXPORT_SYMBOL_GPL(devm_gpio_request_one);