gpiolib: provide gpiochip_dup_line_label()
gpiochip_is_requested() not only has a misleading name but it returns a pointer to a string that is freed when the descriptor is released. Provide a new helper meant to replace it, which returns a copy of the label string instead. Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> Acked-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
b85ea95d08
commit
ee25fba76a
@ -2386,6 +2386,35 @@ const char *gpiochip_is_requested(struct gpio_chip *gc, unsigned int offset)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gpiochip_is_requested);
|
||||
|
||||
/**
|
||||
* gpiochip_dup_line_label - Get a copy of the consumer label.
|
||||
* @gc: GPIO chip controlling this line.
|
||||
* @offset: Hardware offset of the line.
|
||||
*
|
||||
* Returns:
|
||||
* Pointer to a copy of the consumer label if the line is requested or NULL
|
||||
* if it's not. If a valid pointer was returned, it must be freed using
|
||||
* kfree(). In case of a memory allocation error, the function returns %ENOMEM.
|
||||
*
|
||||
* Must not be called from atomic context.
|
||||
*/
|
||||
char *gpiochip_dup_line_label(struct gpio_chip *gc, unsigned int offset)
|
||||
{
|
||||
const char *label;
|
||||
char *copy;
|
||||
|
||||
label = gpiochip_is_requested(gc, offset);
|
||||
if (!label)
|
||||
return NULL;
|
||||
|
||||
copy = kstrdup(label, GFP_KERNEL);
|
||||
if (!copy)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
return copy;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gpiochip_dup_line_label);
|
||||
|
||||
/**
|
||||
* gpiochip_request_own_desc - Allow GPIO chip to request its own descriptor
|
||||
* @gc: GPIO chip
|
||||
|
@ -532,6 +532,7 @@ struct gpio_chip {
|
||||
};
|
||||
|
||||
const char *gpiochip_is_requested(struct gpio_chip *gc, unsigned int offset);
|
||||
char *gpiochip_dup_line_label(struct gpio_chip *gc, unsigned int offset);
|
||||
|
||||
/**
|
||||
* for_each_requested_gpio_in_range - iterates over requested GPIOs in a given range
|
||||
|
Loading…
x
Reference in New Issue
Block a user