[PATCH 1/4] gpiolib: Add gpiochip_find_by_name() and gpio_find_by_chip_name()
From: Grant Likely <hidden>
Date: 2012-03-09 01:06:00
Also in:
linux-mmc, linux-omap, lkml
On Fri, 2 Mar 2012 11:06:15 -0800, Tony Lindgren [off-list ref] wrote:
* Grant Likely [off-list ref] [120302 10:16]:quoted
On Fri, 2 Mar 2012 10:08:48 -0800, Tony Lindgren [off-list ref] wrote:quoted
* Tony Lindgren [off-list ref] [120302 08:31]:quoted
* Grant Likely [off-list ref] [120302 01:00]:quoted
On Thu, 01 Mar 2012 10:55:24 -0800, Tony Lindgren [off-list ref] wrote:quoted
+ +/** + * gpiochip_find_by_name() - iterator for locating a gpio_chip by name + * @name: name of the gpio_chip + * + * Similar to bus_find_device_by_name. It returns a reference to the + * first gpio_chip with matching name. It ignores NULL and empty names. + * If you need to do something more complex, then use gpiochip_find. + */ +struct gpio_chip *gpiochip_find_by_name(const char *name) +{ + if (!name || !strcmp(name, "")) + return NULL; + + return gpiochip_find((void *)name, match_name);Nasty cast. Can the signature for gpiochip_find be changed to accept a (const void *)?I think so, this too comes from the bus code.Looks like it can't be const as of_node_to_gpiochip uses it with a struct device_node * that for of_get_named_gpio_flags comes from of_parse_phandle_with_args.Really? It sees to work fine here:Hmm right you are. I must have missed adding the const to of_gpiochip_is_match, that's good news :) Want to do that as a separate patch or want me to fold it in?
I've got it as a separate commit in my gpio/next branch. g.
quoted
---diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index d773540..e633a2a 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c@@ -1152,8 +1152,9 @@ EXPORT_SYMBOL_GPL(gpiochip_remove); * non-zero, this function will return to the caller and not iterate over any * more gpio_chips. */ -struct gpio_chip *gpiochip_find(void *data, - int (*match)(struct gpio_chip *chip, void *data)) +struct gpio_chip *gpiochip_find(const void *data, + int (*match)(struct gpio_chip *chip, + const void *data)) { struct gpio_chip *chip = NULL; unsigned long flags;diff --git a/drivers/of/gpio.c b/drivers/of/gpio.c index e034b38..bba8121 100644 --- a/drivers/of/gpio.c +++ b/drivers/of/gpio.c@@ -229,7 +229,7 @@ void of_gpiochip_remove(struct gpio_chip *chip) } /* Private function for resolving node pointer to gpio_chip */ -static int of_gpiochip_is_match(struct gpio_chip *chip, void *data) +static int of_gpiochip_is_match(struct gpio_chip *chip, const void *data) { return chip->of_node == data; }diff --git a/include/asm-generic/gpio.h b/include/asm-generic/gpio.h index 1ff4e22..5f52690 100644 --- a/include/asm-generic/gpio.h +++ b/include/asm-generic/gpio.h@@ -142,9 +142,9 @@ extern int __must_check gpiochip_reserve(int start, int ngpio); /* add/remove chips */ extern int gpiochip_add(struct gpio_chip *chip); extern int __must_check gpiochip_remove(struct gpio_chip *chip); -extern struct gpio_chip *gpiochip_find(void *data, +extern struct gpio_chip *gpiochip_find(const void *data, int (*match)(struct gpio_chip *chip, - void *data)); + const void *data)); /* Always use the library code for GPIO management calls,
-- email sent from notmuch.vim plugin