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@vger.kernel.org Assisted-by: DeepSeek-V4.1-Flash and OpenAI Codex Signed-off-by: Wentao Liang --- 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