Commit 36471374 authored by Stefan Kerkmann's avatar Stefan Kerkmann Committed by Bartosz Golaszewski
Browse files

gpiolib: introduce devm_fwnode_gpiod_get_optional() wrapper

parent 3a6a36a3
Loading
Loading
Loading
Loading
+36 −0
Original line number Diff line number Diff line
@@ -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;