aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpio')
-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