gpiolib: introduce devm_fwnode_gpiod_get_optional() wrapper

The helper makes it easier to handle optional GPIOs and simplifies the
error handling code.

Signed-off-by: Stefan Kerkmann <s.kerkmann@pengutronix.de>
Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
Reviewed-by: Matti Vaittinen <mazziesaccount@gmail.com>
Link: https://lore.kernel.org/r/20260126-gpio-devm_fwnode_gpiod_get_optional-v2-1-ec34f8e35077@pengutronix.de
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
This commit is contained in:
Stefan Kerkmann
2026-01-26 15:27:47 +01:00
committed by Bartosz Golaszewski
parent 3a6a36a3fc
commit 364713741c

View File

@@ -607,6 +607,42 @@ struct gpio_desc *devm_fwnode_gpiod_get(struct device *dev,
flags, label);
}
/**
* devm_fwnode_gpiod_get_optional - obtain an optional GPIO from firmware node
* @dev: GPIO consumer
* @fwnode: handle of the firmware node
* @con_id: function within the GPIO consumer
* @flags: GPIO initialization flags
* @label: label to attach to the requested GPIO
*
* This function can be used for drivers that get their configuration
* from opaque firmware.
*
* GPIO descriptors returned from this function are automatically disposed on
* driver detach.
*
* Returns:
* The GPIO descriptor corresponding to the optional function @con_id of device
* dev, NULL if no GPIO has been assigned to the requested function, or
* another IS_ERR() code if an error occurred while trying to acquire the GPIO.
*/
static inline
struct gpio_desc *devm_fwnode_gpiod_get_optional(struct device *dev,
struct fwnode_handle *fwnode,
const char *con_id,
enum gpiod_flags flags,
const char *label)
{
struct gpio_desc *desc;
desc = devm_fwnode_gpiod_get_index(dev, fwnode, con_id, 0,
flags, label);
if (IS_ERR(desc) && PTR_ERR(desc) == -ENOENT)
return NULL;
return desc;
}
struct acpi_gpio_params {
unsigned int crs_entry_index;
unsigned short line_index;