提交 cb1650d4 编写于 作者: A Alexandre Courbot 提交者: Grant Likely

gpiolib: use gpio_chips list in sysfs ops

This makes the code both simpler and faster compared to parsing the GPIO
number space.
Signed-off-by: NAlexandre Courbot <acourbot@nvidia.com>
Signed-off-by: NGrant Likely <grant.likely@secretlab.ca>
上级 125eef96
......@@ -1890,45 +1890,28 @@ static void gpiolib_dbg_show(struct seq_file *s, struct gpio_chip *chip)
static void *gpiolib_seq_start(struct seq_file *s, loff_t *pos)
{
struct gpio_chip *chip = NULL;
unsigned int gpio;
void *ret = NULL;
loff_t index = 0;
loff_t index = *pos;
/* REVISIT this isn't locked against gpio_chip removal ... */
for (gpio = 0; gpio_is_valid(gpio); gpio++) {
if (gpio_desc[gpio].chip == chip)
continue;
chip = gpio_desc[gpio].chip;
if (!chip)
continue;
if (index++ >= *pos) {
ret = chip;
break;
}
}
s->private = "";
return ret;
list_for_each_entry(chip, &gpio_chips, list)
if (index-- == 0)
return chip;
return NULL;
}
static void *gpiolib_seq_next(struct seq_file *s, void *v, loff_t *pos)
{
struct gpio_chip *chip = v;
unsigned int gpio;
void *ret = NULL;
/* skip GPIOs provided by the current chip */
for (gpio = chip->base + chip->ngpio; gpio_is_valid(gpio); gpio++) {
chip = gpio_desc[gpio].chip;
if (chip) {
ret = chip;
break;
}
}
if (list_is_last(&chip->list, &gpio_chips))
ret = NULL;
else
ret = list_entry(chip->list.next, struct gpio_chip, list);
s->private = "\n";
++*pos;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册