Hi, pe, 2021-05-14 kello 11:19 +0800, hildawu@xxxxxxxxxxx kirjoitti: > From: Hilda Wu <hildawu@xxxxxxxxxxx> > > Because mSBC frames do not need to be aligned to the SCO packet > boundary. Using USB ALT 3 let HCI payload >= 60 bytes, let mSBC > data satisfy 60 Bytes avoid payload unaligned situation and fixed > some headset no voise issue. > > USB Alt 3 supported also need HFP support transparent MTU in 72 > Bytes. > > Signed-off-by: Hilda Wu <hildawu@xxxxxxxxxxx> > --- > Changes in v2: > - Updated signed off name. > - Adjusted coding style. > --- This change seemed to break msbc audio on some non-realtek adapters I have. Tested Pipewire on BCM20702A1 (0b05:17cb), CSR8510A10 (0a12:0001) -> no sound output and input appears garbled. Reverting this patch makes it work again. Indeed these adapters report SCO mtu=64 which is less than 72. On the other hand, with RTL8761BU (0bda:8771) msbc audio works fine with this patch out of the box, indeed reading/writing 72 byte packets to/from the sco socket. ALT 3 on RTL8761BU does appear to address garbled audio with some headsets. Maybe the altsetting should be determined based on a quirk, the mtu requirement be checked, or something similar? AFAIK, userspace can't do anything to fix this. Best, Pauli Virtanen > --- > drivers/bluetooth/btusb.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c > index 6f253378e893..1e98f985740b 100644 > --- a/drivers/bluetooth/btusb.c > +++ b/drivers/bluetooth/btusb.c > @@ -1752,6 +1752,13 @@ static void btusb_work(struct work_struct > *work) > * which work with WBS at all. > */ > 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)) > + new_alts = 3; > } > > if (btusb_switch_alt_setting(hdev, new_alts) < 0)