[PATCH] rtc: stm32: release the LSCO clock provider on remove

From: Wentao Liang

Date: Tue Nov 03 2026 - 06:16:54 EST


The LSCO pinmux action registers the rtc_lsco clock provider with
of_clk_add_provider(), which takes a reference on the RTC device node.
stm32_rtc_remove() unregisters the gate clock but never calls
of_clk_del_provider(), so the node reference is never dropped and the
provider stays registered with a pointer to a clock that no longer
exists.

Delete the provider before unregistering the gate clock.

Fixes: bb7b0df2be5c ("rtc: stm32: add Low Speed Clock Output (LSCO) support")
Cc: stable@xxxxxxxxxxxxxxx
Assisted-by: DeepSeek-V4.1-Flash and OpenAI Codex
Signed-off-by: Wentao Liang <vulab@xxxxxxxxxxx>
---
drivers/rtc/rtc-stm32.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/rtc/rtc-stm32.c b/drivers/rtc/rtc-stm32.c
index 1c4e4bd7afe4..a77868bd79bd 100644
--- a/drivers/rtc/rtc-stm32.c
+++ b/drivers/rtc/rtc-stm32.c
@@ -1215,8 +1215,10 @@ static void stm32_rtc_remove(struct platform_device *pdev)
const struct stm32_rtc_registers *regs = &rtc->data->regs;
unsigned int cr;

- if (!IS_ERR_OR_NULL(rtc->clk_lsco))
+ if (!IS_ERR_OR_NULL(rtc->clk_lsco)) {
+ of_clk_del_provider(pdev->dev.of_node);
clk_unregister_gate(rtc->clk_lsco);
+ }

/* Disable interrupts */
stm32_rtc_wpr_unlock(rtc);
--
2.34.1