Commit 5d421ff5 authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Linus Walleij
Browse files

pinctrl: berlin: Make use of struct pinfunction



Since pin control provides a generic data type for the pin function,
use it in the driver.

Signed-off-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
Link: https://lore.kernel.org/r/20240530085745.1539925-2-andy.shevchenko@gmail.com


Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent a8f25485
Loading
Loading
Loading
Loading
+9 −12
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@ struct berlin_pinctrl {
	struct regmap *regmap;
	struct device *dev;
	const struct berlin_pinctrl_desc *desc;
	struct berlin_pinctrl_function *functions;
	struct pinfunction *functions;
	unsigned nfunctions;
	struct pinctrl_dev *pctrl_dev;
};
@@ -120,12 +120,12 @@ static const char *berlin_pinmux_get_function_name(struct pinctrl_dev *pctrl_dev
static int berlin_pinmux_get_function_groups(struct pinctrl_dev *pctrl_dev,
					     unsigned function,
					     const char * const **groups,
					     unsigned * const num_groups)
					     unsigned * const ngroups)
{
	struct berlin_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrl_dev);

	*groups = pctrl->functions[function].groups;
	*num_groups = pctrl->functions[function].ngroups;
	*ngroups = pctrl->functions[function].ngroups;

	return 0;
}
@@ -153,7 +153,7 @@ static int berlin_pinmux_set(struct pinctrl_dev *pctrl_dev,
{
	struct berlin_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrl_dev);
	const struct berlin_desc_group *group_desc = pctrl->desc->groups + group;
	struct berlin_pinctrl_function *func = pctrl->functions + function;
	struct pinfunction *func = pctrl->functions + function;
	struct berlin_desc_function *function_desc =
		berlin_pinctrl_find_function_by_name(pctrl, group_desc,
						     func->name);
@@ -180,7 +180,7 @@ static const struct pinmux_ops berlin_pinmux_ops = {
static int berlin_pinctrl_add_function(struct berlin_pinctrl *pctrl,
				       const char *name)
{
	struct berlin_pinctrl_function *function = pctrl->functions;
	struct pinfunction *function = pctrl->functions;

	while (function->name) {
		if (!strcmp(function->name, name)) {
@@ -214,8 +214,7 @@ static int berlin_pinctrl_build_state(struct platform_device *pdev)
	}

	/* we will reallocate later */
	pctrl->functions = kcalloc(max_functions,
				   sizeof(*pctrl->functions), GFP_KERNEL);
	pctrl->functions = kcalloc(max_functions, sizeof(*pctrl->functions), GFP_KERNEL);
	if (!pctrl->functions)
		return -ENOMEM;

@@ -242,8 +241,7 @@ static int berlin_pinctrl_build_state(struct platform_device *pdev)
		desc_function = desc_group->functions;

		while (desc_function->name) {
			struct berlin_pinctrl_function
				*function = pctrl->functions;
			struct pinfunction *function = pctrl->functions;
			const char **groups;
			bool found = false;

@@ -264,16 +262,15 @@ static int berlin_pinctrl_build_state(struct platform_device *pdev)
				function->groups =
					devm_kcalloc(&pdev->dev,
						     function->ngroups,
						     sizeof(char *),
						     sizeof(*function->groups),
						     GFP_KERNEL);

				if (!function->groups) {
					kfree(pctrl->functions);
					return -ENOMEM;
				}
			}

			groups = function->groups;
			groups = (const char **)function->groups;
			while (*groups)
				groups++;

+0 −6
Original line number Diff line number Diff line
@@ -28,12 +28,6 @@ struct berlin_pinctrl_desc {
	unsigned			ngroups;
};

struct berlin_pinctrl_function {
	const char	*name;
	const char	**groups;
	unsigned	ngroups;
};

#define BERLIN_PINCTRL_GROUP(_name, _offset, _width, _lsb, ...)		\
	{								\
		.name = _name,						\