summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRosen Penev <rosenp@gmail.com>2026-03-15 16:10:00 -0700
committerLinus Walleij <linusw@kernel.org>2026-03-19 14:04:15 +0100
commitd453086996957f1b87610315810235db7b03b3a6 (patch)
tree2c0462ba6f4caa59efed10aabb188f5c2a0c6263
parent47a9050e678c7929ada33c3f1f28ac4403423181 (diff)
downloadlinux-next-d453086996957f1b87610315810235db7b03b3a6.tar.gz
linux-next-d453086996957f1b87610315810235db7b03b3a6.zip
pinctrl: tegra: use flexible array member for array
Simplifies allocation slightly by removing a kcalloc call and using struct_size. Signed-off-by: Rosen Penev <rosenp@gmail.com> [linusw@kernel.org: Add in count variable and use __counted_by()] Signed-off-by: Linus Walleij <linusw@kernel.org>
-rw-r--r--drivers/pinctrl/tegra/pinctrl-tegra.c10
-rw-r--r--drivers/pinctrl/tegra/pinctrl-tegra.h4
2 files changed, 5 insertions, 9 deletions
diff --git a/drivers/pinctrl/tegra/pinctrl-tegra.c b/drivers/pinctrl/tegra/pinctrl-tegra.c
index 11ecbd6a9b2a..bac2adeb5c63 100644
--- a/drivers/pinctrl/tegra/pinctrl-tegra.c
+++ b/drivers/pinctrl/tegra/pinctrl-tegra.c
@@ -832,18 +832,14 @@ int tegra_pinctrl_probe(struct platform_device *pdev,
int fn, gn, gfn;
unsigned long backup_regs_size = 0;
- pmx = devm_kzalloc(&pdev->dev, sizeof(*pmx), GFP_KERNEL);
+ pmx = devm_kzalloc(&pdev->dev,
+ struct_size(pmx, pingroup_configs, soc_data->ngroups), GFP_KERNEL);
if (!pmx)
return -ENOMEM;
pmx->dev = &pdev->dev;
pmx->soc = soc_data;
-
- pmx->pingroup_configs = devm_kcalloc(&pdev->dev,
- pmx->soc->ngroups, sizeof(*pmx->pingroup_configs),
- GFP_KERNEL);
- if (!pmx->pingroup_configs)
- return -ENOMEM;
+ pmx->num_pingroup_configs = soc_data->ngroups;
/*
* Each mux group will appear in 4 functions' list of groups.
diff --git a/drivers/pinctrl/tegra/pinctrl-tegra.h b/drivers/pinctrl/tegra/pinctrl-tegra.h
index bc7b70913b89..deb589cda31e 100644
--- a/drivers/pinctrl/tegra/pinctrl-tegra.h
+++ b/drivers/pinctrl/tegra/pinctrl-tegra.h
@@ -25,8 +25,8 @@ struct tegra_pmx {
int nbanks;
void __iomem **regs;
u32 *backup_regs;
- /* Array of size soc->ngroups */
- struct tegra_pingroup_config *pingroup_configs;
+ unsigned int num_pingroup_configs;
+ struct tegra_pingroup_config pingroup_configs[] __counted_by(num_pingroup_configs);
};
enum tegra_pinconf_param {