New financed postmarketOS project: q6voice(d)

May 08, 20265 min. read

Header image showing three windows with close-to-mainline kernels for sdm845, sdm670, and msm8953, with the original and amended patches. On top it says "mainline linux ftw"

As we have mentioned in the 2026 financial budget, we are able to follow up last year's success of financing important audio improvements in postmarketOS and the wider Linux Mobile ecosystem with another project this year!

This time we will tackle the currently unupstreamable q6voice patches that every kernel fork for Qualcomm devices has to carry in order to be able to do audio calls. This is one of the last pieces of technical debt that hold back most devices from using a pure mainline kernel without additional patches, which would in turn lower the maintenance burden significantly, make call audio more reliable and would make it easier for other Linux distributions to run on these devices as well.

The proof of concept

It was early 2020, not even three years had passed after postmarketOS was published, and most people reading this probably had not heard of the project yet. At that time, Minecrell and Nikita were very busy maintaining and bringing up the MSM8916 family of devices. In the process, they achieved a considerable milestone: they managed to get calls (!907) and call audio (!1228, !1233) working on mainline for devices released with Android. This, for the first time, allowed those devices to be used as actual phones!

Specifically for enabling call audio, Minecrell wrote two distinct pieces of software:

Although an extraordinary achievement, the implementation was considered a workaround by the authors. From the initial commit:

Eventually this should go away by implementing codec2codec support for q6voice in the kernel. In that case, the stream would be started once the audio routes are set up using ALSA UCM. However, this is a bit complicated actually so for now it's nice to have a workaround

However six years later, codec2codec has not been implemented yet and the workaround is still there. This is mostly a consequence of audio under Linux being a historically-neglected field, and that solving the problem requires considerable time and knowledge, that very few people have.

In addition to those challenges, and due to their usefulness, the q6voice patches are now present in many close-to-mainline kernels. Since those can't be upstreamed, every fork carries a slightly different version of the patches, and will need to keep carrying them until a proper solution can be found and sent upstream. This adds to the technical debt that the community carries as a whole.

Finding a proper solution

As Minecrell identified after he wrote the initial patches, the long-term solution is to implement "codec2codec" in the kernel. That would mean that the audio configuration could be done completely in ALSA, and audio routed directly from the modem to the speakers or the earpiece without user-space having to take care of anything else. This path is potentially also more power-efficient, since it's designed to provide long-lasting battery under calls.

We have, for a long while, tried to find somebody in the community knowledgeable and willing to take on the work to implement codec2codec upstream, with the end goal of getting rid of the patches and the user-space daemon. We have tried to find volunteers, offered to help people write a grant proposal and already offered to several individuals to directly pay them for the work. We have talked with people that modified the patches in their close-to-mainline kernels. We have talked with people that already worked with us on audio issues last year (we spent 6726€ in audio-projects supporting 2 community members). But were not able to find anybody with the time and will to dig into the problem, providing some basic warranties.

The remaining possibility was hiring Linaro, where Minecrell now works. So we decided to work with them to potentially help solve this issue. We understand that working with a big consultancy is not the ideal scenario for a project funded by individual donations. With that being said, we believe solving this specific technical challenge is critical for the long-term sustainability of our community and Linaro's track record of working in upstream Open Source projects gives us confidence.

The financed project

All in all, we are very happy how the Linaro team worked with us to accommodate our requirements and our idiosyncrasy as a grass-root community project. The project itself consists of rearchitecting and redesigning the initial set of patches into something that can potentially do codec2codec and not rely on userspace for voice calls. As any project of this size, together with Linaro, we will go through different steps in the re-design and implementation steps. Eventually, and if everything goes according to plan, manual integration testing including user-space components will be done, to ensure that the whole thing can make it upstream without additional patches in postmarketOS. If that also works, the kernel patches will make it to the kernel mailing list and at postmarketOS we will set up a plan for migrating current devices and deprecating and removing the q6voiced project.

If things work out as expected, this will allow many close-to-mainline kernels to drop a big series of patches in order to enable call audio, simplifying maintainership and getting them closer to mainline. It will also reduce the work to bring up call audio for currently unsupported devices: the patches won't need to be ported anymore, only the relevant hardware needs to be enabled. We also expect that if the driver lands upstream (which is of course not guaranteed, but likely) it will have gone through more eyes, and thus have improved in reliability and quality.

It is also important to note that the newest Qualcomm devices, starting around 2022 or 2023 (specifically using SM8350 or newer) use completely different audio logic, based on AudioReach and cannot use the q6voice patches. The work in this project there does not affect those newer devices, and is only relevant to older ones. Although unfortunate, we believe that investing into older devices that make up the majority of our community devices strongly aligns with our mission, and is thus the right thing to do.

We will be kicking-off the project in the next weeks, and provide further updates as the project moves forward.

If you would like to see postmarketOS continuing to pay for important development work, consider donating via our OpenCollective!

This blog post was written by Pablo. Header image by Pablo, Oliver.