]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-client.git/commitdiff
Bluetooth: qca: enable pwrseq support for WCN39xx devices
authorDmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Tue, 10 Mar 2026 23:02:58 +0000 (01:02 +0200)
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Fri, 10 Apr 2026 14:30:18 +0000 (10:30 -0400)
The WCN39xx family of WiFi/BT chips incorporates a simple PMU, spreading
voltages over internal rails. Implement support for using powersequencer
for this family of QCA devices in addition to using regulators.

Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
drivers/bluetooth/hci_qca.c

index d6e78201a6753bd3f81ae0b06dc8590bc0a277ce..c17a462aef554225f577dd82517aaa0b451f9cff 100644 (file)
@@ -2241,6 +2241,18 @@ static void qca_power_off(struct hci_uart *hu)
        qcadev = serdev_device_get_drvdata(hu->serdev);
        power = qcadev->bt_power;
 
+       switch (soc_type) {
+       case QCA_WCN3988:
+       case QCA_WCN3990:
+       case QCA_WCN3991:
+       case QCA_WCN3998:
+               host_set_baudrate(hu, 2400);
+               qca_send_power_pulse(hu, false);
+               break;
+       default:
+               break;
+       }
+
        if (power && power->pwrseq) {
                pwrseq_power_off(power->pwrseq);
                set_bit(QCA_BT_OFF, &qca->flags);
@@ -2252,8 +2264,6 @@ static void qca_power_off(struct hci_uart *hu)
        case QCA_WCN3990:
        case QCA_WCN3991:
        case QCA_WCN3998:
-               host_set_baudrate(hu, 2400);
-               qca_send_power_pulse(hu, false);
                qca_regulator_disable(qcadev);
                break;
 
@@ -2425,6 +2435,11 @@ static int qca_serdev_probe(struct serdev_device *serdev)
        }
 
        switch (qcadev->btsoc_type) {
+       case QCA_WCN3950:
+       case QCA_WCN3988:
+       case QCA_WCN3990:
+       case QCA_WCN3991:
+       case QCA_WCN3998:
        case QCA_WCN6750:
        case QCA_WCN6855:
        case QCA_WCN7850:
@@ -2449,12 +2464,7 @@ static int qca_serdev_probe(struct serdev_device *serdev)
                        else
                                break;
                }
-               fallthrough;
-       case QCA_WCN3950:
-       case QCA_WCN3988:
-       case QCA_WCN3990:
-       case QCA_WCN3991:
-       case QCA_WCN3998:
+
                qcadev->bt_power->dev = &serdev->dev;
                err = qca_init_regulators(qcadev->bt_power, data->vregs,
                                          data->num_vregs);