Bluetooth issues with Nintendo Switch Pro Controller

Hello everyone!

I bought two Nintendo Switch Pro Controllers a while back with the intention to use them on Steam. At that time I was running 5.15.16-1-MANJARO (I think) and I got everything working somehow with Joycond and hid-nintendo. I got a bit psyched when I just a few weeks later read about Kernel 5.16 will add support for the Nintendo Pro Switch Controller. As soon as the release for 5.16 was available (Earlier today) I upgraded with the hopes of working Controllers without any extra drivers or services.

Both controllers work but they are behaving somewhat wierd:

  • I can pair both controllers, but only one at the time. I can’t pair both of them. Before pairing the other controller I have to remove the pairing of the first controller.
  • I can never reconnect the controllers after disconnecting. I.e. I have to re-pair every time I want to use them.

When I try to set both controller via the KDE Settings for Bluetooth, the first one pairs within 1-2 seconds. When I try to pair the second one, it takes substantially longer and I always end up with a “The setup of Pro Controller has failed”. If I try to use bluetoothctl from the commandline and I run the command connect without anything else paired everything looks good:

connect 80:D2:E5:9A:AE:CA
Attempting to connect to 80:D2:E5:9A:AE:CA
[CHG] Device 80:D2:E5:9A:AE:CA Connected: yes
[CHG] Device 80:D2:E5:9A:AE:CA Modalias: usb:v057Ep2009d0001
[CHG] Device 80:D2:E5:9A:AE:CA UUIDs: 00001000-0000-1000-8000-00805f9b34fb
[CHG] Device 80:D2:E5:9A:AE:CA UUIDs: 00001124-0000-1000-8000-00805f9b34fb
[CHG] Device 80:D2:E5:9A:AE:CA UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Device 80:D2:E5:9A:AE:CA ServicesResolved: yes
[CHG] Device 80:D2:E5:9A:AE:CA WakeAllowed: yes
[CHG] Device 80:D2:E5:9A:AE:CA Paired: yes
Connection successful

But if I try to connect when I have the other controller paired I get something like this:

connect 80:D2:E5:9A:AE:CA
Attempting to connect to 80:D2:E5:9A:AE:CA
[CHG] Device 80:D2:E5:9A:AE:CA Connected: yes
[CHG] Device 80:D2:E5:9A:AE:CA Modalias: usb:v057Ep2009d0001
[CHG] Device 80:D2:E5:9A:AE:CA UUIDs: 00001000-0000-1000-8000-00805f9b34fb
[CHG] Device 80:D2:E5:9A:AE:CA UUIDs: 00001124-0000-1000-8000-00805f9b34fb
[CHG] Device 80:D2:E5:9A:AE:CA UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Device 80:D2:E5:9A:AE:CA ServicesResolved: yes
[CHG] Device 80:D2:E5:9A:AE:CA WakeAllowed: yes
[CHG] Device 80:D2:E5:9A:AE:CA Paired: yes
Failed to connect: org.bluez.Error.Failed br-connection-create-socket
[CHG] Device 80:D2:E5:9A:AE:CA ServicesResolved: no
[CHG] Device 80:D2:E5:9A:AE:CA Paired: no
[CHG] Device 80:D2:E5:9A:AE:CA Connected: no
[CHG] Device 80:D2:E5:9A:AE:CA RSSI: -76
[CHG] Device 80:D2:E5:9A:AE:CA RSSI: -66
[CHG] Device 80:D2:E5:9A:AE:CA RSSI: -74

Regarding the second issue, it might be related, because it seems to be a connection issue. Whenever I try reconnect, the following is visible in bluetoothctl and occurs within less than 1 second in between:

[CHG] Device 80:D2:E5:9A:AE:CA Connected: yes
[CHG] Device 80:D2:E5:9A:AE:CA Connected: no

Can anyone here help out with figuring this out or point me in the right direction?

Is this a known limitation I have missed (Nintendo wierdness due to reverse engineered driver)? Is it a problem with Bluez or my Bluetooth module? I’m not a beginner with Linux, but still not traversed enough to trouble-shoot this. Any help is very appreciated.

$ bluetoothctl --version
bluetoothctl: 5.63
System:
  Kernel: 5.16.2-1-MANJARO x86_64 bits: 64 compiler: gcc v: 11.1.0
    parameters: BOOT_IMAGE=/boot/vmlinuz-5.16-x86_64
    root=UUID=34939eed-ad71-4161-853b-e6ba05c1cf92 rw quiet apparmor=1
    security=apparmor udev.log_priority=3
  Console: pty pts/1 wm: kwin_x11 DM: SDDM Distro: Manjaro Linux
    base: Arch Linux
Machine:
  Type: Desktop System: ASUS product: N/A v: N/A serial: N/A
  Mobo: ASUSTeK model: ROG STRIX X470-I GAMING v: Rev 1.xx serial: <filter>
    UEFI: American Megatrends v: 4301 date: 03/04/2021
Battery:
  Device-1: hidpp_battery_0 model: Logitech Wireless Keyboard ERGO K860
    serial: <filter> charge: 55% (should be ignored) rechargeable: yes
    status: Discharging
CPU:
  Info: model: AMD Ryzen 7 3700X socket: AM4 bits: 64 type: MT MCP arch: Zen 2
    family: 0x17 (23) model-id: 0x71 (113) stepping: 0 microcode: 0x8701021
  Topology: cpus: 1x cores: 8 tpc: 2 threads: 16 smt: enabled cache:
    L1: 512 KiB desc: d-8x32 KiB; i-8x32 KiB L2: 4 MiB desc: 8x512 KiB
    L3: 32 MiB desc: 2x16 MiB
  Speed (MHz): avg: 2375 high: 3600 min/max: 2200/4426 boost: enabled
    base/boost: 3600/4400 scaling: driver: acpi-cpufreq governor: schedutil
    volts: 1.1 V ext-clock: 100 MHz cores: 1: 2200 2: 2200 3: 2200 4: 2200
    5: 3600 6: 2200 7: 2200 8: 2200 9: 2200 10: 2200 11: 2200 12: 2200
    13: 2200 14: 2200 15: 2200 16: 3600 bogomips: 115027
  Flags: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3 svm
  Vulnerabilities:
  Type: itlb_multihit status: Not affected
  Type: l1tf status: Not affected
  Type: mds status: Not affected
  Type: meltdown status: Not affected
  Type: spec_store_bypass
    mitigation: Speculative Store Bypass disabled via prctl
  Type: spectre_v1
    mitigation: usercopy/swapgs barriers and __user pointer sanitization
  Type: spectre_v2 mitigation: Full AMD retpoline, IBPB: conditional, STIBP:
    conditional, RSB filling
  Type: srbds status: Not affected
  Type: tsx_async_abort status: Not affected
Graphics:
  Device-1: AMD Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT]
    driver: amdgpu v: kernel bus-ID: 0b:00.0 chip-ID: 1002:731f class-ID: 0300
  Device-2: Trust USB Camera type: USB driver: snd-usb-audio,uvcvideo
    bus-ID: 1-1:2 chip-ID: 145f:0203 class-ID: 0102 serial: <filter>
  Display: server: X.Org 1.21.1.3 compositor: kwin_x11 driver:
    loaded: amdgpu,ati unloaded: modesetting,radeon alternate: fbdev,vesa
    display-ID: :0 screens: 1
  Screen-1: 0 s-res: 2560x1440 s-dpi: 96 s-size: 677x381mm (26.7x15.0")
    s-diag: 777mm (30.6")
  Monitor-1: DisplayPort-0 res: 2560x1440 hz: 60 dpi: 93
    size: 697x392mm (27.4x15.4") diag: 800mm (31.5")
  Message: Unable to show advanced data. Required tool glxinfo missing.
Audio:
  Device-1: AMD Navi 10 HDMI Audio driver: snd_hda_intel v: kernel
    bus-ID: 0b:00.1 chip-ID: 1002:ab38 class-ID: 0403
  Device-2: AMD Starship/Matisse HD Audio vendor: ASUSTeK
    driver: snd_hda_intel v: kernel bus-ID: 0d:00.4 chip-ID: 1022:1487
    class-ID: 0403
  Device-3: Trust USB Camera type: USB driver: snd-usb-audio,uvcvideo
    bus-ID: 1-1:2 chip-ID: 145f:0203 class-ID: 0102 serial: <filter>
  Device-4: SteelSeries ApS SteelSeries Arctis 7 type: USB
    driver: hid-generic,snd-usb-audio,usbhid bus-ID: 3-4:4 chip-ID: 1038:12ad
    class-ID: 0300
  Sound Server-1: ALSA v: k5.16.2-1-MANJARO running: yes
  Sound Server-2: JACK v: 1.9.20 running: no
  Sound Server-3: PulseAudio v: 15.0 running: yes
  Sound Server-4: PipeWire v: 0.3.43 running: yes
Network:
  Device-1: Intel I211 Gigabit Network vendor: ASUSTeK driver: igb v: kernel
    port: d000 bus-ID: 04:00.0 chip-ID: 8086:1539 class-ID: 0200
  IF: enp4s0 state: up speed: 100 Mbps duplex: full mac: <filter>
  Device-2: Realtek RTL8822BE 802.11a/b/g/n/ac WiFi adapter vendor: ASUSTeK
    driver: rtw_8822be v: N/A modules: rtw88_8822be port: c000 bus-ID: 05:00.0
    chip-ID: 10ec:b822 class-ID: 0280
  IF: wlp5s0 state: down mac: <filter>
Bluetooth:
  Device-1: ASUSTek Bluetooth Radio type: USB driver: btusb v: 0.8
    bus-ID: 1-12:4 chip-ID: 0b05:185c class-ID: e001 serial: <filter>
  Report: rfkill ID: hci0 rfk-id: 1 state: up address: see --recommends
Drives:
  Local Storage: total: 2.52 TiB used: 247.21 GiB (9.6%)
  ID-1: /dev/nvme0n1 maj-min: 259:0 vendor: Samsung model: SSD 970 PRO 512GB
    size: 476.94 GiB block-size: physical: 512 B logical: 512 B speed: 31.6 Gb/s
    lanes: 4 type: SSD serial: <filter> rev: 1B2QEXP7 temp: 41.9 C scheme: GPT
  SMART: yes health: PASSED on: 291d 1h cycles: 2,393
    read-units: 38,896,377 [19.9 TB] written-units: 53,291,823 [27.2 TB]
  ID-2: /dev/sda maj-min: 8:0 vendor: Samsung model: SSD 850 PRO 256GB
    family: based SSDs size: 238.47 GiB block-size: physical: 512 B
    logical: 512 B sata: 3.1 speed: 6.0 Gb/s type: SSD serial: <filter>
    rev: 4B6Q temp: 34 C scheme: MBR
  SMART: yes state: enabled health: PASSED on: 2y 2d 3h cycles: 1780
    written: 17.35 TiB
  ID-3: /dev/sdb maj-min: 8:16 vendor: Seagate model: ST2000DX001-1CM164
    family: Desktop SSHD size: 1.82 TiB block-size: physical: 4096 B
    logical: 512 B sata: 3.1 speed: 6.0 Gb/s type: HDD rpm: 7200
    serial: <filter> rev: CC43 temp: 38 C scheme: MBR
  SMART: yes state: enabled health: PASSED on: 1y 265d 7h cycles: 1242
    read: 46.38 TiB written: 4.94 TiB Pre-Fail: attribute: Spin_Retry_Count
    value: 100 worst: 100 threshold: 97
Partition:
  ID-1: / raw-size: 49.12 GiB size: 48.05 GiB (97.82%) used: 32.53 GiB (67.7%)
    fs: ext4 block-size: 4096 B dev: /dev/nvme0n1p8 maj-min: 259:7
  ID-2: /boot/efi raw-size: 100 MiB size: 96 MiB (96.00%)
    used: 31.6 MiB (32.9%) fs: vfat block-size: 512 B dev: /dev/nvme0n1p1
    maj-min: 259:1
  ID-3: /home raw-size: 200.75 GiB size: 196.6 GiB (97.93%)
    used: 65.12 GiB (33.1%) fs: ext4 block-size: 4096 B dev: /dev/nvme0n1p6
    maj-min: 259:5
Swap:
  Kernel: swappiness: 60 (default) cache-pressure: 100 (default)
  ID-1: swap-1 type: partition size: 3.81 GiB used: 13.2 MiB (0.3%)
    priority: -2 dev: /dev/nvme0n1p7 maj-min: 259:6
Sensors:
  System Temperatures: cpu: N/A mobo: N/A gpu: amdgpu temp: 35.0 C mem: 40.0 C
  Fan Speeds (RPM): N/A gpu: amdgpu fan: 65535
Info:
  Processes: 382 Uptime: 37m wakeups: 2 Memory: 15.59 GiB
  used: 3.68 GiB (23.6%) Init: systemd v: 250 tool: systemctl Compilers:
  gcc: 11.1.0 clang: 13.0.0 Packages: 1640 pacman: 1618 lib: 469 flatpak: 22
  Shell: Zsh (sudo) v: 5.8 default: Bash v: 5.1.16 running-in: yakuake
  inxi: 3.3.12