From e25db308e4fe98e9fe0bdc3a8e9f8ee9ea261920 Mon Sep 17 00:00:00 2001 From: Richard Genoud Date: Mon, 25 Mar 2013 15:47:23 +0100 Subject: [PATCH] --- yaml --- r: 362990 b: refs/heads/master c: 50cf7c8ab324de348990bb028ad9ed10872d527a h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/pinctrl/core.c | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 0461006b9bc1..4200f266adbc 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3102a76cfbf9ac4ae0cf54c7452f7ba4292a4760 +refs/heads/master: 50cf7c8ab324de348990bb028ad9ed10872d527a diff --git a/trunk/drivers/pinctrl/core.c b/trunk/drivers/pinctrl/core.c index 09f79f251800..3e969813154f 100644 --- a/trunk/drivers/pinctrl/core.c +++ b/trunk/drivers/pinctrl/core.c @@ -897,6 +897,7 @@ static int pinctrl_select_state_locked(struct pinctrl *p, struct pinctrl_state *state) { struct pinctrl_setting *setting, *setting2; + struct pinctrl_state *old_state = p->state; int ret; if (p->state == state) @@ -973,7 +974,24 @@ static int pinctrl_select_state_locked(struct pinctrl *p, pinctrl_free_setting(true, setting2); } reapply_old_state: - /* FIXME: re-enable old setting */ + if (old_state) { + list_for_each_entry(setting, &old_state->settings, node) { + bool found = false; + if (setting->type != PIN_MAP_TYPE_MUX_GROUP) + continue; + list_for_each_entry(setting2, &state->settings, node) { + if (setting2->type != PIN_MAP_TYPE_MUX_GROUP) + continue; + if (setting2->data.mux.group == + setting->data.mux.group) { + found = true; + break; + } + } + if (!found) + pinmux_enable_setting(setting); + } + } return ret; }