driver: base: pinctrl: return error from pinctrl_bind_pins()
authorDeepak <deepak_das@mentor.com>
Tue, 13 Sep 2016 07:13:04 +0000 (12:43 +0530)
committerLinus Walleij <linus.walleij@linaro.org>
Tue, 13 Sep 2016 21:02:59 +0000 (23:02 +0200)
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>
drivers/base/pinctrl.c

index 0762975927541346de55ca09466fe194f7f1d212..5917b4b5fb99f3dce1f264c884dfadc26643ec00 100644 (file)
@@ -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;
 }