aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/gemini/patches-4.14/0011-pinctrl-gemini-Support-drive-strength-setting.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/gemini/patches-4.14/0011-pinctrl-gemini-Support-drive-strength-setting.patch')
-rw-r--r--target/linux/gemini/patches-4.14/0011-pinctrl-gemini-Support-drive-strength-setting.patch198
1 files changed, 0 insertions, 198 deletions
diff --git a/target/linux/gemini/patches-4.14/0011-pinctrl-gemini-Support-drive-strength-setting.patch b/target/linux/gemini/patches-4.14/0011-pinctrl-gemini-Support-drive-strength-setting.patch
deleted file mode 100644
index e6d153403e..0000000000
--- a/target/linux/gemini/patches-4.14/0011-pinctrl-gemini-Support-drive-strength-setting.patch
+++ /dev/null
@@ -1,198 +0,0 @@
-From f147cf49ef39f5e87d5df9ef1fab52683bc75c63 Mon Sep 17 00:00:00 2001
-From: Linus Walleij <linus.walleij@linaro.org>
-Date: Sat, 2 Dec 2017 12:23:09 +0100
-Subject: [PATCH 11/31] pinctrl: gemini: Support drive strength setting
-
-The Gemini pin controller can set drive strength for a few
-select groups of pins (not individually). Implement this
-for GMAC0 and 1 (ethernet ports), IDE and PCI.
-
-Cc: devicetree@vger.kernel.org
-Reviewed-by: Rob Herring <robh@kernel.org>
-Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
----
- .../bindings/pinctrl/cortina,gemini-pinctrl.txt | 3 +
- drivers/pinctrl/pinctrl-gemini.c | 81 ++++++++++++++++++++++
- 2 files changed, 84 insertions(+)
-
---- a/Documentation/devicetree/bindings/pinctrl/cortina,gemini-pinctrl.txt
-+++ b/Documentation/devicetree/bindings/pinctrl/cortina,gemini-pinctrl.txt
-@@ -17,6 +17,9 @@ and generic pin config nodes.
-
- Supported configurations:
- - skew-delay is supported on the Ethernet pins
-+- drive-strength with 4, 8, 12 or 16 mA as argument is supported for
-+ entire groups on the groups "idegrp", "gmii_gmac0_grp", "gmii_gmac1_grp"
-+ and "pcigrp".
-
- Example:
-
---- a/drivers/pinctrl/pinctrl-gemini.c
-+++ b/drivers/pinctrl/pinctrl-gemini.c
-@@ -67,6 +67,9 @@ struct gemini_pmx {
- * elements in .pins so we can iterate over that array
- * @mask: bits to clear to enable this when doing pin muxing
- * @value: bits to set to enable this when doing pin muxing
-+ * @driving_mask: bitmask for the IO Pad driving register for this
-+ * group, if it supports altering the driving strength of
-+ * its lines.
- */
- struct gemini_pin_group {
- const char *name;
-@@ -74,12 +77,14 @@ struct gemini_pin_group {
- const unsigned int num_pins;
- u32 mask;
- u32 value;
-+ u32 driving_mask;
- };
-
- /* Some straight-forward control registers */
- #define GLOBAL_WORD_ID 0x00
- #define GLOBAL_STATUS 0x04
- #define GLOBAL_STATUS_FLPIN BIT(20)
-+#define GLOBAL_IODRIVE 0x10
- #define GLOBAL_GMAC_CTRL_SKEW 0x1c
- #define GLOBAL_GMAC0_DATA_SKEW 0x20
- #define GLOBAL_GMAC1_DATA_SKEW 0x24
-@@ -741,6 +746,7 @@ static const struct gemini_pin_group gem
- /* Conflict with all flash usage */
- .value = IDE_PADS_ENABLE | NAND_PADS_DISABLE |
- PFLASH_PADS_DISABLE | SFLASH_PADS_DISABLE,
-+ .driving_mask = GENMASK(21, 20),
- },
- {
- .name = "satagrp",
-@@ -756,6 +762,7 @@ static const struct gemini_pin_group gem
- .name = "gmii_gmac0_grp",
- .pins = gmii_gmac0_3512_pins,
- .num_pins = ARRAY_SIZE(gmii_gmac0_3512_pins),
-+ .driving_mask = GENMASK(17, 16),
- },
- {
- .name = "gmii_gmac1_grp",
-@@ -763,6 +770,7 @@ static const struct gemini_pin_group gem
- .num_pins = ARRAY_SIZE(gmii_gmac1_3512_pins),
- /* Bring out RGMII on the GMAC1 pins */
- .value = GEMINI_GMAC_IOSEL_GMAC0_GMAC1_RGMII,
-+ .driving_mask = GENMASK(19, 18),
- },
- {
- .name = "pcigrp",
-@@ -770,6 +778,7 @@ static const struct gemini_pin_group gem
- .num_pins = ARRAY_SIZE(pci_3512_pins),
- /* Conflict only with GPIO2 */
- .value = PCI_PADS_ENABLE | PCI_CLK_PAD_ENABLE,
-+ .driving_mask = GENMASK(23, 22),
- },
- {
- .name = "lpcgrp",
-@@ -1686,6 +1695,7 @@ static const struct gemini_pin_group gem
- /* Conflict with all flash usage */
- .value = IDE_PADS_ENABLE | NAND_PADS_DISABLE |
- PFLASH_PADS_DISABLE | SFLASH_PADS_DISABLE,
-+ .driving_mask = GENMASK(21, 20),
- },
- {
- .name = "satagrp",
-@@ -1701,6 +1711,7 @@ static const struct gemini_pin_group gem
- .name = "gmii_gmac0_grp",
- .pins = gmii_gmac0_3516_pins,
- .num_pins = ARRAY_SIZE(gmii_gmac0_3516_pins),
-+ .driving_mask = GENMASK(17, 16),
- },
- {
- .name = "gmii_gmac1_grp",
-@@ -1708,6 +1719,7 @@ static const struct gemini_pin_group gem
- .num_pins = ARRAY_SIZE(gmii_gmac1_3516_pins),
- /* Bring out RGMII on the GMAC1 pins */
- .value = GEMINI_GMAC_IOSEL_GMAC0_GMAC1_RGMII,
-+ .driving_mask = GENMASK(19, 18),
- },
- {
- .name = "pcigrp",
-@@ -1715,6 +1727,7 @@ static const struct gemini_pin_group gem
- .num_pins = ARRAY_SIZE(pci_3516_pins),
- /* Conflict only with GPIO2 */
- .value = PCI_PADS_ENABLE | PCI_CLK_PAD_ENABLE,
-+ .driving_mask = GENMASK(23, 22),
- },
- {
- .name = "lpcgrp",
-@@ -2423,9 +2436,77 @@ static int gemini_pinconf_set(struct pin
- return ret;
- }
-
-+static int gemini_pinconf_group_set(struct pinctrl_dev *pctldev,
-+ unsigned selector,
-+ unsigned long *configs,
-+ unsigned num_configs)
-+{
-+ struct gemini_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
-+ const struct gemini_pin_group *grp = NULL;
-+ enum pin_config_param param;
-+ u32 arg;
-+ u32 val;
-+ int i;
-+
-+ if (pmx->is_3512)
-+ grp = &gemini_3512_pin_groups[selector];
-+ if (pmx->is_3516)
-+ grp = &gemini_3516_pin_groups[selector];
-+
-+ /* First figure out if this group supports configs */
-+ if (!grp->driving_mask) {
-+ dev_err(pmx->dev, "pin config group \"%s\" does "
-+ "not support drive strength setting\n",
-+ grp->name);
-+ return -EINVAL;
-+ }
-+
-+ for (i = 0; i < num_configs; i++) {
-+ param = pinconf_to_config_param(configs[i]);
-+ arg = pinconf_to_config_argument(configs[i]);
-+
-+ switch (param) {
-+ case PIN_CONFIG_DRIVE_STRENGTH:
-+ switch (arg) {
-+ case 4:
-+ val = 0;
-+ break;
-+ case 8:
-+ val = 1;
-+ break;
-+ case 12:
-+ val = 2;
-+ break;
-+ case 16:
-+ val = 3;
-+ break;
-+ default:
-+ dev_err(pmx->dev,
-+ "invalid drive strength %d mA\n",
-+ arg);
-+ return -ENOTSUPP;
-+ }
-+ val <<= (ffs(grp->driving_mask) - 1);
-+ regmap_update_bits(pmx->map, GLOBAL_IODRIVE,
-+ grp->driving_mask,
-+ val);
-+ dev_info(pmx->dev,
-+ "set group %s to %d mA drive strength mask %08x val %08x\n",
-+ grp->name, arg, grp->driving_mask, val);
-+ break;
-+ default:
-+ dev_err(pmx->dev, "invalid config param %04x\n", param);
-+ return -ENOTSUPP;
-+ }
-+ }
-+
-+ return 0;
-+}
-+
- static const struct pinconf_ops gemini_pinconf_ops = {
- .pin_config_get = gemini_pinconf_get,
- .pin_config_set = gemini_pinconf_set,
-+ .pin_config_group_set = gemini_pinconf_group_set,
- .is_generic = true,
- };
-