|
@@ -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;
|