diff options
author | Antoine Tenart <antoine.tenart@free-electrons.com> | 2014-09-10 05:15:51 -0400 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2014-09-23 11:01:47 -0400 |
commit | 6064b1474ef3cfa523916008b5176026bbc990d3 (patch) | |
tree | b8f2e5effb24e5c031c86584a3a4a70bae7693d8 /drivers/pinctrl/berlin | |
parent | 3d78427397daea47b5a38642f46f75ef993de571 (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.c | 21 |
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 | ||
102 | static 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 | |||
121 | static const struct pinctrl_ops berlin_pinctrl_ops = { | 102 | static 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 | ||
128 | static int berlin_pinmux_get_functions_count(struct pinctrl_dev *pctrl_dev) | 109 | static int berlin_pinmux_get_functions_count(struct pinctrl_dev *pctrl_dev) |