update 24/4: Apparently everything is broken on ubuntu 21.04 because of kernel options. someone helpfully posted instructions on recompiling your kernel here: https://blog.fts.scot/2020/07/04/dell-xps-2020-how-to-get-audio-working-on-linux/#comment-356 – it should actually be possible to make a dkms module for this that can be installed in the same way as below, if anyone feels up for it i’ll post a link.
update 16/12: Linux 5.10 has these drivers available out the box, the arch and manjaro repos now have the required config options enabled by default so the easiest thing to do would be up to date on your packages. minimum versions listed below
Recently took delivery of a Dell XPS 17 9700 to replace my “workhorse laptop”, of course intending to use Linux as the only operating system. Before doing anything at all I reformatted the disk and installed Manjaro before realising that the audio drivers are not yet in the mainline Linux kernel nor is the audio device really supported by any of the stable releases from the wider audio ecosystem (specifically alsa or pulse).
Long story short, before starting, you should understand that you’ll be running the very latest kernel, compiling a module for it and setting your package manager to use unstable repos, and still having to copy in files anyway, and there are risks associated with that. So if you feel like you can wait until Pulseaudio 14 and Linux 5.10 come out – I would recommend that!
(update 5/7: If you’re wanting to stay on Ubuntu 20.04 I have been informed by someone at Canonical that you can
apt install linux-oem-20.04 and the drivers should work (i.e. you’ll see lots of devices in alsamixer) without doing the DKMS steps, which is good, but you will still require to get the latest alsa, pulseaudio and ucm yourself to make it all work.)
I have been able to get this working on Manjaro with Linux 5.7, 5.8 and 5.9 with the following other software:
- pulseaudio-alsa 1.2.2
- pulseaudio 13.99
- alsa 1.2.3 including alsa-ucm-conf 1.2.3
- sof-firmware 1.5.1 or 1.6
To build the driver on 5.7:
git clone https://github.com/maaarghk/soundwire-dkms sudo mv soundwire-dkms /usr/src/soundwire-1.3.0 sudo dkms add soundwire/1.3.0 sudo dkms build soundwire/1.3.0 sudo dkms install soundwire/1.3.0
This is based on this Ubuntu package, which has patches with the Dell XPS hardware IDs added on top of the driver from here. It previously targeted 5.0 so I applied some patches for higher kernel versions than that.
To build the driver on 5.8 or 5.9:
git clone https://github.com/maaarghk/soundwire-dkms git checkout latest-sofproject sudo mv soundwire-dkms /usr/src/soundwire-1.4.0 sudo dkms add soundwire/1.4.0 sudo dkms build soundwire/1.4.0 sudo dkms install soundwire/1.4.0
This driver comes directly from Intel’s thesofproject repo with the only patches being related to dkms and old kernel configs.
Once the driver is built it is worth rebooting and checking alsamixer to see if you have more than 6 outputs – maybe need to press f6 to switch to sof-soundwire – there should be faders for Headphones / Speaker and not just HDMI ports. If you only have HDMI ports something has gone wrong,
dmesg | grep 'snd\|soc\|sof'.
If you have an error about symbol version disagreements, probably your kernel has an old sof driver which should be disabled by creating
/etc/modprobe.d/no-builtin-soundwire.conf with the contents
Anyway, that’s not the whole story, alsa also needs ucm files to know how to interact with the driver. Those are not even merged into unstable alsa-ucm-conf yet so the following changes are liable to break / require repeating at some stage. Price you pay for living on the edge, it’s just like the olden days of Linux.
git clone https://github.com/thesofproject/alsa-ucm-conf sudo cp -r alsa-ucm-conf/ucm2/sof-soundwire /usr/share/alsa/ucm2 sudo cp -r alsa-ucm-conf/ucm2/codecs/rt5682 alsa-ucm-conf/ucm2/codecs/rt700 alsa-ucm-conf/ucm2/codecs/rt711 alsa-ucm-conf/ucm2/codecs/rt715 /usr/share/alsa/ucm2/codecs alsaucm open sof-soundwire alsaucm reload
Here’s hoping the exasperated sounding lead dev on this repo successfully completes a code review without popping a vein and these changes make it upstream sooner rather than later!
Using pulseaudio-git you may find that pulseaudio does not start up automatically, the solution to that is simple:
systemctl --user enable pulseaudio
Cheers to reddit user /u/yoyoyomama1 who gave me many clues by answering a barrage of messages asking for conf files off his system. I would have been unlikely to work this out without that help.
p.s. Whilst I’m here, brief review of the laptop – very good. Feels really solid, haven’t had any of the QC issues mentioned by anyone else. The 4k screen is really nice, and I have been very impressed by the battery life – for example I started working on this about 6 hours ago and it has involved several code compilations and many restarts, and my battery life is still above 30%. It helps that the screen is so bright that I can run it at 10% brightness and still feel like it is burning my eyes.