]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
pinctrl: imx: Use temporary variable to hold pins
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Wed, 29 Nov 2023 16:06:28 +0000 (18:06 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Fri, 1 Dec 2023 14:00:20 +0000 (15:00 +0100)
The pins are allocated from the heap, but in order to pass
them as constant object, we need to use non-constant pointer.
Achieve this by using a temporary variable.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20231129161459.1002323-6-andriy.shevchenko@linux.intel.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/freescale/pinctrl-imx.c

index 9bc16943014f035ddff80500938c17b5a94e1d86..28164b04b1bed8ac6dcb774b54a98e1614365ce3 100644 (file)
@@ -511,6 +511,7 @@ static int imx_pinctrl_parse_groups(struct device_node *np,
 {
        const struct imx_pinctrl_soc_info *info = ipctl->info;
        struct imx_pin *pin;
+       unsigned int *pins;
        int size, pin_size;
        const __be32 *list;
        int i;
@@ -557,20 +558,20 @@ static int imx_pinctrl_parse_groups(struct device_node *np,
        grp->data = devm_kcalloc(ipctl->dev,
                                 grp->num_pins, sizeof(struct imx_pin),
                                 GFP_KERNEL);
-       grp->pins = devm_kcalloc(ipctl->dev,
-                                grp->num_pins, sizeof(unsigned int),
-                                GFP_KERNEL);
-       if (!grp->pins || !grp->data)
+       if (!grp->data)
+               return -ENOMEM;
+
+       pins = devm_kcalloc(ipctl->dev, grp->num_pins, sizeof(*pins), GFP_KERNEL);
+       if (!pins)
                return -ENOMEM;
+       grp->pins = pins;
 
        for (i = 0; i < grp->num_pins; i++) {
                pin = &((struct imx_pin *)(grp->data))[i];
                if (info->flags & IMX_USE_SCU)
-                       info->imx_pinctrl_parse_pin(ipctl, &grp->pins[i],
-                                                 pin, &list);
+                       info->imx_pinctrl_parse_pin(ipctl, &pins[i], pin, &list);
                else
-                       imx_pinctrl_parse_pin_mmio(ipctl, &grp->pins[i],
-                                                  pin, &list, np);
+                       imx_pinctrl_parse_pin_mmio(ipctl, &pins[i], pin, &list, np);
        }
 
        return 0;