Commit 5d067499 authored by Rafał Miłecki's avatar Rafał Miłecki Committed by Linus Walleij
Browse files

pinctrl: keembay: comment process of building functions a bit



This should make code a bit easier to follow. While at it use some "for"
loops to simplify array iteration loops.

Signed-off-by: default avatarRafał Miłecki <rafal@milecki.pl>
Link: https://lore.kernel.org/r/20211216162206.8027-2-zajec5@gmail.com


Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 02f11713
Loading
Loading
Loading
Loading
+11 −10
Original line number Diff line number Diff line
@@ -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++;
		}
	}