提交 d19c5e79 编写于 作者: R Rob Herring 提交者: Greg Kroah-Hartman

pinctrl: Support stopping deferred probe after initcalls

Pinctrl drivers are a common dependency which can prevent a system
booting even if the default or bootloader configured settings can work.
If a pinctrl node in DT indicates that the default pin setup can be used
with the 'pinctrl-use-default' property, then only defer probe until
initcalls are done. If the deferred probe timeout is enabled or loadable
modules are disabled, then we'll stop deferring probe regardless of the
DT property. This gives platforms the option to work without their
pinctrl driver being enabled.

Dropped the pinctrl specific deferring probe message as the driver core
can print deferred probe related messages if needed.
Reviewed-by: NLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: NRob Herring <robh@kernel.org>
Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
上级 7930eb91
...@@ -111,17 +111,24 @@ static int dt_to_map_one_config(struct pinctrl *p, ...@@ -111,17 +111,24 @@ static int dt_to_map_one_config(struct pinctrl *p,
int ret; int ret;
struct pinctrl_map *map; struct pinctrl_map *map;
unsigned num_maps; unsigned num_maps;
bool allow_default = false;
/* Find the pin controller containing np_config */ /* Find the pin controller containing np_config */
np_pctldev = of_node_get(np_config); np_pctldev = of_node_get(np_config);
for (;;) { for (;;) {
if (!allow_default)
allow_default = of_property_read_bool(np_pctldev,
"pinctrl-use-default");
np_pctldev = of_get_next_parent(np_pctldev); np_pctldev = of_get_next_parent(np_pctldev);
if (!np_pctldev || of_node_is_root(np_pctldev)) { if (!np_pctldev || of_node_is_root(np_pctldev)) {
dev_info(p->dev, "could not find pctldev for node %pOF, deferring probe\n",
np_config);
of_node_put(np_pctldev); of_node_put(np_pctldev);
/* OK let's just assume this will appear later then */ ret = driver_deferred_probe_check_state(p->dev);
return -EPROBE_DEFER; /* keep deferring if modules are enabled unless we've timed out */
if (IS_ENABLED(CONFIG_MODULES) && !allow_default && ret == -ENODEV)
ret = -EPROBE_DEFER;
return ret;
} }
/* If we're creating a hog we can use the passed pctldev */ /* If we're creating a hog we can use the passed pctldev */
if (hog_pctldev && (np_pctldev == p->dev->of_node)) { if (hog_pctldev && (np_pctldev == p->dev->of_node)) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册