pinctrl: Remove duplicate code in pinctrl_pm_select_state functions
authorTony Lindgren <tony@atomide.com>
Thu, 18 Jul 2013 15:15:04 +0000 (08:15 -0700)
committer黄涛 <huangtao@rock-chips.com>
Fri, 3 Jan 2014 10:56:01 +0000 (18:56 +0800)
There's no need to duplicate essentially the same functions. Let's
introduce static int pinctrl_pm_select_state() and make the other
related functions call that.

This allows us to add support later on for multiple active states,
and more optimized dynamic remuxing.

Note that we still need to export the various pinctrl_pm_select
functions as we want to keep struct pinctrl_state private to the
pinctrl code, and cannot replace those with inline functions.

Cc: Felipe Balbi <balbi@ti.com>
Cc: Stephen Warren <swarren@wwwdotorg.org>
Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/core.c

index 82c4e5aee9f1b49306bf9c57f7b7f86eb484a0eb..d9dd0d09fe940e62fdd03b3f89612a5582da64a4 100644 (file)
@@ -1207,23 +1207,36 @@ EXPORT_SYMBOL_GPL(pinctrl_force_default);
 #ifdef CONFIG_PM
 
 /**
- * pinctrl_pm_select_default_state() - select default pinctrl state for PM
+ * pinctrl_pm_select_state() - select pinctrl state for PM
  * @dev: device to select default state for
+ * @state: state to set
  */
-int pinctrl_pm_select_default_state(struct device *dev)
+static int pinctrl_pm_select_state(struct device *dev,
+                                  struct pinctrl_state *state)
 {
        struct dev_pin_info *pins = dev->pins;
        int ret;
 
-       if (!pins)
-               return 0;
-       if (IS_ERR(pins->default_state))
-               return 0; /* No default state */
-       ret = pinctrl_select_state(pins->p, pins->default_state);
+       if (IS_ERR(state))
+               return 0; /* No such state */
+       ret = pinctrl_select_state(pins->p, state);
        if (ret)
-               dev_err(dev, "failed to activate default pinctrl state\n");
+               dev_err(dev, "failed to activate pinctrl state %s\n",
+                       state->name);
        return ret;
 }
+
+/**
+ * pinctrl_pm_select_default_state() - select default pinctrl state for PM
+ * @dev: device to select default state for
+ */
+int pinctrl_pm_select_default_state(struct device *dev)
+{
+       if (!dev->pins)
+               return 0;
+
+       return pinctrl_pm_select_state(dev, dev->pins->default_state);
+}
 EXPORT_SYMBOL_GPL(pinctrl_pm_select_default_state);
 
 /**
@@ -1232,17 +1245,10 @@ EXPORT_SYMBOL_GPL(pinctrl_pm_select_default_state);
  */
 int pinctrl_pm_select_sleep_state(struct device *dev)
 {
-       struct dev_pin_info *pins = dev->pins;
-       int ret;
-
-       if (!pins)
+       if (!dev->pins)
                return 0;
-       if (IS_ERR(pins->sleep_state))
-               return 0; /* No sleep state */
-       ret = pinctrl_select_state(pins->p, pins->sleep_state);
-       if (ret)
-               dev_err(dev, "failed to activate pinctrl sleep state\n");
-       return ret;
+
+       return pinctrl_pm_select_state(dev, dev->pins->sleep_state);
 }
 EXPORT_SYMBOL_GPL(pinctrl_pm_select_sleep_state);
 
@@ -1252,17 +1258,10 @@ EXPORT_SYMBOL_GPL(pinctrl_pm_select_sleep_state);
  */
 int pinctrl_pm_select_idle_state(struct device *dev)
 {
-       struct dev_pin_info *pins = dev->pins;
-       int ret;
-
-       if (!pins)
+       if (!dev->pins)
                return 0;
-       if (IS_ERR(pins->idle_state))
-               return 0; /* No idle state */
-       ret = pinctrl_select_state(pins->p, pins->idle_state);
-       if (ret)
-               dev_err(dev, "failed to activate pinctrl idle state\n");
-       return ret;
+
+       return pinctrl_pm_select_state(dev, dev->pins->idle_state);
 }
 EXPORT_SYMBOL_GPL(pinctrl_pm_select_idle_state);
 #endif