aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio/gpiolib.c
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers@simtec.co.uk>2009-04-02 19:57:05 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2009-04-02 22:04:51 -0400
commit926b663ce8215ba448960e1ff6e58b67a2c3b99b (patch)
treed60e6add2528b6a61968b0dc2db2f162bb157639 /drivers/gpio/gpiolib.c
parentf30281f4f7c2a0efcfeddad12277dfdada8f08a7 (diff)
gpiolib: allow GPIOs to be named
Allow GPIOs in GPIOLIB chips to be named. This name is then used when the GPIO is exported to sysfs, although it could be used elsewhere if deemed useful. Signed-off-by: Daniel Silverstone <dsilvers@simtec.co.uk> Cc: David Brownell <david-b@pacbell.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/gpio/gpiolib.c')
-rw-r--r--drivers/gpio/gpiolib.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 42fb2fd24c0c..83c3fe3a136b 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -438,6 +438,7 @@ int gpio_export(unsigned gpio, bool direction_may_change)
438 unsigned long flags; 438 unsigned long flags;
439 struct gpio_desc *desc; 439 struct gpio_desc *desc;
440 int status = -EINVAL; 440 int status = -EINVAL;
441 char *ioname = NULL;
441 442
442 /* can't export until sysfs is available ... */ 443 /* can't export until sysfs is available ... */
443 if (!gpio_class.p) { 444 if (!gpio_class.p) {
@@ -461,11 +462,14 @@ int gpio_export(unsigned gpio, bool direction_may_change)
461 } 462 }
462 spin_unlock_irqrestore(&gpio_lock, flags); 463 spin_unlock_irqrestore(&gpio_lock, flags);
463 464
465 if (desc->chip->names && desc->chip->names[gpio - desc->chip->base])
466 ioname = desc->chip->names[gpio - desc->chip->base];
467
464 if (status == 0) { 468 if (status == 0) {
465 struct device *dev; 469 struct device *dev;
466 470
467 dev = device_create(&gpio_class, desc->chip->dev, MKDEV(0, 0), 471 dev = device_create(&gpio_class, desc->chip->dev, MKDEV(0, 0),
468 desc, "gpio%d", gpio); 472 desc, ioname ? ioname : "gpio%d", gpio);
469 if (dev) { 473 if (dev) {
470 if (direction_may_change) 474 if (direction_may_change)
471 status = sysfs_create_group(&dev->kobj, 475 status = sysfs_create_group(&dev->kobj,
@@ -513,6 +517,7 @@ void gpio_unexport(unsigned gpio)
513 mutex_lock(&sysfs_lock); 517 mutex_lock(&sysfs_lock);
514 518
515 desc = &gpio_desc[gpio]; 519 desc = &gpio_desc[gpio];
520
516 if (test_bit(FLAG_EXPORT, &desc->flags)) { 521 if (test_bit(FLAG_EXPORT, &desc->flags)) {
517 struct device *dev = NULL; 522 struct device *dev = NULL;
518 523