Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ff64abef authored by Jean-Christophe PLAGNIOL-VILLARD's avatar Jean-Christophe PLAGNIOL-VILLARD Committed by Grant Likely
Browse files

of_gpio: add support of of_gpio_named_count to be able to count named gpio



Signed-off-by: default avatarJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Cc: devicetree-discuss@lists.ozlabs.org
Signed-off-by: default avatarGrant Likely <grant.likely@secretlab.ca>
parent 9467d298
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -78,8 +78,9 @@ int of_get_named_gpio_flags(struct device_node *np, const char *propname,
EXPORT_SYMBOL(of_get_named_gpio_flags);

/**
 * of_gpio_count - Count GPIOs for a device
 * of_gpio_named_count - Count GPIOs for a device
 * @np:		device node to count GPIOs for
 * @propname:	property name containing gpio specifier(s)
 *
 * The function returns the count of GPIOs specified for a node.
 *
@@ -93,14 +94,14 @@ EXPORT_SYMBOL(of_get_named_gpio_flags);
 * defines four GPIOs (so this function will return 4), two of which
 * are not specified.
 */
unsigned int of_gpio_count(struct device_node *np)
unsigned int of_gpio_named_count(struct device_node *np, const char* propname)
{
	unsigned int cnt = 0;

	do {
		int ret;

		ret = of_parse_phandle_with_args(np, "gpios", "#gpio-cells",
		ret = of_parse_phandle_with_args(np, propname, "#gpio-cells",
						 cnt, NULL);
		/* A hole in the gpios = <> counts anyway. */
		if (ret < 0 && ret != -EEXIST)
@@ -109,7 +110,7 @@ unsigned int of_gpio_count(struct device_node *np)

	return cnt;
}
EXPORT_SYMBOL(of_gpio_count);
EXPORT_SYMBOL(of_gpio_named_count);

/**
 * of_gpio_simple_xlate - translate gpio_spec to the GPIO number and flags
+25 −2
Original line number Diff line number Diff line
@@ -50,7 +50,8 @@ static inline struct of_mm_gpio_chip *to_of_mm_gpio_chip(struct gpio_chip *gc)
extern int of_get_named_gpio_flags(struct device_node *np,
		const char *list_name, int index, enum of_gpio_flags *flags);

extern unsigned int of_gpio_count(struct device_node *np);
extern unsigned int of_gpio_named_count(struct device_node *np,
					const char* propname);

extern int of_mm_gpiochip_add(struct device_node *np,
			      struct of_mm_gpio_chip *mm_gc);
@@ -71,7 +72,8 @@ static inline int of_get_named_gpio_flags(struct device_node *np,
	return -ENOSYS;
}

static inline unsigned int of_gpio_count(struct device_node *np)
static inline unsigned int of_gpio_named_count(struct device_node *np,
					const char* propname)
{
	return 0;
}
@@ -88,6 +90,27 @@ static inline void of_gpiochip_remove(struct gpio_chip *gc) { }

#endif /* CONFIG_OF_GPIO */

/**
 * of_gpio_count - Count GPIOs for a device
 * @np:		device node to count GPIOs for
 *
 * The function returns the count of GPIOs specified for a node.
 *
 * Note that the empty GPIO specifiers counts too. For example,
 *
 * gpios = <0
 *          &pio1 1 2
 *          0
 *          &pio2 3 4>;
 *
 * defines four GPIOs (so this function will return 4), two of which
 * are not specified.
 */
static inline unsigned int of_gpio_count(struct device_node *np)
{
	return of_gpio_named_count(np, "gpios");
}

/**
 * of_get_gpio_flags() - Get a GPIO number and flags to use with GPIO API
 * @np:		device node to get GPIO from