Message ID | a680e819-74da-0c40-9812-9f4e748dc20b@gentoo.org |
---|---|
State | New |
Headers | show |
Series | Bluetooth: btusb: check conditions before enabling USB ALT 3 for WBS | expand |
On Wed, Aug 18, 2021 at 07:04:47PM -0400, Mike wrote: > From: Pauli Virtanen <pav@iki.fi> > Kernel Version 5.13 > > commit 55981d3541812234e687062926ff199c83f79a39 upstream. There is no such commit in Linus's tree :( > - new_alts = btusb_find_altsetting(data, 6) ? 6 : 1; > - /* Because mSBC frames do not need to be aligned to the > - * SCO packet boundary. If support the Alt 3, use the > - * Alt 3 for HCI payload >= 60 Bytes let air packet > - * data satisfy 60 bytes. > - */ > - if (new_alts == 1 && btusb_find_altsetting(data, 3)) > + if (btusb_find_altsetting(data, 6)) > + new_alts = 6; > + else if (btusb_find_altsetting(data, 3) && > + hdev->sco_mtu >= 72 && > + test_bit(BTUSB_USE_ALT3_FOR_WBS, &data->flags)) > new_alts = 3; Your patch is also corrupted and could not be applied :(
On 8/19/21 1:44 AM, Greg KH wrote: > On Wed, Aug 18, 2021 at 07:04:47PM -0400, Mike wrote: >> From: Pauli Virtanen <pav@iki.fi> >> Kernel Version 5.13 >> >> commit 55981d3541812234e687062926ff199c83f79a39 upstream. > > There is no such commit in Linus's tree :( > > >> - new_alts = btusb_find_altsetting(data, 6) ? 6 : 1; >> - /* Because mSBC frames do not need to be aligned to the >> - * SCO packet boundary. If support the Alt 3, use the >> - * Alt 3 for HCI payload >= 60 Bytes let air packet >> - * data satisfy 60 bytes. >> - */ >> - if (new_alts == 1 && btusb_find_altsetting(data, 3)) >> + if (btusb_find_altsetting(data, 6)) >> + new_alts = 6; >> + else if (btusb_find_altsetting(data, 3) && >> + hdev->sco_mtu >= 72 && >> + test_bit(BTUSB_USE_ALT3_FOR_WBS, &data->flags)) >> new_alts = 3; > > > Your patch is also corrupted and could not be applied :( > You're totally right, Greg. My apologies. Never work when you're tired. I'll resubmit when it makes Linus' tree unless the author does.
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index 488f110e17e27..2336f731dbc7e 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c @@ -528,6 +528,7 @@ static const struct dmi_system_id btusb_needs_reset_resume_table[] = { #define BTUSB_HW_RESET_ACTIVE 12 #define BTUSB_TX_WAIT_VND_EVT 13 #define BTUSB_WAKEUP_DISABLE 14 +#define BTUSB_USE_ALT3_FOR_WBS 15 struct btusb_data { struct hci_dev *hdev; @@ -1761,16 +1762,20 @@ static void btusb_work(struct work_struct *work) /* Bluetooth USB spec recommends alt 6 (63 bytes), but * many adapters do not support it. Alt 1 appears to * work for all adapters that do not have alt 6, and - * which work with WBS at all. + * which work with WBS at all. Some devices prefer + * alt 3 (HCI payload >= 60 Bytes let air packet + * data satisfy 60 bytes), requiring + * MTU >= 3 (packets) * 25 (size) - 3 (headers) = 72 + * see also Core spec 5, vol 4, B 2.1.1 & Table 2.1. */ - new_alts = btusb_find_altsetting(data, 6) ? 6 : 1; - /* Because mSBC frames do not need to be aligned to the - * SCO packet boundary. If support the Alt 3, use the - * Alt 3 for HCI payload >= 60 Bytes let air packet - * data satisfy 60 bytes. - */ - if (new_alts == 1 && btusb_find_altsetting(data, 3)) + if (btusb_find_altsetting(data, 6)) + new_alts = 6; + else if (btusb_find_altsetting(data, 3) && + hdev->sco_mtu >= 72 && + test_bit(BTUSB_USE_ALT3_FOR_WBS, &data->flags)) new_alts = 3; + else + new_alts = 1; } if (btusb_switch_alt_setting(hdev, new_alts) < 0) @@ -3882,6 +3887,7 @@ static int btusb_probe(struct usb_interface *intf, * (DEVICE_REMOTE_WAKEUP) */ set_bit(BTUSB_WAKEUP_DISABLE, &data->flags); + set_bit(BTUSB_USE_ALT3_FOR_WBS, &data->flags); } if (!reset)