I'm not gonna go into too much detail, but the offending implementation can be found in com/android/internal/telephony/LgeFDHandlerInterfaceImpl . This class is in /system/framework/com.lge.core.jar . After data activity on HSPA networks they use AlarmManager to periodically wake up and check the number of bytes transmitted over the network interface. This goes on until some time after it stops changing, and the connection is considered dormant.
This periodic checking is what's waking the device, and for every new byte transferred the wakeup/polling period is extended and device doesn't sleep. The chattier apps are, the more awake time you'll get.
Enough of the boring details, here's how I disabled it and got rid of the com.android.phone wakeups. Root required.
$ adb shell # su # sqlite3 /data/data/com.android.providers.telephony/databases/telephony.db update dcm_settings set fastdormancy="0" where numeric="310410"; .quit # reboot
I've written a quick and dirty app that tries to handle this setting without need for terminals or root. Try it and report issues here: http://forum.xda-developers.com/show....php?t=2021248
In essence you need to change a value in a sqlite database and there are many ways to do it. There are apps, use adb shell etc. Whatever works for you. If someone wants to write an app that makes this easier, be my guest
Reversal is restoring the original value "1,0,0,1000,5000,60000,3000,5000,1,8" and reboot:
update dcm_settings set fastdormancy="1,0,0,1000,5000,60000,3000,5000,1,8" where numeric="310410";
<profile> <siminfo operator="ATT" country="US" mcc="310" mnc="410" extraid="" /> <settings fastdormancy_param="1,0,0,1000,5000,60000,3000,5000,1,8" ipmtu="1410" /> </profile>