static int xlnx_rtc_remove(struct platform_device *pdev) { xlnx_rtc_alarm_irq_enable(&pdev->dev, 0); device_init_wakeup(&pdev->dev, 0); return 0; }
static int __maybe_unused xlnx_rtc_resume(struct device *dev) { struct platform_device *pdev = to_platform_device(dev); struct xlnx_rtc_dev *xrtcdev = platform_get_drvdata(pdev); if (device_may_wakeup(&pdev->dev)) disable_irq_wake(xrtcdev->alarm_irq); else xlnx_rtc_alarm_irq_enable(dev, 1); return 0; }
static int __maybe_unused xlnx_rtc_suspend(struct device *dev) { struct platform_device *pdev = to_platform_device(dev); struct xlnx_rtc_dev *xrtcdev = platform_get_drvdata(pdev); if (device_may_wakeup(&pdev->dev)) { enable_irq_wake(xrtcdev->alarm_irq); } else { xlnx_rtc_alarm_irq_enable(dev, 0); } return 0; }
static int xlnx_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) { struct xlnx_rtc_dev *xrtcdev = dev_get_drvdata(dev); unsigned long alarm_time; rtc_tm_to_time(&alrm->time, &alarm_time); writel((u32) alarm_time, (xrtcdev->reg_base + RTC_ALRM)); xlnx_rtc_alarm_irq_enable(dev, alrm->enabled); return 0; }