Skip to content

Commit d52ecc6

Browse files
andy-shevlinusw
authored andcommitted
pinctrl: nuvoton: Convert to use struct group_desc
The pin control core header provides struct group_desc. Utilize it instead of open coded variants in the driver. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Link: https://lore.kernel.org/20250318105932.2090926-5-andriy.shevchenko@linux.intel.com Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
1 parent 1bce744 commit d52ecc6

File tree

1 file changed

+33
-37
lines changed

1 file changed

+33
-37
lines changed

drivers/pinctrl/nuvoton/pinctrl-ma35.c

Lines changed: 33 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -106,13 +106,6 @@ struct ma35_pin_setting {
106106
unsigned int nconfigs;
107107
};
108108

109-
struct ma35_pin_group {
110-
const char *name;
111-
unsigned int npins;
112-
unsigned int *pins;
113-
struct ma35_pin_setting *settings;
114-
};
115-
116109
struct ma35_pin_bank {
117110
void __iomem *reg_base;
118111
struct clk *clk;
@@ -141,7 +134,7 @@ struct ma35_pinctrl {
141134
struct pinctrl_dev *pctl;
142135
const struct ma35_pinctrl_soc_info *info;
143136
struct regmap *regmap;
144-
struct ma35_pin_group *groups;
137+
struct group_desc *groups;
145138
unsigned int ngroups;
146139
struct pinfunction *functions;
147140
unsigned int nfunctions;
@@ -160,7 +153,7 @@ static const char *ma35_get_group_name(struct pinctrl_dev *pctldev, unsigned int
160153
{
161154
struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
162155

163-
return npctl->groups[selector].name;
156+
return npctl->groups[selector].grp.name;
164157
}
165158

166159
static int ma35_get_group_pins(struct pinctrl_dev *pctldev, unsigned int selector,
@@ -171,19 +164,19 @@ static int ma35_get_group_pins(struct pinctrl_dev *pctldev, unsigned int selecto
171164
if (selector >= npctl->ngroups)
172165
return -EINVAL;
173166

174-
*pins = npctl->groups[selector].pins;
175-
*npins = npctl->groups[selector].npins;
167+
*pins = npctl->groups[selector].grp.pins;
168+
*npins = npctl->groups[selector].grp.npins;
176169

177170
return 0;
178171
}
179172

180-
static struct ma35_pin_group *ma35_pinctrl_find_group_by_name(
181-
const struct ma35_pinctrl *npctl, const char *name)
173+
static struct group_desc *
174+
ma35_pinctrl_find_group_by_name(const struct ma35_pinctrl *npctl, const char *name)
182175
{
183176
int i;
184177

185178
for (i = 0; i < npctl->ngroups; i++) {
186-
if (!strcmp(npctl->groups[i].name, name))
179+
if (!strcmp(npctl->groups[i].grp.name, name))
187180
return &npctl->groups[i];
188181
}
189182
return NULL;
@@ -195,9 +188,10 @@ static int ma35_pinctrl_dt_node_to_map_func(struct pinctrl_dev *pctldev,
195188
unsigned int *num_maps)
196189
{
197190
struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
198-
struct ma35_pin_group *grp;
191+
struct ma35_pin_setting *setting;
199192
struct pinctrl_map *new_map;
200193
struct device_node *parent;
194+
struct group_desc *grp;
201195
int map_num = 1;
202196
int i;
203197

@@ -211,7 +205,7 @@ static int ma35_pinctrl_dt_node_to_map_func(struct pinctrl_dev *pctldev,
211205
return -EINVAL;
212206
}
213207

214-
map_num += grp->npins;
208+
map_num += grp->grp.npins;
215209
new_map = kcalloc(map_num, sizeof(*new_map), GFP_KERNEL);
216210
if (!new_map)
217211
return -ENOMEM;
@@ -223,17 +217,19 @@ static int ma35_pinctrl_dt_node_to_map_func(struct pinctrl_dev *pctldev,
223217
if (!parent)
224218
return -EINVAL;
225219

220+
setting = grp->data;
221+
226222
new_map[0].type = PIN_MAP_TYPE_MUX_GROUP;
227223
new_map[0].data.mux.function = parent->name;
228224
new_map[0].data.mux.group = np->name;
229225
of_node_put(parent);
230226

231227
new_map++;
232-
for (i = 0; i < grp->npins; i++) {
228+
for (i = 0; i < grp->grp.npins; i++) {
233229
new_map[i].type = PIN_MAP_TYPE_CONFIGS_PIN;
234-
new_map[i].data.configs.group_or_pin = pin_get_name(pctldev, grp->pins[i]);
235-
new_map[i].data.configs.configs = grp->settings[i].configs;
236-
new_map[i].data.configs.num_configs = grp->settings[i].nconfigs;
230+
new_map[i].data.configs.group_or_pin = pin_get_name(pctldev, grp->grp.pins[i]);
231+
new_map[i].data.configs.configs = setting[i].configs;
232+
new_map[i].data.configs.num_configs = setting[i].nconfigs;
237233
}
238234
dev_dbg(pctldev->dev, "maps: function %s group %s num %d\n",
239235
(*map)->data.mux.function, (*map)->data.mux.group, map_num);
@@ -281,14 +277,14 @@ static int ma35_pinmux_set_mux(struct pinctrl_dev *pctldev, unsigned int selecto
281277
unsigned int group)
282278
{
283279
struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
284-
struct ma35_pin_group *grp = &npctl->groups[group];
285-
struct ma35_pin_setting *setting = grp->settings;
280+
struct group_desc *grp = &npctl->groups[group];
281+
struct ma35_pin_setting *setting = grp->data;
286282
u32 i, regval;
287283

288284
dev_dbg(npctl->dev, "enable function %s group %s\n",
289-
npctl->functions[selector].name, npctl->groups[group].name);
285+
npctl->functions[selector].name, grp->grp.name);
290286

291-
for (i = 0; i < grp->npins; i++) {
287+
for (i = 0; i < grp->grp.npins; i++) {
292288
regmap_read(npctl->regmap, setting->offset, &regval);
293289
regval &= ~GENMASK(setting->shift + MA35_MFP_BITS_PER_PORT - 1,
294290
setting->shift);
@@ -980,17 +976,16 @@ static const struct pinconf_ops ma35_pinconf_ops = {
980976
.is_generic = true,
981977
};
982978

983-
static int ma35_pinctrl_parse_groups(struct device_node *np, struct ma35_pin_group *grp,
979+
static int ma35_pinctrl_parse_groups(struct device_node *np, struct group_desc *grp,
984980
struct ma35_pinctrl *npctl, u32 index)
985981
{
986982
struct ma35_pin_setting *pin;
987983
unsigned long *configs;
988984
unsigned int nconfigs;
985+
unsigned int *pins;
989986
int i, j, count, ret;
990987
u32 *elems;
991988

992-
grp->name = np->name;
993-
994989
ret = pinconf_generic_parse_dt_config(np, NULL, &configs, &nconfigs);
995990
if (ret)
996991
return ret;
@@ -1003,29 +998,30 @@ static int ma35_pinctrl_parse_groups(struct device_node *np, struct ma35_pin_gro
1003998
if (!elems)
1004999
return -ENOMEM;
10051000

1001+
grp->grp.name = np->name;
1002+
10061003
ret = of_property_read_u32_array(np, "nuvoton,pins", elems, count);
10071004
if (ret)
10081005
return -EINVAL;
1006+
grp->grp.npins = count / 3;
10091007

1010-
grp->npins = count / 3;
1011-
1012-
grp->pins = devm_kcalloc(npctl->dev, grp->npins, sizeof(*grp->pins), GFP_KERNEL);
1013-
if (!grp->pins)
1008+
pins = devm_kcalloc(npctl->dev, grp->grp.npins, sizeof(*pins), GFP_KERNEL);
1009+
if (!pins)
10141010
return -ENOMEM;
1011+
grp->grp.pins = pins;
10151012

1016-
grp->settings = devm_kcalloc(npctl->dev, grp->npins, sizeof(*grp->settings), GFP_KERNEL);
1017-
if (!grp->settings)
1013+
pin = devm_kcalloc(npctl->dev, grp->grp.npins, sizeof(*pin), GFP_KERNEL);
1014+
if (!pin)
10181015
return -ENOMEM;
1019-
1020-
pin = grp->settings;
1016+
grp->data = pin;
10211017

10221018
for (i = 0, j = 0; i < count; i += 3, j++) {
10231019
pin->offset = elems[i] * MA35_MFP_REG_SZ_PER_BANK + MA35_MFP_REG_BASE;
10241020
pin->shift = (elems[i + 1] * MA35_MFP_BITS_PER_PORT) % 32;
10251021
pin->muxval = elems[i + 2];
10261022
pin->configs = configs;
10271023
pin->nconfigs = nconfigs;
1028-
grp->pins[j] = npctl->info->get_pin_num(pin->offset, pin->shift);
1024+
pins[j] = npctl->info->get_pin_num(pin->offset, pin->shift);
10291025
pin++;
10301026
}
10311027
return 0;
@@ -1036,7 +1032,7 @@ static int ma35_pinctrl_parse_functions(struct device_node *np, struct ma35_pinc
10361032
{
10371033
struct device_node *child;
10381034
struct pinfunction *func;
1039-
struct ma35_pin_group *grp;
1035+
struct group_desc *grp;
10401036
static u32 grp_index;
10411037
const char **groups;
10421038
u32 ret, i = 0;

0 commit comments

Comments
 (0)