diff options
Diffstat (limited to 'drivers/pinctrl/devicetree.c')
| -rw-r--r-- | drivers/pinctrl/devicetree.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/pinctrl/devicetree.c b/drivers/pinctrl/devicetree.c index 340fb4e6c60..033e9654b1c 100644 --- a/drivers/pinctrl/devicetree.c +++ b/drivers/pinctrl/devicetree.c @@ -180,7 +180,7 @@ int pinctrl_dt_to_map(struct pinctrl *p) struct property *prop; const char *statename; const __be32 *list; - int size, config; + int size, config, valid_configs; phandle phandle; struct device_node *np_config; @@ -195,6 +195,7 @@ int pinctrl_dt_to_map(struct pinctrl *p) /* For each defined state ID */ for (state = 0; ; state++) { + valid_configs = 0; /* Retrieve the pinctrl-* property */ propname = kasprintf(GFP_KERNEL, "pinctrl-%d", state); prop = of_find_property(np, propname, &size); @@ -234,10 +235,15 @@ int pinctrl_dt_to_map(struct pinctrl *p) /* Parse the node */ ret = dt_to_map_one_config(p, statename, np_config); of_node_put(np_config); - if (ret < 0) - goto err; + if (ret >= 0) + valid_configs++; } + dev_dbg(p->dev, "%d/%d valid pinctrl configs found\n", + valid_configs, size); + if (!valid_configs) + goto err; + /* No entries in DT? Generate a dummy state table entry */ if (!size) { ret = dt_remember_dummy_state(p, statename); |