diff options
author | Masahiro Yamada <yamada.masahiro@socionext.com> | 2016-05-31 04:05:12 -0400 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2016-05-31 06:40:38 -0400 |
commit | fc78a56631d13901dd8bac5efb46e8fdcd89976b (patch) | |
tree | 129599977215b09da52c470848562b8ddde9349e /drivers/pinctrl/uniphier | |
parent | 4109508a85f5f51b3dcb1fb53674eec2beac60e1 (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.c | 19 | ||||
-rw-r--r-- | drivers/pinctrl/uniphier/pinctrl-uniphier-ld4.c | 10 | ||||
-rw-r--r-- | drivers/pinctrl/uniphier/pinctrl-uniphier-ld6b.c | 10 | ||||
-rw-r--r-- | drivers/pinctrl/uniphier/pinctrl-uniphier-pro4.c | 10 | ||||
-rw-r--r-- | drivers/pinctrl/uniphier/pinctrl-uniphier-pro5.c | 10 | ||||
-rw-r--r-- | drivers/pinctrl/uniphier/pinctrl-uniphier-pxs2.c | 10 | ||||
-rw-r--r-- | drivers/pinctrl/uniphier/pinctrl-uniphier-sld8.c | 10 | ||||
-rw-r--r-- | drivers/pinctrl/uniphier/pinctrl-uniphier.h | 8 |
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 | ||
28 | struct uniphier_pinctrl_priv { | 28 | struct 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 | ||
641 | int uniphier_pinctrl_probe(struct platform_device *pdev, | 642 | int 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 | ||
848 | static struct uniphier_pinctrl_socdata uniphier_ld4_pindata = { | 848 | static 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 | ||
858 | static struct pinctrl_desc uniphier_ld4_pinctrl_desc = { | ||
859 | .pins = uniphier_ld4_pins, | ||
860 | .npins = ARRAY_SIZE(uniphier_ld4_pins), | ||
861 | }; | ||
862 | |||
863 | static int uniphier_ld4_pinctrl_probe(struct platform_device *pdev) | 860 | static 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 | ||
869 | static const struct of_device_id uniphier_ld4_pinctrl_match[] = { | 865 | 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 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 | ||
1236 | static struct uniphier_pinctrl_socdata uniphier_ld6b_pindata = { | 1236 | static 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 | ||
1246 | static struct pinctrl_desc uniphier_ld6b_pinctrl_desc = { | ||
1247 | .pins = uniphier_ld6b_pins, | ||
1248 | .npins = ARRAY_SIZE(uniphier_ld6b_pins), | ||
1249 | }; | ||
1250 | |||
1251 | static int uniphier_ld6b_pinctrl_probe(struct platform_device *pdev) | 1248 | static 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 | ||
1257 | static const struct of_device_id uniphier_ld6b_pinctrl_match[] = { | 1253 | 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 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 | ||
1522 | static struct uniphier_pinctrl_socdata uniphier_pro4_pindata = { | 1522 | static 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 | ||
1532 | static struct pinctrl_desc uniphier_pro4_pinctrl_desc = { | ||
1533 | .pins = uniphier_pro4_pins, | ||
1534 | .npins = ARRAY_SIZE(uniphier_pro4_pins), | ||
1535 | }; | ||
1536 | |||
1537 | static int uniphier_pro4_pinctrl_probe(struct platform_device *pdev) | 1534 | static 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 | ||
1543 | static const struct of_device_id uniphier_pro4_pinctrl_match[] = { | 1539 | 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 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 | ||
1313 | static struct uniphier_pinctrl_socdata uniphier_pro5_pindata = { | 1313 | static 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 | ||
1323 | static struct pinctrl_desc uniphier_pro5_pinctrl_desc = { | ||
1324 | .pins = uniphier_pro5_pins, | ||
1325 | .npins = ARRAY_SIZE(uniphier_pro5_pins), | ||
1326 | }; | ||
1327 | |||
1328 | static int uniphier_pro5_pinctrl_probe(struct platform_device *pdev) | 1325 | static 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 | ||
1334 | static const struct of_device_id uniphier_pro5_pinctrl_match[] = { | 1330 | 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 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 | ||
1231 | static struct uniphier_pinctrl_socdata uniphier_pxs2_pindata = { | 1231 | static 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 | ||
1241 | static struct pinctrl_desc uniphier_pxs2_pinctrl_desc = { | ||
1242 | .pins = uniphier_pxs2_pins, | ||
1243 | .npins = ARRAY_SIZE(uniphier_pxs2_pins), | ||
1244 | }; | ||
1245 | |||
1246 | static int uniphier_pxs2_pinctrl_probe(struct platform_device *pdev) | 1243 | static 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 | ||
1252 | static const struct of_device_id uniphier_pxs2_pinctrl_match[] = { | 1248 | 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 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 | ||
756 | static struct uniphier_pinctrl_socdata uniphier_sld8_pindata = { | 756 | static 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 | ||
766 | static struct pinctrl_desc uniphier_sld8_pinctrl_desc = { | ||
767 | .pins = uniphier_sld8_pins, | ||
768 | .npins = ARRAY_SIZE(uniphier_sld8_pins), | ||
769 | }; | ||
770 | |||
771 | static int uniphier_sld8_pinctrl_probe(struct platform_device *pdev) | 768 | static 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 | ||
777 | static const struct of_device_id uniphier_sld8_pinctrl_match[] = { | 773 | 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 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 | ||
22 | struct 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 | ||
156 | struct uniphier_pinctrl_socdata { | 158 | struct 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 | ||
208 | struct platform_device; | ||
209 | struct pinctrl_desc; | ||
210 | |||
211 | int uniphier_pinctrl_probe(struct platform_device *pdev, | 212 | int 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__ */ |