gpio/gpiolib-of: Create of_mm_gpiochip_remove
authorRicardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Wed, 17 Dec 2014 15:51:13 +0000 (16:51 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Thu, 15 Jan 2015 16:23:17 +0000 (17:23 +0100)
Create counterpart of of_mm_gpiochip_add(). This way the modules that
can be removable do not duplicate the cleanup code.

Suggested-by: Alexandre Courbot <gnurou@gmail.com>
Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpiolib-of.c
include/linux/of_gpio.h

index 604dbe60bdee1abdddb8d706947391987628ab9e..3e2c6afeab11cf6beb26413f2cd3f4747a3ab660 100644 (file)
@@ -204,6 +204,23 @@ err0:
 }
 EXPORT_SYMBOL(of_mm_gpiochip_add);
 
+/**
+ * of_mm_gpiochip_remove - Remove memory mapped GPIO chip (bank)
+ * @mm_gc:     pointer to the of_mm_gpio_chip allocated structure
+ */
+void of_mm_gpiochip_remove(struct of_mm_gpio_chip *mm_gc)
+{
+       struct gpio_chip *gc = &mm_gc->gc;
+
+       if (!mm_gc)
+               return;
+
+       gpiochip_remove(gc);
+       iounmap(mm_gc->regs);
+       kfree(gc->label);
+}
+EXPORT_SYMBOL(of_mm_gpiochip_remove);
+
 #ifdef CONFIG_PINCTRL
 static void of_gpiochip_add_pin_range(struct gpio_chip *chip)
 {
index 38fc05036015d7538df934cc8d4e94e1c5f10e86..69dbe312b11b23f6f33f56c91e7d618b238758ff 100644 (file)
@@ -52,6 +52,7 @@ extern int of_get_named_gpio_flags(struct device_node *np,
 
 extern int of_mm_gpiochip_add(struct device_node *np,
                              struct of_mm_gpio_chip *mm_gc);
+extern void of_mm_gpiochip_remove(struct of_mm_gpio_chip *mm_gc);
 
 extern void of_gpiochip_add(struct gpio_chip *gc);
 extern void of_gpiochip_remove(struct gpio_chip *gc);