Merge tag 'pinctrl-v5.10-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw...
[platform/kernel/linux-rpi.git] / drivers / pinctrl / mediatek / pinctrl-mtk-common-v2.c
index 35bbe59..7e950f5 100644 (file)
@@ -358,7 +358,7 @@ static const struct mtk_eint_xt mtk_eint_xt = {
 int mtk_build_eint(struct mtk_pinctrl *hw, struct platform_device *pdev)
 {
        struct device_node *np = pdev->dev.of_node;
-       struct resource *res;
+       int ret;
 
        if (!IS_ENABLED(CONFIG_EINT_MTK))
                return 0;
@@ -370,22 +370,22 @@ int mtk_build_eint(struct mtk_pinctrl *hw, struct platform_device *pdev)
        if (!hw->eint)
                return -ENOMEM;
 
-       res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "eint");
-       if (!res) {
-               dev_err(&pdev->dev, "Unable to get eint resource\n");
-               return -ENODEV;
+       hw->eint->base = devm_platform_ioremap_resource_byname(pdev, "eint");
+       if (IS_ERR(hw->eint->base)) {
+               ret = PTR_ERR(hw->eint->base);
+               goto err_free_eint;
        }
 
-       hw->eint->base = devm_ioremap_resource(&pdev->dev, res);
-       if (IS_ERR(hw->eint->base))
-               return PTR_ERR(hw->eint->base);
-
        hw->eint->irq = irq_of_parse_and_map(np, 0);
-       if (!hw->eint->irq)
-               return -EINVAL;
+       if (!hw->eint->irq) {
+               ret = -EINVAL;
+               goto err_free_eint;
+       }
 
-       if (!hw->soc->eint_hw)
-               return -ENODEV;
+       if (!hw->soc->eint_hw) {
+               ret = -ENODEV;
+               goto err_free_eint;
+       }
 
        hw->eint->dev = &pdev->dev;
        hw->eint->hw = hw->soc->eint_hw;
@@ -393,6 +393,11 @@ int mtk_build_eint(struct mtk_pinctrl *hw, struct platform_device *pdev)
        hw->eint->gpio_xlate = &mtk_eint_xt;
 
        return mtk_eint_do_init(hw->eint);
+
+err_free_eint:
+       devm_kfree(hw->dev, hw->eint);
+       hw->eint = NULL;
+       return ret;
 }
 EXPORT_SYMBOL_GPL(mtk_build_eint);