Commit 071cdf56 authored by Bartosz Golaszewski's avatar Bartosz Golaszewski Committed by Linus Walleij
Browse files

pinctrl: keembay: use a dedicated structure for the pinfunction description



struct function_desc is a wrapper around struct pinfunction with an
additional void *data pointer. We're working towards reducing the usage
of struct function_desc in pinctrl drivers - they should only be created
by pinmux core and accessed by drivers using
pinmux_generic_get_function(). This driver uses the data pointer so in
order to stop using struct function_desc, we need to provide an
alternative that also wraps the mux mode which is passed to pinctrl core
as user data.

Tested-by: default avatarNeil Armstrong <neil.armstrong@linaro.org>
Signed-off-by: default avatarBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent aae7a287
Loading
Loading
Loading
Loading
+11 −6
Original line number Diff line number Diff line
@@ -135,6 +135,11 @@ struct keembay_pin_soc {
	const struct pinctrl_pin_desc *pins;
};

struct keembay_pinfunction {
	struct pinfunction func;
	u8 mux_mode;
};

static const struct pinctrl_pin_desc keembay_pins[] = {
	KEEMBAY_PIN_DESC(0, "GPIO0",
			 KEEMBAY_MUX(0x0, "I2S0_M0"),
@@ -1556,13 +1561,13 @@ static int keembay_pinctrl_reg(struct keembay_pinctrl *kpc, struct device *dev)
}

static int keembay_add_functions(struct keembay_pinctrl *kpc,
				 struct function_desc *functions)
				 struct keembay_pinfunction *functions)
{
	unsigned int i;

	/* Assign the groups for each function */
	for (i = 0; i < kpc->nfuncs; i++) {
		struct function_desc *func = &functions[i];
		struct keembay_pinfunction *func = &functions[i];
		const char **group_names;
		unsigned int grp_idx = 0;
		int j;
@@ -1588,14 +1593,14 @@ static int keembay_add_functions(struct keembay_pinctrl *kpc,
	/* Add all functions */
	for (i = 0; i < kpc->nfuncs; i++)
		pinmux_generic_add_pinfunction(kpc->pctrl, &functions[i].func,
					       functions[i].data);
					       &functions[i].mux_mode);

	return 0;
}

static int keembay_build_functions(struct keembay_pinctrl *kpc)
{
	struct function_desc *keembay_funcs, *new_funcs;
	struct keembay_pinfunction *keembay_funcs, *new_funcs;
	int i;

	/*
@@ -1614,7 +1619,7 @@ static int keembay_build_functions(struct keembay_pinctrl *kpc)
		struct keembay_mux_desc *mux;

		for (mux = pdesc->drv_data; mux->name; mux++) {
			struct function_desc *fdesc;
			struct keembay_pinfunction *fdesc;

			/* Check if we already have function for this mux */
			for (fdesc = keembay_funcs; fdesc->func.name; fdesc++) {
@@ -1628,7 +1633,7 @@ static int keembay_build_functions(struct keembay_pinctrl *kpc)
			if (!fdesc->func.name) {
				fdesc->func.name = mux->name;
				fdesc->func.ngroups = 1;
				fdesc->data = &mux->mode;
				fdesc->mux_mode = mux->mode;
				kpc->nfuncs++;
			}
		}