On 11/04/24 14:44, Bastien Curutchet wrote:
However we should think very well about this modification since it could be the case where we have a device sending both assert and clear events but we wish to catch just the asserts... in this case we will get doubled asserts!
My understanding is that clear events are to be captured only when this
capture_clear boolean is set. If it is not set, the PPS_CAPTURECLEAR
flag is not added to pps_source_info->mode and get_irqf_trigger_flags()
will return only one edge flag (rising or falling depending on
assert-falling-edge DT property).
Yes. You are right.
By the way, I see that the capture_clear is never set since the legacy
platform data support has been dropped (commit ee89646619ba).
I see, but it can be re-enabled in the future... In this scenario, I think we should add a DT entry to enable this special behavior. Maybe we can also add a warning as below: >
static irqreturn_t pps_gpio_irq_handler(int irq, void *data)
{
...
if ((rising_edge && !info->assert_falling_edge) ||
(!rising_edge && info->assert_falling_edge))
pps_event(info->pps, &ts, PPS_CAPTUREASSERT, data);
else if (info->capture_clear &&
((rising_edge && info->assert_falling_edge) ||
(!rising_edge && !info->assert_falling_edge)))
pps_event(info->pps, &ts, PPS_CAPTURECLEAR, data);
else
dev_warn_ratelimited(dev, "no ASSERT or CAPTURE event? "
"Maybe you need support-tiny-assert-pulse?");
return IRQ_HANDLED;
}