Commit c26c4bfc authored by Rafał Miłecki's avatar Rafał Miłecki Committed by Linus Walleij

pinctrl: keembay: rework loops looking for groups names

Make the outer loop iterate over functions as that's the real subject.
This simplifies code (and reduces amount of lines of code) as allocating
memory for names doesn't require extra checks anymore.

While at it use local "group_names" variable. The plan for
"struct function_desc" is to make its "group_names" /double/ const. That
will allow drivers to use it with static const data.

This keembay "group_names" change is required to avoid:
drivers/pinctrl/pinctrl-keembay.c: In function 'keembay_add_functions':
drivers/pinctrl/pinctrl-keembay.c:1594:8: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
 1594 |    grp = func->group_names;
      |        ^
Signed-off-by: default avatarRafał Miłecki <rafal@milecki.pl>
Link: https://lore.kernel.org/r/20211216162206.8027-3-zajec5@gmail.comSigned-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 5d067499
...@@ -1555,58 +1555,42 @@ static int keembay_pinctrl_reg(struct keembay_pinctrl *kpc, struct device *dev) ...@@ -1555,58 +1555,42 @@ static int keembay_pinctrl_reg(struct keembay_pinctrl *kpc, struct device *dev)
} }
static int keembay_add_functions(struct keembay_pinctrl *kpc, static int keembay_add_functions(struct keembay_pinctrl *kpc,
struct function_desc *function) struct function_desc *functions)
{ {
unsigned int i; unsigned int i;
/* Assign the groups for each function */ /* Assign the groups for each function */
for (i = 0; i < kpc->npins; i++) { for (i = 0; i < kpc->nfuncs; i++) {
const struct pinctrl_pin_desc *pdesc = keembay_pins + i; struct function_desc *func = &functions[i];
struct keembay_mux_desc *mux = pdesc->drv_data; const char **group_names;
unsigned int grp_idx = 0;
int j;
group_names = devm_kcalloc(kpc->dev, func->num_group_names,
sizeof(*group_names), GFP_KERNEL);
if (!group_names)
return -ENOMEM;
while (mux->name) { for (j = 0; j < kpc->npins; j++) {
struct function_desc *func; const struct pinctrl_pin_desc *pdesc = &keembay_pins[j];
const char **grp; struct keembay_mux_desc *mux;
size_t grp_size;
u32 j, grp_num;
for (j = 0; j < kpc->nfuncs; j++) { for (mux = pdesc->drv_data; mux->name; mux++) {
if (!strcmp(mux->name, function[j].name)) if (!strcmp(mux->name, func->name))
break; group_names[grp_idx++] = pdesc->name;
} }
if (j == kpc->nfuncs)
return -EINVAL;
func = function + j;
grp_num = func->num_group_names;
grp_size = sizeof(*func->group_names);
if (!func->group_names) {
func->group_names = devm_kcalloc(kpc->dev,
grp_num,
grp_size,
GFP_KERNEL);
if (!func->group_names)
return -ENOMEM;
} }
grp = func->group_names; func->group_names = group_names;
while (*grp)
grp++;
*grp = pdesc->name;
mux++;
}
} }
/* Add all functions */ /* Add all functions */
for (i = 0; i < kpc->nfuncs; i++) { for (i = 0; i < kpc->nfuncs; i++) {
pinmux_generic_add_function(kpc->pctrl, pinmux_generic_add_function(kpc->pctrl,
function[i].name, functions[i].name,
function[i].group_names, functions[i].group_names,
function[i].num_group_names, functions[i].num_group_names,
function[i].data); functions[i].data);
} }
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment