aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Rosin <peda@axentia.se>2018-01-17 08:34:22 -0500
committerLinus Walleij <linus.walleij@linaro.org>2018-01-18 05:04:43 -0500
commit1a1d39e1b8dd1d0f92a79da4fcc1ab0be3ae9bfc (patch)
tree90a7f0e3e640bfb36535c0aa9a851fe44b06a38b
parent0657cb50b5a75abd92956028727dc255d690a4a6 (diff)
pinctrl: sx150x: Register pinctrl before adding the gpiochip
Various gpiolib activity depend on the pinctrl to be up and kicking. Therefore, register the pinctrl before adding a gpiochip. Cc: stable@vger.kernel.org Suggested-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Peter Rosin <peda@axentia.se> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
-rw-r--r--drivers/pinctrl/pinctrl-sx150x.c35
1 files changed, 21 insertions, 14 deletions
diff --git a/drivers/pinctrl/pinctrl-sx150x.c b/drivers/pinctrl/pinctrl-sx150x.c
index f926ba044577..049dd15e04ef 100644
--- a/drivers/pinctrl/pinctrl-sx150x.c
+++ b/drivers/pinctrl/pinctrl-sx150x.c
@@ -1144,6 +1144,27 @@ static int sx150x_probe(struct i2c_client *client,
1144 if (ret) 1144 if (ret)
1145 return ret; 1145 return ret;
1146 1146
1147 /* Pinctrl_desc */
1148 pctl->pinctrl_desc.name = "sx150x-pinctrl";
1149 pctl->pinctrl_desc.pctlops = &sx150x_pinctrl_ops;
1150 pctl->pinctrl_desc.confops = &sx150x_pinconf_ops;
1151 pctl->pinctrl_desc.pins = pctl->data->pins;
1152 pctl->pinctrl_desc.npins = pctl->data->npins;
1153 pctl->pinctrl_desc.owner = THIS_MODULE;
1154
1155 ret = devm_pinctrl_register_and_init(dev, &pctl->pinctrl_desc,
1156 pctl, &pctl->pctldev);
1157 if (ret) {
1158 dev_err(dev, "Failed to register pinctrl device\n");
1159 return ret;
1160 }
1161
1162 ret = pinctrl_enable(pctl->pctldev);
1163 if (ret) {
1164 dev_err(dev, "Failed to enable pinctrl device\n");
1165 return ret;
1166 }
1167
1147 /* Register GPIO controller */ 1168 /* Register GPIO controller */
1148 pctl->gpio.label = devm_kstrdup(dev, client->name, GFP_KERNEL); 1169 pctl->gpio.label = devm_kstrdup(dev, client->name, GFP_KERNEL);
1149 pctl->gpio.base = -1; 1170 pctl->gpio.base = -1;
@@ -1217,20 +1238,6 @@ static int sx150x_probe(struct i2c_client *client,
1217 client->irq); 1238 client->irq);
1218 } 1239 }
1219 1240
1220 /* Pinctrl_desc */
1221 pctl->pinctrl_desc.name = "sx150x-pinctrl";
1222 pctl->pinctrl_desc.pctlops = &sx150x_pinctrl_ops;
1223 pctl->pinctrl_desc.confops = &sx150x_pinconf_ops;
1224 pctl->pinctrl_desc.pins = pctl->data->pins;
1225 pctl->pinctrl_desc.npins = pctl->data->npins;
1226 pctl->pinctrl_desc.owner = THIS_MODULE;
1227
1228 pctl->pctldev = devm_pinctrl_register(dev, &pctl->pinctrl_desc, pctl);
1229 if (IS_ERR(pctl->pctldev)) {
1230 dev_err(dev, "Failed to register pinctrl device\n");
1231 return PTR_ERR(pctl->pctldev);
1232 }
1233
1234 return 0; 1241 return 0;
1235} 1242}
1236 1243