gpio: allow passing NULL to gpio_request_by_line_name() to search all gpio controllers

The API is more convenient to use if one doesn't have to know upfront
which gpio controller has a line with the name one is searching for,
and arrange to look that device up somehow. Or implement this loop
oneself.

Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Rasmus Villemoes 2023-03-17 21:12:22 +01:00 committed by Tom Rini
parent fdef6b982f
commit e1c97949ee
2 changed files with 9 additions and 1 deletions

View file

@ -1171,6 +1171,13 @@ int gpio_request_by_line_name(struct udevice *dev, const char *line_name,
{ {
int ret; int ret;
if (!dev) {
uclass_foreach_dev_probe(UCLASS_GPIO, dev)
if (!gpio_request_by_line_name(dev, line_name, desc, flags))
return 0;
return -ENOENT;
}
ret = dev_read_stringlist_search(dev, "gpio-line-names", line_name); ret = dev_read_stringlist_search(dev, "gpio-line-names", line_name);
if (ret < 0) if (ret < 0)
return ret; return ret;

View file

@ -580,7 +580,8 @@ int gpio_request_by_name(struct udevice *dev, const char *list_name,
* This allows boards to implement common behaviours using GPIOs while not * This allows boards to implement common behaviours using GPIOs while not
* requiring specific GPIO offsets be used. * requiring specific GPIO offsets be used.
* *
* @dev: An instance of a GPIO controller udevice * @dev: An instance of a GPIO controller udevice, or NULL to search
* all GPIO controller devices
* @line_name: The name of the GPIO (e.g. "bmc-secure-boot") * @line_name: The name of the GPIO (e.g. "bmc-secure-boot")
* @desc: A GPIO descriptor that is populated with the requested GPIO * @desc: A GPIO descriptor that is populated with the requested GPIO
* upon return * upon return