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

Commit 74982092 authored by Anton Vorontsov's avatar Anton Vorontsov Committed by Paul Mackerras
Browse files

of/gpio: Implement of_gpio_count()



This function is used to count how many GPIOs are specified for
a device node.

Signed-off-by: default avatarAnton Vorontsov <avorontsov@ru.mvista.com>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 7736a3db
Loading
Loading
Loading
Loading
+34 −0
Original line number Original line Diff line number Diff line
@@ -79,6 +79,40 @@ err0:
}
}
EXPORT_SYMBOL(of_get_gpio_flags);
EXPORT_SYMBOL(of_get_gpio_flags);


/**
 * 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.
 */
unsigned int of_gpio_count(struct device_node *np)
{
	unsigned int cnt = 0;

	do {
		int ret;

		ret = of_parse_phandles_with_args(np, "gpios", "#gpio-cells",
						  cnt, NULL, NULL);
		/* A hole in the gpios = <> counts anyway. */
		if (ret < 0 && ret != -EEXIST)
			break;
	} while (++cnt);

	return cnt;
}
EXPORT_SYMBOL(of_gpio_count);

/**
/**
 * of_gpio_simple_xlate - translate gpio_spec to the GPIO number and flags
 * of_gpio_simple_xlate - translate gpio_spec to the GPIO number and flags
 * @of_gc:	pointer to the of_gpio_chip structure
 * @of_gc:	pointer to the of_gpio_chip structure
+6 −0
Original line number Original line Diff line number Diff line
@@ -65,6 +65,7 @@ static inline struct of_mm_gpio_chip *to_of_mm_gpio_chip(struct gpio_chip *gc)


extern int of_get_gpio_flags(struct device_node *np, int index,
extern int of_get_gpio_flags(struct device_node *np, int index,
			     enum of_gpio_flags *flags);
			     enum of_gpio_flags *flags);
extern unsigned int of_gpio_count(struct device_node *np);


extern int of_mm_gpiochip_add(struct device_node *np,
extern int of_mm_gpiochip_add(struct device_node *np,
			      struct of_mm_gpio_chip *mm_gc);
			      struct of_mm_gpio_chip *mm_gc);
@@ -81,6 +82,11 @@ static inline int of_get_gpio_flags(struct device_node *np, int index,
	return -ENOSYS;
	return -ENOSYS;
}
}


static inline unsigned int of_gpio_count(struct device_node *np)
{
	return 0;
}

#endif /* CONFIG_OF_GPIO */
#endif /* CONFIG_OF_GPIO */


/**
/**