Some drivers like i2c-gpio do not have dedicated pinctrl states. They
broke when error checking for pinctrl was added. Detect them now, and in
their case, simply skip over pinctrl configuration.
Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
                goto err_with_revert;
        }
 
-       p = devm_pinctrl_get_select(adap->dev.parent, priv->bus_name);
+       /*
+        * Check if there are pinctrl states at all. Note: we cant' use
+        * devm_pinctrl_get_select() because we need to distinguish between
+        * the -ENODEV from devm_pinctrl_get() and pinctrl_lookup_state().
+        */
+       p = devm_pinctrl_get(adap->dev.parent);
        if (IS_ERR(p)) {
                ret = PTR_ERR(p);
-               goto err_with_put;
+               /* continue if just no pinctrl states (e.g. i2c-gpio), otherwise exit */
+               if (ret != -ENODEV)
+                       goto err_with_put;
+       } else {
+               /* there are states. check and use them */
+               struct pinctrl_state *s = pinctrl_lookup_state(p, priv->bus_name);
+
+               if (IS_ERR(s)) {
+                       ret = PTR_ERR(s);
+                       goto err_with_put;
+               }
+               ret = pinctrl_select_state(p, s);
+               if (ret < 0)
+                       goto err_with_put;
        }
 
        priv->chan[new_chan].parent_adap = adap;