Bluetooth Lag with PlayStation 5 Controller over Bluetooth

I’ll preface this with the controller works perfectly fine over USB, without ever hitting issues.

With the preface, over Bluetooth, the controller does not work well. It connects, I can use the touchpad as a mouse, I can go through the Controller Test in steam, for some time. Eventually, it does seem to crash though. I have enabled the kernel module for “hid_playstation”, I’m on Kernel 6.13.4, which should be pretty close to latest… And again, everything works when plugged into USB. Which leads me to believe this may be a Bluetooth issue.

For bluetooth troubleshooting, I’ve restarted Bluetooth with the debug flag: sudo /usr/lib/bluetooth/bluetoothd -n -d, from the Arch Wiki. And I do get some interesting logs from bluetoothd. It appears that hte lag only happens during “hidp_send_output()” function calls.

Log Snippet:

bluetoothd[14979]: profiles/input/device.c:hidp_send_output() 
bluetoothd[14979]: profiles/input/device.c:hidp_send_output() 
bluetoothd[14979]: profiles/input/device.c:hidp_send_output() 
bluetoothd[14979]: profiles/input/device.c:hidp_send_output() 
bluetoothd[14979]: profiles/input/device.c:hidp_send_output() 
bluetoothd[14979]: profiles/input/device.c:hidp_send_output() 
bluetoothd[14979]: profiles/input/device.c:hidp_send_output() 
bluetoothd[14979]: profiles/input/device.c:hidp_send_output() 
bluetoothd[14979]: profiles/input/device.c:hidp_send_output() 
bluetoothd[14979]: profiles/input/device.c:hidp_send_output() 
bluetoothd[14979]: profiles/input/device.c:hidp_send_output() 
bluetoothd[14979]: profiles/input/device.c:hidp_send_output() 
bluetoothd[14979]: profiles/input/device.c:hidp_send_output() 
bluetoothd[14979]: profiles/input/device.c:hidp_send_output() 
bluetoothd[14979]: profiles/input/device.c:hidp_send_output() 
bluetoothd[14979]: profiles/input/device.c:uhid_send_input_report() HID report (78 bytes)
bluetoothd[14979]: profiles/input/device.c:hidp_send_output() 
bluetoothd[14979]: profiles/input/device.c:hidp_send_message() BT socket write error: Resource temporarily unavailable (11)
bluetoothd[14979]: profiles/input/device.c:uhid_send_input_report() HID report (78 bytes) dropped
bluetoothd[14979]: profiles/input/device.c:uhid_send_input_report() HID report (78 bytes) dropped
bluetoothd[14979]: profiles/input/device.c:uhid_send_input_report() HID report (78 bytes) dropped
bluetoothd[14979]: profiles/input/device.c:uhid_send_input_report() HID report (78 bytes) dropped
bluetoothd[14979]: profiles/input/device.c:uhid_send_input_report() HID report (78 bytes) dropped
bluetoothd[14979]: profiles/input/device.c:uhid_send_input_report() HID report (78 bytes) dropped
bluetoothd[14979]: profiles/input/device.c:uhid_send_input_report() HID report (78 bytes) dropped
bluetoothd[14979]: profiles/input/device.c:uhid_send_input_report() HID report (78 bytes) dropped
bluetoothd[14979]: profiles/input/device.c:uhid_send_input_report() HID report (78 bytes) dropped
bluetoothd[14979]: profiles/input/device.c:uhid_send_input_report() HID report (78 bytes) dropped
bluetoothd[14979]: profiles/input/device.c:uhid_send_input_report() HID report (78 bytes) dropped
bluetoothd[14979]: profiles/input/device.c:uhid_send_input_report() HID report (78 bytes) dropped

So those calls will happen intermittently, and when they do, all input basically stops. There aren’t necessarily any errors when this is happening, just a ton of lag. Interestingly enough, while I was writing this, I got so many of those function calls, that the connection apparently lagged out, and I got a disconnect, as shown in the snippet above. After that disconnect, it does appear to reconnect, but not longer functions and requires a hard disconnect and reconnect through bluetoothctl. I’ll note that I can see the lag in Steam Controller Calibration while this is happening. Also once the disconnect happens, Steam no longer detects the device.

Any thoughts here? I’m not really getting any error logs, and not sure where else to look.

Editing to add some more info.

bluetooth controller info

[PS5 Controller]# show
Controller 34:2E:B7:81:7D:96 (public)
        Manufacturer: 0x0002 (2)
        Version: 0x0b (11)
        Name: steven-endeavour
        Alias: steven-endeavour
        Class: 0x006c0104 (7078148)
        Powered: yes
        PowerState: on
        Discoverable: no
        DiscoverableTimeout: 0x000000b4 (180)
        Pairable: yes
        UUID: A/V Remote Control        (0000110e-0000-1000-8000-00805f9b34fb)
        UUID: Handsfree Audio Gateway   (0000111f-0000-1000-8000-00805f9b34fb)
        UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
        UUID: Audio Sink                (0000110b-0000-1000-8000-00805f9b34fb)
        UUID: Audio Source              (0000110a-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
        UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
        UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
        UUID: Device Information        (0000180a-0000-1000-8000-00805f9b34fb)
        UUID: Vendor specific           (03b80e5a-ede8-4b33-a751-6ce34ec4c700)
        UUID: Handsfree                 (0000111e-0000-1000-8000-00805f9b34fb)
        Modalias: usb:v1D6Bp0246d054F
        Discovering: no
        Roles: central
        Roles: peripheral
Advertising Features:
        ActiveInstances: 0x00 (0)
        SupportedInstances: 0x0c (12)
        SupportedIncludes: tx-power
        SupportedIncludes: appearance
        SupportedIncludes: local-name
        SupportedSecondaryChannels: 1M
        SupportedSecondaryChannels: 2M
        SupportedCapabilities.MinTxPower: 0xffffffde (-34)
        SupportedCapabilities.MaxTxPower: 0x0007 (7)
        SupportedCapabilities.MaxAdvLen: 0xfb (251)
        SupportedCapabilities.MaxScnRspLen: 0xfb (251)
        SupportedFeatures: CanSetTxPower
        SupportedFeatures: HardwareOffload

Likely a hardware issue, maybe compatibility between Linux and the onboard Bluetooth controller. I bought a USB Bluetooth device, and no longer see any issues.