Invensense Sensors data - Speeding it up

During the last month I've been digging around sensors in Android devices namely (nexus 4, nexus 7, nexus 7 and galaxy nexus). Basically it was all nexus family because they are the ones that it's more easy access and to change the source code (AOSP source code and also kernel).
It was the first time that I had the opportunity to compile a kernel and to dig a little bit at that level (a little bit far away from the most common software devs).
From all the facts that we gathered, there is one that let me stay a little bit astonished! Can you believe that the galaxy nexus compass gives you (java app developers) half of the values as copies!! That means that when you register the the Sensor TYPE_MAGNETIC_FIELD half of the values that you will receive are copies, so, these copies are not real values captured from the sensor. Ok, if you are using the sensor just to check if the gravity value remains 9,8, that's not problematic at all, but in case you want to use the sensor for reading an external magnetic field induced by a third party service, that's another story..
Another thing also really confusing, is the way that the invensense mpu kernel driver works. Seems that there is a FIFO implemented in software, but we didn't realize yet how it is implemented and if the logic is implemented by the FIFO manager, if the timeouts are preserved by the FIFO or if it's something that relies on the hardware interruptions, etc. So, seems that this story has yet many chapters to reach the END and it's been a good time digging around this subject and I'm really enjoying "the adventure".

See you again when I have more details about the subject..
El Doc