diff --git a/arch/arm64/boot/dts/qcom/shikra-cqm-som.dtsi b/arch/arm64/boot/dts/qcom/shikra-cqm-som.dtsi index 8ac42ff625a0e..4e03e459c7c16 100644 --- a/arch/arm64/boot/dts/qcom/shikra-cqm-som.dtsi +++ b/arch/arm64/boot/dts/qcom/shikra-cqm-som.dtsi @@ -220,6 +220,8 @@ vddxo-supply = <&vreg_pmu_xo>; vddrf-supply = <&vreg_pmu_rf>; vddch0-supply = <&vreg_pmu_ch0>; + + clocks = <&rpmcc RPM_SMD_RF_CLK2>; }; }; diff --git a/arch/arm64/boot/dts/qcom/shikra-iqs-som.dtsi b/arch/arm64/boot/dts/qcom/shikra-iqs-som.dtsi index 4ff97945274dd..227283ab74a81 100644 --- a/arch/arm64/boot/dts/qcom/shikra-iqs-som.dtsi +++ b/arch/arm64/boot/dts/qcom/shikra-iqs-som.dtsi @@ -242,6 +242,8 @@ vddxo-supply = <&vreg_pmu_xo>; vddrf-supply = <&vreg_pmu_rf>; vddch0-supply = <&vreg_pmu_ch0>; + + clocks = <&rpmcc RPM_SMD_RF_CLK1>; }; }; diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index d3df2349bbbaa..5a2c7aef80025 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c @@ -2276,6 +2276,8 @@ static void qca_power_off(struct hci_uart *hu) } if (power && power->pwrseq) { + if (qcadev->susclk) + clk_disable_unprepare(qcadev->susclk); pwrseq_disable(power->pwrseq); set_bit(QCA_BT_OFF, &qca->flags); return; @@ -2336,8 +2338,17 @@ static int qca_regulator_enable(struct qca_serdev *qcadev) struct qca_power *power = qcadev->bt_power; int ret; - if (power->pwrseq) - return pwrseq_enable(power->pwrseq); + if (power->pwrseq) { + ret = pwrseq_enable(power->pwrseq); + if (ret) + return ret; + if (qcadev->susclk) { + ret = clk_prepare_enable(qcadev->susclk); + if (ret) + pwrseq_disable(power->pwrseq); + } + return ret; + } /* Already enabled */ if (power->vregs_on) @@ -2486,8 +2497,14 @@ static int qca_serdev_probe(struct serdev_device *serdev) */ if (IS_ERR(qcadev->bt_power->pwrseq)) qcadev->bt_power->pwrseq = NULL; - else + else { + qcadev->susclk = devm_clk_get_optional(&serdev->dev, NULL); + if (IS_ERR(qcadev->susclk)) { + dev_err(&serdev->dev, "failed to acquire clk\n"); + return PTR_ERR(qcadev->susclk); + } break; + } } qcadev->bt_power->dev = &serdev->dev;