Message ID | b86543908684cc6cd9afaf4de10fac7af1a49665.camel@iki.fi |
---|---|
State | Superseded |
Headers | show |
Series | [v2] Bluetooth: btusb: check conditions before enabling USB ALT 3 for WBS | expand |
> > Some USB BT adapters don't satisfy the MTU requirement mentioned in > > commit e848dbd364ac ("Bluetooth: btusb: Add support USB ALT 3 for WBS") > > and have ALT 3 setting that produces no/garbled audio. Some adapters > > with larger MTU were also reported to have problems with ALT 3. > > > > Add a flag and check it and MTU before selecting ALT 3, falling back to > > ALT 1. Enable the flag for Realtek, restoring the previous behavior for > > non-Realtek devices. > > > > Tested with USB adapters (mtu<72, no/garbled sound with ALT3, ALT1 > > works) BCM20702A1 0b05:17cb, CSR8510A10 0a12:0001, and (mtu>=72, ALT3 > > works) RTL8761BU 0bda:8771, Intel AX200 8087:0029 (after disabling > > ALT6). Also got reports for (mtu>=72, ALT 3 reported to produce bad > > audio) Intel 8087:0a2b. > > > > Signed-off-by: Pauli Virtanen <pav@iki.fi> > > Fixes: e848dbd364ac ("Bluetooth: btusb: Add support USB ALT 3 for WBS") > > before I will apply this, I need Tested-by or Ack-by people that confirm that this fixes their issues now. For 8087:0a2b (with broken mSBC audio since e848dbd364ac): Tested-by: Michał Kępień <kernel@kempniu.pl> It would be nice to get this into the stable tree as e848dbd364ac got there in v5.13.3 (as 15407b14e27b) and v5.10.51 (as 05298f1733c6). Thanks! -- Best regards, Michał Kępień
Hello Marcel, On Fri, Jul 23, 2021 at 02:19:09PM +0200, Marcel Holtmann wrote: > Hi Pauli, > > > Some USB BT adapters don't satisfy the MTU requirement mentioned in > > commit e848dbd364ac ("Bluetooth: btusb: Add support USB ALT 3 for WBS") > > and have ALT 3 setting that produces no/garbled audio. Some adapters > > with larger MTU were also reported to have problems with ALT 3. > > > > Add a flag and check it and MTU before selecting ALT 3, falling back to > > ALT 1. Enable the flag for Realtek, restoring the previous behavior for > > non-Realtek devices. > > > > Tested with USB adapters (mtu<72, no/garbled sound with ALT3, ALT1 > > works) BCM20702A1 0b05:17cb, CSR8510A10 0a12:0001, and (mtu>=72, ALT3 > > works) RTL8761BU 0bda:8771, Intel AX200 8087:0029 (after disabling > > ALT6). Also got reports for (mtu>=72, ALT 3 reported to produce bad > > audio) Intel 8087:0a2b. > > > > Signed-off-by: Pauli Virtanen <pav@iki.fi> > > Fixes: e848dbd364ac ("Bluetooth: btusb: Add support USB ALT 3 for WBS") > > before I will apply this, I need Tested-by or Ack-by people that confirm that this fixes their issues now. > Is v3 ok/enough? It has one Tested-by. It would probably be good to send v4 anyway with CC stable@kernel.org .. Thanks, -- Pasi > > > --- > > > > Changes in v2: > > - Explain magic number 72 in a comment; didn't add the table for them, > > because it's not used elsewhere and we need just one number from it. > > - Add flag for ALT3 support, restoring the behavior > > for non-Realtek devices the same as before e848dbd364ac, due to > > the problems reported on an Intel adapter. Don't have the device > > myself. > > > > drivers/bluetooth/btusb.c | 22 ++++++++++++++-------- > > 1 file changed, 14 insertions(+), 8 deletions(-) > > > > diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c > > index 6d23308119d1..5cec719f6cba 100644 > > --- a/drivers/bluetooth/btusb.c > > +++ b/drivers/bluetooth/btusb.c > > @@ -516,6 +516,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_ALT3_OK_FOR_WBS 15 > > Rename this to BTUSB_USE_ALT3_FOR_WBS. > > > > > struct btusb_data { > > struct hci_dev *hdev; > > @@ -1748,16 +1749,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 (test_bit(BTUSB_ALT3_OK_FOR_WBS, &data->flags) && > > + hdev->sco_mtu >= 72 && > > + btusb_find_altsetting(data, 3)) > > This is whitespace damaged. > > > new_alts = 3; > > + else > > + new_alts = 1; > > } > > > > if (btusb_switch_alt_setting(hdev, new_alts) < 0) > > @@ -4733,6 +4738,7 @@ static int btusb_probe(struct usb_interface *intf, > > * (DEVICE_REMOTE_WAKEUP) > > */ > > set_bit(BTUSB_WAKEUP_DISABLE, &data->flags); > > + set_bit(BTUSB_ALT3_OK_FOR_WBS, &data->flags); > > } > > Regards > > Marcel >
Hi Pasi, Pauli, On Tue, Aug 10, 2021 at 9:50 AM Pasi Kärkkäinen <pasik@iki.fi> wrote: > > Hello Marcel, > > On Fri, Jul 23, 2021 at 02:19:09PM +0200, Marcel Holtmann wrote: > > Hi Pauli, > > > > > Some USB BT adapters don't satisfy the MTU requirement mentioned in > > > commit e848dbd364ac ("Bluetooth: btusb: Add support USB ALT 3 for WBS") > > > and have ALT 3 setting that produces no/garbled audio. Some adapters > > > with larger MTU were also reported to have problems with ALT 3. > > > > > > Add a flag and check it and MTU before selecting ALT 3, falling back to > > > ALT 1. Enable the flag for Realtek, restoring the previous behavior for > > > non-Realtek devices. > > > > > > Tested with USB adapters (mtu<72, no/garbled sound with ALT3, ALT1 > > > works) BCM20702A1 0b05:17cb, CSR8510A10 0a12:0001, and (mtu>=72, ALT3 > > > works) RTL8761BU 0bda:8771, Intel AX200 8087:0029 (after disabling > > > ALT6). Also got reports for (mtu>=72, ALT 3 reported to produce bad > > > audio) Intel 8087:0a2b. > > > > > > Signed-off-by: Pauli Virtanen <pav@iki.fi> > > > Fixes: e848dbd364ac ("Bluetooth: btusb: Add support USB ALT 3 for WBS") > > > > before I will apply this, I need Tested-by or Ack-by people that confirm that this fixes their issues now. > > > > Is v3 ok/enough? It has one Tested-by. > It would probably be good to send v4 anyway with CC stable@kernel.org .. > > > Thanks, > > -- Pasi > > > > > > --- > > > > > > Changes in v2: > > > - Explain magic number 72 in a comment; didn't add the table for them, > > > because it's not used elsewhere and we need just one number from it. > > > - Add flag for ALT3 support, restoring the behavior > > > for non-Realtek devices the same as before e848dbd364ac, due to > > > the problems reported on an Intel adapter. Don't have the device > > > myself. > > > > > > drivers/bluetooth/btusb.c | 22 ++++++++++++++-------- > > > 1 file changed, 14 insertions(+), 8 deletions(-) > > > > > > diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c > > > index 6d23308119d1..5cec719f6cba 100644 > > > --- a/drivers/bluetooth/btusb.c > > > +++ b/drivers/bluetooth/btusb.c > > > @@ -516,6 +516,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_ALT3_OK_FOR_WBS 15 > > > > Rename this to BTUSB_USE_ALT3_FOR_WBS. > > > > > > > > struct btusb_data { > > > struct hci_dev *hdev; > > > @@ -1748,16 +1749,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 (test_bit(BTUSB_ALT3_OK_FOR_WBS, &data->flags) && > > > + hdev->sco_mtu >= 72 && > > > + btusb_find_altsetting(data, 3)) > > > > This is whitespace damaged. Ive fixed this and made it fit in 80 columns by reordering the checks. > > > > > new_alts = 3; > > > + else > > > + new_alts = 1; > > > } > > > > > > if (btusb_switch_alt_setting(hdev, new_alts) < 0) > > > @@ -4733,6 +4738,7 @@ static int btusb_probe(struct usb_interface *intf, > > > * (DEVICE_REMOTE_WAKEUP) > > > */ > > > set_bit(BTUSB_WAKEUP_DISABLE, &data->flags); > > > + set_bit(BTUSB_ALT3_OK_FOR_WBS, &data->flags); > > > } > > > > Regards > > > > Marcel Applied, thanks. -- Luiz Augusto von Dentz
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index 6d23308119d1..5cec719f6cba 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c @@ -516,6 +516,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_ALT3_OK_FOR_WBS 15 struct btusb_data { struct hci_dev *hdev; @@ -1748,16 +1749,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 (test_bit(BTUSB_ALT3_OK_FOR_WBS, &data->flags) && + hdev->sco_mtu >= 72 && + btusb_find_altsetting(data, 3)) new_alts = 3; + else + new_alts = 1; } if (btusb_switch_alt_setting(hdev, new_alts) < 0) @@ -4733,6 +4738,7 @@ static int btusb_probe(struct usb_interface *intf, * (DEVICE_REMOTE_WAKEUP) */ set_bit(BTUSB_WAKEUP_DISABLE, &data->flags); + set_bit(BTUSB_ALT3_OK_FOR_WBS, &data->flags); } if (!reset)
Some USB BT adapters don't satisfy the MTU requirement mentioned in commit e848dbd364ac ("Bluetooth: btusb: Add support USB ALT 3 for WBS") and have ALT 3 setting that produces no/garbled audio. Some adapters with larger MTU were also reported to have problems with ALT 3. Add a flag and check it and MTU before selecting ALT 3, falling back to ALT 1. Enable the flag for Realtek, restoring the previous behavior for non-Realtek devices. Tested with USB adapters (mtu<72, no/garbled sound with ALT3, ALT1 works) BCM20702A1 0b05:17cb, CSR8510A10 0a12:0001, and (mtu>=72, ALT3 works) RTL8761BU 0bda:8771, Intel AX200 8087:0029 (after disabling ALT6). Also got reports for (mtu>=72, ALT 3 reported to produce bad audio) Intel 8087:0a2b. Signed-off-by: Pauli Virtanen <pav@iki.fi> Fixes: e848dbd364ac ("Bluetooth: btusb: Add support USB ALT 3 for WBS") --- Changes in v2: - Explain magic number 72 in a comment; didn't add the table for them, because it's not used elsewhere and we need just one number from it. - Add flag for ALT3 support, restoring the behavior for non-Realtek devices the same as before e848dbd364ac, due to the problems reported on an Intel adapter. Don't have the device myself. drivers/bluetooth/btusb.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-)