pinctrl: make pinctrl_register() return proper error code
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Tue, 9 Jun 2015 04:01:16 +0000 (13:01 +0900)
committerLinus Walleij <linus.walleij@linaro.org>
Wed, 10 Jun 2015 12:49:52 +0000 (14:49 +0200)
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: Masahiro Yamada <yamada.masahiro@socionext.com>
Acked-by: Patrice Chotard <patrice.chotard@st.com>
Acked-by: Thierry Reding <treding@nvidia.com>
Acked-by: Heiko Stuebner <heiko@sntech.de>
Tested-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Acked-by: Lee Jones <lee@kernel.org>
Acked-by: Sören Brinkmann <soren.brinkmann@xilinx.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Ray Jui <rjui@broadcom.com>
Acked-by: Antoine Tenart <antoine.tenart@free-electrons.com>
Acked-by: Hongzhou Yang <hongzhou.yang@mediatek.com>
Acked-by: Wei Chen <Wei.Chen@csr.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
45 files changed:
drivers/pinctrl/bcm/pinctrl-bcm281xx.c
drivers/pinctrl/bcm/pinctrl-bcm2835.c
drivers/pinctrl/bcm/pinctrl-cygnus-gpio.c
drivers/pinctrl/bcm/pinctrl-cygnus-mux.c
drivers/pinctrl/berlin/berlin.c
drivers/pinctrl/core.c
drivers/pinctrl/freescale/pinctrl-imx.c
drivers/pinctrl/freescale/pinctrl-imx1-core.c
drivers/pinctrl/freescale/pinctrl-mxs.c
drivers/pinctrl/intel/pinctrl-cherryview.c
drivers/pinctrl/intel/pinctrl-intel.c
drivers/pinctrl/mediatek/pinctrl-mtk-common.c
drivers/pinctrl/meson/pinctrl-meson.c
drivers/pinctrl/mvebu/pinctrl-mvebu.c
drivers/pinctrl/nomadik/pinctrl-abx500.c
drivers/pinctrl/nomadik/pinctrl-nomadik.c
drivers/pinctrl/pinctrl-adi2.c
drivers/pinctrl/pinctrl-amd.c
drivers/pinctrl/pinctrl-as3722.c
drivers/pinctrl/pinctrl-at91.c
drivers/pinctrl/pinctrl-lantiq.c
drivers/pinctrl/pinctrl-lpc18xx.c
drivers/pinctrl/pinctrl-palmas.c
drivers/pinctrl/pinctrl-pistachio.c
drivers/pinctrl/pinctrl-rockchip.c
drivers/pinctrl/pinctrl-single.c
drivers/pinctrl/pinctrl-st.c
drivers/pinctrl/pinctrl-tb10x.c
drivers/pinctrl/pinctrl-tegra-xusb.c
drivers/pinctrl/pinctrl-tegra.c
drivers/pinctrl/pinctrl-tz1090-pdc.c
drivers/pinctrl/pinctrl-tz1090.c
drivers/pinctrl/pinctrl-u300.c
drivers/pinctrl/pinctrl-zynq.c
drivers/pinctrl/qcom/pinctrl-msm.c
drivers/pinctrl/qcom/pinctrl-spmi-gpio.c
drivers/pinctrl/qcom/pinctrl-spmi-mpp.c
drivers/pinctrl/samsung/pinctrl-exynos5440.c
drivers/pinctrl/samsung/pinctrl-samsung.c
drivers/pinctrl/sh-pfc/pinctrl.c
drivers/pinctrl/sirf/pinctrl-atlas7.c
drivers/pinctrl/sirf/pinctrl-sirf.c
drivers/pinctrl/spear/pinctrl-spear.c
drivers/pinctrl/sunxi/pinctrl-sunxi.c
drivers/pinctrl/vt8500/pinctrl-wmt.c

index 9641f1c..c3c692e 100644 (file)
@@ -1425,9 +1425,9 @@ static int __init bcm281xx_pinctrl_probe(struct platform_device *pdev)
        pctl = pinctrl_register(&bcm281xx_pinctrl_desc,
                                &pdev->dev,
                                pdata);
-       if (!pctl) {
+       if (IS_ERR(pctl)) {
                dev_err(&pdev->dev, "Failed to register pinctrl\n");
-               return -ENODEV;
+               return PTR_ERR(pctl);
        }
 
        platform_set_drvdata(pdev, pdata);
index 8d908e3..efcf2a2 100644 (file)
@@ -1036,9 +1036,9 @@ static int bcm2835_pinctrl_probe(struct platform_device *pdev)
        }
 
        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);
-               return -EINVAL;
+               return PTR_ERR(pc->pctl_dev);
        }
 
        pc->gpio_range = bcm2835_pinctrl_gpio_range;
index bde45ba..6af538f 100644 (file)
@@ -748,9 +748,9 @@ static int cygnus_gpio_register_pinconf(struct cygnus_gpio *chip)
        pctldesc->confops = &cygnus_pconf_ops;
 
        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");
-               return -EINVAL;
+               return PTR_ERR(chip->pctl);
        }
 
        return 0;
index f9a9283..9728f3d 100644 (file)
@@ -989,9 +989,9 @@ static int cygnus_pinmux_probe(struct platform_device *pdev)
 
        pinctrl->pctl = pinctrl_register(&cygnus_pinctrl_desc, &pdev->dev,
                        pinctrl);
-       if (!pinctrl->pctl) {
+       if (IS_ERR(pinctrl->pctl)) {
                dev_err(&pdev->dev, "unable to register Cygnus IOMUX pinctrl\n");
-               return -EINVAL;
+               return PTR_ERR(pinctrl->pctl);
        }
 
        return 0;
index 7f0b0f9..ddbcd1d 100644 (file)
@@ -320,9 +320,9 @@ int berlin_pinctrl_probe(struct platform_device *pdev,
        }
 
        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");
-               return -EINVAL;
+               return PTR_ERR(pctrl->pctrl_dev);
        }
 
        return 0;
index b01ee72..804d126 100644 (file)
@@ -1706,14 +1706,14 @@ struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc,
        int ret;
 
        if (!pctldesc)
-               return NULL;
+               return ERR_PTR(-EINVAL);
        if (!pctldesc->name)
-               return NULL;
+               return ERR_PTR(-EINVAL);
 
        pctldev = kzalloc(sizeof(*pctldev), GFP_KERNEL);
        if (pctldev == NULL) {
                dev_err(dev, "failed to alloc struct pinctrl_dev\n");
-               return NULL;
+               return ERR_PTR(-ENOMEM);
        }
 
        /* Initialize pin control device struct */
@@ -1726,20 +1726,23 @@ struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc,
        mutex_init(&pctldev->mutex);
 
        /* 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");
                goto out_err;
        }
 
        /* If we're implementing pinmuxing, check the ops for sanity */
        if (pctldesc->pmxops) {
-               if (pinmux_check_ops(pctldev))
+               ret = pinmux_check_ops(pctldev);
+               if (ret)
                        goto out_err;
        }
 
        /* If we're implementing pinconfig, check the ops for sanity */
        if (pctldesc->confops) {
-               if (pinconf_check_ops(pctldev))
+               ret = pinconf_check_ops(pctldev);
+               if (ret)
                        goto out_err;
        }
 
@@ -1785,7 +1788,7 @@ struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc,
 out_err:
        mutex_destroy(&pctldev->mutex);
        kfree(pctldev);
-       return NULL;
+       return ERR_PTR(ret);
 }
 EXPORT_SYMBOL_GPL(pinctrl_register);
 
index e73e1ed..d7b98ba 100644 (file)
@@ -727,9 +727,9 @@ int imx_pinctrl_probe(struct platform_device *pdev,
        ipctl->dev = info->dev;
        platform_set_drvdata(pdev, 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");
-               return -EINVAL;
+               return PTR_ERR(ipctl->pctl);
        }
 
        dev_info(&pdev->dev, "initialized IMX pinctrl driver\n");
index 5ac59fb..5fd4437 100644 (file)
@@ -633,9 +633,9 @@ int imx1_pinctrl_core_probe(struct platform_device *pdev,
        ipctl->dev = info->dev;
        platform_set_drvdata(pdev, 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");
-               return -EINVAL;
+               return PTR_ERR(ipctl->pctl);
        }
 
        ret = of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev);
index 646d5c2..f64eecb 100644 (file)
@@ -540,9 +540,9 @@ int mxs_pinctrl_probe(struct platform_device *pdev,
        }
 
        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");
-               ret = -EINVAL;
+               ret = PTR_ERR(d->pctl);
                goto err;
        }
 
index 82f691e..9bed70b 100644 (file)
@@ -1489,9 +1489,9 @@ static int chv_pinctrl_probe(struct platform_device *pdev)
        pctrl->pctldesc.npins = pctrl->community->npins;
 
        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");
-               return -ENODEV;
+               return PTR_ERR(pctrl->pctldev);
        }
 
        ret = chv_gpio_probe(pctrl, irq);
index 00768e5..f9ee0d6 100644 (file)
@@ -1021,9 +1021,9 @@ int intel_pinctrl_probe(struct platform_device *pdev,
        pctrl->pctldesc.npins = pctrl->soc->npins;
 
        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");
-               return -ENODEV;
+               return PTR_ERR(pctrl->pctldev);
        }
 
        ret = intel_gpio_probe(pctrl, irq);
index f206a54..35f7b01 100644 (file)
@@ -1269,9 +1269,9 @@ int mtk_pctrl_init(struct platform_device *pdev,
        mtk_pctrl_desc.npins = pctl->devdata->npins;
        pctl->dev = &pdev->dev;
        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");
-               return -EINVAL;
+               return PTR_ERR(pctl->pctl_dev);
        }
 
        pctl->chip = devm_kzalloc(&pdev->dev, sizeof(*pctl->chip), GFP_KERNEL);
index edcd140..7b203bf 100644 (file)
@@ -738,9 +738,9 @@ static int meson_pinctrl_probe(struct platform_device *pdev)
        pc->desc.npins          = pc->data->num_pins;
 
        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");
-               return -EINVAL;
+               return PTR_ERR(pc->pcdev);
        }
 
        ret = meson_gpiolib_register(pc);
index f3b426c..77d2221 100644 (file)
@@ -706,9 +706,9 @@ int mvebu_pinctrl_probe(struct platform_device *pdev)
        }
 
        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");
-               return -EINVAL;
+               return PTR_ERR(pctl->pctldev);
        }
 
        dev_info(&pdev->dev, "registered pinctrl driver\n");
index 15ccafd..557d0f2 100644 (file)
@@ -1235,10 +1235,10 @@ static int abx500_gpio_probe(struct platform_device *pdev)
        abx500_pinctrl_desc.pins = pct->soc->pins;
        abx500_pinctrl_desc.npins = pct->soc->npins;
        pct->pctldev = pinctrl_register(&abx500_pinctrl_desc, &pdev->dev, pct);
-       if (!pct->pctldev) {
+       if (IS_ERR(pct->pctldev)) {
                dev_err(&pdev->dev,
                        "could not register abx500 pinctrl driver\n");
-               ret = -EINVAL;
+               ret = PTR_ERR(pct->pctldev);
                goto out_rem_chip;
        }
        dev_info(&pdev->dev, "registered pin controller\n");
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge