We have an iMX28 based platform running the Freescale 2.6.35 Yocto-based kernel and we are seeing a number of issues relating to suspend and resume on this platform. After some digging into the problem I have a basic question relating to the kernel support of suspend and resume.
The mxs platform code does not set the irq chip enable/disable functions and so the default ones are used. The default enable function calls the chip unmask function, the default disable does nothing. It seems unusual to have this asymmetric behavior and this has consequences that lead to some of the behavior we are seeing. The suspend_device_irqs function attempts to disable the interrupt but actually does not at the hardware level because of the null default disable function. However it does disable it at the kernel software level and so we get a mismatch.
The iMX28 mxs set_irq_wake function is a null function and does nothing and so wake up enable/disable do nothing on our platform. From reading up on this it seems that we could use the IRQF_NO_SUSPEND flag when requesting the interrupt. However this does not seem like the correct approach here. Using the set_irq_wake function seems to be the right thing to do but clearly this is not going to work.
It looks like there is incomplete support for suspend/resume on the iMX28 platform. Has anyone else experienced these kind of issues on this platform? Why is the default chip enable/disable function behavior asymmetric - this seems to be causing us a number of problems? Is there a different way to achieve the correct behavior?