Hi, Alexandre
I'm glad to receive your reply.
> I don't feel like these two macros make your code clearer, you should
> probably simply use 0 and 1 in the proper locations.
>
I will use 0/1 replace this macros.
> > +static irqreturn_t cv1800_rtc_irq_handler(int irq, void *dev_id)
> > +{
> > + struct rtc_device *rtc = dev_id;
> > +
> > + rtc_update_irq(rtc, 1, RTC_IRQF | RTC_AF);
>
> I'm pretty sure this would result in a crash...
Yes, it did happen. Because I inserted an incorrect pointer.
>
> > +
> > + return IRQ_HANDLED;
> > +}
> > +
> > + ret = devm_request_irq(&pdev->dev, rtc->irq, cv1800_rtc_irq_handler,
> > + IRQF_TRIGGER_HIGH, "alarm", &pdev->dev);
>
> ... you probably want to use rtc->rtc_dev here to fix this.
>
> This also means that you have to request the irq late, else you are open
> t a race condition anyway.
I am very sorry about this bug.
I will use rtc->rtc_dev to fix it and request irq after
devm_rtc_allocate_device.
Best regards
Jingbao Qiu