pinctrl: create pinctrl_free_setting function
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>
This commit is contained in:
parent
2c9abf808a
commit
d3cee8305b
1 changed files with 19 additions and 13 deletions
|
@ -794,6 +794,24 @@ struct pinctrl *pinctrl_get(struct device *dev)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(pinctrl_get);
|
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)
|
static void pinctrl_put_locked(struct pinctrl *p, bool inlist)
|
||||||
{
|
{
|
||||||
struct pinctrl_state *state, *n1;
|
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(state, n1, &p->states, node) {
|
||||||
list_for_each_entry_safe(setting, n2, &state->settings, node) {
|
list_for_each_entry_safe(setting, n2, &state->settings, node) {
|
||||||
switch (setting->type) {
|
pinctrl_free_setting(state == p->state, setting);
|
||||||
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;
|
|
||||||
}
|
|
||||||
list_del(&setting->node);
|
list_del(&setting->node);
|
||||||
kfree(setting);
|
kfree(setting);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue