Commit 323de9ef authored by Masahiro Yamada's avatar Masahiro Yamada Committed by Linus Walleij
Browse files

pinctrl: make pinctrl_register() return proper error code


Currently, pinctrl_register() just returns NULL on error, so the
callers can not know the exact reason of the failure.

Some of the pinctrl drivers return -EINVAL, some -ENODEV, and some
-ENOMEM on error of pinctrl_register(), although the error code
might be different from the real cause of the error.

This commit reworks pinctrl_register() to return the appropriate
error code and modifies all of the pinctrl drivers to use IS_ERR()
for the error checking and PTR_ERR() for getting the error code.
Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
Acked-by: default avatarPatrice Chotard <patrice.chotard@st.com>
Acked-by: default avatarThierry Reding <treding@nvidia.com>
Acked-by: default avatarHeiko Stuebner <heiko@sntech.de>
Tested-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
Acked-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
Acked-by: default avatarLee Jones <lee@kernel.org>
Acked-by: default avatarSören Brinkmann <soren.brinkmann@xilinx.com>
Acked-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: default avatarRay Jui <rjui@broadcom.com>
Acked-by: default avatarAntoine Tenart <antoine.tenart@free-electrons.com>
Acked-by: default avatarHongzhou Yang <hongzhou.yang@mediatek.com>
Acked-by: default avatarWei Chen <Wei.Chen@csr.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent e73ac02d
...@@ -1425,9 +1425,9 @@ static int __init bcm281xx_pinctrl_probe(struct platform_device *pdev) ...@@ -1425,9 +1425,9 @@ static int __init bcm281xx_pinctrl_probe(struct platform_device *pdev)
pctl = pinctrl_register(&bcm281xx_pinctrl_desc, pctl = pinctrl_register(&bcm281xx_pinctrl_desc,
&pdev->dev, &pdev->dev,
pdata); pdata);
if (!pctl) { if (IS_ERR(pctl)) {
dev_err(&pdev->dev, "Failed to register pinctrl\n"); dev_err(&pdev->dev, "Failed to register pinctrl\n");
return -ENODEV; return PTR_ERR(pctl);
} }
platform_set_drvdata(pdev, pdata); platform_set_drvdata(pdev, pdata);
......
...@@ -1036,9 +1036,9 @@ static int bcm2835_pinctrl_probe(struct platform_device *pdev) ...@@ -1036,9 +1036,9 @@ static int bcm2835_pinctrl_probe(struct platform_device *pdev)
} }
pc->pctl_dev = pinctrl_register(&bcm2835_pinctrl_desc, dev, pc); pc->pctl_dev = pinctrl_register(&bcm2835_pinctrl_desc, dev, pc);
if (!pc->pctl_dev) { if (IS_ERR(pc->pctl_dev)) {
gpiochip_remove(&pc->gpio_chip); gpiochip_remove(&pc->gpio_chip);
return -EINVAL; return PTR_ERR(pc->pctl_dev);
} }
pc->gpio_range = bcm2835_pinctrl_gpio_range; pc->gpio_range = bcm2835_pinctrl_gpio_range;
......
...@@ -748,9 +748,9 @@ static int cygnus_gpio_register_pinconf(struct cygnus_gpio *chip) ...@@ -748,9 +748,9 @@ static int cygnus_gpio_register_pinconf(struct cygnus_gpio *chip)
pctldesc->confops = &cygnus_pconf_ops; pctldesc->confops = &cygnus_pconf_ops;
chip->pctl = pinctrl_register(pctldesc, chip->dev, chip); chip->pctl = pinctrl_register(pctldesc, chip->dev, chip);
if (!chip->pctl) { if (IS_ERR(chip->pctl)) {
dev_err(chip->dev, "unable to register pinctrl device\n"); dev_err(chip->dev, "unable to register pinctrl device\n");
return -EINVAL; return PTR_ERR(chip->pctl);
} }
return 0; return 0;
......
...@@ -989,9 +989,9 @@ static int cygnus_pinmux_probe(struct platform_device *pdev) ...@@ -989,9 +989,9 @@ static int cygnus_pinmux_probe(struct platform_device *pdev)
pinctrl->pctl = pinctrl_register(&cygnus_pinctrl_desc, &pdev->dev, pinctrl->pctl = pinctrl_register(&cygnus_pinctrl_desc, &pdev->dev,
pinctrl); pinctrl);
if (!pinctrl->pctl) { if (IS_ERR(pinctrl->pctl)) {
dev_err(&pdev->dev, "unable to register Cygnus IOMUX pinctrl\n"); dev_err(&pdev->dev, "unable to register Cygnus IOMUX pinctrl\n");
return -EINVAL; return PTR_ERR(pinctrl->pctl);
} }
return 0; return 0;
......
...@@ -320,9 +320,9 @@ int berlin_pinctrl_probe(struct platform_device *pdev, ...@@ -320,9 +320,9 @@ int berlin_pinctrl_probe(struct platform_device *pdev,
} }
pctrl->pctrl_dev = pinctrl_register(&berlin_pctrl_desc, dev, pctrl); pctrl->pctrl_dev = pinctrl_register(&berlin_pctrl_desc, dev, pctrl);
if (!pctrl->pctrl_dev) { if (IS_ERR(pctrl->pctrl_dev)) {
dev_err(dev, "failed to register pinctrl driver\n"); dev_err(dev, "failed to register pinctrl driver\n");
return -EINVAL; return PTR_ERR(pctrl->pctrl_dev);
} }
return 0; return 0;
......
...@@ -1706,14 +1706,14 @@ struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc, ...@@ -1706,14 +1706,14 @@ struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc,
int ret; int ret;
if (!pctldesc) if (!pctldesc)
return NULL; return ERR_PTR(-EINVAL);
if (!pctldesc->name) if (!pctldesc->name)
return NULL; return ERR_PTR(-EINVAL);
pctldev = kzalloc(sizeof(*pctldev), GFP_KERNEL); pctldev = kzalloc(sizeof(*pctldev), GFP_KERNEL);
if (pctldev == NULL) { if (pctldev == NULL) {
dev_err(dev, "failed to alloc struct pinctrl_dev\n"); dev_err(dev, "failed to alloc struct pinctrl_dev\n");
return NULL; return ERR_PTR(-ENOMEM);
} }
/* Initialize pin control device struct */ /* Initialize pin control device struct */
...@@ -1726,20 +1726,23 @@ struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc, ...@@ -1726,20 +1726,23 @@ struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc,
mutex_init(&pctldev->mutex); mutex_init(&pctldev->mutex);
/* check core ops for sanity */ /* check core ops for sanity */
if (pinctrl_check_ops(pctldev)) { ret = pinctrl_check_ops(pctldev);
if (ret) {
dev_err(dev, "pinctrl ops lacks necessary functions\n"); dev_err(dev, "pinctrl ops lacks necessary functions\n");
goto out_err; goto out_err;
} }
/* If we're implementing pinmuxing, check the ops for sanity */ /* If we're implementing pinmuxing, check the ops for sanity */
if (pctldesc->pmxops) { if (pctldesc->pmxops) {
if (pinmux_check_ops(pctldev)) ret = pinmux_check_ops(pctldev);
if (ret)
goto out_err; goto out_err;
} }
/* If we're implementing pinconfig, check the ops for sanity */ /* If we're implementing pinconfig, check the ops for sanity */
if (pctldesc->confops) { if (pctldesc->confops) {
if (pinconf_check_ops(pctldev)) ret = pinconf_check_ops(pctldev);
if (ret)
goto out_err; goto out_err;
} }
...@@ -1785,7 +1788,7 @@ struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc, ...@@ -1785,7 +1788,7 @@ struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc,
out_err: out_err:
mutex_destroy(&pctldev->mutex); mutex_destroy(&pctldev->mutex);
kfree(pctldev); kfree(pctldev);
return NULL; return ERR_PTR(ret);
} }
EXPORT_SYMBOL_GPL(pinctrl_register); EXPORT_SYMBOL_GPL(pinctrl_register);
......
...@@ -727,9 +727,9 @@ int imx_pinctrl_probe(struct platform_device *pdev, ...@@ -727,9 +727,9 @@ int imx_pinctrl_probe(struct platform_device *pdev,
ipctl->dev = info->dev; ipctl->dev = info->dev;
platform_set_drvdata(pdev, ipctl); platform_set_drvdata(pdev, ipctl);
ipctl->pctl = pinctrl_register(&imx_pinctrl_desc, &pdev->dev, ipctl); ipctl->pctl = pinctrl_register(&imx_pinctrl_desc, &pdev->dev, ipctl);
if (!ipctl->pctl) { if (IS_ERR(ipctl->pctl)) {
dev_err(&pdev->dev, "could not register IMX pinctrl driver\n"); dev_err(&pdev->dev, "could not register IMX pinctrl driver\n");
return -EINVAL; return PTR_ERR(ipctl->pctl);
} }
dev_info(&pdev->dev, "initialized IMX pinctrl driver\n"); dev_info(&pdev->dev, "initialized IMX pinctrl driver\n");
......
...@@ -633,9 +633,9 @@ int imx1_pinctrl_core_probe(struct platform_device *pdev, ...@@ -633,9 +633,9 @@ int imx1_pinctrl_core_probe(struct platform_device *pdev,
ipctl->dev = info->dev; ipctl->dev = info->dev;
platform_set_drvdata(pdev, ipctl); platform_set_drvdata(pdev, ipctl);
ipctl->pctl = pinctrl_register(pctl_desc, &pdev->dev, ipctl); ipctl->pctl = pinctrl_register(pctl_desc, &pdev->dev, ipctl);
if (!ipctl->pctl) { if (IS_ERR(ipctl->pctl)) {
dev_err(&pdev->dev, "could not register IMX pinctrl driver\n"); dev_err(&pdev->dev, "could not register IMX pinctrl driver\n");
return -EINVAL; return PTR_ERR(ipctl->pctl);
} }
ret = of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev); ret = of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev);
......
...@@ -540,9 +540,9 @@ int mxs_pinctrl_probe(struct platform_device *pdev, ...@@ -540,9 +540,9 @@ int mxs_pinctrl_probe(struct platform_device *pdev,
} }
d->pctl = pinctrl_register(&mxs_pinctrl_desc, &pdev->dev, d); d->pctl = pinctrl_register(&mxs_pinctrl_desc, &pdev->dev, d);
if (!d->pctl) { if (IS_ERR(d->pctl)) {
dev_err(&pdev->dev, "Couldn't register MXS pinctrl driver\n"); dev_err(&pdev->dev, "Couldn't register MXS pinctrl driver\n");
ret = -EINVAL; ret = PTR_ERR(d->pctl);
goto err; goto err;
} }
......
...@@ -1489,9 +1489,9 @@ static int chv_pinctrl_probe(struct platform_device *pdev) ...@@ -1489,9 +1489,9 @@ static int chv_pinctrl_probe(struct platform_device *pdev)
pctrl->pctldesc.npins = pctrl->community->npins; pctrl->pctldesc.npins = pctrl->community->npins;
pctrl->pctldev = pinctrl_register(&pctrl->pctldesc, &pdev->dev, pctrl); pctrl->pctldev = pinctrl_register(&pctrl->pctldesc, &pdev->dev, pctrl);
if (!pctrl->pctldev) { if (IS_ERR(pctrl->pctldev)) {
dev_err(&pdev->dev, "failed to register pinctrl driver\n"); dev_err(&pdev->dev, "failed to register pinctrl driver\n");
return -ENODEV; return PTR_ERR(pctrl->pctldev);
} }
ret = chv_gpio_probe(pctrl, irq); ret = chv_gpio_probe(pctrl, irq);
......
...@@ -1021,9 +1021,9 @@ int intel_pinctrl_probe(struct platform_device *pdev, ...@@ -1021,9 +1021,9 @@ int intel_pinctrl_probe(struct platform_device *pdev,
pctrl->pctldesc.npins = pctrl->soc->npins; pctrl->pctldesc.npins = pctrl->soc->npins;
pctrl->pctldev = pinctrl_register(&pctrl->pctldesc, &pdev->dev, pctrl); pctrl->pctldev = pinctrl_register(&pctrl->pctldesc, &pdev->dev, pctrl);
if (!pctrl->pctldev) { if (IS_ERR(pctrl->pctldev)) {
dev_err(&pdev->dev, "failed to register pinctrl driver\n"); dev_err(&pdev->dev, "failed to register pinctrl driver\n");
return -ENODEV; return PTR_ERR(pctrl->pctldev);
} }
ret = intel_gpio_probe(pctrl, irq); ret = intel_gpio_probe(pctrl, irq);
......
...@@ -1269,9 +1269,9 @@ int mtk_pctrl_init(struct platform_device *pdev, ...@@ -1269,9 +1269,9 @@ int mtk_pctrl_init(struct platform_device *pdev,
mtk_pctrl_desc.npins = pctl->devdata->npins; mtk_pctrl_desc.npins = pctl->devdata->npins;
pctl->dev = &pdev->dev; pctl->dev = &pdev->dev;
pctl->pctl_dev = pinctrl_register(&mtk_pctrl_desc, &pdev->dev, pctl); pctl->pctl_dev = pinctrl_register(&mtk_pctrl_desc, &pdev->dev, pctl);
if (!pctl->pctl_dev) { if (IS_ERR(pctl->pctl_dev)) {
dev_err(&pdev->dev, "couldn't register pinctrl driver\n"); dev_err(&pdev->dev, "couldn't register pinctrl driver\n");
return -EINVAL; return PTR_ERR(pctl->pctl_dev);
} }
pctl->chip = devm_kzalloc(&pdev->dev, sizeof(*pctl->chip), GFP_KERNEL); pctl->chip = devm_kzalloc(&pdev->dev, sizeof(*pctl->chip), GFP_KERNEL);
......
...@@ -738,9 +738,9 @@ static int meson_pinctrl_probe(struct platform_device *pdev) ...@@ -738,9 +738,9 @@ static int meson_pinctrl_probe(struct platform_device *pdev)
pc->desc.npins = pc->data->num_pins; pc->desc.npins = pc->data->num_pins;
pc->pcdev = pinctrl_register(&pc->desc, pc->dev, pc); pc->pcdev = pinctrl_register(&pc->desc, pc->dev, pc);
if (!pc->pcdev) { if (IS_ERR(pc->pcdev)) {
dev_err(pc->dev, "can't register pinctrl device"); dev_err(pc->dev, "can't register pinctrl device");
return -EINVAL; return PTR_ERR(pc->pcdev);
} }
ret = meson_gpiolib_register(pc); ret = meson_gpiolib_register(pc);
......
...@@ -706,9 +706,9 @@ int mvebu_pinctrl_probe(struct platform_device *pdev) ...@@ -706,9 +706,9 @@ int mvebu_pinctrl_probe(struct platform_device *pdev)
} }
pctl->pctldev = pinctrl_register(&pctl->desc, &pdev->dev, pctl); pctl->pctldev = pinctrl_register(&pctl->desc, &pdev->dev, pctl);
if (!pctl->pctldev) { if (IS_ERR(pctl->pctldev)) {
dev_err(&pdev->dev, "unable to register pinctrl driver\n"); dev_err(&pdev->dev, "unable to register pinctrl driver\n");
return -EINVAL; return PTR_ERR(pctl->pctldev);
} }
dev_info(&pdev->dev, "registered pinctrl driver\n"); dev_info(&pdev->dev, "registered pinctrl driver\n");
......
...@@ -1235,10 +1235,10 @@ static int abx500_gpio_probe(struct platform_device *pdev) ...@@ -1235,10 +1235,10 @@ static int abx500_gpio_probe(struct platform_device *pdev)
abx500_pinctrl_desc.pins = pct->soc->pins; abx500_pinctrl_desc.pins = pct->soc->pins;
abx500_pinctrl_desc.npins = pct->soc->npins; abx500_pinctrl_desc.npins = pct->soc->npins;
pct->pctldev = pinctrl_register(&abx500_pinctrl_desc, &pdev->dev, pct); pct->pctldev = pinctrl_register(&abx500_pinctrl_desc, &pdev->dev, pct);
if (!pct->pctldev) { if (IS_ERR(pct->pctldev)) {
dev_err(&pdev->dev, dev_err(&pdev->dev,
"could not register abx500 pinctrl driver\n"); "could not register abx500 pinctrl driver\n");
ret = -EINVAL; ret = PTR_ERR(pct->pctldev);
goto out_rem_chip; goto out_rem_chip;
} }
dev_info(&pdev->dev, "registered pin controller\n"); dev_info(&pdev->dev, "registered pin controller\n");
......
...@@ -2029,9 +2029,9 @@ static int nmk_pinctrl_probe(struct platform_device *pdev) ...@@ -2029,9 +2029,9 @@ static int nmk_pinctrl_probe(struct platform_device *pdev)
npct->dev = &pdev->dev; npct->dev = &pdev->dev;
npct->pctl = pinctrl_register(&nmk_pinctrl_desc, &pdev->dev, npct); npct->pctl = pinctrl_register(&nmk_pinctrl_desc, &pdev->dev, npct);
if (!npct->pctl) { if (IS_ERR(npct->pctl)) {
dev_err(&pdev->dev, "could not register Nomadik pinctrl driver\n"); dev_err(&pdev->dev, "could not register Nomadik pinctrl driver\n");
return -EINVAL; return PTR_ERR(npct->pctl);
} }
/* We will handle a range of GPIO pins */ /* We will handle a range of GPIO pins */
......
...@@ -1070,9 +1070,9 @@ static int adi_pinctrl_probe(struct platform_device *pdev) ...@@ -1070,9 +1070,9 @@ static int adi_pinctrl_probe(struct platform_device *pdev)
/* Now register the pin controller and all pins it handles */ /* Now register the pin controller and all pins it handles */
pinctrl->pctl = pinctrl_register(&adi_pinmux_desc, &pdev->dev, pinctrl); pinctrl->pctl = pinctrl_register(&adi_pinmux_desc, &pdev->dev, pinctrl);
if (!pinctrl->pctl) { if (IS_ERR(pinctrl->pctl)) {
dev_err(&pdev->dev, "could not register pinctrl ADI2 driver\n"); dev_err(&pdev->dev, "could not register pinctrl ADI2 driver\n");
return -EINVAL; return PTR_ERR(pinctrl->pctl);
} }
platform_set_drvdata(pdev, pinctrl); platform_set_drvdata(pdev, pinctrl);
......
...@@ -789,9 +789,9 @@ static int amd_gpio_probe(struct platform_device *pdev) ...@@ -789,9 +789,9 @@ static int amd_gpio_probe(struct platform_device *pdev)
amd_pinctrl_desc.name = dev_name(&pdev->dev); amd_pinctrl_desc.name = dev_name(&pdev->dev);
gpio_dev->pctrl = pinctrl_register(&amd_pinctrl_desc, gpio_dev->pctrl = pinctrl_register(&amd_pinctrl_desc,
&pdev->dev, gpio_dev); &pdev->dev, gpio_dev);
if (!gpio_dev->pctrl) { if (IS_ERR(gpio_dev->pctrl)) {
dev_err(&pdev->dev, "Couldn't register pinctrl driver\n"); dev_err(&pdev->dev, "Couldn't register pinctrl driver\n");
return -ENODEV; return PTR_ERR(gpio_dev->pctrl);
} }
ret = gpiochip_add(&gpio_dev->gc); ret = gpiochip_add(&gpio_dev->gc);
......
...@@ -586,9 +586,9 @@ static int as3722_pinctrl_probe(struct platform_device *pdev) ...@@ -586,9 +586,9 @@ static int as3722_pinctrl_probe(struct platform_device *pdev)
as3722_pinctrl_desc.npins = ARRAY_SIZE(as3722_pins_desc); as3722_pinctrl_desc.npins = ARRAY_SIZE(as3722_pins_desc);
as_pci->pctl = pinctrl_register(&as3722_pinctrl_desc, as_pci->pctl = pinctrl_register(&as3722_pinctrl_desc,
&pdev->dev, as_pci); &pdev->dev, as_pci);
if (!as_pci->pctl) { if (IS_ERR(as_pci->pctl)) {
dev_err(&pdev->dev, "Couldn't register pinctrl driver\n"); dev_err(&pdev->dev, "Couldn't register pinctrl driver\n");
return -EINVAL; return PTR_ERR(as_pci->pctl);
} }
as_pci->gpio_chip = as3722_gpio_chip; as_pci->gpio_chip = as3722_gpio_chip;
......
...@@ -1238,9 +1238,9 @@ static int at91_pinctrl_probe(struct platform_device *pdev) ...@@ -1238,9 +1238,9 @@ static int at91_pinctrl_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, info); platform_set_drvdata(pdev, info);
info->pctl = pinctrl_register(&at91_pinctrl_desc, &pdev->dev, info); info->pctl = pinctrl_register(&at91_pinctrl_desc, &pdev->dev, info);
if (!info->pctl) { if (IS_ERR(info->pctl)) {
dev_err(&pdev->dev, "could not register AT91 pinctrl driver\n"); dev_err(&pdev->dev, "could not register AT91 pinctrl driver\n");
return -EINVAL; return PTR_ERR(info->pctl);
} }
/* We will handle a range of GPIO pins */ /* We will handle a range of GPIO pins */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment