From mboxrd@z Thu Jan 1 00:00:00 1970 From: robh@kernel.org (Rob Herring) Date: Thu, 24 May 2018 12:50:21 -0500 Subject: [PATCH v2 5/8] pinctrl: optionally stop deferring probe at end of initcalls In-Reply-To: <20180524175024.19874-1-robh@kernel.org> References: <20180524175024.19874-1-robh@kernel.org> Message-ID: <20180524175024.19874-6-robh@kernel.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org If the pinctrl node in DT indicates that pin setup is optional and the defaults can be used with the 'pinctrl-use-default', then only defer probe until initcalls are done. This gives platforms the option to work without their pinctrl driver being enabled. Signed-off-by: Rob Herring --- drivers/pinctrl/devicetree.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/pinctrl/devicetree.c b/drivers/pinctrl/devicetree.c index b601039d6c69..74a31074b406 100644 --- a/drivers/pinctrl/devicetree.c +++ b/drivers/pinctrl/devicetree.c @@ -110,17 +110,23 @@ static int dt_to_map_one_config(struct pinctrl *p, int ret; struct pinctrl_map *map; unsigned num_maps; + bool pctl_optional = false; /* Find the pin controller containing np_config */ np_pctldev = of_node_get(np_config); for (;;) { + if (!pctl_optional) + pctl_optional = of_property_read_bool(np_pctldev, "pinctrl-use-default"); + np_pctldev = of_get_next_parent(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); - /* OK let's just assume this will appear later then */ - return -EPROBE_DEFER; + ret = driver_deferred_probe_check_init_done(p->dev, pctl_optional); + if (ret == -EPROBE_DEFER) + /* OK let's just assume this will appear later then */ + dev_info(p->dev, "could not find pctldev for node %pOF, deferring probe\n", + np_config); + return ret; } /* If we're creating a hog we can use the passed pctldev */ if (pctldev && (np_pctldev == p->dev->of_node)) -- 2.17.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rob Herring Subject: [PATCH v2 5/8] pinctrl: optionally stop deferring probe at end of initcalls Date: Thu, 24 May 2018 12:50:21 -0500 Message-ID: <20180524175024.19874-6-robh@kernel.org> References: <20180524175024.19874-1-robh@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180524175024.19874-1-robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: boot-architecture-bounces-cunTk1MwBs8s++Sfvej+rw@public.gmane.org Sender: "boot-architecture" To: Greg Kroah-Hartman , Linus Walleij , Alexander Graf , Bjorn Andersson , "Rafael J. Wysocki" , Kevin Hilman , Ulf Hansson , Joerg Roedel , Robin Murphy , Mark Brown , Frank Rowand Cc: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, boot-architecture-cunTk1MwBs8s++Sfvej+rw@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org List-Id: devicetree@vger.kernel.org SWYgdGhlIHBpbmN0cmwgbm9kZSBpbiBEVCBpbmRpY2F0ZXMgdGhhdCBwaW4gc2V0dXAgaXMgb3B0 aW9uYWwgYW5kIHRoZQpkZWZhdWx0cyBjYW4gYmUgdXNlZCB3aXRoIHRoZSAncGluY3RybC11c2Ut ZGVmYXVsdCcsIHRoZW4gb25seSBkZWZlciBwcm9iZQp1bnRpbCBpbml0Y2FsbHMgYXJlIGRvbmUu IFRoaXMgZ2l2ZXMgcGxhdGZvcm1zIHRoZSBvcHRpb24gdG8gd29yayB3aXRob3V0CnRoZWlyIHBp bmN0cmwgZHJpdmVyIGJlaW5nIGVuYWJsZWQuCgpTaWduZWQtb2ZmLWJ5OiBSb2IgSGVycmluZyA8 cm9iaEBrZXJuZWwub3JnPgotLS0KIGRyaXZlcnMvcGluY3RybC9kZXZpY2V0cmVlLmMgfCAxNCAr KysrKysrKysrLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDQgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL2RldmljZXRyZWUuYyBiL2RyaXZl cnMvcGluY3RybC9kZXZpY2V0cmVlLmMKaW5kZXggYjYwMTAzOWQ2YzY5Li43NGEzMTA3NGI0MDYg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9kZXZpY2V0cmVlLmMKKysrIGIvZHJpdmVycy9w aW5jdHJsL2RldmljZXRyZWUuYwpAQCAtMTEwLDE3ICsxMTAsMjMgQEAgc3RhdGljIGludCBkdF90 b19tYXBfb25lX2NvbmZpZyhzdHJ1Y3QgcGluY3RybCAqcCwKIAlpbnQgcmV0OwogCXN0cnVjdCBw aW5jdHJsX21hcCAqbWFwOwogCXVuc2lnbmVkIG51bV9tYXBzOworCWJvb2wgcGN0bF9vcHRpb25h bCA9IGZhbHNlOwogCiAJLyogRmluZCB0aGUgcGluIGNvbnRyb2xsZXIgY29udGFpbmluZyBucF9j b25maWcgKi8KIAlucF9wY3RsZGV2ID0gb2Zfbm9kZV9nZXQobnBfY29uZmlnKTsKIAlmb3IgKDs7 KSB7CisJCWlmICghcGN0bF9vcHRpb25hbCkKKwkJCXBjdGxfb3B0aW9uYWwgPSBvZl9wcm9wZXJ0 eV9yZWFkX2Jvb2wobnBfcGN0bGRldiwgInBpbmN0cmwtdXNlLWRlZmF1bHQiKTsKKwogCQlucF9w Y3RsZGV2ID0gb2ZfZ2V0X25leHRfcGFyZW50KG5wX3BjdGxkZXYpOwogCQlpZiAoIW5wX3BjdGxk ZXYgfHwgb2Zfbm9kZV9pc19yb290KG5wX3BjdGxkZXYpKSB7Ci0JCQlkZXZfaW5mbyhwLT5kZXYs ICJjb3VsZCBub3QgZmluZCBwY3RsZGV2IGZvciBub2RlICVwT0YsIGRlZmVycmluZyBwcm9iZVxu IiwKLQkJCQlucF9jb25maWcpOwogCQkJb2Zfbm9kZV9wdXQobnBfcGN0bGRldik7Ci0JCQkvKiBP SyBsZXQncyBqdXN0IGFzc3VtZSB0aGlzIHdpbGwgYXBwZWFyIGxhdGVyIHRoZW4gKi8KLQkJCXJl dHVybiAtRVBST0JFX0RFRkVSOworCQkJcmV0ID0gZHJpdmVyX2RlZmVycmVkX3Byb2JlX2NoZWNr X2luaXRfZG9uZShwLT5kZXYsIHBjdGxfb3B0aW9uYWwpOworCQkJaWYgKHJldCA9PSAtRVBST0JF X0RFRkVSKQorCQkJCS8qIE9LIGxldCdzIGp1c3QgYXNzdW1lIHRoaXMgd2lsbCBhcHBlYXIgbGF0 ZXIgdGhlbiAqLworCQkJCWRldl9pbmZvKHAtPmRldiwgImNvdWxkIG5vdCBmaW5kIHBjdGxkZXYg Zm9yIG5vZGUgJXBPRiwgZGVmZXJyaW5nIHByb2JlXG4iLAorCQkJCQlucF9jb25maWcpOworCQkJ cmV0dXJuIHJldDsKIAkJfQogCQkvKiBJZiB3ZSdyZSBjcmVhdGluZyBhIGhvZyB3ZSBjYW4gdXNl IHRoZSBwYXNzZWQgcGN0bGRldiAqLwogCQlpZiAocGN0bGRldiAmJiAobnBfcGN0bGRldiA9PSBw LT5kZXYtPm9mX25vZGUpKQotLSAKMi4xNy4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpib290LWFyY2hpdGVjdHVyZSBtYWlsaW5nIGxpc3QKYm9vdC1h cmNoaXRlY3R1cmVAbGlzdHMubGluYXJvLm9yZwpodHRwczovL2xpc3RzLmxpbmFyby5vcmcvbWFp bG1hbi9saXN0aW5mby9ib290LWFyY2hpdGVjdHVyZQo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1032060AbeEXRwZ (ORCPT ); Thu, 24 May 2018 13:52:25 -0400 Received: from mail-yb0-f196.google.com ([209.85.213.196]:38181 "EHLO mail-yb0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1031168AbeEXRul (ORCPT ); Thu, 24 May 2018 13:50:41 -0400 X-Google-Smtp-Source: AB8JxZrc2TdvR9ECx8yPlMYRSrZ2R1CNZMNxvJELm4B8RdNwGEwyTxURdT1WzEja3oLaycG3VzW0zg== From: Rob Herring To: Greg Kroah-Hartman , Linus Walleij , Alexander Graf , Bjorn Andersson , "Rafael J. Wysocki" , Kevin Hilman , Ulf Hansson , Joerg Roedel , Robin Murphy , Mark Brown , Frank Rowand Cc: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, boot-architecture@lists.linaro.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 5/8] pinctrl: optionally stop deferring probe at end of initcalls Date: Thu, 24 May 2018 12:50:21 -0500 Message-Id: <20180524175024.19874-6-robh@kernel.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180524175024.19874-1-robh@kernel.org> References: <20180524175024.19874-1-robh@kernel.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If the pinctrl node in DT indicates that pin setup is optional and the defaults can be used with the 'pinctrl-use-default', then only defer probe until initcalls are done. This gives platforms the option to work without their pinctrl driver being enabled. Signed-off-by: Rob Herring --- drivers/pinctrl/devicetree.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/pinctrl/devicetree.c b/drivers/pinctrl/devicetree.c index b601039d6c69..74a31074b406 100644 --- a/drivers/pinctrl/devicetree.c +++ b/drivers/pinctrl/devicetree.c @@ -110,17 +110,23 @@ static int dt_to_map_one_config(struct pinctrl *p, int ret; struct pinctrl_map *map; unsigned num_maps; + bool pctl_optional = false; /* Find the pin controller containing np_config */ np_pctldev = of_node_get(np_config); for (;;) { + if (!pctl_optional) + pctl_optional = of_property_read_bool(np_pctldev, "pinctrl-use-default"); + np_pctldev = of_get_next_parent(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); - /* OK let's just assume this will appear later then */ - return -EPROBE_DEFER; + ret = driver_deferred_probe_check_init_done(p->dev, pctl_optional); + if (ret == -EPROBE_DEFER) + /* OK let's just assume this will appear later then */ + dev_info(p->dev, "could not find pctldev for node %pOF, deferring probe\n", + np_config); + return ret; } /* If we're creating a hog we can use the passed pctldev */ if (pctldev && (np_pctldev == p->dev->of_node)) -- 2.17.0