Steam Deck

Steam Deck

papa_oogway Nov 21, 2023 @ 1:14am
Bluetooth enhancement: LE audio and LC3 codec
Considering the new bluetooth chip supports 5.3, is it reasonable to suspect that support for LE audio and the LC3 codec is on the horizon? The LC3 codec's latency is supposedly in the neighborhood of 20-30ms, a full order of magnitude better than the status quo.

Yes, AptX LL has acceptable latency and is supported by the deck, but Qualcomm has pushed in favor of AptX Adaptive, which is apparently difficult to reverse engineer [1] so we may not see Linux support any time soon. I don't anticipate many more AptX LL headphones will be made, unless perhaps they have this Steam Deck market gap in mind.

Looking at [2], it seems like things are relatively early on the software side, requiring a 6.4 kernel, pipewire built with a special flag, and the lc3 codec installed. I don't see "cis-central cis-peripheral" in the output of "bgmgmt info", but that could be due to the older 6.1 kernel.

Do we know if the new FC66E-B chip has hardware support for LE audio?

[1] https://github.com/Arkq/openaptx/issues/8
[2] https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/LE-Audio-+-LC3-support
Last edited by papa_oogway; Nov 21, 2023 @ 1:18am
< >
Showing 1-15 of 17 comments
Rodomar705 Nov 21, 2023 @ 2:37am 
Don't hold your breath on it. Bluetooth audio stack on linux is extremely messy, even worse than windows. Base support in the bluetooth audio stack should be already in, but I never had it working in the past.
Fio Dec 2, 2023 @ 7:56pm 
I would like to bump this. I own a bunch of noise cancelling earbuds that support LE LC3 audio, but can't do aptx.

Would be nice to have LE support. Especially since LE LC3 seems to be what's going to be standard moving forward, not aptx ll.
Fio Dec 11, 2023 @ 10:11am 
Apparently, Pipewire has had updates to support and bring improvements to LC3.

It's mostly a matter of Valve rebasing SteamOS with a more recent version of Pipewire.

For now I've settled on a pair of Sony Inzone Buds which come with a dongle. It's nice but takes up the only usb c port. They also support LC3.

I've tried shopping around for aptx low latency earbuds with ANC. It seems to be on its way out and if any support, it seems to be for adaptive aptx which the Deck doesn't deal well with.

I tried looking online for a splitter so I can charge and connect the dongle at the same time. But for the most part I've found Reddit threads where Deck owners flame OP for daring to not use the 3.5mm jack.
papa_oogway Dec 12, 2023 @ 3:52pm 
Originally posted by Fiorin:
Apparently, Pipewire has had updates to support and bring improvements to LC3.

It's mostly a matter of Valve rebasing SteamOS with a more recent version of Pipewire.

For now I've settled on a pair of Sony Inzone Buds which come with a dongle. It's nice but takes up the only usb c port. They also support LC3.

I've tried shopping around for aptx low latency earbuds with ANC. It seems to be on its way out and if any support, it seems to be for adaptive aptx which the Deck doesn't deal well with.

I tried looking online for a splitter so I can charge and connect the dongle at the same time. But for the most part I've found Reddit threads where Deck owners flame OP for daring to not use the 3.5mm jack.

Nice! That's good news. Thanks for the update. I personally got a pair of Sony xm5 earbuds. Do you have any insight on whether the Bluetooth chipset in the deck can support LE audio?
Fio Dec 12, 2023 @ 6:21pm 
Originally posted by papa_oogway:
Originally posted by Fiorin:
Apparently, Pipewire has had updates to support and bring improvements to LC3.

It's mostly a matter of Valve rebasing SteamOS with a more recent version of Pipewire.

For now I've settled on a pair of Sony Inzone Buds which come with a dongle. It's nice but takes up the only usb c port. They also support LC3.

I've tried shopping around for aptx low latency earbuds with ANC. It seems to be on its way out and if any support, it seems to be for adaptive aptx which the Deck doesn't deal well with.

I tried looking online for a splitter so I can charge and connect the dongle at the same time. But for the most part I've found Reddit threads where Deck owners flame OP for daring to not use the 3.5mm jack.

Nice! That's good news. Thanks for the update. I personally got a pair of Sony xm5 earbuds. Do you have any insight on whether the Bluetooth chipset in the deck can support LE audio?

The Deck OLED has a bluetooth 5.3 chip. By default that means it can support LE Audio and LC3 which require Bluetooth 5.2.

The problem is that Pipewire needs to be updated to use LC3. The Deck is using a version of Pipewire from more than a year ago (0.3.62). Pipewire 1.0 was released late last month. LC3 seems to work fine on one of my Linux machines with Pipewire 1.0 and a 5.3 BT.

I could attempt to get it working on my own, but SteamOS is based on an older version of ArchLinux and I might break things.

By default, SteamOS is locked to readonly, I could disable that to try updating Pipewire through pacman. Then whenever SteamOS has an update, it would just overwrite whatever I did.
Last edited by Fio; Dec 12, 2023 @ 6:32pm
bao Apr 19, 2024 @ 5:06am 
Originally posted by Fiorin:
Originally posted by papa_oogway:
I could attempt to get it working on my own, but SteamOS is based on an older version of ArchLinux and I might break things.

By default, SteamOS is locked to readonly, I could disable that to try updating Pipewire through pacman. Then whenever SteamOS has an update, it would just overwrite whatever I did.
Were you successful in doing this?
papa_oogway May 2, 2024 @ 1:11pm 
Originally posted by bao:
Originally posted by Fiorin:
Were you successful in doing this?
I was not successful, unfortunately. My memory is a little fuzzy now but IIRC the newer pipewire mostly worked but LC3 didn't appear as a supported option for the chip. I'm personally hoping that steamos 3.6 will update the kernel and pipewire.
bao May 11, 2024 @ 3:57am 
With the newest 3.6.0 preview update, Valve has re-based SteamOS on a newer version of Arch Linux, and updated KDE Plasma to 5.27.10. Along with it, Pipewire was updated to version 1.0.3 - you can check this by running this command in the terminal:
pactl info

Additionally, the changelogs for the update include
"Enabled support for Bluetooth A2DP and BAP profiles"
and LC3 is part of the BAP profile, yet I own LC3 capable earbuds, and I do not see it as an available codec in the audio output device settings in desktop mode, only the same old ones prior to the update. Would adding LC3 support manually be possible somehow now?

Originally posted by Fiorin:
LC3 seems to work fine on one of my Linux machines with Pipewire 1.0 and a 5.3 BT.
Did you need to do anything extra for LC3 to work on your other Linux machine?
Last edited by bao; May 11, 2024 @ 8:10am
pie Jul 29, 2024 @ 7:34pm 
BAP/LC3 on the steamdeck might be working now. I dont have compatible headphones to test though.

Adding a config file to ~/.config/wireplumber/bluetooth.lua.d/61-bluez-jupiter.lua should enable it on pipewire, overwriting the default wireplumber config for your user.

bluez_monitor.properties = { -- use array values from below and then uncomment. -- ["bluez5.roles"] = "[ a2dp_sink a2dp_source bap_sink bap_source hfp_hf hfp_ag]", ["bluez5.hfphsp-backend"] = "native", }

Note the bap sink addition. You can see the file this will overwrite the config of /usr/share/wireplumber/bluetooth.lua.d/60-bluez-jupiter.lua

Restarting should enable it. If it causes issues, delete the file and restart again. Check the wireplumber config docs, and arch wiki for bluetooth for more info.

edit: steam is messing with the formatting.
a2dp_sink a2dp_source bap_sink bap_source hfp_hf hfp_ag
should be in the roles array above
Last edited by pie; Jul 29, 2024 @ 7:44pm
bao Aug 13, 2024 @ 11:35am 
Originally posted by pie:
Note the bap sink addition. You can see the file this will overwrite the config of /usr/share/wireplumber/bluetooth.lua.d/60-bluez-jupiter.lua

I don't see a folder named bluetooth.lua.d in that directory. Are you sure that gets overwritten?
bao Aug 13, 2024 @ 11:58am 
Originally posted by pie:
BAP/LC3 on the steamdeck might be working now. I dont have compatible headphones to test though.

Adding a config file to ~/.config/wireplumber/bluetooth.lua.d/61-bluez-jupiter.lua should enable it on pipewire, overwriting the default wireplumber config for your user.

I've tried creating the file in the directory as you've instructed, with the provided roles in the array, however it doesn't seem to do anything. The same 3 codecs are visible as before: SBC, SBC-XQ and AAC, no option for LC3. I'm using the OnePlus Buds Pro 2, which support LC3, so I'm not sure if the .lua file just isn't doing what it's supposed to, or if LC3 support simply isn't possible on SteamOS yet.
pie Aug 15, 2024 @ 5:40am 
Sorry, I might be doing more harm than help. And it might require more tinkering/experimentation than you want. Like I said, I do not have lc3 headphones to test... In case of issues, just delete ~/.config/wireplumber/ entirely.

Firstly, no, the file will not exist by default. You will need to create it. On start, Wireplumber automatically looks in this directory, reads any file in here (if it exists), and then will merge this into its own configuration. Since the file has the number 61, it has higher priority over valve's /usr/share/wireplumber/bluetooth.lua.d/60-bluez-jupiter.lua file. ( https://wiki.archlinux.org/title/WirePlumber#Configuration_file_layout ). Rebooting is the easiest way to have wireplumber reread the config files.

Secondly, if the file is actually being read, you should have the ability to also use your headphones as a headset unit with the low quality hfp profile (steam deck by default disables it in the above config, but
["bluez5.hfphsp-backend"] = "native"
enables it).

Also if actually works you would probably have seen the error from
journalctl -x |grep bap
Aug 15 05:23:34 steamdeck bluetoothd[20674]: profiles/audio/bap.c:bap_init() D-Bus experimental not enabled Aug 15 05:23:34 steamdeck bluetoothd[20674]: src/plugin.c:plugin_init() Failed to init bap plugin

To fix that error, it looks like you need to add dbus experimental support to bluez. https://www.reddit.com/r/kde/comments/vmrj80/ive_been_trying_to_enable_the_experimental/
That fixed the error for me. I guess it added a battery percentage to the headphones selector which is nice.
Last edited by pie; Aug 15, 2024 @ 5:48am
pie Aug 15, 2024 @ 5:57am 
Originally posted by bao:
Originally posted by pie:
BAP/LC3 on the steamdeck might be working now. I dont have compatible headphones to test though.

Adding a config file to ~/.config/wireplumber/bluetooth.lua.d/61-bluez-jupiter.lua should enable it on pipewire, overwriting the default wireplumber config for your user.

I've tried creating the file in the directory as you've instructed, with the provided roles in the array, however it doesn't seem to do anything. The same 3 codecs are visible as before: SBC, SBC-XQ and AAC, no option for LC3. I'm using the OnePlus Buds Pro 2, which support LC3, so I'm not sure if the .lua file just isn't doing what it's supposed to, or if LC3 support simply isn't possible on SteamOS yet.


I realize you are on the preview, which i am not using. Im not sure if it has a version of wireplumber that doesnt support lua config. https://pipewire.pages.freedesktop.org/wireplumber/daemon/configuration/conf_file.html#the-configuration-file

I'd suggest checking what valve is doing in their /usr/share/wireplumber/ directory and then creating a similar .conf file somewhere here(https://pipewire.pages.freedesktop.org/wireplumber/daemon/locations.html#config-locations)

Then make sure dbus-exerimental is enabled.
RazorBlade446 Oct 2, 2024 @ 3:17pm 
Please note lua is no more supported for Wireplumber config, use .conf instead.
kler1k.tr Oct 30, 2024 @ 7:03am 
Someone has any luck with LC3 on 3.6.19?
Found Readme file in /etc/wireplumber/ which says
This configuration was: - installed in /run/wireplumber - by /usr/share/wireplumber/hardware-profiles/wireplumber-hwconfig - from /usr/share/wireplumber/hardware-profiles/valve-galileo It will be regenerated every time the system restarts. To alter it permanently either: - edit /usr/share/wireplumber/hardware-profiles/valve-galileo - override in $XDG_CONFIG_DIR/wireplumber/

/usr/share/wireplumber/hardware-profiles/valve-galileo is read-only, and echo $XDG_CONFIG_DIR says nothing, so this var is not maintained i guess. But echo $XDG_CONFIG_DIRS shows some result:
/home/deck/.config/kdedefaults:/etc/xdg

So I tried to place bluez.conf file to /home/deck/.config/kdedefaults/wireplumber/wireplumber.conf.d/ (/etc/xdg in read only) with content (without single quota mark in bluez5.roles - just added it to make list visible here)
monitor.bluez.properties = { bluez5.roles = "[' a2dp_sink a2dp_source bap_sink bap_source hfp_hf hfp_ag ]" bluez5.hfphsp-backend = "native" }
and nothing changes on audio settings for my earbuds after reboot (no bap options in th list - just A2DP/HSP/HFP options).

$XDG_CONFIG_DIRS/wireplumber also specified in WirePlumber’s docs[pipewire.pages.freedesktop.org] so can't understand why it is not working.

Also added to /etc/bluetooth/main.conf some lines in general sections
Experimental = true Testing = true KernelExperimental = 6fbaf188-05e0-496a-9885-d6ddfdb4e03e

Also bluetoothctl info for my earbuds says that it has LE support
(deck@steamdeck ~)$ bluetoothctl info Device 48:73:CB:62:2F:FF (public) Name: Redmi Buds 5 Pro Gaming Alias: Redmi Buds 5 Pro Gaming Class: 0x00244404 Icon: audio-headset Paired: yes Bonded: yes Trusted: yes Blocked: no Connected: yes LegacyPairing: no UUID: Vendor specific (00000000-0000-0000-0099-aabbccddeeff) UUID: Vendor specific (00000000-deca-fade-deca-deafdecacaff) UUID: Audio Sink (0000110b-0000-1000-8000-00805f9b34fb) UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb) UUID: A/V Remote Control (0000110e-0000-1000-8000-00805f9b34fb) UUID: Handsfree (0000111e-0000-1000-8000-00805f9b34fb) UUID: PnP Information (00001200-0000-1000-8000-00805f9b34fb) UUID: Audio Input Control (00001843-0000-1000-8000-00805f9b34fb) UUID: Volume Control (00001844-0000-1000-8000-00805f9b34fb) UUID: Volume Offset Control (00001845-0000-1000-8000-00805f9b34fb) UUID: Coordinated Set Identif.. (00001846-0000-1000-8000-00805f9b34fb) UUID: Microphone Control (0000184d-0000-1000-8000-00805f9b34fb) UUID: Audio Stream Control (0000184e-0000-1000-8000-00805f9b34fb) UUID: Broadcast Audio Scan (0000184f-0000-1000-8000-00805f9b34fb) UUID: Published Audio Capabil.. (00001850-0000-1000-8000-00805f9b34fb) UUID: Unknown (00001853-0000-1000-8000-00805f9b34fb) UUID: Unknown (00001855-0000-1000-8000-00805f9b34fb) UUID: Unknown (0000fd2d-0000-1000-8000-00805f9b34fb) UUID: Vendor specific (0000ff01-0000-1000-8000-00805f9b34ff) Modalias: bluetooth:v0094p0004d0100 Battery Percentage: 0x64 (100)
Last edited by kler1k.tr; Oct 30, 2024 @ 7:07am
< >
Showing 1-15 of 17 comments
Per page: 1530 50