pinctrl: keembay: comment process of building functions a bit
authorRafał Miłecki <rafal@milecki.pl>
Thu, 16 Dec 2021 16:22:04 +0000 (17:22 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Wed, 22 Dec 2021 01:57:27 +0000 (02:57 +0100)
This should make code a bit easier to follow. While at it use some "for"
loops to simplify array iteration loops.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Link: https://lore.kernel.org/r/20211216162206.8027-2-zajec5@gmail.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/pinctrl-keembay.c

index 2bce563..9a602ab 100644 (file)
@@ -1617,37 +1617,38 @@ static int keembay_build_functions(struct keembay_pinctrl *kpc)
        struct function_desc *keembay_funcs, *new_funcs;
        int i;
 
-       /* Allocate total number of functions */
+       /*
+        * Allocate maximum possible number of functions. Assume every pin
+        * being part of 8 (hw maximum) globally unique muxes.
+        */
        kpc->nfuncs = 0;
        keembay_funcs = kcalloc(kpc->npins * 8, sizeof(*keembay_funcs), GFP_KERNEL);
        if (!keembay_funcs)
                return -ENOMEM;
 
-       /* Find total number of functions and each's properties */
+       /* Setup 1 function for each unique mux */
        for (i = 0; i < kpc->npins; i++) {
                const struct pinctrl_pin_desc *pdesc = keembay_pins + i;
-               struct keembay_mux_desc *mux = pdesc->drv_data;
+               struct keembay_mux_desc *mux;
 
-               while (mux->name) {
-                       struct function_desc *fdesc = keembay_funcs;
+               for (mux = pdesc->drv_data; mux->name; mux++) {
+                       struct function_desc *fdesc;
 
-                       while (fdesc->name) {
+                       /* Check if we already have function for this mux */
+                       for (fdesc = keembay_funcs; fdesc->name; fdesc++) {
                                if (!strcmp(mux->name, fdesc->name)) {
                                        fdesc->num_group_names++;
                                        break;
                                }
-
-                               fdesc++;
                        }
 
+                       /* Setup new function for this mux we didn't see before */
                        if (!fdesc->name) {
                                fdesc->name = mux->name;
                                fdesc->num_group_names = 1;
                                fdesc->data = &mux->mode;
                                kpc->nfuncs++;
                        }
-
-                       mux++;
                }
        }