> In KSZ9031, Register MII_KSZPHY_INTCS=0x1B reports all interrupt events and > clear on read. So if there are 4 different interrupts, once it is read once, all 4 clear at once. > The micrel.c driver has defined ack_interrupt to read the above reg and is called every time the > interrupt handler phy_interrupt is called. So in this case, we should be good. > The code flow in our case would look like this: > - 2 interrupt sources (for example, link down followed by link up) set in MII_KSZPHY_INTCS > - interrupt handler (phy_interrupt) reads MII_KSZPHY_INT which automatically clears both > interrupts > - another internal source triggers and sets the register. > - The second edge will be caught accordingly by the GPIO. I still think there is a small race window. You product manager needs to decide if that is acceptable, or if you should poll the PHY. Anyway, it is clear the hardware only does level interrupts, so the GPIO driver should only accept level interrupts. -EINVAL otherwise. I also assume you have a ACPI blob which indicates what sort of interrupts that should be used, level low, falling edge etc. Since that is outside of the kernel, i will never know what you decide to put there. Ideally, until the hardware is fixed, you should not list any interrupt and fallback to polling. Andrew