Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fc78a566 authored by Masahiro Yamada's avatar Masahiro Yamada Committed by Linus Walleij
Browse files

pinctrl: uniphier: allocate struct pinctrl_desc in probe function



Currently, every SoC driver defines struct pinctrl_desc statically,
i.e. it consumes memory footprint even if it is not probed.

In multi-platform, many pinctrl drivers are linked (generally as
built-in objects), although only one of them is actually used.
So, it is reasonable to allocate memory dynamically where possible.

Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 4109508a
Loading
Loading
Loading
Loading
+11 −8
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@
#include "pinctrl-uniphier.h"

struct uniphier_pinctrl_priv {
	struct pinctrl_desc pctldesc;
	struct pinctrl_dev *pctldev;
	struct regmap *regmap;
	struct uniphier_pinctrl_socdata *socdata;
@@ -639,13 +640,13 @@ static const struct pinmux_ops uniphier_pmxops = {
};

int uniphier_pinctrl_probe(struct platform_device *pdev,
			   struct pinctrl_desc *desc,
			   struct uniphier_pinctrl_socdata *socdata)
{
	struct device *dev = &pdev->dev;
	struct uniphier_pinctrl_priv *priv;

	if (!socdata ||
	    !socdata->pins || !socdata->npins ||
	    !socdata->groups ||
	    !socdata->groups_count ||
	    !socdata->functions ||
@@ -667,13 +668,15 @@ int uniphier_pinctrl_probe(struct platform_device *pdev,
	}

	priv->socdata = socdata;
	desc->name = dev->driver->name;
	desc->pctlops = &uniphier_pctlops;
	desc->pmxops = &uniphier_pmxops;
	desc->confops = &uniphier_confops;
	desc->owner = dev->driver->owner;

	priv->pctldev = devm_pinctrl_register(dev, desc, priv);
	priv->pctldesc.name = dev->driver->name;
	priv->pctldesc.pins = socdata->pins;
	priv->pctldesc.npins = socdata->npins;
	priv->pctldesc.pctlops = &uniphier_pctlops;
	priv->pctldesc.pmxops = &uniphier_pmxops;
	priv->pctldesc.confops = &uniphier_confops;
	priv->pctldesc.owner = dev->driver->owner;

	priv->pctldev = devm_pinctrl_register(dev, &priv->pctldesc, priv);
	if (IS_ERR(priv->pctldev)) {
		dev_err(dev, "failed to register UniPhier pinctrl driver\n");
		return PTR_ERR(priv->pctldev);
+3 −7
Original line number Diff line number Diff line
@@ -846,6 +846,8 @@ static const struct uniphier_pinmux_function uniphier_ld4_functions[] = {
};

static struct uniphier_pinctrl_socdata uniphier_ld4_pindata = {
	.pins = uniphier_ld4_pins,
	.npins = ARRAY_SIZE(uniphier_ld4_pins),
	.groups = uniphier_ld4_groups,
	.groups_count = ARRAY_SIZE(uniphier_ld4_groups),
	.functions = uniphier_ld4_functions,
@@ -855,15 +857,9 @@ static struct uniphier_pinctrl_socdata uniphier_ld4_pindata = {
	.load_pinctrl = false,
};

static struct pinctrl_desc uniphier_ld4_pinctrl_desc = {
	.pins = uniphier_ld4_pins,
	.npins = ARRAY_SIZE(uniphier_ld4_pins),
};

static int uniphier_ld4_pinctrl_probe(struct platform_device *pdev)
{
	return uniphier_pinctrl_probe(pdev, &uniphier_ld4_pinctrl_desc,
				      &uniphier_ld4_pindata);
	return uniphier_pinctrl_probe(pdev, &uniphier_ld4_pindata);
}

static const struct of_device_id uniphier_ld4_pinctrl_match[] = {
+3 −7
Original line number Diff line number Diff line
@@ -1234,6 +1234,8 @@ static const struct uniphier_pinmux_function uniphier_ld6b_functions[] = {
};

static struct uniphier_pinctrl_socdata uniphier_ld6b_pindata = {
	.pins = uniphier_ld6b_pins,
	.npins = ARRAY_SIZE(uniphier_ld6b_pins),
	.groups = uniphier_ld6b_groups,
	.groups_count = ARRAY_SIZE(uniphier_ld6b_groups),
	.functions = uniphier_ld6b_functions,
@@ -1243,15 +1245,9 @@ static struct uniphier_pinctrl_socdata uniphier_ld6b_pindata = {
	.load_pinctrl = false,
};

static struct pinctrl_desc uniphier_ld6b_pinctrl_desc = {
	.pins = uniphier_ld6b_pins,
	.npins = ARRAY_SIZE(uniphier_ld6b_pins),
};

static int uniphier_ld6b_pinctrl_probe(struct platform_device *pdev)
{
	return uniphier_pinctrl_probe(pdev, &uniphier_ld6b_pinctrl_desc,
				      &uniphier_ld6b_pindata);
	return uniphier_pinctrl_probe(pdev, &uniphier_ld6b_pindata);
}

static const struct of_device_id uniphier_ld6b_pinctrl_match[] = {
+3 −7
Original line number Diff line number Diff line
@@ -1520,6 +1520,8 @@ static const struct uniphier_pinmux_function uniphier_pro4_functions[] = {
};

static struct uniphier_pinctrl_socdata uniphier_pro4_pindata = {
	.pins = uniphier_pro4_pins,
	.npins = ARRAY_SIZE(uniphier_pro4_pins),
	.groups = uniphier_pro4_groups,
	.groups_count = ARRAY_SIZE(uniphier_pro4_groups),
	.functions = uniphier_pro4_functions,
@@ -1529,15 +1531,9 @@ static struct uniphier_pinctrl_socdata uniphier_pro4_pindata = {
	.load_pinctrl = true,
};

static struct pinctrl_desc uniphier_pro4_pinctrl_desc = {
	.pins = uniphier_pro4_pins,
	.npins = ARRAY_SIZE(uniphier_pro4_pins),
};

static int uniphier_pro4_pinctrl_probe(struct platform_device *pdev)
{
	return uniphier_pinctrl_probe(pdev, &uniphier_pro4_pinctrl_desc,
				      &uniphier_pro4_pindata);
	return uniphier_pinctrl_probe(pdev, &uniphier_pro4_pindata);
}

static const struct of_device_id uniphier_pro4_pinctrl_match[] = {
+3 −7
Original line number Diff line number Diff line
@@ -1311,6 +1311,8 @@ static const struct uniphier_pinmux_function uniphier_pro5_functions[] = {
};

static struct uniphier_pinctrl_socdata uniphier_pro5_pindata = {
	.pins = uniphier_pro5_pins,
	.npins = ARRAY_SIZE(uniphier_pro5_pins),
	.groups = uniphier_pro5_groups,
	.groups_count = ARRAY_SIZE(uniphier_pro5_groups),
	.functions = uniphier_pro5_functions,
@@ -1320,15 +1322,9 @@ static struct uniphier_pinctrl_socdata uniphier_pro5_pindata = {
	.load_pinctrl = true,
};

static struct pinctrl_desc uniphier_pro5_pinctrl_desc = {
	.pins = uniphier_pro5_pins,
	.npins = ARRAY_SIZE(uniphier_pro5_pins),
};

static int uniphier_pro5_pinctrl_probe(struct platform_device *pdev)
{
	return uniphier_pinctrl_probe(pdev, &uniphier_pro5_pinctrl_desc,
				      &uniphier_pro5_pindata);
	return uniphier_pinctrl_probe(pdev, &uniphier_pro5_pindata);
}

static const struct of_device_id uniphier_pro5_pinctrl_match[] = {
Loading