Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

rtc: bbnsm: add remove hook

Without remove hook to clear wake irq, there will be kernel dump when
doing module test.
"bbnsm_rtc 44440000.bbnsm:rtc: wake irq already initialized"

Add remove hook to clear wake irq and set wakeup to false.

Fixes: eb7b85853c38 ("rtc: bbnsm: Add the bbnsm rtc support")
Signed-off-by: Peng Fan <peng.fan@nxp.com>
Link: https://lore.kernel.org/r/20241111071130.1099978-1-peng.fan@oss.nxp.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>

authored by

Peng Fan and committed by
Alexandre Belloni
60f0108b 5a36826a

+18 -2
+18 -2
drivers/rtc/rtc-nxp-bbnsm.c
··· 197 197 if (ret) { 198 198 dev_err(&pdev->dev, "failed to request irq %d: %d\n", 199 199 bbnsm->irq, ret); 200 - return ret; 200 + goto err; 201 201 } 202 202 203 203 bbnsm->rtc->ops = &bbnsm_rtc_ops; 204 204 bbnsm->rtc->range_max = U32_MAX; 205 205 206 - return devm_rtc_register_device(bbnsm->rtc); 206 + ret = devm_rtc_register_device(bbnsm->rtc); 207 + if (ret) 208 + goto err; 209 + 210 + return 0; 211 + 212 + err: 213 + dev_pm_clear_wake_irq(&pdev->dev); 214 + device_init_wakeup(&pdev->dev, false); 215 + return ret; 216 + } 217 + 218 + static void bbnsm_rtc_remove(struct platform_device *pdev) 219 + { 220 + dev_pm_clear_wake_irq(&pdev->dev); 221 + device_init_wakeup(&pdev->dev, false); 207 222 } 208 223 209 224 static const struct of_device_id bbnsm_dt_ids[] = { ··· 233 218 .of_match_table = bbnsm_dt_ids, 234 219 }, 235 220 .probe = bbnsm_rtc_probe, 221 + .remove = bbnsm_rtc_remove, 236 222 }; 237 223 module_platform_driver(bbnsm_rtc_driver); 238 224