[PATCH 2/3] pinctrl: renesas: Make sure the pin type is updated after setting the MUX
Lad Prabhakar
prabhakar.mahadev-lad.rj at bp.renesas.com
Wed Sep 23 12:27:05 CEST 2020
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 at bp.renesas.com>
Reviewed-by: Biju Das <biju.das.jz at 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
More information about the U-Boot
mailing list