pinctrl: create pinctrl_free_setting function
authorRichard Genoud <richard.genoud@gmail.com>
Mon, 25 Mar 2013 14:47:21 +0000 (15:47 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Wed, 27 Mar 2013 22:14:52 +0000 (23:14 +0100)
This prepares the implementation of pinctrl_select_state_locked() free code.

No functionnal change.

Signed-off-by: Richard Genoud <richard.genoud@gmail.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/core.c

index f8a632dc877b37197fa8f34a1801a0abd9909ce6..971234599d72c7dc1636c54a0313d8980e571a17 100644 (file)
@@ -794,6 +794,24 @@ struct pinctrl *pinctrl_get(struct device *dev)
 }
 EXPORT_SYMBOL_GPL(pinctrl_get);
 
+static void pinctrl_free_setting(bool disable_setting,
+                                struct pinctrl_setting *setting)
+{
+       switch (setting->type) {
+       case PIN_MAP_TYPE_MUX_GROUP:
+               if (disable_setting)
+                       pinmux_disable_setting(setting);
+               pinmux_free_setting(setting);
+               break;
+       case PIN_MAP_TYPE_CONFIGS_PIN:
+       case PIN_MAP_TYPE_CONFIGS_GROUP:
+               pinconf_free_setting(setting);
+               break;
+       default:
+               break;
+       }
+}
+
 static void pinctrl_put_locked(struct pinctrl *p, bool inlist)
 {
        struct pinctrl_state *state, *n1;
@@ -801,19 +819,7 @@ static void pinctrl_put_locked(struct pinctrl *p, bool inlist)
 
        list_for_each_entry_safe(state, n1, &p->states, node) {
                list_for_each_entry_safe(setting, n2, &state->settings, node) {
-                       switch (setting->type) {
-                       case PIN_MAP_TYPE_MUX_GROUP:
-                               if (state == p->state)
-                                       pinmux_disable_setting(setting);
-                               pinmux_free_setting(setting);
-                               break;
-                       case PIN_MAP_TYPE_CONFIGS_PIN:
-                       case PIN_MAP_TYPE_CONFIGS_GROUP:
-                               pinconf_free_setting(setting);
-                               break;
-                       default:
-                               break;
-                       }
+                       pinctrl_free_setting(state == p->state, setting);
                        list_del(&setting->node);
                        kfree(setting);
                }