pinctrl: changes hog mechanism to be self-referential
authorLinus Walleij <linus.walleij@linaro.org>
Fri, 10 Feb 2012 00:34:12 +0000 (01:34 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Fri, 10 Feb 2012 20:33:10 +0000 (21:33 +0100)
Instead of a specific boolean field to indicate if a map entry shall
be hogged, treat self-reference as an indication of desired hogging.
This drops one field off the map struct and has a nice Douglas R.
Hofstadter-feel to it.

Acked-by: Dong Aisheng <dong.aisheng@linaro.org>
Acked-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Documentation/pinctrl.txt
drivers/pinctrl/core.c
include/linux/pinctrl/machine.h

index 2e7132355db8ca022f39e708d80d837ce9e54229..ee3266b948e7e959ca6c664dac19c13124149885 100644 (file)
@@ -989,21 +989,21 @@ is registered. This means that the core will attempt to call pinctrl_get() and
 pinctrl_enable() on it immediately after the pin control device has been
 registered.
 
-This is enabled by simply setting the .hog_on_boot field in the map to true,
-like this:
+This is enabled by simply setting the .dev_name field in the map to the name
+of the pin controller itself, like this:
 
 {
        .name = "POWERMAP"
        .ctrl_dev_name = "pinctrl-foo",
        .function = "power_func",
-       .hog_on_boot = true,
+       .dev_name = "pinctrl-foo",
 },
 
 Since it may be common to request the core to hog a few always-applicable
 mux settings on the primary pin controller, there is a convenience macro for
 this:
 
-PIN_MAP_PRIMARY_SYS_HOG("POWERMAP", "power_func")
+PIN_MAP_PRIMARY_SYS_HOG("POWERMAP", "pinctrl-foo", "power_func")
 
 This gives the exact same result as the above construction.
 
index ec32c545f07ff831434b29a46bcefe87da9bc611..c5f76ad5a8c589d5d0f365352e5283820c6e6f50 100644 (file)
@@ -793,11 +793,9 @@ int pinctrl_hog_maps(struct pinctrl_dev *pctldev)
        for (i = 0; i < pinctrl_maps_num; i++) {
                struct pinctrl_map const *map = &pinctrl_maps[i];
 
-               if (!map->hog_on_boot)
-                       continue;
-
                if (map->ctrl_dev_name &&
-                   !strcmp(map->ctrl_dev_name, devname)) {
+                   !strcmp(map->ctrl_dev_name, devname) &&
+                   !strcmp(map->dev_name, devname)) {
                        /* OK time to hog! */
                        ret = pinctrl_hog_map(pctldev, map);
                        if (ret)
index a2ab524a0106ffd9ce28f8f9e25e618beb039091..af145d571970f60d0e204efd9559f4f01c225b08 100644 (file)
  *     selects a certain specific pin group to activate for the function, if
  *     left as NULL, the first applicable group will be used
  * @dev_name: the name of the device using this specific mapping, the name
- *     must be the same as in your struct device*
- * @hog_on_boot: if this is set to true, the pin control subsystem will itself
- *     hog the mappings as the pinmux device drivers are attached, so this is
- *     typically used with system maps (mux mappings without an assigned
- *     device) that you want to get hogged and enabled by default as soon as
- *     a pinmux device supporting it is registered. These maps will not be
- *     disabled and put until the system shuts down.
+ *     must be the same as in your struct device*. If this name is set to the
+ *     same name as the pin controllers own dev_name(), the map entry will be
+ *     hogged by the driver itself upon registration
  */
 struct pinctrl_map {
        const char *name;
@@ -40,7 +36,6 @@ struct pinctrl_map {
        const char *function;
        const char *group;
        const char *dev_name;
-       bool hog_on_boot;
 };
 
 /*
@@ -62,8 +57,7 @@ struct pinctrl_map {
  * to be hogged by the pin control core until the system shuts down.
  */
 #define PIN_MAP_SYS_HOG(a, b, c) \
-       { .name = a, .ctrl_dev_name = b, .function = c, \
-         .hog_on_boot = true }
+       { .name = a, .ctrl_dev_name = b, .dev_name = b, .function = c, }
 
 /*
  * Convenience macro to map a system function onto a certain pinctrl device
@@ -71,8 +65,8 @@ struct pinctrl_map {
  * system shuts down.
  */
 #define PIN_MAP_SYS_HOG_GROUP(a, b, c, d)              \
-       { .name = a, .ctrl_dev_name = b, .function = c, .group = d, \
-         .hog_on_boot = true }
+       { .name = a, .ctrl_dev_name = b, .dev_name = b, .function = c, \
+         .group = d, }
 
 #ifdef CONFIG_PINMUX