gpio: Add the devm_fwnode_get_index_gpiod_from_child() helper
devm_fwnode_get_gpiod_from_child() currently allows GPIO users to request a GPIO that is defined in a child fwnode instead of directly in the device fwnode. Extend this API by adding the devm_fwnode_get_index_gpiod_from_child() helper which does the same except you can also specify an index in case the 'xx-gpios' property describe several GPIOs. Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:

committed by
Linus Walleij

parent
4b0947974e
commit
537b94dafc
@@ -123,10 +123,11 @@ struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev,
|
||||
EXPORT_SYMBOL(devm_gpiod_get_index);
|
||||
|
||||
/**
|
||||
* devm_fwnode_get_gpiod_from_child - get a GPIO descriptor from a device's
|
||||
* child node
|
||||
* devm_fwnode_get_index_gpiod_from_child - get a GPIO descriptor from a
|
||||
* device's child node
|
||||
* @dev: GPIO consumer
|
||||
* @con_id: function within the GPIO consumer
|
||||
* @index: index of the GPIO to obtain in the consumer
|
||||
* @child: firmware node (child of @dev)
|
||||
* @flags: GPIO initialization flags
|
||||
*
|
||||
@@ -136,11 +137,11 @@ EXPORT_SYMBOL(devm_gpiod_get_index);
|
||||
* On successfull request the GPIO pin is configured in accordance with
|
||||
* provided @flags.
|
||||
*/
|
||||
struct gpio_desc *devm_fwnode_get_gpiod_from_child(struct device *dev,
|
||||
const char *con_id,
|
||||
struct fwnode_handle *child,
|
||||
enum gpiod_flags flags,
|
||||
const char *label)
|
||||
struct gpio_desc *devm_fwnode_get_index_gpiod_from_child(struct device *dev,
|
||||
const char *con_id, int index,
|
||||
struct fwnode_handle *child,
|
||||
enum gpiod_flags flags,
|
||||
const char *label)
|
||||
{
|
||||
static const char * const suffixes[] = { "gpios", "gpio" };
|
||||
char prop_name[32]; /* 32 is max size of property name */
|
||||
@@ -161,7 +162,8 @@ struct gpio_desc *devm_fwnode_get_gpiod_from_child(struct device *dev,
|
||||
snprintf(prop_name, sizeof(prop_name), "%s",
|
||||
suffixes[i]);
|
||||
|
||||
desc = fwnode_get_named_gpiod(child, prop_name, flags, label);
|
||||
desc = fwnode_get_named_gpiod(child, prop_name, index, flags,
|
||||
label);
|
||||
if (!IS_ERR(desc) || (PTR_ERR(desc) != -ENOENT))
|
||||
break;
|
||||
}
|
||||
@@ -175,7 +177,7 @@ struct gpio_desc *devm_fwnode_get_gpiod_from_child(struct device *dev,
|
||||
|
||||
return desc;
|
||||
}
|
||||
EXPORT_SYMBOL(devm_fwnode_get_gpiod_from_child);
|
||||
EXPORT_SYMBOL(devm_fwnode_get_index_gpiod_from_child);
|
||||
|
||||
/**
|
||||
* devm_gpiod_get_index_optional - Resource-managed gpiod_get_index_optional()
|
||||
|
Reference in New Issue
Block a user