* [PATCH 1/2] pinctrl: rockchip: return a complete config in pinconf_get
@ 2014-04-23 12:27 Heiko Stübner
2014-04-23 12:28 ` [PATCH 2/2] pinctrl: rockchip: implement PIN_CONFIG_OUTPUT handling Heiko Stübner
2014-04-23 21:19 ` [PATCH 1/2] pinctrl: rockchip: return a complete config in pinconf_get Linus Walleij
0 siblings, 2 replies; 4+ messages in thread
From: Heiko Stübner @ 2014-04-23 12:27 UTC (permalink / raw)
To: linux-arm-kernel
Till now pinconf_get only set the argument value into the config parameter
effectively removing the actual config param value. As other pinctrl drivers
do, it might be nicer to keep the config param intact.
Therefore construct a real pinconfig value from param and arg in pinconf_get
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
drivers/pinctrl/pinctrl-rockchip.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c
index 96c60d2..ae3dfe7 100644
--- a/drivers/pinctrl/pinctrl-rockchip.c
+++ b/drivers/pinctrl/pinctrl-rockchip.c
@@ -740,13 +740,14 @@ static int rockchip_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin,
struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
struct rockchip_pin_bank *bank = pin_to_bank(info, pin);
enum pin_config_param param = pinconf_to_config_param(*config);
+ u16 arg;
switch (param) {
case PIN_CONFIG_BIAS_DISABLE:
if (rockchip_get_pull(bank, pin - bank->pin_base) != param)
return -EINVAL;
- *config = 0;
+ arg = 0;
break;
case PIN_CONFIG_BIAS_PULL_UP:
case PIN_CONFIG_BIAS_PULL_DOWN:
@@ -758,13 +759,15 @@ static int rockchip_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin,
if (rockchip_get_pull(bank, pin - bank->pin_base) != param)
return -EINVAL;
- *config = 1;
+ arg = 1;
break;
default:
return -ENOTSUPP;
break;
}
+ *config = pinconf_to_config_packed(param, arg);
+
return 0;
}
--
1.9.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] pinctrl: rockchip: implement PIN_CONFIG_OUTPUT handling
2014-04-23 12:27 [PATCH 1/2] pinctrl: rockchip: return a complete config in pinconf_get Heiko Stübner
@ 2014-04-23 12:28 ` Heiko Stübner
2014-04-23 21:20 ` Linus Walleij
2014-04-23 21:19 ` [PATCH 1/2] pinctrl: rockchip: return a complete config in pinconf_get Linus Walleij
1 sibling, 1 reply; 4+ messages in thread
From: Heiko Stübner @ 2014-04-23 12:28 UTC (permalink / raw)
To: linux-arm-kernel
In some cases it is nice to be able to simply control a gpio output
via the PIN_CONFIG_OUTPUT option without having a driver control it.
Thus add support for it to the rockchip pinctrl driver.
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
drivers/pinctrl/pinctrl-rockchip.c | 40 ++++++++++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c
index ae3dfe7..2e198a4 100644
--- a/drivers/pinctrl/pinctrl-rockchip.c
+++ b/drivers/pinctrl/pinctrl-rockchip.c
@@ -329,6 +329,23 @@ static const struct pinctrl_ops rockchip_pctrl_ops = {
* Hardware access
*/
+static int rockchip_get_mux(struct rockchip_pin_bank *bank, int pin)
+{
+ struct rockchip_pinctrl *info = bank->drvdata;
+ void __iomem *reg = info->reg_base + info->ctrl->mux_offset;
+ u8 bit;
+
+ if (bank->bank_type == RK3188_BANK0 && pin < 16)
+ return RK_FUNC_GPIO;
+
+ /* get basic quadrupel of mux registers and the correct reg inside */
+ reg += bank->bank_num * 0x10;
+ reg += (pin / 8) * 4;
+ bit = (pin % 8) * 2;
+
+ return ((readl(reg) >> bit) & 3);
+}
+
/*
* Set a new mux function for a pin.
*
@@ -687,6 +704,10 @@ static bool rockchip_pinconf_pull_valid(struct rockchip_pin_ctrl *ctrl,
return false;
}
+static int rockchip_gpio_direction_output(struct gpio_chip *gc,
+ unsigned offset, int value);
+static int rockchip_gpio_get(struct gpio_chip *gc, unsigned offset);
+
/* set the pin config settings for a specified pin */
static int rockchip_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
unsigned long *configs, unsigned num_configs)
@@ -724,6 +745,13 @@ static int rockchip_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
if (rc)
return rc;
break;
+ case PIN_CONFIG_OUTPUT:
+ rc = rockchip_gpio_direction_output(&bank->gpio_chip,
+ pin - bank->pin_base,
+ arg);
+ if (rc)
+ return rc;
+ break;
default:
return -ENOTSUPP;
break;
@@ -741,6 +769,7 @@ static int rockchip_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin,
struct rockchip_pin_bank *bank = pin_to_bank(info, pin);
enum pin_config_param param = pinconf_to_config_param(*config);
u16 arg;
+ int rc;
switch (param) {
case PIN_CONFIG_BIAS_DISABLE:
@@ -761,6 +790,17 @@ static int rockchip_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin,
arg = 1;
break;
+ case PIN_CONFIG_OUTPUT:
+ rc = rockchip_get_mux(bank, pin - bank->pin_base);
+ if (rc != RK_FUNC_GPIO)
+ return -EINVAL;
+
+ rc = rockchip_gpio_get(&bank->gpio_chip, pin - bank->pin_base);
+ if (rc < 0)
+ return rc;
+
+ arg = rc ? 1 : 0;
+ break;
default:
return -ENOTSUPP;
break;
--
1.9.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 1/2] pinctrl: rockchip: return a complete config in pinconf_get
2014-04-23 12:27 [PATCH 1/2] pinctrl: rockchip: return a complete config in pinconf_get Heiko Stübner
2014-04-23 12:28 ` [PATCH 2/2] pinctrl: rockchip: implement PIN_CONFIG_OUTPUT handling Heiko Stübner
@ 2014-04-23 21:19 ` Linus Walleij
1 sibling, 0 replies; 4+ messages in thread
From: Linus Walleij @ 2014-04-23 21:19 UTC (permalink / raw)
To: linux-arm-kernel
On Wed, Apr 23, 2014 at 2:27 PM, Heiko St?bner <heiko@sntech.de> wrote:
> Till now pinconf_get only set the argument value into the config parameter
> effectively removing the actual config param value. As other pinctrl drivers
> do, it might be nicer to keep the config param intact.
> Therefore construct a real pinconfig value from param and arg in pinconf_get
>
> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Patch applied.
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 2/2] pinctrl: rockchip: implement PIN_CONFIG_OUTPUT handling
2014-04-23 12:28 ` [PATCH 2/2] pinctrl: rockchip: implement PIN_CONFIG_OUTPUT handling Heiko Stübner
@ 2014-04-23 21:20 ` Linus Walleij
0 siblings, 0 replies; 4+ messages in thread
From: Linus Walleij @ 2014-04-23 21:20 UTC (permalink / raw)
To: linux-arm-kernel
On Wed, Apr 23, 2014 at 2:28 PM, Heiko St?bner <heiko@sntech.de> wrote:
> In some cases it is nice to be able to simply control a gpio output
> via the PIN_CONFIG_OUTPUT option without having a driver control it.
> Thus add support for it to the rockchip pinctrl driver.
>
> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Patch applied.
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2014-04-23 21:20 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-04-23 12:27 [PATCH 1/2] pinctrl: rockchip: return a complete config in pinconf_get Heiko Stübner
2014-04-23 12:28 ` [PATCH 2/2] pinctrl: rockchip: implement PIN_CONFIG_OUTPUT handling Heiko Stübner
2014-04-23 21:20 ` Linus Walleij
2014-04-23 21:19 ` [PATCH 1/2] pinctrl: rockchip: return a complete config in pinconf_get Linus Walleij
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).