summaryrefslogtreecommitdiffstats
path: root/drivers/pinctrl/berlin
diff options
context:
space:
mode:
authorAntoine Tenart <antoine.tenart@free-electrons.com>2014-09-10 05:15:51 -0400
committerLinus Walleij <linus.walleij@linaro.org>2014-09-23 11:01:47 -0400
commit6064b1474ef3cfa523916008b5176026bbc990d3 (patch)
treeb8f2e5effb24e5c031c86584a3a4a70bae7693d8 /drivers/pinctrl/berlin
parent3d78427397daea47b5a38642f46f75ef993de571 (diff)
pinctrl: berlin: fix the dt_free_map function
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>
Diffstat (limited to 'drivers/pinctrl/berlin')
-rw-r--r--drivers/pinctrl/berlin/berlin.c21
1 files changed, 1 insertions, 20 deletions
diff --git a/drivers/pinctrl/berlin/berlin.c b/drivers/pinctrl/berlin/berlin.c
index 61f1bf0e60ba..7f0b0f93242b 100644
--- a/drivers/pinctrl/berlin/berlin.c
+++ b/drivers/pinctrl/berlin/berlin.c
@@ -99,30 +99,11 @@ static int berlin_pinctrl_dt_node_to_map(struct pinctrl_dev *pctrl_dev,
99 return 0; 99 return 0;
100} 100}
101 101
102static void berlin_pinctrl_dt_free_map(struct pinctrl_dev *pctrl_dev,
103 struct pinctrl_map *map,
104 unsigned nmaps)
105{
106 int i;
107
108 for (i = 0; i < nmaps; i++) {
109 if (map[i].type == PIN_MAP_TYPE_MUX_GROUP) {
110 kfree(map[i].data.mux.group);
111
112 /* a function can be applied to multiple groups */
113 if (i == 0)
114 kfree(map[i].data.mux.function);
115 }
116 }
117
118 kfree(map);
119}
120
121static const struct pinctrl_ops berlin_pinctrl_ops = { 102static const struct pinctrl_ops berlin_pinctrl_ops = {
122 .get_groups_count = &berlin_pinctrl_get_group_count, 103 .get_groups_count = &berlin_pinctrl_get_group_count,
123 .get_group_name = &berlin_pinctrl_get_group_name, 104 .get_group_name = &berlin_pinctrl_get_group_name,
124 .dt_node_to_map = &berlin_pinctrl_dt_node_to_map, 105 .dt_node_to_map = &berlin_pinctrl_dt_node_to_map,
125 .dt_free_map = &berlin_pinctrl_dt_free_map, 106 .dt_free_map = &pinctrl_utils_dt_free_map,
126}; 107};
127 108
128static int berlin_pinmux_get_functions_count(struct pinctrl_dev *pctrl_dev) 109static int berlin_pinmux_get_functions_count(struct pinctrl_dev *pctrl_dev)