btrtl_dev->ic_info is only available from the controller on cold boot
(the lmp subversion matches the device model and this is used to look up
the ic_info). On warm boots (firmware already loaded),
btrtl_dev->ic_info is null.

Fixes: 05672a2c14a4 (Bluetooth: btrtl: Enable central-peripheral role)
Signed-off-by: Abhishek Pandit-Subedi <abhishekpan...@chromium.org>
---

 drivers/bluetooth/btrtl.c | 23 +++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)

diff --git a/drivers/bluetooth/btrtl.c b/drivers/bluetooth/btrtl.c
index 1abf6a4d672734f..978f3c773856b05 100644
--- a/drivers/bluetooth/btrtl.c
+++ b/drivers/bluetooth/btrtl.c
@@ -719,16 +719,19 @@ int btrtl_setup_realtek(struct hci_dev *hdev)
         */
        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;
+       if (btrtl_dev->ic_info) {
+               /* 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);
-- 
2.29.2.729.g45daf8777d-goog

Reply via email to