Process "irq/288-wcd9xxx" draining battery, how to stop it?
irq looks something about hardware interrupts and wcd9xxx is a series of Qualcomm Aqstic audio codecs. So apparently irq/288-wcd9xxx process is running to support audio functionality on your device. The executable must be closed source binary blob, so there's nothing you can do to fix it, except (if already fixed by somebody, or) upgrading / downgrading the ROM or stopping the service.


  As kill or kill -9 has absolutely no effect on it (it seems to work when running the command, but the process is still there afterwards), does anyone have any idea about what it is, and how to kill it, or stop it?


The process must be running as a native service defined by hardware / SoC vendor in some init's .rc file. So it will keep on restarting if killed. In order to properly stop the service you need to find its name. First get executable path from PID and then find service by searching through all .rc files:

~# grep -rI $(readlink /proc/$(pgrep -f irq/288-wcd9xxx)/exe) /*/etc/init/ /init.*.rc


You can confirm the same service name by looking at running status in getprop | grep init.svc. command. To stop the service use any of these commands:

~# stop &lt;service_name&gt;
~# setprop ctl.stop &lt;service_name&gt;


This needs to be repeated on every reboot. Or you may edit the related .rc file to remove the service.

If it results in something not working, another possibility is to try controlling its CPU usage by applying some limitation e.g. cgroups (if kernel supports).

EDIT:

I just noticed that a file name cannot have a slash (/). So irq/288-wcd9xxx must be a kernel thread for interrupt handling. It's not evident but you can check its parent PID (ppid must be 2) and also no memory allocation (0K) indicates that it's not a userspace process. So the problem is with your audio hardware or in-kernel driver (see this answer). In latter case again an updated kernel from OEM would fix the problem.

A workaround can be to control CPU usage of real-time process using chrt: chrt -r -p 1 $(pgrep -f irq/288-wcd9xxx) or chrt -f -p 1 $(pgrep -f irq/288-wcd9xxx) or renice or cgroups (if kernel supports): cpu or cpuset.