diff options
| -rw-r--r-- | drivers/gpio/gpiolib.c | 17 | 
1 files changed, 7 insertions, 10 deletions
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index c1d8f7bdcd8..5a79cb955d9 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -1195,20 +1195,17 @@ struct gpio_chip *gpiochip_find(void *data,  				int (*match)(struct gpio_chip *chip,  					     void *data))  { -	struct gpio_chip *chip = NULL; +	struct gpio_chip *chip;  	unsigned long flags; -	int i;  	spin_lock_irqsave(&gpio_lock, flags); -	for (i = 0; i < ARCH_NR_GPIOS; i++) { -		if (!gpio_desc[i].chip) -			continue; - -		if (match(gpio_desc[i].chip, data)) { -			chip = gpio_desc[i].chip; +	list_for_each_entry(chip, &gpio_chips, list) +		if (match(chip, data))  			break; -		} -	} + +	/* No match? */ +	if (&chip->list == &gpio_chips) +		chip = NULL;  	spin_unlock_irqrestore(&gpio_lock, flags);  	return chip;  |