#define INGENIC_PIN_GROUP_FUNCS(_name_, id, funcs)                                     \
        {                                                                               \
-               .name = _name_,                                                         \
-               .pins = id##_pins,                                                      \
-               .num_pins = ARRAY_SIZE(id##_pins),                                      \
+               .grp = PINCTRL_PINGROUP(_name_, id##_pins, ARRAY_SIZE(id##_pins)),      \
                .data = funcs,                                                          \
        }
 
 #define INGENIC_PIN_GROUP(_name_, id, func)                                            \
        {                                                                               \
-               .name = _name_,                                                         \
-               .pins = id##_pins,                                                      \
-               .num_pins = ARRAY_SIZE(id##_pins),                                      \
+               .grp = PINCTRL_PINGROUP(_name_, id##_pins, ARRAY_SIZE(id##_pins)),      \
                .data = (void *)func,                                                   \
        }
 
                return -EINVAL;
 
        dev_dbg(pctldev->dev, "enable function %s group %s\n",
-               func->name, grp->name);
+               func->name, grp->grp.name);
 
        mode = (uintptr_t)grp->data;
        if (mode <= 3) {
-               for (i = 0; i < grp->num_pins; i++)
-                       ingenic_pinmux_set_pin_fn(jzpc, grp->pins[i], mode);
+               for (i = 0; i < grp->grp.npins; i++)
+                       ingenic_pinmux_set_pin_fn(jzpc, grp->grp.pins[i], mode);
        } else {
                pin_modes = grp->data;
 
-               for (i = 0; i < grp->num_pins; i++)
-                       ingenic_pinmux_set_pin_fn(jzpc, grp->pins[i], pin_modes[i]);
+               for (i = 0; i < grp->grp.npins; i++)
+                       ingenic_pinmux_set_pin_fn(jzpc, grp->grp.pins[i], pin_modes[i]);
        }
 
        return 0;
 
        for (i = 0; i < chip_info->num_groups; i++) {
                const struct group_desc *group = &chip_info->groups[i];
+               const struct pingroup *grp = &group->grp;
 
-               err = pinctrl_generic_add_group(jzpc->pctl, group->name,
-                               group->pins, group->num_pins, group->data);
+               err = pinctrl_generic_add_group(jzpc->pctl, grp->name, grp->pins, grp->npins,
+                                               group->data);
                if (err < 0) {
-                       dev_err(dev, "Failed to register group %s\n",
-                                       group->name);
+                       dev_err(dev, "Failed to register group %s\n", grp->name);
                        return err;
                }
        }