From patchwork Tue May 31 08:05:12 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 68907 Delivered-To: patch@linaro.org Received: by 10.140.92.199 with SMTP id b65csp1799287qge; Tue, 31 May 2016 01:09:49 -0700 (PDT) X-Received: by 10.98.4.195 with SMTP id 186mr53521612pfe.154.1464682189017; Tue, 31 May 2016 01:09:49 -0700 (PDT) Return-Path: Received: from bombadil.infradead.org (bombadil.infradead.org. [2001:1868:205::9]) by mx.google.com with ESMTPS id w15si42307109pfa.169.2016.05.31.01.09.48 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 31 May 2016 01:09:49 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org designates 2001:1868:205::9 as permitted sender) client-ip=2001:1868:205::9; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@nifty.com; spf=pass (google.com: best guess record for domain of linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org designates 2001:1868:205::9 as permitted sender) smtp.mailfrom=linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1b7ejF-0003gj-81; Tue, 31 May 2016 08:08:45 +0000 Received: from condef002-v.nifty.com ([210.131.4.239]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1b7eih-0003E6-0H for linux-arm-kernel@lists.infradead.org; Tue, 31 May 2016 08:08:14 +0000 Received: from conuserg-12.nifty.com ([10.26.8.75])by condef002-v.nifty.com with ESMTP id u4V867iS011381 for ; Tue, 31 May 2016 17:06:07 +0900 Received: from beagle.diag.org (p14092-ipngnfx01kyoto.kyoto.ocn.ne.jp [153.142.97.92]) (authenticated) by conuserg-12.nifty.com with ESMTP id u4V849MK022295; Tue, 31 May 2016 17:04:16 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-12.nifty.com u4V849MK022295 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1464681856; bh=xFbBYZ1R8pdBxDVmTrGSFi9+Cg1Txu+2of3jWt679KY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ai//iaA9YAh1y1WCTKiMsyscu/YJB6KCCVJIpF9vTlIDF5hkDaf9TW9QrHbBtHFy6 8sStmln+GKdZePiQhUQTjppy7dBFdLUZo2DpwDuoeAWzGGfcaaP5JW99dGfrhsSFFY NRqvoc2jZrNk42lp/jmNZRWgDbRHlDluACA/Q2NtZLXau2ORoXEI2w+gNIxP5Fpj+7 6NtsrbH3BSNJ2SN+fhe1gZlzPC84cygi52BQgqIDaSOLtCEVNj7sWIiumCQA+SMUJa d4qS0K5Rbv+FEh7LU2npu+lT+cGXpM2hA4IJAGGsZpHSbh7BEa2MwFoxU0jF6QSm2d DPX/1yQOKHLoA== X-Nifty-SrcIP: [153.142.97.92] From: Masahiro Yamada To: linux-gpio@vger.kernel.org Subject: [PATCH 06/17] pinctrl: uniphier: allocate struct pinctrl_desc in probe function Date: Tue, 31 May 2016 17:05:12 +0900 Message-Id: <1464681923-7469-7-git-send-email-yamada.masahiro@socionext.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1464681923-7469-1-git-send-email-yamada.masahiro@socionext.com> References: <1464681923-7469-1-git-send-email-yamada.masahiro@socionext.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160531_010811_633704_E0D32B5B X-CRM114-Status: GOOD ( 13.09 ) X-Spam-Score: 0.6 (/) X-Spam-Report: SpamAssassin version 3.4.0 on bombadil.infradead.org summary: Content analysis details: (0.6 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/, low trust [210.131.4.239 listed in list.dnswl.org] 0.7 SPF_SOFTFAIL SPF: sender does not match SPF record (softfail) 2.5 SUSPICIOUS_RECIPS Similar addresses in recipient list -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Masahiro Yamada , Linus Walleij , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org 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: Masahiro Yamada --- drivers/pinctrl/uniphier/pinctrl-uniphier-core.c | 19 +++++++++++-------- drivers/pinctrl/uniphier/pinctrl-uniphier-ld4.c | 10 +++------- drivers/pinctrl/uniphier/pinctrl-uniphier-ld6b.c | 10 +++------- drivers/pinctrl/uniphier/pinctrl-uniphier-pro4.c | 10 +++------- drivers/pinctrl/uniphier/pinctrl-uniphier-pro5.c | 10 +++------- drivers/pinctrl/uniphier/pinctrl-uniphier-pxs2.c | 10 +++------- drivers/pinctrl/uniphier/pinctrl-uniphier-sld8.c | 10 +++------- drivers/pinctrl/uniphier/pinctrl-uniphier.h | 8 ++++---- 8 files changed, 33 insertions(+), 54 deletions(-) -- 1.9.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel diff --git a/drivers/pinctrl/uniphier/pinctrl-uniphier-core.c b/drivers/pinctrl/uniphier/pinctrl-uniphier-core.c index 4aa67c6..953b13a 100644 --- a/drivers/pinctrl/uniphier/pinctrl-uniphier-core.c +++ b/drivers/pinctrl/uniphier/pinctrl-uniphier-core.c @@ -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); diff --git a/drivers/pinctrl/uniphier/pinctrl-uniphier-ld4.c b/drivers/pinctrl/uniphier/pinctrl-uniphier-ld4.c index 1e7bacd..7b8cf31 100644 --- a/drivers/pinctrl/uniphier/pinctrl-uniphier-ld4.c +++ b/drivers/pinctrl/uniphier/pinctrl-uniphier-ld4.c @@ -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[] = { diff --git a/drivers/pinctrl/uniphier/pinctrl-uniphier-ld6b.c b/drivers/pinctrl/uniphier/pinctrl-uniphier-ld6b.c index 458c8a4..b8d1df9 100644 --- a/drivers/pinctrl/uniphier/pinctrl-uniphier-ld6b.c +++ b/drivers/pinctrl/uniphier/pinctrl-uniphier-ld6b.c @@ -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[] = { diff --git a/drivers/pinctrl/uniphier/pinctrl-uniphier-pro4.c b/drivers/pinctrl/uniphier/pinctrl-uniphier-pro4.c index 7fcaeb5..d88b351 100644 --- a/drivers/pinctrl/uniphier/pinctrl-uniphier-pro4.c +++ b/drivers/pinctrl/uniphier/pinctrl-uniphier-pro4.c @@ -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[] = { diff --git a/drivers/pinctrl/uniphier/pinctrl-uniphier-pro5.c b/drivers/pinctrl/uniphier/pinctrl-uniphier-pro5.c index 47fa57e..6282ace 100644 --- a/drivers/pinctrl/uniphier/pinctrl-uniphier-pro5.c +++ b/drivers/pinctrl/uniphier/pinctrl-uniphier-pro5.c @@ -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[] = { diff --git a/drivers/pinctrl/uniphier/pinctrl-uniphier-pxs2.c b/drivers/pinctrl/uniphier/pinctrl-uniphier-pxs2.c index 246e2be..8c48f31 100644 --- a/drivers/pinctrl/uniphier/pinctrl-uniphier-pxs2.c +++ b/drivers/pinctrl/uniphier/pinctrl-uniphier-pxs2.c @@ -1229,6 +1229,8 @@ static const struct uniphier_pinmux_function uniphier_pxs2_functions[] = { }; static struct uniphier_pinctrl_socdata uniphier_pxs2_pindata = { + .pins = uniphier_pxs2_pins, + .npins = ARRAY_SIZE(uniphier_pxs2_pins), .groups = uniphier_pxs2_groups, .groups_count = ARRAY_SIZE(uniphier_pxs2_groups), .functions = uniphier_pxs2_functions, @@ -1238,15 +1240,9 @@ static struct uniphier_pinctrl_socdata uniphier_pxs2_pindata = { .load_pinctrl = false, }; -static struct pinctrl_desc uniphier_pxs2_pinctrl_desc = { - .pins = uniphier_pxs2_pins, - .npins = ARRAY_SIZE(uniphier_pxs2_pins), -}; - static int uniphier_pxs2_pinctrl_probe(struct platform_device *pdev) { - return uniphier_pinctrl_probe(pdev, &uniphier_pxs2_pinctrl_desc, - &uniphier_pxs2_pindata); + return uniphier_pinctrl_probe(pdev, &uniphier_pxs2_pindata); } static const struct of_device_id uniphier_pxs2_pinctrl_match[] = { diff --git a/drivers/pinctrl/uniphier/pinctrl-uniphier-sld8.c b/drivers/pinctrl/uniphier/pinctrl-uniphier-sld8.c index 915259f..caf5380 100644 --- a/drivers/pinctrl/uniphier/pinctrl-uniphier-sld8.c +++ b/drivers/pinctrl/uniphier/pinctrl-uniphier-sld8.c @@ -754,6 +754,8 @@ static const struct uniphier_pinmux_function uniphier_sld8_functions[] = { }; static struct uniphier_pinctrl_socdata uniphier_sld8_pindata = { + .pins = uniphier_sld8_pins, + .npins = ARRAY_SIZE(uniphier_sld8_pins), .groups = uniphier_sld8_groups, .groups_count = ARRAY_SIZE(uniphier_sld8_groups), .functions = uniphier_sld8_functions, @@ -763,15 +765,9 @@ static struct uniphier_pinctrl_socdata uniphier_sld8_pindata = { .load_pinctrl = false, }; -static struct pinctrl_desc uniphier_sld8_pinctrl_desc = { - .pins = uniphier_sld8_pins, - .npins = ARRAY_SIZE(uniphier_sld8_pins), -}; - static int uniphier_sld8_pinctrl_probe(struct platform_device *pdev) { - return uniphier_pinctrl_probe(pdev, &uniphier_sld8_pinctrl_desc, - &uniphier_sld8_pindata); + return uniphier_pinctrl_probe(pdev, &uniphier_sld8_pindata); } static const struct of_device_id uniphier_sld8_pinctrl_match[] = { diff --git a/drivers/pinctrl/uniphier/pinctrl-uniphier.h b/drivers/pinctrl/uniphier/pinctrl-uniphier.h index a21154f..0322413 100644 --- a/drivers/pinctrl/uniphier/pinctrl-uniphier.h +++ b/drivers/pinctrl/uniphier/pinctrl-uniphier.h @@ -19,6 +19,8 @@ #include #include +struct platform_device; + #define UNIPHIER_PINCTRL_PINMUX_BASE 0x0 #define UNIPHIER_PINCTRL_LOAD_PINMUX 0x700 #define UNIPHIER_PINCTRL_DRVCTRL_BASE 0x800 @@ -154,6 +156,8 @@ struct uniphier_pinmux_function { }; struct uniphier_pinctrl_socdata { + const struct pinctrl_pin_desc *pins; + unsigned int npins; const struct uniphier_pinctrl_group *groups; int groups_count; const struct uniphier_pinmux_function *functions; @@ -205,11 +209,7 @@ struct uniphier_pinctrl_socdata { .num_groups = ARRAY_SIZE(func##_groups), \ } -struct platform_device; -struct pinctrl_desc; - int uniphier_pinctrl_probe(struct platform_device *pdev, - struct pinctrl_desc *desc, struct uniphier_pinctrl_socdata *socdata); #endif /* __PINCTRL_UNIPHIER_H__ */