Bluetooth: btqca: Add valid le states quirk
authorAbhishek Pandit-Subedi <abhishekpandit@chromium.org>
Wed, 30 Sep 2020 20:01:38 +0000 (13:01 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 11 Mar 2021 13:17:22 +0000 (14:17 +0100)
[ Upstream commit 547801380ec7e6104ea679f599d03c342b4b39a0 ]

WCN3991 supports connectable advertisements so we need to add the valid
le states quirk so the 'central-peripheral' role is exposed in
userspace.

Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/bluetooth/hci_qca.c

index 5c26c7d..ad47ff0 100644 (file)
@@ -78,6 +78,7 @@ enum qca_flags {
 
 enum qca_capabilities {
        QCA_CAP_WIDEBAND_SPEECH = BIT(0),
+       QCA_CAP_VALID_LE_STATES = BIT(1),
 };
 
 /* HCI_IBS transmit side sleep protocol states */
@@ -1782,7 +1783,7 @@ static const struct qca_device_data qca_soc_data_wcn3991 = {
                { "vddch0", 450000 },
        },
        .num_vregs = 4,
-       .capabilities = QCA_CAP_WIDEBAND_SPEECH,
+       .capabilities = QCA_CAP_WIDEBAND_SPEECH | QCA_CAP_VALID_LE_STATES,
 };
 
 static const struct qca_device_data qca_soc_data_wcn3998 = {
@@ -2019,11 +2020,17 @@ static int qca_serdev_probe(struct serdev_device *serdev)
                hdev->shutdown = qca_power_off;
        }
 
-       /* Wideband speech support must be set per driver since it can't be
-        * queried via hci.
-        */
-       if (data && (data->capabilities & QCA_CAP_WIDEBAND_SPEECH))
-               set_bit(HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED, &hdev->quirks);
+       if (data) {
+               /* Wideband speech support must be set per driver since it can't
+                * be queried via hci. Same with the valid le states quirk.
+                */
+               if (data->capabilities & QCA_CAP_WIDEBAND_SPEECH)
+                       set_bit(HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED,
+                               &hdev->quirks);
+
+               if (data->capabilities & QCA_CAP_VALID_LE_STATES)
+                       set_bit(HCI_QUIRK_VALID_LE_STATES, &hdev->quirks);
+       }
 
        return 0;
 }