gpiolib: use gpio_chips list in gpiochip_find
Using the GPIO chips list is much faster than parsing the entire GPIO number space. Signed-off-by: Alexandre Courbot <acourbot@nvidia.com> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
This commit is contained in:
parent
65493e3ac4
commit
125eef96f6
1 changed files with 7 additions and 10 deletions
|
@ -1195,20 +1195,17 @@ struct gpio_chip *gpiochip_find(void *data,
|
||||||
int (*match)(struct gpio_chip *chip,
|
int (*match)(struct gpio_chip *chip,
|
||||||
void *data))
|
void *data))
|
||||||
{
|
{
|
||||||
struct gpio_chip *chip = NULL;
|
struct gpio_chip *chip;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int i;
|
|
||||||
|
|
||||||
spin_lock_irqsave(&gpio_lock, flags);
|
spin_lock_irqsave(&gpio_lock, flags);
|
||||||
for (i = 0; i < ARCH_NR_GPIOS; i++) {
|
list_for_each_entry(chip, &gpio_chips, list)
|
||||||
if (!gpio_desc[i].chip)
|
if (match(chip, data))
|
||||||
continue;
|
|
||||||
|
|
||||||
if (match(gpio_desc[i].chip, data)) {
|
|
||||||
chip = gpio_desc[i].chip;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
/* No match? */
|
||||||
|
if (&chip->list == &gpio_chips)
|
||||||
|
chip = NULL;
|
||||||
spin_unlock_irqrestore(&gpio_lock, flags);
|
spin_unlock_irqrestore(&gpio_lock, flags);
|
||||||
|
|
||||||
return chip;
|
return chip;
|
||||||
|
|
Loading…
Add table
Reference in a new issue