projects
/
GitHub
/
mt8127
/
android_kernel_alcatel_ttab.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge tag 'v3.10.69' into update
[GitHub/mt8127/android_kernel_alcatel_ttab.git]
/
drivers
/
gpio
/
gpiolib.c
diff --git
a/drivers/gpio/gpiolib.c
b/drivers/gpio/gpiolib.c
index c2534d62911cfd18434c9b2bb172cad265603e0d..931bdf3d020580521ca25ad1d77f83a217db3d78 100644
(file)
--- a/
drivers/gpio/gpiolib.c
+++ b/
drivers/gpio/gpiolib.c
@@
-136,7
+136,7
@@
static struct gpio_desc *gpio_to_desc(unsigned gpio)
*/
static int desc_to_gpio(const struct gpio_desc *desc)
{
*/
static int desc_to_gpio(const struct gpio_desc *desc)
{
- return desc
->chip->base + gpio_chip_hwgpio(desc)
;
+ return desc
- &gpio_desc[0]
;
}
}
@@
-362,7
+362,7
@@
static ssize_t gpio_value_store(struct device *dev,
return status;
}
return status;
}
-static
const
DEVICE_ATTR(value, 0644,
+static DEVICE_ATTR(value, 0644,
gpio_value_show, gpio_value_store);
static irqreturn_t gpio_sysfs_irq(int irq, void *priv)
gpio_value_show, gpio_value_store);
static irqreturn_t gpio_sysfs_irq(int irq, void *priv)
@@
-580,17
+580,17
@@
static ssize_t gpio_active_low_store(struct device *dev,
return status ? : size;
}
return status ? : size;
}
-static
const
DEVICE_ATTR(active_low, 0644,
+static DEVICE_ATTR(active_low, 0644,
gpio_active_low_show, gpio_active_low_store);
gpio_active_low_show, gpio_active_low_store);
-static
const
struct attribute *gpio_attrs[] = {
+static struct attribute *gpio_attrs[] = {
&dev_attr_value.attr,
&dev_attr_active_low.attr,
NULL,
};
static const struct attribute_group gpio_attr_group = {
&dev_attr_value.attr,
&dev_attr_active_low.attr,
NULL,
};
static const struct attribute_group gpio_attr_group = {
- .attrs =
(struct attribute **)
gpio_attrs,
+ .attrs = gpio_attrs,
};
/*
};
/*
@@
-627,7
+627,7
@@
static ssize_t chip_ngpio_show(struct device *dev,
}
static DEVICE_ATTR(ngpio, 0444, chip_ngpio_show, NULL);
}
static DEVICE_ATTR(ngpio, 0444, chip_ngpio_show, NULL);
-static
const
struct attribute *gpiochip_attrs[] = {
+static struct attribute *gpiochip_attrs[] = {
&dev_attr_base.attr,
&dev_attr_label.attr,
&dev_attr_ngpio.attr,
&dev_attr_base.attr,
&dev_attr_label.attr,
&dev_attr_ngpio.attr,
@@
-635,7
+635,7
@@
static const struct attribute *gpiochip_attrs[] = {
};
static const struct attribute_group gpiochip_attr_group = {
};
static const struct attribute_group gpiochip_attr_group = {
- .attrs =
(struct attribute **)
gpiochip_attrs,
+ .attrs = gpiochip_attrs,
};
/*
};
/*
@@
-806,20
+806,24
@@
static int gpiod_export(struct gpio_desc *desc, bool direction_may_change)
if (direction_may_change) {
status = device_create_file(dev, &dev_attr_direction);
if (status)
if (direction_may_change) {
status = device_create_file(dev, &dev_attr_direction);
if (status)
- goto fail_
unregister_device
;
+ goto fail_
remove_attr_group
;
}
if (gpiod_to_irq(desc) >= 0 && (direction_may_change ||
!test_bit(FLAG_IS_OUT, &desc->flags))) {
status = device_create_file(dev, &dev_attr_edge);
if (status)
}
if (gpiod_to_irq(desc) >= 0 && (direction_may_change ||
!test_bit(FLAG_IS_OUT, &desc->flags))) {
status = device_create_file(dev, &dev_attr_edge);
if (status)
- goto fail_
unregister_device
;
+ goto fail_
remove_attr_direction
;
}
set_bit(FLAG_EXPORT, &desc->flags);
mutex_unlock(&sysfs_lock);
return 0;
}
set_bit(FLAG_EXPORT, &desc->flags);
mutex_unlock(&sysfs_lock);
return 0;
+fail_remove_attr_direction:
+ device_remove_file(dev, &dev_attr_direction);
+fail_remove_attr_group:
+ sysfs_remove_group(&dev->kobj, &gpio_attr_group);
fail_unregister_device:
device_unregister(dev);
fail_unlock:
fail_unregister_device:
device_unregister(dev);
fail_unlock:
@@
-870,6
+874,7
@@
static int gpiod_export_link(struct device *dev, const char *name,
if (tdev != NULL) {
status = sysfs_create_link(&dev->kobj, &tdev->kobj,
name);
if (tdev != NULL) {
status = sysfs_create_link(&dev->kobj, &tdev->kobj,
name);
+ put_device(tdev);
} else {
status = -ENODEV;
}
} else {
status = -ENODEV;
}
@@
-923,7
+928,7
@@
static int gpiod_sysfs_set_active_low(struct gpio_desc *desc, int value)
}
status = sysfs_set_active_low(desc, dev, value);
}
status = sysfs_set_active_low(desc, dev, value);
-
+ put_device(dev);
unlock:
mutex_unlock(&sysfs_lock);
unlock:
mutex_unlock(&sysfs_lock);
@@
-971,6
+976,9
@@
static void gpiod_unexport(struct gpio_desc *desc)
mutex_unlock(&sysfs_lock);
if (dev) {
mutex_unlock(&sysfs_lock);
if (dev) {
+ device_remove_file(dev, &dev_attr_edge);
+ device_remove_file(dev, &dev_attr_direction);
+ sysfs_remove_group(&dev->kobj, &gpio_attr_group);
device_unregister(dev);
put_device(dev);
}
device_unregister(dev);
put_device(dev);
}
@@
-1036,6
+1044,7
@@
static void gpiochip_unexport(struct gpio_chip *chip)
mutex_lock(&sysfs_lock);
dev = class_find_device(&gpio_class, NULL, chip, match_export);
if (dev) {
mutex_lock(&sysfs_lock);
dev = class_find_device(&gpio_class, NULL, chip, match_export);
if (dev) {
+ sysfs_remove_group(&dev->kobj, &gpiochip_attr_group);
put_device(dev);
device_unregister(dev);
chip->exported = 0;
put_device(dev);
device_unregister(dev);
chip->exported = 0;
@@
-1214,15
+1223,14
@@
int gpiochip_add(struct gpio_chip *chip)
}
}
}
}
+ spin_unlock_irqrestore(&gpio_lock, flags);
+
#ifdef CONFIG_PINCTRL
INIT_LIST_HEAD(&chip->pin_ranges);
#endif
of_gpiochip_add(chip);
#ifdef CONFIG_PINCTRL
INIT_LIST_HEAD(&chip->pin_ranges);
#endif
of_gpiochip_add(chip);
-unlock:
- spin_unlock_irqrestore(&gpio_lock, flags);
-
if (status)
goto fail;
if (status)
goto fail;
@@
-1235,6
+1243,9
@@
unlock:
chip->label ? : "generic");
return 0;
chip->label ? : "generic");
return 0;
+
+unlock:
+ spin_unlock_irqrestore(&gpio_lock, flags);
fail:
/* failures here can mean systems won't boot... */
pr_err("gpiochip_add: gpios %d..%d (%s) failed to register\n",
fail:
/* failures here can mean systems won't boot... */
pr_err("gpiochip_add: gpios %d..%d (%s) failed to register\n",