aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/base/pinctrl.c
diff options
context:
space:
mode:
authorDeepak <deepak_das@mentor.com>2016-09-13 12:43:04 +0530
committerLinus Walleij <linus.walleij@linaro.org>2016-09-13 23:02:59 +0200
commiteb4ec68acf5ebb312d29840287e465d3d414b07e (patch)
treec0040544a574ca3a2567d8ae4de0cfbbc53b23d4 /drivers/base/pinctrl.c
parentpinctrl: meson-gxbb: add the missing SDIO interrupt pin (diff)
downloadlinux-dev-eb4ec68acf5ebb312d29840287e465d3d414b07e.tar.xz
linux-dev-eb4ec68acf5ebb312d29840287e465d3d414b07e.zip
driver: base: pinctrl: return error from pinctrl_bind_pins()
strict pin controller returns -EINVAL in case of pin request which is already claimed by somebody else. Following is the sequence of calling pin_request() from pinctrl_bind_pins():- pinctrl_bind_pins()->pinctrl_select_state()->pinmux_enable_setting()-> pin_request() But pinctrl_bind_pins() only returns -EPROBE_DEFER which makes device driver probe successful even if the pin request is rejected by the pin controller subsystem. This commit modifies pinctrl_bind_pins() to return error if the pin is rejected by pin control subsystem. Signed-off-by: Deepak Das <deepak_das@mentor.com> [Rewrote to be cleaner] Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/base/pinctrl.c')
-rw-r--r--drivers/base/pinctrl.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/base/pinctrl.c b/drivers/base/pinctrl.c
index 076297592754..5917b4b5fb99 100644
--- a/drivers/base/pinctrl.c
+++ b/drivers/base/pinctrl.c
@@ -91,9 +91,13 @@ cleanup_alloc:
devm_kfree(dev, dev->pins);
dev->pins = NULL;
- /* Only return deferrals */
- if (ret != -EPROBE_DEFER)
- ret = 0;
+ /* Return deferrals */
+ if (ret == -EPROBE_DEFER)
+ return ret;
+ /* Return serious errors */
+ if (ret == -EINVAL)
+ return ret;
+ /* We ignore errors like -ENOENT meaning no pinctrl state */
- return ret;
+ return 0;
}