diff options
author | Daniel Silverstone <dsilvers@simtec.co.uk> | 2009-04-02 19:57:05 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-02 22:04:51 -0400 |
commit | 926b663ce8215ba448960e1ff6e58b67a2c3b99b (patch) | |
tree | d60e6add2528b6a61968b0dc2db2f162bb157639 /drivers/gpio/gpiolib.c | |
parent | f30281f4f7c2a0efcfeddad12277dfdada8f08a7 (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.c | 7 |
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 | ||