[Samsung Galaxy Nexus] sishgupta:
I am opening this thread to talk about kernel Wakelocks. It's a branch of this discussion in the Franco's Kernel thread.

Hopefully we can research what a lot of these wakelocks are and find ways of minimizing them in order to increase the efficiency (and reduce power consumption) on our devices.

What is a Wakelock?

A wakelock is a software method for applications to control the power state of your device. The purpose of a wakelock is in its name, to lock your device in an awake state keeping the CPU running and preventing it from entering Deep Sleep (Think of a music app or video player). A wakelock can also cause your device to turn on (think syncs or notifications).

A poorly coded application can acquire a wakelock and not release it, causing your device to remain on.

A partial wakelock means the CPU is ON, but the screen is OFF.

A full wakelock means the CPU and Screen are ON. (we don't really need to worry about this)

Sources:

http://developer.android.com/reference/android/os/PowerManager.html

http://developer.android.com/reference/android/os/PowerManager.WakeLock.html

How to help:

Install BetterBatteryStats which will show you what the wakelocks are on your device.

If you don't know what a specific wakelock is doing. Google it. Don't just google the wakelock name verbatim. Use part of it. They are usually logically named. But most often they are shortened or turned into acronyms (there are so many in IT) which makes them cyptic.

Kernel wakelocks are low level/hardware wakelocks from the kernel. We can only reduce these by modifying the kernel or reducing the usage of a certain feature of the kernel. By researching these we can improve the battery consumption and performance of the Kernel.

Partial wakelocks are wakelocks from apps. These can be reduced by uninstalling or disabling features in software. We can talk about those here too though it shouldn't be the focus as the answer will be "Uninstall/Disable feature X and talk to the app author". Preferably we should talk about partial wakelocks from Google services like maps and latitude.

wlan_rx is wireless LAN receive. Turn off wifi.

musb_autosuspend_wake_lock im pretty sure is a kernel powermanagement method to turn off power to the micro usb port and have any attached devices be placed in a power suspend mode. Probably most useful for the USB OTG support on this port.

alarm_rtc is Real-time clock alarm. It isn't the alarm to wake you up, tho it could be used by that. It's more like a scheduler on your phone, to make sure it is not sleeping when an application needs it. "AlarmManager is a universal process that MANY apps use to update time, push you notifications, etc. In most cases, it is a necessity; in other cases, you should really check it out and disable/uninstall things that have invoked it too much."

Sources:

http://developer.android.com/reference/android/app/AlarmManager.html

https://github.com/asksven/BetterBatteryStats-Knowledge-Base/wiki/AlarmManager

vbus_tuna_otg sounds like virtual bus for USB OTG devices. According to Franco this wakelock occurs when your "device [is] attached to the USB." From this I would take it to mean that if your GNex is attached to a computer via USB you will see this wakelock.

mipi_link stands for Mobile Industry Processor Interface but I am unsure of what this does specifically. From googling it it seems highly related to the cameras. Maybe its how we can see a live feed of the camera from the device.

Sources:

http://en.wikipedia.org/wiki/Mobile_Industry_Processor_Interface

PowerManagerService is the kernel wakelock that is a container for all of the partial wakelocks on the device.

Sources:

https://github.com/asksven/BetterBatteryStats-Knowledge-Base/wiki/PowerManagerService

AudioOut_1 AudioOut is used to play notification and system sounds. Putting your device on silent will make this go away.

Sources:

https://github.com/asksven/BetterBatteryStats-Knowledge-Base/wiki/AudioOut_1

Revisions:

2012.01.24 - Added "what is a wakelock" section

2012.01.24 - Initial Post