pinctrl: berlin: fix the dt_free_map function
authorAntoine Tenart <antoine.tenart@free-electrons.com>
Wed, 10 Sep 2014 09:15:51 +0000 (11:15 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Tue, 23 Sep 2014 15:01:47 +0000 (17:01 +0200)
The berlin_pinctrl_dt_free_map function tries to free memory
allocated and handled by the of subsystem. This is wrong and
already handled by pinctrl_dt_free_maps() which calls
of_node_put().

This patch fixes the Berlin pinctrl way of freeing its maps,
avoiding a kernel BUG(), by using the common
pinctrl_utils_dt_free_map function instead.

Signed-off-by: Antoine Tenart <antoine.tenart@free-electrons.com>
Acked-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/berlin/berlin.c

index 61f1bf0..7f0b0f9 100644 (file)
@@ -99,30 +99,11 @@ static int berlin_pinctrl_dt_node_to_map(struct pinctrl_dev *pctrl_dev,
        return 0;
 }
 
-static void berlin_pinctrl_dt_free_map(struct pinctrl_dev *pctrl_dev,
-                                      struct pinctrl_map *map,
-                                      unsigned nmaps)
-{
-       int i;
-
-       for (i = 0; i < nmaps; i++) {
-               if (map[i].type == PIN_MAP_TYPE_MUX_GROUP) {
-                       kfree(map[i].data.mux.group);
-
-                       /* a function can be applied to multiple groups */
-                       if (i == 0)
-                               kfree(map[i].data.mux.function);
-               }
-       }
-
-       kfree(map);
-}
-
 static const struct pinctrl_ops berlin_pinctrl_ops = {
        .get_groups_count       = &berlin_pinctrl_get_group_count,
        .get_group_name         = &berlin_pinctrl_get_group_name,
        .dt_node_to_map         = &berlin_pinctrl_dt_node_to_map,
-       .dt_free_map            = &berlin_pinctrl_dt_free_map,
+       .dt_free_map            = &pinctrl_utils_dt_free_map,
 };
 
 static int berlin_pinmux_get_functions_count(struct pinctrl_dev *pctrl_dev)