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...@bp.renesas.com>
Reviewed-by: Biju Das <biju.das...@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 6cccd33c40..1ca1334775 100644
--- a/drivers/pinctrl/renesas/pfc.c
+++ b/drivers/pinctrl/renesas/pfc.c
@@ -538,11 +538,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,
@@ -552,12 +559,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;
@@ -569,6 +578,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

Reply via email to