The latest entry into Google’s Nexus lineup, the LG Nexus 4 has been off to blazing start. Although Google (or maybe LG) screwed up the whole shipping process by delaying orders for several weeks, the phone has been receiving great response from users for its excellent user experience of Android 4.2 Jelly Bean and a solid physical build.
However, every phone has some shortcomings and in Nexus 4’s case, it’s the battery life. Although the phone carries a decently big 2100mAh battery, the phone struggles to run for long when using mobile data and the phone’s modem driver is to be blamed here.
Assuming that you own a Nexus 4 (since you’re reading this post), you will notice that the Android OS (or Android System) process present in your battery usage page (Settings > Battery) usually amounts for a fairly high amount of battery usage even when you’re not using the phone (like overnight) with mobile data turned on.
What’s Exactly Causing it
This problem is basically related to a process that shows up as “msm_hsic_wakelock” in BetterBatteryStats, an app that shows battery usage and wakelocks in a very detailed manner. While searching the internet for a solution, I learned that this process is used by Android for any kind of activity related to mobile data. For example, when the Gmail app in your phone requires data connectivity for syncing your emails, this process gets called, waking up the device from sleep.
The real problem in Nexus 4, however, is that some bug in the modem’s driver doesn’t allow the phone to return to sleep mode after being woken up. This way, the Nexus 4 fails to go into deep sleep mode for saving power.
Solution to Nexus 4 Android OS Battery Drain Caused by the msm_hsic_wakelock Process
A driver-level problem like this can only be solved by Qualcomm, which is the manufacturer of Nexus 4’s chipset. While the company is yet to deliver an official update, Qualcomm has already started sharing the details for patching this bug with various developers for testing purpose.
One such developer is Francisco Franco who has incorporated the patch in his kernel for Nexus 4. Until the phone receives an official update, you can flash the custom kernel to solve your Nexus 4’s severe battery drain problem caused by the msm_hsic_wakelock process.
Note: Before you proceed, please note that flashing a custom recovery requires your Nexus 4’s bootloader to be unlocked. Here’s a detailed guide for doing so:
I’ve been using the kernel (franco) for a day and I can confirm that the excessive wakelocks caused by the msm_hsic_wakelock process have been minimized to a large extent.
Update: So it seems like Harsh, a well known developer at XDA, was the first to implement this patch in his kernel. After using his kernel for more than three days, I think it’s pretty safe to say that his kernel performs considerably better than franco’s in terms of reduced wakelocks as well as CPU performance.
Wait! What is a Kernel?
Think of the kernel as an interface layer between the hardware and software on your device. The kernel decides when things happen, such as the LED indicator gets lit. An application sends a request to the operating system to blink the LED. The operating system then sends the request to the kernel, which makes the light flash for the amount of time requested by the OS.
For a detailed explanation, please refer to this excellent article over at AndroidCentral.