Message ID | 20210415035559.25743-4-aaron.ma@canonical.com |
---|---|
State | New |
Headers | show |
Series | add realtek 8852 bluetooth support | expand |
On 15.04.21 05:55, Aaron Ma wrote: > From: Abhishek Pandit-Subedi <abhishekpandit@chromium.org> > > BugLink: https://bugs.launchpad.net/bugs/1924207 > > Enable the central-peripheral role on RTL8822CE. This enables creating > connections while there is an existing connection in the slave role. > > This change can be confirmed in userspace via `bluetoothctl show` which > will now show "Roles: central-peripheral". > > Reviewed-by: Daniel Winkler <danielwinkler@google.com> > Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org> > Signed-off-by: Marcel Holtmann <marcel@holtmann.org> > (cherry picked from commit 05672a2c14a4ea20b7e31a1d8d847292c2b60c10) > Signed-off-by: Aaron Ma <aaron.ma@canonical.com> > --- Applied to hirsute,groovy:llinux/master-next. Thanks. -Stefan > drivers/bluetooth/btrtl.c | 15 +++++++++++++-- > 1 file changed, 13 insertions(+), 2 deletions(-) > > diff --git a/drivers/bluetooth/btrtl.c b/drivers/bluetooth/btrtl.c > index 21ef2396bab1..29200c9bd0e2 100644 > --- a/drivers/bluetooth/btrtl.c > +++ b/drivers/bluetooth/btrtl.c > @@ -740,13 +740,24 @@ int btrtl_setup_realtek(struct hci_dev *hdev) > > ret = btrtl_download_firmware(hdev, btrtl_dev); > > - btrtl_free(btrtl_dev); > - > /* Enable controller to do both LE scan and BR/EDR inquiry > * simultaneously. > */ > set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks); > > + /* Enable central-peripheral role (able to create new connections with > + * an existing connection in slave role). > + */ > + switch (btrtl_dev->ic_info->lmp_subver) { > + case RTL_ROM_LMP_8822B: > + set_bit(HCI_QUIRK_VALID_LE_STATES, &hdev->quirks); > + break; > + default: > + rtl_dev_dbg(hdev, "Central-peripheral role not enabled."); > + break; > + } > + > + btrtl_free(btrtl_dev); > return ret; > } > EXPORT_SYMBOL_GPL(btrtl_setup_realtek); >
diff --git a/drivers/bluetooth/btrtl.c b/drivers/bluetooth/btrtl.c index 21ef2396bab1..29200c9bd0e2 100644 --- a/drivers/bluetooth/btrtl.c +++ b/drivers/bluetooth/btrtl.c @@ -740,13 +740,24 @@ int btrtl_setup_realtek(struct hci_dev *hdev) ret = btrtl_download_firmware(hdev, btrtl_dev); - btrtl_free(btrtl_dev); - /* Enable controller to do both LE scan and BR/EDR inquiry * simultaneously. */ set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks); + /* Enable central-peripheral role (able to create new connections with + * an existing connection in slave role). + */ + switch (btrtl_dev->ic_info->lmp_subver) { + case RTL_ROM_LMP_8822B: + set_bit(HCI_QUIRK_VALID_LE_STATES, &hdev->quirks); + break; + default: + rtl_dev_dbg(hdev, "Central-peripheral role not enabled."); + break; + } + + btrtl_free(btrtl_dev); return ret; } EXPORT_SYMBOL_GPL(btrtl_setup_realtek);