I'm trying to use the ADV7513 interrupts for HPD, monitor sense and EDID to tell when I have a monitor connected and can read the EDID data. In order to do this I have my microcontroller monitor the HDMI_INT line from the chip (via an FPGA but that's transparent for our purposes).
In order to mask out interrupts I don't need I set the interrupt mask register 0x94 to 0xC0. This according to what I have read in the programmers manual should make it so only HPD and Monitor Sense interrupts are enabled.
When I plug in a monitor the interrupt line goes low and register 0x96 reads 0xC0 which indicates that the HPD and monitor interrupts fired. I read the value of the HPD pin from 0x42 as prescribed (because the interrupt fires when the pin goes low or high). I clear the interrupts by writing 0xC0 back to register 0x96. The interrupt line goes high as documented indicating the interrupt was cleared. I also update the mask to include the EDID ready bit so the new value of 0x94 is 0xC4. Finally I call a function that sets up the various timing parameters and the image comes up on my monitor as expected (this monitor happens to work without me reading the EDID as I have the timing hardcoded to make it work).
The next time around the main while loop in the micro the interrupt line goes low again indicating another interrupt has fired. This time the register 0x96 reads 0x24. This is strange because I had masked out those bits by writing to 0x94 as indicated above. I read back the value of 0x94 in case it got reset since HPD was low but it correctly reads back 0xC4.
So any ideas why I'm still getting interrupts on the "masked" bits of 0x96?