mirror of
https://github.com/torvalds/linux.git
synced 2026-06-08 14:42:37 +02:00
Bluetooth: Keep master role when SCO or eSCO is active
This improves compatbility with a lot of headset / chipset combinations. Ideally this should not be needed. Change-Id: I8b676701e12e416aa7d60801b9d353b15d102709 Signed-off-by: hyungseoung.yoo <hyungseoung.yoo@samsung.com> Signed-off-by: Jaikumar Ganesh <jaikumarg@android.com>
This commit is contained in:
parent
9d187300df
commit
dbb18fb2c1
12
net/bluetooth/hci_event.c
Normal file → Executable file
12
net/bluetooth/hci_event.c
Normal file → Executable file
|
|
@ -1462,6 +1462,15 @@ static inline void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *s
|
|||
hci_conn_check_pending(hdev);
|
||||
}
|
||||
|
||||
static inline bool is_sco_active(struct hci_dev *hdev)
|
||||
{
|
||||
if (hci_conn_hash_lookup_state(hdev, SCO_LINK, BT_CONNECTED) ||
|
||||
(hci_conn_hash_lookup_state(hdev, ESCO_LINK,
|
||||
BT_CONNECTED)))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
|
||||
{
|
||||
struct hci_ev_conn_request *ev = (void *) skb->data;
|
||||
|
|
@ -1505,7 +1514,8 @@ static inline void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *sk
|
|||
|
||||
bacpy(&cp.bdaddr, &ev->bdaddr);
|
||||
|
||||
if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
|
||||
if (lmp_rswitch_capable(hdev) && ((mask & HCI_LM_MASTER)
|
||||
|| is_sco_active(hdev)))
|
||||
cp.role = 0x00; /* Become master */
|
||||
else
|
||||
cp.role = 0x01; /* Remain slave */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user