Hi, la, 2021-07-17 kello 21:34 +0800, Joseph Hwang kirjoitti: > It looks reasonable to check sco_mtu. My suggestion is to use > hci_packet_size_usb_alt[3] instead of the magic number 72. Thanks for looking at it. IIUC, hci_packet_size_usb_alt only appears in previous discussions on this list, which did not seem to reach a conclusion if this should be computed from wMaxPacketSize. I can do less magical v2 and add the table. Different solution would be to make the altsetting choice manufacturer/device specific flag, as I'm not sure on what hardware e848dbd364ac was tested on, so maybe it is intended Realtek specific. Best, Pauli > On Sat, Jul 17, 2021 at 1:58 AM Pauli Virtanen <pav@xxxxxx> wrote: > > > > 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. Check that the MTU > > condition is satisfied, and fall back to ALT 1 if not. > > > > Tested with USB adapters (mtu<72, produce sound only with ALT1) > > BCM20702A1 0b05:17cb, CSR8510A10 0a12:0001, and (mtu>=72, ALT3) > > RTL8761BU 0bda:8771, Intel AX200 8087:0029 (after disabling ALT6). > > > > Signed-off-by: Pauli Virtanen <pav@xxxxxx> > > --- > > drivers/bluetooth/btusb.c | 6 ++++-- > > 1 file changed, 4 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c > > index a9855a2dd561..3ee66e415c4d 100644 > > --- a/drivers/bluetooth/btusb.c > > +++ b/drivers/bluetooth/btusb.c > > @@ -1763,9 +1763,11 @@ static void btusb_work(struct work_struct *work) > > /* 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. > > + * data satisfy 60 bytes. USB Alt 3 support also needs > > + * HFP transparent MTU >= 72 Bytes. > > */ > > - if (new_alts == 1 && btusb_find_altsetting(data, 3)) > > + if (new_alts == 1 && hdev->sco_mtu >= 72 && > > + btusb_find_altsetting(data, 3)) > > new_alts = 3; > > } > > > > -- > > 2.31.1 > > > > > >