3c1f6e358d
Patches are generated using the "format-patch" command from the following location: *https://www.codeaurora.org/cgit/quic/kernel/galak-msm/log/?h=apq_ipq_base *rev=0771849495b4128cac2faf7d49c85c729fc48b20 Patches numbered 76/77/102/103 have already been integrated in 3.14.12, so they're not in this list. All these patches are either integrated are pending integration into kernel.org, therefore these patches should go away once the kernel gets upgraded to 3.16. Support is currently limited to AP148 board but can be extended to other platforms in the future. These changes do not cover ethernet connectivity. Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org> SVN-Revision: 42334
70 lines
2.0 KiB
Diff
70 lines
2.0 KiB
Diff
From 469f83e0ed374250be5fd6202ac535276a752fa8 Mon Sep 17 00:00:00 2001
|
|
From: Bjorn Andersson <bjorn@kryo.se>
|
|
Date: Tue, 4 Feb 2014 19:55:31 -0800
|
|
Subject: [PATCH 033/182] pinctrl-msm: Support output-{high,low} configuration
|
|
|
|
Add support for configuring pins as output with value as from the
|
|
pinconf-generic interface.
|
|
|
|
Signed-off-by: Bjorn Andersson <bjorn.andersson@sonymobile.com>
|
|
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
|
---
|
|
drivers/pinctrl/pinctrl-msm.c | 27 +++++++++++++++++++++++++++
|
|
1 file changed, 27 insertions(+)
|
|
|
|
diff --git a/drivers/pinctrl/pinctrl-msm.c b/drivers/pinctrl/pinctrl-msm.c
|
|
index 91de8bc..19d2feb 100644
|
|
--- a/drivers/pinctrl/pinctrl-msm.c
|
|
+++ b/drivers/pinctrl/pinctrl-msm.c
|
|
@@ -214,6 +214,11 @@ static int msm_config_reg(struct msm_pinctrl *pctrl,
|
|
*bit = g->drv_bit;
|
|
*mask = 7;
|
|
break;
|
|
+ case PIN_CONFIG_OUTPUT:
|
|
+ *reg = g->ctl_reg;
|
|
+ *bit = g->oe_bit;
|
|
+ *mask = 1;
|
|
+ break;
|
|
default:
|
|
dev_err(pctrl->dev, "Invalid config param %04x\n", param);
|
|
return -ENOTSUPP;
|
|
@@ -282,6 +287,14 @@ static int msm_config_group_get(struct pinctrl_dev *pctldev,
|
|
case PIN_CONFIG_DRIVE_STRENGTH:
|
|
arg = msm_regval_to_drive(arg);
|
|
break;
|
|
+ case PIN_CONFIG_OUTPUT:
|
|
+ /* Pin is not output */
|
|
+ if (!arg)
|
|
+ return -EINVAL;
|
|
+
|
|
+ val = readl(pctrl->regs + g->io_reg);
|
|
+ arg = !!(val & BIT(g->in_bit));
|
|
+ break;
|
|
default:
|
|
dev_err(pctrl->dev, "Unsupported config parameter: %x\n",
|
|
param);
|
|
@@ -337,6 +350,20 @@ static int msm_config_group_set(struct pinctrl_dev *pctldev,
|
|
else
|
|
arg = (arg / 2) - 1;
|
|
break;
|
|
+ case PIN_CONFIG_OUTPUT:
|
|
+ /* set output value */
|
|
+ spin_lock_irqsave(&pctrl->lock, flags);
|
|
+ val = readl(pctrl->regs + g->io_reg);
|
|
+ if (arg)
|
|
+ val |= BIT(g->out_bit);
|
|
+ else
|
|
+ val &= ~BIT(g->out_bit);
|
|
+ writel(val, pctrl->regs + g->io_reg);
|
|
+ spin_unlock_irqrestore(&pctrl->lock, flags);
|
|
+
|
|
+ /* enable output */
|
|
+ arg = 1;
|
|
+ break;
|
|
default:
|
|
dev_err(pctrl->dev, "Unsupported config parameter: %x\n",
|
|
param);
|
|
--
|
|
1.7.10.4
|
|
|