aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pinctrl/uniphier
diff options
context:
space:
mode:
authorMasahiro Yamada <yamada.masahiro@socionext.com>2016-05-31 04:05:12 -0400
committerLinus Walleij <linus.walleij@linaro.org>2016-05-31 06:40:38 -0400
commitfc78a56631d13901dd8bac5efb46e8fdcd89976b (patch)
tree129599977215b09da52c470848562b8ddde9349e /drivers/pinctrl/uniphier
parent4109508a85f5f51b3dcb1fb53674eec2beac60e1 (diff)
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: Masahiro Yamada <yamada.masahiro@socionext.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/pinctrl/uniphier')
-rw-r--r--drivers/pinctrl/uniphier/pinctrl-uniphier-core.c19
-rw-r--r--drivers/pinctrl/uniphier/pinctrl-uniphier-ld4.c10
-rw-r--r--drivers/pinctrl/uniphier/pinctrl-uniphier-ld6b.c10
-rw-r--r--drivers/pinctrl/uniphier/pinctrl-uniphier-pro4.c10
-rw-r--r--drivers/pinctrl/uniphier/pinctrl-uniphier-pro5.c10
-rw-r--r--drivers/pinctrl/uniphier/pinctrl-uniphier-pxs2.c10
-rw-r--r--drivers/pinctrl/uniphier/pinctrl-uniphier-sld8.c10
-rw-r--r--drivers/pinctrl/uniphier/pinctrl-uniphier.h8
8 files changed, 33 insertions, 54 deletions
diff --git a/drivers/pinctrl/uniphier/pinctrl-uniphier-core.c b/drivers/pinctrl/uniphier/pinctrl-uniphier-core.c
index 4aa67c6e7905..953b13a841b3 100644
--- a/drivers/pinctrl/uniphier/pinctrl-uniphier-core.c
+++ b/drivers/pinctrl/uniphier/pinctrl-uniphier-core.c
@@ -26,6 +26,7 @@
26#include "pinctrl-uniphier.h" 26#include "pinctrl-uniphier.h"
27 27
28struct uniphier_pinctrl_priv { 28struct uniphier_pinctrl_priv {
29 struct pinctrl_desc pctldesc;
29 struct pinctrl_dev *pctldev; 30 struct pinctrl_dev *pctldev;
30 struct regmap *regmap; 31 struct regmap *regmap;
31 struct uniphier_pinctrl_socdata *socdata; 32 struct uniphier_pinctrl_socdata *socdata;
@@ -639,13 +640,13 @@ static const struct pinmux_ops uniphier_pmxops = {
639}; 640};
640 641
641int uniphier_pinctrl_probe(struct platform_device *pdev, 642int uniphier_pinctrl_probe(struct platform_device *pdev,
642 struct pinctrl_desc *desc,
643 struct uniphier_pinctrl_socdata *socdata) 643 struct uniphier_pinctrl_socdata *socdata)
644{ 644{
645 struct device *dev = &pdev->dev; 645 struct device *dev = &pdev->dev;
646 struct uniphier_pinctrl_priv *priv; 646 struct uniphier_pinctrl_priv *priv;
647 647
648 if (!socdata || 648 if (!socdata ||
649 !socdata->pins || !socdata->npins ||
649 !socdata->groups || 650 !socdata->groups ||
650 !socdata->groups_count || 651 !socdata->groups_count ||
651 !socdata->functions || 652 !socdata->functions ||
@@ -667,13 +668,15 @@ int uniphier_pinctrl_probe(struct platform_device *pdev,
667 } 668 }
668 669
669 priv->socdata = socdata; 670 priv->socdata = socdata;
670 desc->name = dev->driver->name; 671 priv->pctldesc.name = dev->driver->name;
671 desc->pctlops = &uniphier_pctlops; 672 priv->pctldesc.pins = socdata->pins;
672 desc->pmxops = &uniphier_pmxops; 673 priv->pctldesc.npins = socdata->npins;
673 desc->confops = &uniphier_confops; 674 priv->pctldesc.pctlops = &uniphier_pctlops;
674 desc->owner = dev->driver->owner; 675 priv->pctldesc.pmxops = &uniphier_pmxops;
675 676 priv->pctldesc.confops = &uniphier_confops;
676 priv->pctldev = devm_pinctrl_register(dev, desc, priv); 677 priv->pctldesc.owner = dev->driver->owner;
678
679 priv->pctldev = devm_pinctrl_register(dev, &priv->pctldesc, priv);
677 if (IS_ERR(priv->pctldev)) { 680 if (IS_ERR(priv->pctldev)) {
678 dev_err(dev, "failed to register UniPhier pinctrl driver\n"); 681 dev_err(dev, "failed to register UniPhier pinctrl driver\n");
679 return PTR_ERR(priv->pctldev); 682 return PTR_ERR(priv->pctldev);
diff --git a/drivers/pinctrl/uniphier/pinctrl-uniphier-ld4.c b/drivers/pinctrl/uniphier/pinctrl-uniphier-ld4.c
index 1e7bacd81785..7b8cf3124176 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[] = {
846}; 846};
847 847
848static struct uniphier_pinctrl_socdata uniphier_ld4_pindata = { 848static struct uniphier_pinctrl_socdata uniphier_ld4_pindata = {
849 .pins = uniphier_ld4_pins,
850 .npins = ARRAY_SIZE(uniphier_ld4_pins),
849 .groups = uniphier_ld4_groups, 851 .groups = uniphier_ld4_groups,
850 .groups_count = ARRAY_SIZE(uniphier_ld4_groups), 852 .groups_count = ARRAY_SIZE(uniphier_ld4_groups),
851 .functions = uniphier_ld4_functions, 853 .functions = uniphier_ld4_functions,
@@ -855,15 +857,9 @@ static struct uniphier_pinctrl_socdata uniphier_ld4_pindata = {
855 .load_pinctrl = false, 857 .load_pinctrl = false,
856}; 858};
857 859
858static struct pinctrl_desc uniphier_ld4_pinctrl_desc = {
859 .pins = uniphier_ld4_pins,
860 .npins = ARRAY_SIZE(uniphier_ld4_pins),
861};
862
863static int uniphier_ld4_pinctrl_probe(struct platform_device *pdev) 860static int uniphier_ld4_pinctrl_probe(struct platform_device *pdev)
864{ 861{
865 return uniphier_pinctrl_probe(pdev, &uniphier_ld4_pinctrl_desc, 862 return uniphier_pinctrl_probe(pdev, &uniphier_ld4_pindata);
866 &uniphier_ld4_pindata);
867} 863}
868 864
869static const struct of_device_id uniphier_ld4_pinctrl_match[] = { 865static 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 458c8a4e1bb6..b8d1df9df157 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[] = {
1234}; 1234};
1235 1235
1236static struct uniphier_pinctrl_socdata uniphier_ld6b_pindata = { 1236static struct uniphier_pinctrl_socdata uniphier_ld6b_pindata = {
1237 .pins = uniphier_ld6b_pins,
1238 .npins = ARRAY_SIZE(uniphier_ld6b_pins),
1237 .groups = uniphier_ld6b_groups, 1239 .groups = uniphier_ld6b_groups,
1238 .groups_count = ARRAY_SIZE(uniphier_ld6b_groups), 1240 .groups_count = ARRAY_SIZE(uniphier_ld6b_groups),
1239 .functions = uniphier_ld6b_functions, 1241 .functions = uniphier_ld6b_functions,
@@ -1243,15 +1245,9 @@ static struct uniphier_pinctrl_socdata uniphier_ld6b_pindata = {
1243 .load_pinctrl = false, 1245 .load_pinctrl = false,
1244}; 1246};
1245 1247
1246static struct pinctrl_desc uniphier_ld6b_pinctrl_desc = {
1247 .pins = uniphier_ld6b_pins,
1248 .npins = ARRAY_SIZE(uniphier_ld6b_pins),
1249};
1250
1251static int uniphier_ld6b_pinctrl_probe(struct platform_device *pdev) 1248static int uniphier_ld6b_pinctrl_probe(struct platform_device *pdev)
1252{ 1249{
1253 return uniphier_pinctrl_probe(pdev, &uniphier_ld6b_pinctrl_desc, 1250 return uniphier_pinctrl_probe(pdev, &uniphier_ld6b_pindata);
1254 &uniphier_ld6b_pindata);
1255} 1251}
1256 1252
1257static const struct of_device_id uniphier_ld6b_pinctrl_match[] = { 1253static 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 7fcaeb5a510a..d88b351a7a37 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[] = {
1520}; 1520};
1521 1521
1522static struct uniphier_pinctrl_socdata uniphier_pro4_pindata = { 1522static struct uniphier_pinctrl_socdata uniphier_pro4_pindata = {
1523 .pins = uniphier_pro4_pins,
1524 .npins = ARRAY_SIZE(uniphier_pro4_pins),
1523 .groups = uniphier_pro4_groups, 1525 .groups = uniphier_pro4_groups,
1524 .groups_count = ARRAY_SIZE(uniphier_pro4_groups), 1526 .groups_count = ARRAY_SIZE(uniphier_pro4_groups),
1525 .functions = uniphier_pro4_functions, 1527 .functions = uniphier_pro4_functions,
@@ -1529,15 +1531,9 @@ static struct uniphier_pinctrl_socdata uniphier_pro4_pindata = {
1529 .load_pinctrl = true, 1531 .load_pinctrl = true,
1530}; 1532};
1531 1533
1532static struct pinctrl_desc uniphier_pro4_pinctrl_desc = {
1533 .pins = uniphier_pro4_pins,
1534 .npins = ARRAY_SIZE(uniphier_pro4_pins),
1535};
1536
1537static int uniphier_pro4_pinctrl_probe(struct platform_device *pdev) 1534static int uniphier_pro4_pinctrl_probe(struct platform_device *pdev)
1538{ 1535{
1539 return uniphier_pinctrl_probe(pdev, &uniphier_pro4_pinctrl_desc, 1536 return uniphier_pinctrl_probe(pdev, &uniphier_pro4_pindata);
1540 &uniphier_pro4_pindata);
1541} 1537}
1542 1538
1543static const struct of_device_id uniphier_pro4_pinctrl_match[] = { 1539static 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 47fa57e05fbc..6282acec422a 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[] = {
1311}; 1311};
1312 1312
1313static struct uniphier_pinctrl_socdata uniphier_pro5_pindata = { 1313static struct uniphier_pinctrl_socdata uniphier_pro5_pindata = {
1314 .pins = uniphier_pro5_pins,
1315 .npins = ARRAY_SIZE(uniphier_pro5_pins),
1314 .groups = uniphier_pro5_groups, 1316 .groups = uniphier_pro5_groups,
1315 .groups_count = ARRAY_SIZE(uniphier_pro5_groups), 1317 .groups_count = ARRAY_SIZE(uniphier_pro5_groups),
1316 .functions = uniphier_pro5_functions, 1318 .functions = uniphier_pro5_functions,
@@ -1320,15 +1322,9 @@ static struct uniphier_pinctrl_socdata uniphier_pro5_pindata = {
1320 .load_pinctrl = true, 1322 .load_pinctrl = true,
1321}; 1323};
1322 1324
1323static struct pinctrl_desc uniphier_pro5_pinctrl_desc = {
1324 .pins = uniphier_pro5_pins,
1325 .npins = ARRAY_SIZE(uniphier_pro5_pins),
1326};
1327
1328static int uniphier_pro5_pinctrl_probe(struct platform_device *pdev) 1325static int uniphier_pro5_pinctrl_probe(struct platform_device *pdev)
1329{ 1326{
1330 return uniphier_pinctrl_probe(pdev, &uniphier_pro5_pinctrl_desc, 1327 return uniphier_pinctrl_probe(pdev, &uniphier_pro5_pindata);
1331 &uniphier_pro5_pindata);
1332} 1328}
1333 1329
1334static const struct of_device_id uniphier_pro5_pinctrl_match[] = { 1330static 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 246e2bed6ef0..8c48f31d2bd5 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[] = {
1229}; 1229};
1230 1230
1231static struct uniphier_pinctrl_socdata uniphier_pxs2_pindata = { 1231static struct uniphier_pinctrl_socdata uniphier_pxs2_pindata = {
1232 .pins = uniphier_pxs2_pins,
1233 .npins = ARRAY_SIZE(uniphier_pxs2_pins),
1232 .groups = uniphier_pxs2_groups, 1234 .groups = uniphier_pxs2_groups,
1233 .groups_count = ARRAY_SIZE(uniphier_pxs2_groups), 1235 .groups_count = ARRAY_SIZE(uniphier_pxs2_groups),
1234 .functions = uniphier_pxs2_functions, 1236 .functions = uniphier_pxs2_functions,
@@ -1238,15 +1240,9 @@ static struct uniphier_pinctrl_socdata uniphier_pxs2_pindata = {
1238 .load_pinctrl = false, 1240 .load_pinctrl = false,
1239}; 1241};
1240 1242
1241static struct pinctrl_desc uniphier_pxs2_pinctrl_desc = {
1242 .pins = uniphier_pxs2_pins,
1243 .npins = ARRAY_SIZE(uniphier_pxs2_pins),
1244};
1245
1246static int uniphier_pxs2_pinctrl_probe(struct platform_device *pdev) 1243static int uniphier_pxs2_pinctrl_probe(struct platform_device *pdev)
1247{ 1244{
1248 return uniphier_pinctrl_probe(pdev, &uniphier_pxs2_pinctrl_desc, 1245 return uniphier_pinctrl_probe(pdev, &uniphier_pxs2_pindata);
1249 &uniphier_pxs2_pindata);
1250} 1246}
1251 1247
1252static const struct of_device_id uniphier_pxs2_pinctrl_match[] = { 1248static 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 915259f13ea8..caf53800e794 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[] = {
754}; 754};
755 755
756static struct uniphier_pinctrl_socdata uniphier_sld8_pindata = { 756static struct uniphier_pinctrl_socdata uniphier_sld8_pindata = {
757 .pins = uniphier_sld8_pins,
758 .npins = ARRAY_SIZE(uniphier_sld8_pins),
757 .groups = uniphier_sld8_groups, 759 .groups = uniphier_sld8_groups,
758 .groups_count = ARRAY_SIZE(uniphier_sld8_groups), 760 .groups_count = ARRAY_SIZE(uniphier_sld8_groups),
759 .functions = uniphier_sld8_functions, 761 .functions = uniphier_sld8_functions,
@@ -763,15 +765,9 @@ static struct uniphier_pinctrl_socdata uniphier_sld8_pindata = {
763 .load_pinctrl = false, 765 .load_pinctrl = false,
764}; 766};
765 767
766static struct pinctrl_desc uniphier_sld8_pinctrl_desc = {
767 .pins = uniphier_sld8_pins,
768 .npins = ARRAY_SIZE(uniphier_sld8_pins),
769};
770
771static int uniphier_sld8_pinctrl_probe(struct platform_device *pdev) 768static int uniphier_sld8_pinctrl_probe(struct platform_device *pdev)
772{ 769{
773 return uniphier_pinctrl_probe(pdev, &uniphier_sld8_pinctrl_desc, 770 return uniphier_pinctrl_probe(pdev, &uniphier_sld8_pindata);
774 &uniphier_sld8_pindata);
775} 771}
776 772
777static const struct of_device_id uniphier_sld8_pinctrl_match[] = { 773static 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 a21154f4b453..032241300aca 100644
--- a/drivers/pinctrl/uniphier/pinctrl-uniphier.h
+++ b/drivers/pinctrl/uniphier/pinctrl-uniphier.h
@@ -19,6 +19,8 @@
19#include <linux/kernel.h> 19#include <linux/kernel.h>
20#include <linux/types.h> 20#include <linux/types.h>
21 21
22struct platform_device;
23
22#define UNIPHIER_PINCTRL_PINMUX_BASE 0x0 24#define UNIPHIER_PINCTRL_PINMUX_BASE 0x0
23#define UNIPHIER_PINCTRL_LOAD_PINMUX 0x700 25#define UNIPHIER_PINCTRL_LOAD_PINMUX 0x700
24#define UNIPHIER_PINCTRL_DRVCTRL_BASE 0x800 26#define UNIPHIER_PINCTRL_DRVCTRL_BASE 0x800
@@ -154,6 +156,8 @@ struct uniphier_pinmux_function {
154}; 156};
155 157
156struct uniphier_pinctrl_socdata { 158struct uniphier_pinctrl_socdata {
159 const struct pinctrl_pin_desc *pins;
160 unsigned int npins;
157 const struct uniphier_pinctrl_group *groups; 161 const struct uniphier_pinctrl_group *groups;
158 int groups_count; 162 int groups_count;
159 const struct uniphier_pinmux_function *functions; 163 const struct uniphier_pinmux_function *functions;
@@ -205,11 +209,7 @@ struct uniphier_pinctrl_socdata {
205 .num_groups = ARRAY_SIZE(func##_groups), \ 209 .num_groups = ARRAY_SIZE(func##_groups), \
206 } 210 }
207 211
208struct platform_device;
209struct pinctrl_desc;
210
211int uniphier_pinctrl_probe(struct platform_device *pdev, 212int uniphier_pinctrl_probe(struct platform_device *pdev,
212 struct pinctrl_desc *desc,
213 struct uniphier_pinctrl_socdata *socdata); 213 struct uniphier_pinctrl_socdata *socdata);
214 214
215#endif /* __PINCTRL_UNIPHIER_H__ */ 215#endif /* __PINCTRL_UNIPHIER_H__ */