Commit ee25fba7 authored by Bartosz Golaszewski's avatar Bartosz Golaszewski
Browse files

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: default avatarBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Acked-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent b85ea95d
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -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
+1 −0
Original line number Diff line number Diff line
@@ -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