SlackwareThis Forum is for the discussion of Slackware Linux.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
I'm running Slackware current on a Thinkpad X1 Carbon Gen 8 (aka X1C8).
The only way I've been able to get the speakers + microphone working is with a 5.8 kernel and the SOF firmware. The 5.8 kernel code appears to force SOF firmware for this particular machine, so I guess there's a known issue that requires it (?). The speakers work fine with the stock 5.4 kernel, but not the microphone.
The 5.4 kernel that ships with slackware current has support for SOF, but I haven't been able to get it to work. It looks like it may require an old version of SOF that's no longer available from the SOF project's githubg repo (but that's just a guess).
Questions:
Is anyone else running Slackware on a Thinkpad X1C8? (Or X1C7, or X1 Yoga 4/5 -- all of which have very similar hardware, I think.)
Does anyone know how to get the SOF firmware running with the stock 5.4 kernel?
Are there any plans to add the SOF firmware into Slackware current?
I know nothing about your particular hardware, but I was thinking about getting one of those for some time, so, thanks for the heads-up.
The newest devices sometimes need the most recent kernel, and there is no way around it. I think Slackware ships a stock kernel and stock firmware only, but you can easily compile your own based on the official Slack config files.
Yup, I used to always build my own kernels, but I mostly stopped doing it several years ago. Actually my previous laptop also required a custom kernel build (for the wifi in that case). I was hoping to avoid that by switching from Slackware 14.2 to Slackware current, but nope.
Just to be clear, the 5.8.7 and 5.8.9 kernels work fine on this laptop. But I also had to install the SOF firmware.
I was hoping to get the SOF firmware working with the 5.4 kernel. Then I'd be able to use the Slackware kernel, and I'd just need to install the firmware. But I haven't been able to get that working. I *think* 5.4 requires an older version of SOF, but I haven't been able to get it to work.
Maybe the best bet is to wait for the next LTS kernel (guessing 5.9 or 5.10). If it gets picked up in Slackware current, then I can try to get the SOF firmware included, too.
If you do pick up a new Thinkpad, and you have any trouble getting the audio running, feel free to ping me.
First, I have no idea if this will work for anything other than a Thinkpad X1C8. (Though it makes sense there would be other similar hardware out there.)
I've had success with the 5.8.7 and 5.8.9 kernels; I haven't tried anything else.
I installed version 1.5.1 of the SOF firmware, via:
To be honest, I'm not entirely sure what those lines do. Apparently the next release (14) of pulseaudio won't need any config changes.
Another tricky bit: after the first boot with the SOF firmware and drivers, you need to unmute the speakers. Run alsamixer, hit F6 and select "sof-hda-dsp", hit 'm' to unmute, and then increase the master volume to 100%. After that, you can use the regular pulseaudio volume control. Run 'alsactl store' to save the state, so you don't have to do this again.
The muting took me an embarrassing amount of time to notice, and it's not entirely obvious from the alsamixer interface, so I'll repeat: make sure you hit 'm' to unmute the sof-hda-dsp output.
I think the SOF firmware version is locked to the kernel SOF driver version. I.e., if your SOF firmware is newer than the kernel driver, things won't work. I'm not 100% sure on that, but you may want to try a more recent 5.8 kernel.
Well, I did manage to get my microphone working :-)
For future reference, this is an HP Elitebook 840 G6.
Audio hardware is Intel Corporation Cannon Point-LP High Definition Audio Controller (rev 11).
I already had the SOF firmware installed.
I compiled a 5.8.10 kernel and made these changes to the config to get it to work:
Code:
$ diff -y --suppress-common-lines /usr/src/linux-5.8.10/{.config.old,.config}
# CONFIG_SND_SOC_INTEL_SOF_WM8804_MACH is not set | CONFIG_SND_SOC_INTEL_SOF_WM8804_MACH=m
# CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH is not | CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH=m
# CONFIG_SND_SOC_INTEL_GLK_DA7219_MAX98357A_MACH is not set | CONFIG_SND_SOC_INTEL_GLK_DA7219_MAX98357A_MACH=m
# CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH is not set | CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH=m
# CONFIG_SND_SOC_INTEL_SOF_RT5682_MACH is not set | CONFIG_SND_SOC_INTEL_SOF_RT5682_MACH=m
# CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH is not set | CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
# CONFIG_SND_SOC_INTEL_CML_LP_DA7219_MAX98357A_MACH is not se | CONFIG_SND_SOC_INTEL_CML_LP_DA7219_MAX98357A_MACH=m
# CONFIG_SND_SOC_INTEL_SOF_CML_RT1011_RT5682_MACH is not set | CONFIG_SND_SOC_INTEL_SOF_CML_RT1011_RT5682_MACH=m
# CONFIG_SND_SOC_INTEL_EHL_RT5660_MACH is not set | CONFIG_SND_SOC_INTEL_SOF_DA7219_MAX98373_MACH=m
> CONFIG_SND_SOC_INTEL_EHL_RT5660_MACH=m
# CONFIG_SND_SOC_SOF_JASPERLAKE_SUPPORT is not set | CONFIG_SND_SOC_SOF_JASPERLAKE_SUPPORT=y
> CONFIG_SND_SOC_SOF_JASPERLAKE=m
# CONFIG_SND_SOC_PCM512x_I2C is not set | CONFIG_SND_SOC_PCM512x=m
> CONFIG_SND_SOC_PCM512x_I2C=m
> CONFIG_SND_SOC_RT1011=m
> CONFIG_SND_SOC_RT1015=m
> CONFIG_SND_SOC_RT5514=m
> CONFIG_SND_SOC_RT5514_SPI=m
# CONFIG_SND_SOC_WM8804_I2C is not set | CONFIG_SND_SOC_WM8804=m
> CONFIG_SND_SOC_WM8804_I2C=m
I also found that the speakers were muted as mentioned, although running `alsactl store' wasn't enough to unsure they were unmuted after a reboot, so I ended up appending `alsactl restore' to the /etc/rc.d/rc.local script.
Also, I didn't need to make any changes to the stock /etc/pulse/default.pa file, it worked regardless of whether I added the "load module..." lines or not.
Thanks @derekn13 for your advice, most appreciated!
I was in a similar situation with a Lenovo IdeaPad 5 (see e.g. here or here) and the recommendations in this thread were very useful to me, so thanks everybody!
But with the last few kernels (5.10.3 - 5.10.5) I had several problems, the most important being I couldn't put my notebook to sleep (it'd come back up immediately) and hibernation locked it up hard. And the mic never worked.
Yesterday I upgraded my kernel to 5.10.6 and I commented out "options snd_intel_dspcfg dsp_driver=1" from my /etc/modprobe.d/snd_intel_dspcfg.conf, and also commented out these 2 lines from /etc/pulse/default.pa:
The only thing I kept was my self-created sof-firmware-1.6.1 package (I should have posted it in this thread, sorry for that. It's here if you want to check it out)
This was to make a fresh start of debugging sound and stability issues on my system but to my great surprise everithing works!
Sleep, hibernate, the internal speakers, HDMI audio, even the mic!
Sometimes I see some ugly names in the GUI (like "sof-hdmi-audio" or some such instead of "HDMI audio output") but that's no biggie.
Anyway, I though I should let you guys know in case you can go back to using Slackware's defaults.
@richarson: great job with the SlackBuild, thanks for that :-)
I made a few changes, then had to make a few more as I must have broken it. Anyway I tried to simplify some of the variables; here are the diffs if you are interested:
sof-firmware.SlackBuild.diff
Code:
--- sof-firmware.SlackBuild.orig 2021-01-11 13:44:30.652992305 +1300
+++ sof-firmware.SlackBuild 2021-01-11 13:52:10.762970270 +1300
@@ -23,9 +23,7 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM="sof-firmware"
-SRCNAM="faa5bdc276651f3f8b7c77612fff770bd778987b"
-VERSION=${VERSION:-1.6.1}
-SRCVER="v1.6"
+VERSION=${VERSION:-v1.6.1}
BUILD=${BUILD:-1}
#TAG=${TAG:-_SBo}
TAG=${TAG:-_RJB}
@@ -64,7 +62,7 @@
cd $TMP
rm -rf $PRGNAM-$VERSION
mkdir -p $PRGNAM-${VERSION}
-tar xf $CWD/${SRCNAM}.tar.gz -C $PRGNAM-${VERSION} --strip-components=1
+tar xf $CWD/${VERSION}.tar.gz -C $PRGNAM-${VERSION} --strip-components=1
cd $PRGNAM-${VERSION}
chown -R root:root .
find -L . \
@@ -74,12 +72,12 @@
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
mkdir -p $PKG/lib/firmware/
-mv lib/firmware/intel/sof-tplg-${SRCVER} lib/firmware/intel/sof-tplg
+mv lib/firmware/intel/sof-tplg-${VERSION} lib/firmware/intel/sof-tplg
cp -a lib/firmware/intel/ $PKG/lib/firmware/
(cd $PKG/lib/firmware/intel/sof
-for i in ${SRCVER}/intel-signed/*.ri ${SRCVER}/*.ri; do
- f=${i%%-$SRCVER.ri}
+for i in ${VERSION}/intel-signed/*.ri ${VERSION}/*.ri; do
+ f=${i%%-$VERSION.ri}
f=${f##*/}
ln -s $i $f.ri
done
@@ -90,8 +88,8 @@
mkdir -p debug
cd debug
-for i in ../${SRCVER}/*.ldc; do
- f=${i%%-$SRCVER.ldc}
+for i in ../${VERSION}/*.ldc; do
+ f=${i%%-$VERSION.ldc}
f=${f##*/}
ln -s $i $f.ldc
done
@richarson: great job with the SlackBuild, thanks for that :-)
I made a few changes, then had to make a few more as I must have broken it. Anyway I tried to simplify some of the variables; here are the diffs if you are interested:
Cool mods, Loomx! I'll see to apply them in my repo, thanks
I never thought of downloading with the tag, it really simplifies the script.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.