[PATCH 2/2] pinctrl: renesas: rzt2h: Skip PFC mode configuration if already set
From: Prabhakar
Date: Wed May 13 2026 - 07:54:11 EST
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
In rzt2h_pinctrl_set_pfc_mode(), read the PMC and PFC registers upfront
and skip the pin function configuration if the pin is already in
peripheral mode with the desired function.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
---
drivers/pinctrl/renesas/pinctrl-rzt2h.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/drivers/pinctrl/renesas/pinctrl-rzt2h.c b/drivers/pinctrl/renesas/pinctrl-rzt2h.c
index 4b790fa72b49..3945c891248b 100644
--- a/drivers/pinctrl/renesas/pinctrl-rzt2h.c
+++ b/drivers/pinctrl/renesas/pinctrl-rzt2h.c
@@ -188,8 +188,18 @@ static void rzt2h_pinctrl_set_pfc_mode(struct rzt2h_pinctrl *pctrl,
{
u64 reg64;
u16 reg16;
+ u8 pmc;
guard(raw_spinlock_irqsave)(&pctrl->lock);
+ reg64 = rzt2h_pinctrl_readq(pctrl, port, PFC(port));
+ pmc = rzt2h_pinctrl_readb(pctrl, port, PMC(port));
+ /* Check if pin is already configured to the desired function */
+ if (pmc & BIT(pin)) {
+ u8 current_func = field_get(PFC_PIN_MASK(pin), reg64);
+
+ if (current_func == func)
+ return;
+ }
/* Set pin to 'Non-use (Hi-Z input protection)' */
reg16 = rzt2h_pinctrl_readw(pctrl, port, PM(port));
@@ -200,7 +210,6 @@ static void rzt2h_pinctrl_set_pfc_mode(struct rzt2h_pinctrl *pctrl,
rzt2h_pinctrl_set_gpio_en(pctrl, port, pin, true);
/* Select Pin function mode with PFC register */
- reg64 = rzt2h_pinctrl_readq(pctrl, port, PFC(port));
reg64 &= ~PFC_PIN_MASK(pin);
rzt2h_pinctrl_writeq(pctrl, port, reg64 | ((u64)func << (pin * 8)), PFC(port));
--
2.54.0