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

rtc: nxp-bbnsm: Use resource managed API to simplify code

Use devm_pm_set_wake_irq and devm_device_init_wakeup to cleanup the
error handling code and 'driver.remove()' hook.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
Link: https://lore.kernel.org/r/20250205-rtc-cleanup-v1-2-66165678e089@nxp.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>

authored by

Peng Fan and committed by
Alexandre Belloni
6b296dee 04572d18

+9 -20
+9 -20
drivers/rtc/rtc-nxp-bbnsm.c
··· 189 189 /* clear all the pending events */ 190 190 regmap_write(bbnsm->regmap, BBNSM_EVENTS, 0x7A); 191 191 192 - device_init_wakeup(&pdev->dev, true); 193 - dev_pm_set_wake_irq(&pdev->dev, bbnsm->irq); 192 + ret = devm_device_init_wakeup(&pdev->dev); 193 + if (ret) 194 + dev_err(&pdev->dev, "failed to init wakeup, %d\n", ret); 195 + 196 + ret = devm_pm_set_wake_irq(&pdev->dev, bbnsm->irq); 197 + if (ret) 198 + dev_err(&pdev->dev, "failed to set wake irq, %d\n", ret); 194 199 195 200 ret = devm_request_irq(&pdev->dev, bbnsm->irq, bbnsm_rtc_irq_handler, 196 201 IRQF_SHARED, "rtc alarm", &pdev->dev); 197 202 if (ret) { 198 203 dev_err(&pdev->dev, "failed to request irq %d: %d\n", 199 204 bbnsm->irq, ret); 200 - goto err; 205 + return ret; 201 206 } 202 207 203 208 bbnsm->rtc->ops = &bbnsm_rtc_ops; 204 209 bbnsm->rtc->range_max = U32_MAX; 205 210 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); 211 + return devm_rtc_register_device(bbnsm->rtc); 222 212 } 223 213 224 214 static const struct of_device_id bbnsm_dt_ids[] = { ··· 223 233 .of_match_table = bbnsm_dt_ids, 224 234 }, 225 235 .probe = bbnsm_rtc_probe, 226 - .remove = bbnsm_rtc_remove, 227 236 }; 228 237 module_platform_driver(bbnsm_rtc_driver); 229 238