In cases where the pins and groups definitions are in a sub-node, as:

        uart_a {
                mux {
                        groups = "uart_tx_a", "uart_rx_a";
                        function = "uart_a";
                };
        };

pinctrl_generic_set_state_subnode() returns an error for the top-level
node and pinctrl_generic_set_state() fails. Instead, return success so
that the child nodes are tried.

Signed-off-by: Beniamino Galvani <[email protected]>
---
 drivers/pinctrl/pinctrl-generic.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/pinctrl/pinctrl-generic.c 
b/drivers/pinctrl/pinctrl-generic.c
index e86b72a..baff40f 100644
--- a/drivers/pinctrl/pinctrl-generic.c
+++ b/drivers/pinctrl/pinctrl-generic.c
@@ -312,8 +312,10 @@ static int pinctrl_generic_set_state_subnode(struct 
udevice *dev,
                is_group = true;
                strings_count = fdt_count_strings(fdt, node,
                                                  subnode_target_type);
-               if (strings_count < 0)
-                       return -EINVAL;
+               if (strings_count < 0) {
+                       /* skip this node; may contain config child nodes */
+                       return 0;
+               }
        }
 
        for (i = 0; i < strings_count; i++) {
-- 
2.7.4

_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to