[RESEND PATCH 2/3] pinctrl: renesas: Make sure the pin type is updated after setting the MUX

Lad Prabhakar
2020-11-04T17:27:05Z

Update pin type after every successful call to sh_pfc_config_mux().

This fixes pin functionality from being overwritten.

Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/pinctrl/renesas/pfc.c | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/drivers/pinctrl/renesas/pfc.c b/drivers/pinctrl/renesas/pfc.c
index fb811a95bc..275702d13a 100644
--- a/drivers/pinctrl/renesas/pfc.c
+++ b/drivers/pinctrl/renesas/pfc.c
@@ -537,11 +537,18 @@ static int sh_pfc_pinctrl_pin_set(struct udevice *dev, unsigned pin_selector,
const struct sh_pfc_pin *pin = &priv->pfc.info->pins[pin_selector];
int idx = sh_pfc_get_pin_index(pfc, pin->pin);
struct sh_pfc_pin_config *cfg = &pmx->configs[idx];
+ int ret;

if (cfg->type != PINMUX_TYPE_NONE)
return -EBUSY;

- return sh_pfc_config_mux(pfc, pin->enum_id, PINMUX_TYPE_FUNCTION);
+ ret = sh_pfc_config_mux(pfc, pin->enum_id, PINMUX_TYPE_FUNCTION);
+ if (ret)
+ return ret;
+
+ cfg->type = PINMUX_TYPE_FUNCTION;
+
+ return 0;
}

static int sh_pfc_pinctrl_group_set(struct udevice *dev, unsigned group_selector,
@@ -551,12 +558,14 @@ static int sh_pfc_pinctrl_group_set(struct udevice *dev, unsigned group_selector
struct sh_pfc_pinctrl *pmx = &priv->pmx;
struct sh_pfc *pfc = &priv->pfc;
const struct sh_pfc_pin_group *grp = &priv->pfc.info->groups[group_selector];
+ struct sh_pfc_pin_config *cfg;
unsigned int i;
int ret = 0;
+ int idx;

for (i = 0; i < grp->nr_pins; ++i) {
- int idx = sh_pfc_get_pin_index(pfc, grp->pins[i]);
- struct sh_pfc_pin_config *cfg = &pmx->configs[idx];
+ idx = sh_pfc_get_pin_index(pfc, grp->pins[i]);
+ cfg = &pmx->configs[idx];

if (cfg->type != PINMUX_TYPE_NONE) {
ret = -EBUSY;
@@ -568,6 +577,10 @@ static int sh_pfc_pinctrl_group_set(struct udevice *dev, unsigned group_selector
ret = sh_pfc_config_mux(pfc, grp->mux[i], PINMUX_TYPE_FUNCTION);
if (ret < 0)
break;
+
+ idx = sh_pfc_get_pin_index(pfc, grp->pins[i]);
+ cfg = &pmx->configs[idx];
+ cfg->type = PINMUX_TYPE_FUNCTION;
}

done:
--
2.17.1