Message ID | 20210514031901.2276-1-hildawu@realtek.com |
---|---|
State | Accepted |
Commit | 3c12c376e96583aaf01fc428ccadf1f8655bdaef |
Headers | show |
Series | [v2] Bluetooth: btusb: Add support USB ALT 3 for WBS | expand |
Hi Hilda, > 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@realtek.com> > --- > Changes in v2: > - Updated signed off name. > - Adjusted coding style. > --- > --- > drivers/bluetooth/btusb.c | 7 +++++++ > 1 file changed, 7 insertions(+) patch has been applied to bluetooth-next tree. Regards Marcel
Hi, pe, 2021-05-14 kello 11:19 +0800, hildawu@realtek.com kirjoitti: > From: Hilda Wu <hildawu@realtek.com> > > 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@realtek.com> > --- > 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)
On Sunday, July 11, 2021 8:33:57 AM PDT Pauli Virtanen wrote: > pe, 2021-05-14 kello 11:19 +0800, hildawu@realtek.com kirjoitti: > > 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. > > 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 When I fixed WBS when previous patches from Intel and Realtek broke it for most adapters, I also tested alt 3. I also found it didn't work for many adapters. It is annoying that a chipset vendor can not be bothered to do the basic testing I am able to do by buying random bt adapters from amazon. Nor respond when their patches, once accepted, cause problems.
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)