MPW X3 Bluetooth Headphones not working with HSP/HFP Profile

Hi,

I am having an issue using my MPOW X3 bluetooth headphones with HSP/HFP profile. The bluetooth headphones work correctly in A2DP profile (output only). Connection, disconnection, pairing, and audio playback are pretty flawless with this profile. However, when I go to the KDE Audio Settings and switch the profile to HSP/HFP to use for recording/voice calls, I no longer receive audio playback and the mic doesn’t work.

I see that it’s recognized as an input in the audio settings.

However, as soon as the profile is switched. I stop hearing audio output. In addition, trying to record my audio with audio-recorder program (it’s in the repos) with headset as input doesn’t work as here is no sound being recorded.

I think that the the capability is there for the bluetooth device according to this command:


**[redacted]:~**$ pactl info 
Server String: /run/user/1000/pulse/native 
Library Protocol Version: 35 
Server Protocol Version: 35 
Is Local: yes 
Client Index: 74 
Tile Size: 65472 
User Name: ishaat 
Host Name: ishaat-t480 
Server Name: PulseAudio (on PipeWire 0.3.34) 
Server Version: 15.0.0 
Default Sample Specification: float32le 2ch 48000Hz 
Default Channel Map: front-left,front-right 
Default Sink: bluez_output.F8_8A_3C_31_CB_EF.headset-head-unit 
Default Source: bluez_input.F8_8A_3C_31_CB_EF.headset-head-unit 
Cookie: aff3:0f4c


[redacted]:~$ pactl list
...]
[FONT=monospace]Card #61 
        Name: bluez_card.F8_8A_3C_31_CB_EF 
        Driver: module-bluez5-device.c 
        Owner Module: n/a 
        Properties: 
                device.api = "bluez5" 
                device.bus = "bluetooth" 
                media.class = "Audio/Device" 
                device.name = "bluez_card.F8_8A_3C_31_CB_EF" 
                device.description = "Mpow X3" 
                device.alias = "Mpow X3" 
                device.form_factor = "headset" 
                device.string = "F8:8A:3C:31:CB:EF" 
                api.bluez5.icon = "audio-card" 
                api.bluez5.path = "/org/bluez/hci0/dev_F8_8A_3C_31_CB_EF" 
                api.bluez5.address = "F8:8A:3C:31:CB:EF" 
                api.bluez5.device = "" 
                api.bluez5.class = "0x2c0404" 
                api.bluez5.connection = "connected" 
                device.icon_name = "audio-headset-bluetooth" 
                bluez5.msbc-support = "true" 
                factory.id = "14" 
                client.id = "31" 
                object.id = "61" 
        Profiles: 
                off: Off (sinks: 0, sources: 0, priority: 0, available: yes) 
                a2dp-sink: High Fidelity Playback (A2DP Sink) (sinks: 1, sources: 0, priority: 0, available: yes) 
                **headset-head-unit: Headset Head Unit (HSP/HFP) (sinks: 1, sources: 1, priority: 0, available: yes)** 
                a2dp-sink-sbc: High Fidelity Playback (A2DP Sink, codec SBC) (sinks: 1, sources: 0, priority: 0, available: yes) 
                a2dp-sink-sbc_xq: High Fidelity Playback (A2DP Sink, codec SBC-XQ) (sinks: 1, sources: 0, priority: 0, available: yes) 
                a2dp-sink-aac: High Fidelity Playback (A2DP Sink, codec AAC) (sinks: 1, sources: 0, priority: 0, available: yes) 
                **headset-head-unit-cvsd: Headset Head Unit (HSP/HFP, codec CVSD) (sinks: 1, sources: 1, priority: 0, available: yes)** 
        Active Profile: headset-head-unit-cvsd 
        Ports: 
                headset-input: Headset (type: Headset, priority: 0, latency offset: 0 usec, available) 
                        Properties: 
                                port.type = "headset" 
                        Part of profile(s): headset-head-unit, headset-head-unit-cvsd 
                headset-output: Headset (type: Headset, priority: 0, latency offset: 0 usec, available) 
                        Properties: 
                                port.type = "headset" 
                        Part of profile(s): a2dp-sink, headset-head-unit, a2dp-sink-sbc, a2dp-sink-sbc_xq, a2dp-sink-aac, headset-head-unit-cvsd[/FONT]

Another interesting I noticed is that after disconnecting the bluetooth headphones with the HSP/HFP profile, I can no longer reconnect them again. I see this notification in KDE “Mpow X3 (F8:8A:3C:31:CB:EF) The device is unreachable”.

When I disconnected, I didn’t hear any feedback from the headphones themselves that it disconnected (usually I would hear “connected”/“disconnected”/“pairing” from the headphones, this feedback is present when using A2DP profile).

Connecting via bluetooth will no longer work unless I power the headhphones off by putting them back into case, and then re-connecting them. They will reconnect and pair just fine but I’ll be back to using A2DP profile.

This issue is reproducible for me using both PulseAudio and PipeWire. But I would prefer to get this working under PipeWire if possible since I prefer PipeWire to PulseAudio for my use cases. Since this issue is reproducible under both, I suspect this is a driver/hardware issue not a software issue.

Full system specs:


[redacted]:~$ inxi -F
System:    Host: [redacted] Kernel: 5.13.13-1-default x86_64 bits: 64 Desktop: KDE Plasma 5.22.4 
           Distro: openSUSE Tumbleweed 20210902 
Machine:   Type: Laptop System: LENOVO product: 20L5CTO1WW v: ThinkPad T480 serial: <superuser required> 
           Mobo: LENOVO model: 20L5CTO1WW v: SDK0J40697 WIN serial: <superuser required> UEFI: LENOVO v: N24ET61W (1.36 ) 
           date: 10/13/2020 
Battery:   ID-1: BAT0 charge: 14.3 Wh (97.9%) condition: 14.6/23.9 Wh (60.9%) 
           ID-2: BAT1 charge: 59.0 Wh (100.0%) condition: 59.0/71.1 Wh (82.9%) 
CPU:       Info: Quad Core model: Intel Core i5-8250U bits: 64 type: MT MCP cache: L2: 6 MiB 
           Speed: 800 MHz min/max: 400/3400 MHz Core speeds (MHz): 1: 800 2: 800 3: 800 4: 800 5: 796 6: 800 7: 800 8: 800 
Graphics:  Device-1: Intel UHD Graphics 620 driver: i915 v: kernel 
           Device-2: Acer Integrated IR Camera type: USB driver: uvcvideo 
           Device-3: Acer SunplusIT Integrated Camera type: USB driver: uvcvideo 
           Display: x11 server: X.org 1.20.13 driver: loaded: modesetting unloaded: fbdev,vesa resolution: <missing: xdpyinfo> 
           OpenGL: renderer: Mesa Intel UHD Graphics 620 (KBL GT2) v: 4.6 Mesa 21.2.0 
Audio:     Device-1: Intel Sunrise Point-LP HD Audio driver: snd_hda_intel 
           Sound Server-1: ALSA v: k5.13.13-1-default running: yes 
           Sound Server-2: PipeWire v: 0.3.34 running: yes 
Network:   Device-1: Intel Ethernet I219-V driver: e1000e 
           IF: enp0s31f6 state: down mac: 98:fa:9b:0f:e7:ba 
           Device-2: Intel Wireless 8265 / 8275 driver: iwlwifi 
           IF: wlp3s0 state: up mac: a0:51:0b:0c:13:db 
           IF-ID-1: br-32ec3baddb64 state: up speed: 10000 Mbps duplex: unknown mac: 02:42:66:a9:23:3b 
           IF-ID-2: docker0 state: down mac: 02:42:d0:09:81:16 
           IF-ID-3: vetha93a953 state: up speed: 10000 Mbps duplex: full mac: 2e:07:82:1a:a2:be 
           IF-ID-4: vetha96a637 state: up speed: 10000 Mbps duplex: full mac: 9a:4f:23:9f:6a:a4 
Bluetooth: Device-1: Intel Bluetooth wireless interface type: USB driver: btusb 
           Report: This feature requires one of these tools: hciconfig/bt-adapter 
Drives:    Local Storage: total: 953.87 GiB used: 100.17 GiB (10.5%) 
           ID-1: /dev/nvme0n1 vendor: HP model: SSD EX920 1TB size: 953.87 GiB 
Partition: ID-1: / size: 922.25 GiB used: 100.15 GiB (10.9%) fs: btrfs dev: /dev/dm-2 
           ID-2: /boot/efi size: 511 MiB used: 17.1 MiB (3.3%) fs: vfat dev: /dev/nvme0n1p1 
           ID-3: /home size: 922.25 GiB used: 100.15 GiB (10.9%) fs: btrfs dev: /dev/dm-2 
           ID-4: /opt size: 922.25 GiB used: 100.15 GiB (10.9%) fs: btrfs dev: /dev/dm-2 
           ID-5: /var size: 922.25 GiB used: 100.15 GiB (10.9%) fs: btrfs dev: /dev/dm-2 
Swap:      ID-1: swap-1 type: partition size: 31.11 GiB used: 0 KiB (0.0%) dev: /dev/dm-1 
Sensors:   System Temperatures: cpu: 49.0 C mobo: N/A 
           Fan Speeds (RPM): fan-1: 0 
Info:      Processes: 722 Uptime: 12h 43m Memory: 31.11 GiB used: 8.6 GiB (27.6%) Shell: Bash inxi: 3.3.03

This is the tumbleweed snapshot I’m using:


**[redacted]**:**~**$ zypper lr 
Repository priorities in effect:                                                                                                                                                                          (See 'zypper lr -P' for details) 
      90 (raised priority)  :  1 repository 
      99 (default priority) :  9 repositories 

#  | Alias                            | Name                                  | Enabled | GPG Check | Refresh 
---+----------------------------------+---------------------------------------+---------+-----------+-------- 
...]
 6 | openSUSE-20210901-0              | openSUSE-20210901-0                   | Yes     | (r ) Yes  | Yes 
...]


Does anyone have any suggestions for further troubleshooting?