Perhaps this could be better answered over in the kernel forum? My
understanding is that you must chain your wakelocks together from the
hardware interrupt all the way up to the app layer to ensure the
device does not go to sleep. Basically at each point the lower layer
is holding one as it hands off the data, and then it's up to the upper
layer to grab one. In some cases I think timeouts are used instead,
though, which can be risky. If you want to figure out why it's not
waking up, the best way may be to start at the hardware/kernel and
work your way up; including verifying that the bus your device is on
is capable of waking the host from deep sleep in the first place.