adapter: add DisableDiscoveryOnConnect option for combo chip coexistence
PATCH 1/1 adapter: add DisableDiscoveryOnConnect option for combo chip coexistence
On systems with combo chips (shared Wi-Fi/Bluetooth antenna), background LE scanning for auto-connect devices competes with active connections, causing audio stuttering and Wi-Fi packet loss due to antenna multiplexing via Packet Traffic Arbitration (PTA).
Add a DisableDiscoveryOnConnect boolean option to the [General] section of main.conf. When enabled and an active connection exists, the option suppresses adding devices to the kernel auto-connect list in adapter_auto_connect_add() on kernels supporting KERNEL_CONN_CONTROL, and gates trigger_passive_scanning() on older kernels.
The option defaults to false to preserve existing behavior.
--- src/adapter.c | 24 ++++++++++++++++++++++++ src/btd.h | 2 ++ src/main.c | 4 ++++ src/main.conf | 6 ++++++ 4 files changed, 36 insertions(+)
src/adapter.c +24 -0
@@ -1594,6 +1594,18 @@ static void trigger_passive_scanning(struct btd_adapter *adapter)if (!adapter->connect_list)return ; +/* +* If the user has enabled DisableDiscoveryOnConnect, suppress +* passive scanning whenever there is at least one active connection. +* This prevents antenna multiplexing conflicts on combo chips where +* Wi-Fi and Bluetooth share the same 2.4 GHz radio, which causes +* audio drops and Wi-Fi packet loss during background scans. +*/ +if (btd_opts.disable_discovery_on_connect && adapter->connections) { +DBG ("suppress passive scan: active connection present" ); +return ; + } + adapter->passive_scan_timeout =timeout_add_seconds (CONN_SCAN_TIMEOUT , passive_scanning_timeout, adapter,NULL );
@@ -5717,6 +5729,18 @@ void adapter_auto_connect_add(struct btd_adapter *adapter,return ; } +/* +* If DisableDiscoveryOnConnect is enabled, suppress adding devices +* to the kernel auto-connect list while an active connection exists. +* On combo chips (shared Wi-Fi/Bluetooth antenna), the kernel's +* background scanning for auto-connect devices competes with active +* connections, causing audio drops and Wi-Fi packet loss. +*/ +if (btd_opts.disable_discovery_on_connect && adapter->connections) { +DBG ("suppress kernel auto-connect: active connection present" ); +return ; + } + bdaddr =device_get_address (device); bdaddr_type =btd_device_get_bdaddr_type (device);
src/btd.h +2 -0
@@ -144,6 +144,8 @@ struct btd_opts {bool experimental;bool testing;bool filter_discoverable; +bool disable_discovery_on_connect; +struct queue *kernel;uint16_t did_source;
src/main.c +4 -0
@@ -92,6 +92,7 @@ static const char *supported_options[] = {"KernelExperimental" ,"RemoteNameRequestRetryDelay" ,"FilterDiscoverable" , +"DisableDiscoveryOnConnect" , NULL };
@@ -1072,6 +1073,8 @@ static void parse_general(GKeyFile *config) 0, UINT32_MAX);parse_config_bool (config,"General" ,"FilterDiscoverable" , &btd_opts.filter_discoverable); +parse_config_bool (config,"General" ,"DisableDiscoveryOnConnect" , + &btd_opts.disable_discovery_on_connect); }static void parse_gatt_cache (GKeyFile *config)
@@ -1283,6 +1286,7 @@ static void init_defaults(void) btd_opts.name_request_retry_delay =DEFAULT_NAME_REQUEST_RETRY_DELAY ; btd_opts.secure_conn =SC_ON ; btd_opts.filter_discoverable = true; + btd_opts.disable_discovery_on_connect = false; btd_opts.defaults.num_entries =0 ; btd_opts.defaults.br.page_scan_type =0xFFFF ;
src/main.conf +6 -0
@@ -157,6 +157,12 @@ # some stacks) or when testing bad/unintended behavior. #FilterDiscoverable = true +# Disables background LE passive scanning when an active connection is +# established. Recommended for combo chips (shared Wi-Fi/Bluetooth antenna) +# to prevent audio stuttering and packet loss caused by antenna multiplexing. +# Defaults to false. +#DisableDiscoveryOnConnect = false + [BR] # The following values are used to load default adapter parameters for BR/EDR. # BlueZ loads the values into the kernel before the adapter is powered if the
Signature · 1 line
2.53.0
This is automated email and please do not reply to this email!
Dear submitter,
Thank you for submitting the patches to the linux bluetooth mailing list. This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=1082799
---Test result---
Test Summary:
CheckPatch PASS 0.50 seconds GitLint PASS 0.34 seconds BuildEll PASS 20.26 seconds BluezMake PASS 609.83 seconds MakeCheck PASS 19.27 seconds MakeDistcheck PASS 236.90 seconds CheckValgrind PASS 277.51 seconds CheckSmatch WARNING 322.18 seconds bluezmakeextell PASS 166.35 seconds IncrementalBuild PASS 595.91 seconds ScanBuild PASS 922.27 seconds
Details
##############################
Test: CheckSmatch - WARNING
Desc: Run smatch tool with source
Output:src/main.c: note: in included file (through src/device.h):
https://github.com/bluez/bluez/pull/2054
---
Regards,
Linux Bluetooth