Loading arch/arm64/boot/dts/qcom/kona-cdp.dtsi +7 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,13 @@ pinctrl-0 = <&bt_en_active>; qca,bt-reset-gpio = <&tlmm 21 0>; /* BT_EN */ qca,bt-vdd-ldo-supply = <&pm8150_s6>; qca,bt-vdd-dig-supply = <&pm8009_s2>; qca,bt-vdd-rfa1-supply = <&pm8150_s5>; qca,bt-vdd-rfa2-supply = <&pm8150a_s8>; qca,bt-vdd-ldo-voltage-level = <950000 950000>; qca,bt-vdd-dig-voltage-level = <950000 950000>; qca,bt-vdd-rfa1-voltage-level = <1900000 1900000>; qca,bt-vdd-rfa2-voltage-level = <1350000 1350000>; }; }; arch/arm64/boot/dts/qcom/kona-mtp.dtsi +7 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,13 @@ pinctrl-0 = <&bt_en_active>; qca,bt-reset-gpio = <&tlmm 21 0>; /* BT_EN */ qca,bt-vdd-ldo-supply = <&pm8150_s6>; qca,bt-vdd-dig-supply = <&pm8009_s2>; qca,bt-vdd-rfa1-supply = <&pm8150_s5>; qca,bt-vdd-rfa2-supply = <&pm8150a_s8>; qca,bt-vdd-ldo-voltage-level = <950000 950000>; qca,bt-vdd-dig-voltage-level = <950000 950000>; qca,bt-vdd-rfa1-voltage-level = <1900000 1900000>; qca,bt-vdd-rfa2-voltage-level = <1350000 1350000>; }; }; drivers/bluetooth/bluetooth-power.c +45 −0 Original line number Diff line number Diff line Loading @@ -289,6 +289,27 @@ static int bluetooth_power(int on) goto vdd_ldo_fail; } } if (bt_power_pdata->bt_vdd_dig) { rc = bt_configure_vreg(bt_power_pdata->bt_vdd_dig); if (rc < 0) { BT_PWR_ERR("bt_power vdddig config failed"); goto vdd_dig_fail; } } if (bt_power_pdata->bt_vdd_rfa1) { rc = bt_configure_vreg(bt_power_pdata->bt_vdd_rfa1); if (rc < 0) { BT_PWR_ERR("bt_power vddrfa1 config failed"); goto vdd_rfa1_fail; } } if (bt_power_pdata->bt_vdd_rfa2) { rc = bt_configure_vreg(bt_power_pdata->bt_vdd_rfa2); if (rc < 0) { BT_PWR_ERR("bt_power vddrfa1 config failed"); goto vdd_rfa2_fail; } } if (bt_power_pdata->bt_chip_pwd) { rc = bt_configure_vreg(bt_power_pdata->bt_chip_pwd); if (rc < 0) { Loading Loading @@ -325,6 +346,15 @@ static int bluetooth_power(int on) if (bt_power_pdata->bt_chip_pwd) bt_vreg_disable(bt_power_pdata->bt_chip_pwd); chip_pwd_fail: if (bt_power_pdata->bt_vdd_rfa2) bt_vreg_disable(bt_power_pdata->bt_vdd_rfa2); vdd_rfa2_fail: if (bt_power_pdata->bt_vdd_rfa1) bt_vreg_disable(bt_power_pdata->bt_vdd_rfa1); vdd_rfa1_fail: if (bt_power_pdata->bt_vdd_dig) bt_vreg_disable(bt_power_pdata->bt_vdd_dig); vdd_dig_fail: if (bt_power_pdata->bt_vdd_ldo) bt_vreg_disable(bt_power_pdata->bt_vdd_ldo); vdd_ldo_fail: Loading Loading @@ -595,6 +625,21 @@ static int bt_power_populate_dt_pinfo(struct platform_device *pdev) if (rc < 0) BT_PWR_ERR("bt-chip-pwd not provided in device tree"); rc = bt_dt_parse_vreg_info(&pdev->dev, &bt_power_pdata->bt_vdd_dig, "qca,bt-vdd-dig"); if (rc < 0) BT_PWR_ERR("bt-vdd-dig not provided in device tree"); rc = bt_dt_parse_vreg_info(&pdev->dev, &bt_power_pdata->bt_vdd_rfa1, "qca,bt-vdd-rfa1"); if (rc < 0) BT_PWR_ERR("bt-vdd-rfa1 not provided in device tree"); rc = bt_dt_parse_vreg_info(&pdev->dev, &bt_power_pdata->bt_vdd_rfa2, "qca,bt-vdd-rfa2"); if (rc < 0) BT_PWR_ERR("bt-vdd-rfa2 not provided in device tree"); rc = bt_dt_parse_clk_info(&pdev->dev, &bt_power_pdata->bt_chip_clk); if (rc < 0) Loading include/linux/bluetooth-power.h +6 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,12 @@ struct bluetooth_power_platform_data { struct bt_power_vreg_data *bt_vdd_xtal; /* VDD_CORE voltage regulator */ struct bt_power_vreg_data *bt_vdd_core; /* VDD_DIG digital voltage regulator */ struct bt_power_vreg_data *bt_vdd_dig; /* VDD RFA1 digital voltage regulator */ struct bt_power_vreg_data *bt_vdd_rfa1; /* VDD RFA2 digital voltage regulator */ struct bt_power_vreg_data *bt_vdd_rfa2; /* Optional: chip power down gpio-regulator * chip power down data is required when bluetooth module * and other modules like wifi co-exist in a single chip and Loading Loading
arch/arm64/boot/dts/qcom/kona-cdp.dtsi +7 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,13 @@ pinctrl-0 = <&bt_en_active>; qca,bt-reset-gpio = <&tlmm 21 0>; /* BT_EN */ qca,bt-vdd-ldo-supply = <&pm8150_s6>; qca,bt-vdd-dig-supply = <&pm8009_s2>; qca,bt-vdd-rfa1-supply = <&pm8150_s5>; qca,bt-vdd-rfa2-supply = <&pm8150a_s8>; qca,bt-vdd-ldo-voltage-level = <950000 950000>; qca,bt-vdd-dig-voltage-level = <950000 950000>; qca,bt-vdd-rfa1-voltage-level = <1900000 1900000>; qca,bt-vdd-rfa2-voltage-level = <1350000 1350000>; }; };
arch/arm64/boot/dts/qcom/kona-mtp.dtsi +7 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,13 @@ pinctrl-0 = <&bt_en_active>; qca,bt-reset-gpio = <&tlmm 21 0>; /* BT_EN */ qca,bt-vdd-ldo-supply = <&pm8150_s6>; qca,bt-vdd-dig-supply = <&pm8009_s2>; qca,bt-vdd-rfa1-supply = <&pm8150_s5>; qca,bt-vdd-rfa2-supply = <&pm8150a_s8>; qca,bt-vdd-ldo-voltage-level = <950000 950000>; qca,bt-vdd-dig-voltage-level = <950000 950000>; qca,bt-vdd-rfa1-voltage-level = <1900000 1900000>; qca,bt-vdd-rfa2-voltage-level = <1350000 1350000>; }; };
drivers/bluetooth/bluetooth-power.c +45 −0 Original line number Diff line number Diff line Loading @@ -289,6 +289,27 @@ static int bluetooth_power(int on) goto vdd_ldo_fail; } } if (bt_power_pdata->bt_vdd_dig) { rc = bt_configure_vreg(bt_power_pdata->bt_vdd_dig); if (rc < 0) { BT_PWR_ERR("bt_power vdddig config failed"); goto vdd_dig_fail; } } if (bt_power_pdata->bt_vdd_rfa1) { rc = bt_configure_vreg(bt_power_pdata->bt_vdd_rfa1); if (rc < 0) { BT_PWR_ERR("bt_power vddrfa1 config failed"); goto vdd_rfa1_fail; } } if (bt_power_pdata->bt_vdd_rfa2) { rc = bt_configure_vreg(bt_power_pdata->bt_vdd_rfa2); if (rc < 0) { BT_PWR_ERR("bt_power vddrfa1 config failed"); goto vdd_rfa2_fail; } } if (bt_power_pdata->bt_chip_pwd) { rc = bt_configure_vreg(bt_power_pdata->bt_chip_pwd); if (rc < 0) { Loading Loading @@ -325,6 +346,15 @@ static int bluetooth_power(int on) if (bt_power_pdata->bt_chip_pwd) bt_vreg_disable(bt_power_pdata->bt_chip_pwd); chip_pwd_fail: if (bt_power_pdata->bt_vdd_rfa2) bt_vreg_disable(bt_power_pdata->bt_vdd_rfa2); vdd_rfa2_fail: if (bt_power_pdata->bt_vdd_rfa1) bt_vreg_disable(bt_power_pdata->bt_vdd_rfa1); vdd_rfa1_fail: if (bt_power_pdata->bt_vdd_dig) bt_vreg_disable(bt_power_pdata->bt_vdd_dig); vdd_dig_fail: if (bt_power_pdata->bt_vdd_ldo) bt_vreg_disable(bt_power_pdata->bt_vdd_ldo); vdd_ldo_fail: Loading Loading @@ -595,6 +625,21 @@ static int bt_power_populate_dt_pinfo(struct platform_device *pdev) if (rc < 0) BT_PWR_ERR("bt-chip-pwd not provided in device tree"); rc = bt_dt_parse_vreg_info(&pdev->dev, &bt_power_pdata->bt_vdd_dig, "qca,bt-vdd-dig"); if (rc < 0) BT_PWR_ERR("bt-vdd-dig not provided in device tree"); rc = bt_dt_parse_vreg_info(&pdev->dev, &bt_power_pdata->bt_vdd_rfa1, "qca,bt-vdd-rfa1"); if (rc < 0) BT_PWR_ERR("bt-vdd-rfa1 not provided in device tree"); rc = bt_dt_parse_vreg_info(&pdev->dev, &bt_power_pdata->bt_vdd_rfa2, "qca,bt-vdd-rfa2"); if (rc < 0) BT_PWR_ERR("bt-vdd-rfa2 not provided in device tree"); rc = bt_dt_parse_clk_info(&pdev->dev, &bt_power_pdata->bt_chip_clk); if (rc < 0) Loading
include/linux/bluetooth-power.h +6 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,12 @@ struct bluetooth_power_platform_data { struct bt_power_vreg_data *bt_vdd_xtal; /* VDD_CORE voltage regulator */ struct bt_power_vreg_data *bt_vdd_core; /* VDD_DIG digital voltage regulator */ struct bt_power_vreg_data *bt_vdd_dig; /* VDD RFA1 digital voltage regulator */ struct bt_power_vreg_data *bt_vdd_rfa1; /* VDD RFA2 digital voltage regulator */ struct bt_power_vreg_data *bt_vdd_rfa2; /* Optional: chip power down gpio-regulator * chip power down data is required when bluetooth module * and other modules like wifi co-exist in a single chip and Loading