Re: [V3 1/2] Bluetooth: Add new quirks for fake Bluetooth dongles

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Pedro,

On Mon, Feb 24, 2025 at 7:27 PM Pedro Nishiyama
<nishiyama.pedro@xxxxxxxxx> wrote:
>
> Hi Luiz,
>
> On Mon, Feb 24, 2025 at 6:36 PM Luiz Augusto von Dentz
> <luiz.dentz@xxxxxxxxx> wrote:
> >
> > Hi Pedro,
> >
> > On Mon, Feb 24, 2025 at 3:54 PM Pedro Nishiyama
> > <nishiyama.pedro@xxxxxxxxx> wrote:
> > >
> > > This adds quirks for broken READ_VOICE_SETTING and READ_PAGE_SCAN_TYPE.
> > >
> > > Signed-off-by: Pedro Nishiyama <nishiyama.pedro@xxxxxxxxx>
> > > ---
> > >  include/net/bluetooth/hci.h | 16 ++++++++++++++++
> > >  net/bluetooth/hci_sync.c    |  6 ++++++
> > >  2 files changed, 22 insertions(+)
> > >
> > > diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
> > > index 0d51970d809f..b99818df8ee7 100644
> > > --- a/include/net/bluetooth/hci.h
> > > +++ b/include/net/bluetooth/hci.h
> > > @@ -354,6 +354,22 @@ enum {
> > >          * during the hdev->setup vendor callback.
> > >          */
> > >         HCI_QUIRK_FIXUP_LE_EXT_ADV_REPORT_PHY,
> > > +
> > > +       /* When this quirk is set, the HCI_OP_READ_VOICE_SETTING command is
> > > +        * skipped. This is required for a subset of the CSR controller clones
> > > +        * which erroneously claim to support it.
> > > +        *
> > > +        * This quirk must be set before hci_register_dev is called.
> > > +        */
> > > +       HCI_QUIRK_BROKEN_READ_VOICE_SETTING,
> >
> > Lets split this in 2 parts, one for voice setting and another for page
> > scan type.
> >
> > > +       /* When this quirk is set, the HCI_OP_READ_PAGE_SCAN_TYPE command is
> > > +        * skipped. This is required for a subset of the CSR controller clones
> > > +        * which erroneously claim to support it.
> > > +        *
> > > +        * This quirk must be set before hci_register_dev is called.
> > > +        */
> > > +       HCI_QUIRK_BROKEN_READ_PAGE_SCAN_TYPE,
> > >  };
> > >
> > >  /* HCI device flags */
> > > diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c
> > > index dd770ef5ec36..e76012956020 100644
> > > --- a/net/bluetooth/hci_sync.c
> > > +++ b/net/bluetooth/hci_sync.c
> > > @@ -3696,6 +3696,9 @@ static int hci_read_local_name_sync(struct hci_dev *hdev)
> > >  /* Read Voice Setting */
> > >  static int hci_read_voice_setting_sync(struct hci_dev *hdev)
> > >  {
> > > +       if (test_bit(HCI_QUIRK_BROKEN_READ_VOICE_SETTING, &hdev->quirks))
> > > +               return 0;
> >
> > While at it I'd add the checking for the bit as well, that said
> > perhaps we need to disable SCO link if voice settings cannot be read,
> > is the controller able to create SCO connections?
>
> I did some tests on the version before the regression and with the patches.
> It is possible to create an SCO connection, but the connection is not usable.
> Before the regression there is no sound, and with the patches, dmesg
> is spammed with "Bluetooth: hci0: corrupted SCO packet".

Then perhaps we should disable SCO support if it doesn't support read
voice settings.

> >
> > >         return __hci_cmd_sync_status(hdev, HCI_OP_READ_VOICE_SETTING,
> > >                                      0, NULL, HCI_CMD_TIMEOUT);
> > >  }
> > > @@ -4132,6 +4135,9 @@ static int hci_read_page_scan_type_sync(struct hci_dev *hdev)
> > >         if (!(hdev->commands[13] & 0x01))
> > >                 return 0;
> > >
> > > +       if (test_bit(HCI_QUIRK_BROKEN_READ_PAGE_SCAN_TYPE, &hdev->quirks))
> > > +               return 0;
> > > +
> > >         return __hci_cmd_sync_status(hdev, HCI_OP_READ_PAGE_SCAN_TYPE,
> > >                                      0, NULL, HCI_CMD_TIMEOUT);
> > >  }
> > > --
> > > 2.48.1
> > >
> >
> >
> > --
> > Luiz Augusto von Dentz
>
>
> --
> Pedro Nishiyama



-- 
Luiz Augusto von Dentz





[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux