diff options
Diffstat (limited to 'drivers/of/gpio.c')
-rw-r--r-- | drivers/of/gpio.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/of/gpio.c b/drivers/of/gpio.c index fde53a3a45a3..c8618d3282cf 100644 --- a/drivers/of/gpio.c +++ b/drivers/of/gpio.c | |||
@@ -46,7 +46,7 @@ int of_get_gpio_flags(struct device_node *np, int index, | |||
46 | goto err0; | 46 | goto err0; |
47 | } | 47 | } |
48 | 48 | ||
49 | gc = gpio_np->data; | 49 | gc = of_node_to_gpiochip(gpio_np); |
50 | if (!gc) { | 50 | if (!gc) { |
51 | pr_debug("%s: gpio controller %s isn't registered\n", | 51 | pr_debug("%s: gpio controller %s isn't registered\n", |
52 | np->full_name, gpio_np->full_name); | 52 | np->full_name, gpio_np->full_name); |
@@ -193,7 +193,6 @@ int of_mm_gpiochip_add(struct device_node *np, | |||
193 | if (mm_gc->save_regs) | 193 | if (mm_gc->save_regs) |
194 | mm_gc->save_regs(mm_gc); | 194 | mm_gc->save_regs(mm_gc); |
195 | 195 | ||
196 | np->data = &mm_gc->gc; | ||
197 | mm_gc->gc.of_node = np; | 196 | mm_gc->gc.of_node = np; |
198 | 197 | ||
199 | ret = gpiochip_add(gc); | 198 | ret = gpiochip_add(gc); |
@@ -207,7 +206,6 @@ int of_mm_gpiochip_add(struct device_node *np, | |||
207 | np->full_name, gc->base); | 206 | np->full_name, gc->base); |
208 | return 0; | 207 | return 0; |
209 | err2: | 208 | err2: |
210 | np->data = NULL; | ||
211 | iounmap(mm_gc->regs); | 209 | iounmap(mm_gc->regs); |
212 | err1: | 210 | err1: |
213 | kfree(gc->label); | 211 | kfree(gc->label); |
@@ -217,3 +215,14 @@ err0: | |||
217 | return ret; | 215 | return ret; |
218 | } | 216 | } |
219 | EXPORT_SYMBOL(of_mm_gpiochip_add); | 217 | EXPORT_SYMBOL(of_mm_gpiochip_add); |
218 | |||
219 | /* Private function for resolving node pointer to gpio_chip */ | ||
220 | static int of_gpiochip_is_match(struct gpio_chip *chip, void *data) | ||
221 | { | ||
222 | return chip->of_node == data; | ||
223 | } | ||
224 | |||
225 | struct gpio_chip *of_node_to_gpiochip(struct device_node *np) | ||
226 | { | ||
227 | return gpiochip_find(np, of_gpiochip_is_match); | ||
228 | } | ||