diff options
author | Anton Vorontsov <avorontsov@ru.mvista.com> | 2010-06-08 09:48:17 -0400 |
---|---|---|
committer | Grant Likely <grant.likely@secretlab.ca> | 2010-07-05 18:14:30 -0400 |
commit | 391c970c0dd1100e3b9e1681f7d0f20aac35455a (patch) | |
tree | 05a42941269f77b22de6b640953df61f2da5d13c /drivers/gpio | |
parent | 594fa265e084073443390c5b93d5410fd28e9bcd (diff) |
of/gpio: add default of_xlate function if device has a node pointer
Implement generic OF gpio hooks and thus make device-enabled GPIO chips
(i.e. the ones that have gpio_chip->dev specified) automatically attach
to the OpenFirmware subsystem. Which means that now we can handle I2C and
SPI GPIO chips almost* transparently.
* "Almost" because some chips still require platform data, and for these
chips OF-glue is still needed, though with this change the glue will
be much smaller.
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Cc: David Brownell <dbrownell@users.sourceforge.net>
Cc: Bill Gatliff <bgat@billgatliff.com>
Cc: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Jean Delvare <khali@linux-fr.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
CC: linux-kernel@vger.kernel.org
CC: devicetree-discuss@lists.ozlabs.org
Diffstat (limited to 'drivers/gpio')
-rw-r--r-- | drivers/gpio/gpiolib.c | 5 | ||||
-rw-r--r-- | drivers/gpio/xilinx_gpio.c | 1 |
2 files changed, 5 insertions, 1 deletions
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 73fd328f6fe4..83cbc34e3a76 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c | |||
@@ -8,6 +8,7 @@ | |||
8 | #include <linux/debugfs.h> | 8 | #include <linux/debugfs.h> |
9 | #include <linux/seq_file.h> | 9 | #include <linux/seq_file.h> |
10 | #include <linux/gpio.h> | 10 | #include <linux/gpio.h> |
11 | #include <linux/of_gpio.h> | ||
11 | #include <linux/idr.h> | 12 | #include <linux/idr.h> |
12 | #include <linux/slab.h> | 13 | #include <linux/slab.h> |
13 | 14 | ||
@@ -1099,6 +1100,8 @@ int gpiochip_add(struct gpio_chip *chip) | |||
1099 | } | 1100 | } |
1100 | } | 1101 | } |
1101 | 1102 | ||
1103 | of_gpiochip_add(chip); | ||
1104 | |||
1102 | unlock: | 1105 | unlock: |
1103 | spin_unlock_irqrestore(&gpio_lock, flags); | 1106 | spin_unlock_irqrestore(&gpio_lock, flags); |
1104 | 1107 | ||
@@ -1133,6 +1136,8 @@ int gpiochip_remove(struct gpio_chip *chip) | |||
1133 | 1136 | ||
1134 | spin_lock_irqsave(&gpio_lock, flags); | 1137 | spin_lock_irqsave(&gpio_lock, flags); |
1135 | 1138 | ||
1139 | of_gpiochip_remove(chip); | ||
1140 | |||
1136 | for (id = chip->base; id < chip->base + chip->ngpio; id++) { | 1141 | for (id = chip->base; id < chip->base + chip->ngpio; id++) { |
1137 | if (test_bit(FLAG_REQUESTED, &gpio_desc[id].flags)) { | 1142 | if (test_bit(FLAG_REQUESTED, &gpio_desc[id].flags)) { |
1138 | status = -EBUSY; | 1143 | status = -EBUSY; |
diff --git a/drivers/gpio/xilinx_gpio.c b/drivers/gpio/xilinx_gpio.c index 2993c40b48e1..709690995d0d 100644 --- a/drivers/gpio/xilinx_gpio.c +++ b/drivers/gpio/xilinx_gpio.c | |||
@@ -190,7 +190,6 @@ static int __devinit xgpio_of_probe(struct device_node *np) | |||
190 | 190 | ||
191 | spin_lock_init(&chip->gpio_lock); | 191 | spin_lock_init(&chip->gpio_lock); |
192 | 192 | ||
193 | chip->mmchip.gc.of_gpio_n_cells = 2; | ||
194 | chip->mmchip.gc.direction_input = xgpio_dir_in; | 193 | chip->mmchip.gc.direction_input = xgpio_dir_in; |
195 | chip->mmchip.gc.direction_output = xgpio_dir_out; | 194 | chip->mmchip.gc.direction_output = xgpio_dir_out; |
196 | chip->mmchip.gc.get = xgpio_get; | 195 | chip->mmchip.gc.get = xgpio_get; |