]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
pinctrl: sophgo: allocate power_cfg with priv
authorRosen Penev <rosenp@gmail.com>
Thu, 30 Apr 2026 22:04:09 +0000 (15:04 -0700)
committerLinus Walleij <linusw@kernel.org>
Wed, 6 May 2026 19:05:15 +0000 (21:05 +0200)
Use a flexible array member to combine allocations and simplify code
slightly.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
[linusw@kernel.org: add a counter and __counted_by() annotation]
Signed-off-by: Linus Walleij <linusw@kernel.org>
drivers/pinctrl/sophgo/pinctrl-cv18xx.c

index c3a2dcf71f2a694370c0ab608cfcf4dc67c455f5..59318a42690fe0710dee624a4b95d08d5e706b87 100644 (file)
@@ -27,8 +27,9 @@
 #include "pinctrl-cv18xx.h"
 
 struct cv1800_priv {
-       u32                                     *power_cfg;
-       void __iomem                            *regs[2];
+       void __iomem    *regs[2];
+       unsigned int    num_power_cfg;
+       u32             power_cfg[] __counted_by(num_power_cfg);
 };
 
 static unsigned int cv1800_dt_get_pin_mux(u32 value)
@@ -417,14 +418,11 @@ static int cv1800_pinctrl_init(struct platform_device *pdev,
        const struct sophgo_pinctrl_data *pctrl_data = pctrl->data;
        struct cv1800_priv *priv;
 
-       priv = devm_kzalloc(&pdev->dev, sizeof(struct cv1800_priv), GFP_KERNEL);
+       priv = devm_kzalloc(&pdev->dev, struct_size(priv, power_cfg, pctrl_data->npds),
+                       GFP_KERNEL);
        if (!priv)
                return -ENOMEM;
-
-       priv->power_cfg = devm_kcalloc(&pdev->dev, pctrl_data->npds,
-                                      sizeof(u32), GFP_KERNEL);
-       if (!priv->power_cfg)
-               return -ENOMEM;
+       priv->num_power_cfg = pctrl_data->npds;
 
        priv->regs[0] = devm_platform_ioremap_resource_byname(pdev, "sys");
        if (IS_ERR(priv->regs[0]))