Add the facility to export/unexport a gpio by the name assigned to it as well as the number. Signed-off-by: Ben Dooks Cc: David Brownell --- drivers/gpio/gpiolib.c | 59 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 55 insertions(+), 4 deletions(-) Index: b/drivers/gpio/gpiolib.c =================================================================== --- a/drivers/gpio/gpiolib.c 2009-08-03 17:53:04.000000000 +0100 +++ b/drivers/gpio/gpiolib.c 2009-08-03 17:53:33.000000000 +0100 @@ -364,6 +364,53 @@ static const struct attribute_group gpio .attrs = (struct attribute **) gpiochip_attrs, }; +static int search_names(char **names, const char *match, int ngpio) +{ + int ptr; + + if (names) { + for (ptr = 0; ptr < ngpio; ptr++) { + if (!names[ptr]) + continue; + + if (strcmp(names[ptr], match) == 0) + return ptr; + } + } + + return -ENOENT; +} + +static long gpio_from_string(const char *buf) +{ + struct gpio_chip *chip; + struct gpio_desc *desc; + long status; + long gpio; + int ptr, off; + + status = strict_strtol(buf, 0, &gpio); + if (status < 0) { + for (ptr = 0; ptr < ARCH_NR_GPIOS && status < 0;) { + desc = gpio_desc + ptr; + chip = desc->chip; + + if (!chip) { + ptr++; + continue; + } + + off = search_names(chip->names, buf, chip->ngpio); + if (off >= 0) + status = ptr + off; + + ptr += chip->ngpio; + } + } + + return status; +} + /* * /sys/class/gpio/export ... write-only * integer N ... number of GPIO to export (full access) @@ -375,9 +422,11 @@ static ssize_t export_store(struct class long gpio; int status; - status = strict_strtol(buf, 0, &gpio); - if (status < 0) + gpio = gpio_from_string(buf); + if (gpio < 0) { + status = gpio; goto done; + } /* No extra locking here; FLAG_SYSFS just signifies that the * request and export were done by on behalf of userspace, so @@ -405,9 +454,11 @@ static ssize_t unexport_store(struct cla long gpio; int status; - status = strict_strtol(buf, 0, &gpio); - if (status < 0) + gpio = gpio_from_string(buf); + if (gpio < 0) { + status = gpio; goto done; + } status = -EINVAL; -- -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/