[PATCH v1] arm64: dts: qcom: hamoa-iot-evk: support Bluetooth over both USB and UART

Shuai Zhang posted 1 patch 4 weeks ago
arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
[PATCH v1] arm64: dts: qcom: hamoa-iot-evk: support Bluetooth over both USB and UART
Posted by Shuai Zhang 4 weeks ago
When Bluetooth supports both USB and UART, the BT UART driver is
always loaded, while USB is hot-pluggable. As a result, when Bluetooth
is used over USB, the UART driver still be probed and drive BT_EN low,
which causes the Bluetooth device on USB to be disconnected.

Configure BT_EN as a GPIO hog so that it is controlled by the platform
instead of the UART driver, preventing BT over USB from being
unintentionally powered down.

Signed-off-by: Shuai Zhang <shuai.zhang@oss.qualcomm.com>
---
 arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts b/arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts
index 630642baa435..60a0b3ecbc1b 100644
--- a/arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts
+++ b/arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts
@@ -647,10 +647,9 @@ wcn7850-pmu {
 		vddrfa1p2-supply = <&vreg_wcn_1p9>;
 		vddrfa1p8-supply = <&vreg_wcn_1p9>;
 
-		bt-enable-gpios = <&tlmm 116 GPIO_ACTIVE_HIGH>;
 		wlan-enable-gpios = <&tlmm 117 GPIO_ACTIVE_HIGH>;
 
-		pinctrl-0 = <&wcn_bt_en>, <&wcn_wlan_en>;
+		pinctrl-0 = <&wcn_wlan_en>;
 		pinctrl-names = "default";
 
 		regulators {
@@ -1398,11 +1397,12 @@ wcd_default: wcd-reset-n-active-state {
 		output-low;
 	};
 
-	wcn_bt_en: wcn-bt-en-state {
-		pins = "gpio116";
-		function = "gpio";
-		drive-strength = <2>;
-		bias-disable;
+	wcn_bt_en_hog: wcn-bt-en-state-hog {
+		gpio-hog;
+		gpios = <116 GPIO_ACTIVE_HIGH>;
+		output-high;
+		input-disable;
+		link-name = "BT_EN";
 	};
 
 	wcn_wlan_en: wcn-wlan-en-state {
-- 
2.34.1
Re: [PATCH v1] arm64: dts: qcom: hamoa-iot-evk: support Bluetooth over both USB and UART
Posted by Konrad Dybcio 4 weeks ago
On 3/11/26 10:09 AM, Shuai Zhang wrote:
> When Bluetooth supports both USB and UART, the BT UART driver is
> always loaded, while USB is hot-pluggable. As a result, when Bluetooth
> is used over USB, the UART driver still be probed and drive BT_EN low,
> which causes the Bluetooth device on USB to be disconnected.

Is bluetooth connected over UART *and* USB simultaneously?

> Configure BT_EN as a GPIO hog so that it is controlled by the platform

What's "the platform"?

> instead of the UART driver, preventing BT over USB from being
> unintentionally powered down.
> 
> Signed-off-by: Shuai Zhang <shuai.zhang@oss.qualcomm.com>
> ---
>  arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts | 14 +++++++-------
>  1 file changed, 7 insertions(+), 7 deletions(-)
> 
> diff --git a/arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts b/arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts
> index 630642baa435..60a0b3ecbc1b 100644
> --- a/arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts
> +++ b/arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts
> @@ -647,10 +647,9 @@ wcn7850-pmu {
>  		vddrfa1p2-supply = <&vreg_wcn_1p9>;
>  		vddrfa1p8-supply = <&vreg_wcn_1p9>;
>  
> -		bt-enable-gpios = <&tlmm 116 GPIO_ACTIVE_HIGH>;

What if I want to power down Bluetooth now?

>  		wlan-enable-gpios = <&tlmm 117 GPIO_ACTIVE_HIGH>;
>  
> -		pinctrl-0 = <&wcn_bt_en>, <&wcn_wlan_en>;
> +		pinctrl-0 = <&wcn_wlan_en>;
>  		pinctrl-names = "default";
>  
>  		regulators {
> @@ -1398,11 +1397,12 @@ wcd_default: wcd-reset-n-active-state {
>  		output-low;
>  	};
>  
> -	wcn_bt_en: wcn-bt-en-state {
> -		pins = "gpio116";
> -		function = "gpio";
> -		drive-strength = <2>;
> -		bias-disable;
> +	wcn_bt_en_hog: wcn-bt-en-state-hog {

This name is illegal (make CHECK_DTBS=1 qcom/hamoa-iot-evk.dtb)

> +		gpio-hog;
> +		gpios = <116 GPIO_ACTIVE_HIGH>;
> +		output-high;
> +		input-disable;

This property is not allowed for TLMM pins

> +		link-name = "BT_EN";

This property doesn't exist

Konrad
Re: [PATCH v1] arm64: dts: qcom: hamoa-iot-evk: support Bluetooth over both USB and UART
Posted by Shuai Zhang 3 weeks, 5 days ago
Hi Konrad

On 3/11/2026 9:07 PM, Konrad Dybcio wrote:
> On 3/11/26 10:09 AM, Shuai Zhang wrote:
>> When Bluetooth supports both USB and UART, the BT UART driver is
>> always loaded, while USB is hot-pluggable. As a result, when Bluetooth
>> is used over USB, the UART driver still be probed and drive BT_EN low,
>> which causes the Bluetooth device on USB to be disconnected.
> Is bluetooth connected over UART *and* USB simultaneously?
BT uses either UART or USB, never both at the same time.

On platforms supporting both, the UART driver is always probed, while 
USB is hot‑pluggable.

As a result, when BT runs over USB, the UART driver still probes and 
pulls BT_EN low,

unintentionally powering off the USB BT device.

>
>> Configure BT_EN as a GPIO hog so that it is controlled by the platform
> What's "the platform"?

hamoa-evk


>
>> instead of the UART driver, preventing BT over USB from being
>> unintentionally powered down.
>>
>> Signed-off-by: Shuai Zhang <shuai.zhang@oss.qualcomm.com>
>> ---
>>   arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts | 14 +++++++-------
>>   1 file changed, 7 insertions(+), 7 deletions(-)
>>
>> diff --git a/arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts b/arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts
>> index 630642baa435..60a0b3ecbc1b 100644
>> --- a/arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts
>> +++ b/arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts
>> @@ -647,10 +647,9 @@ wcn7850-pmu {
>>   		vddrfa1p2-supply = <&vreg_wcn_1p9>;
>>   		vddrfa1p8-supply = <&vreg_wcn_1p9>;
>>   
>> -		bt-enable-gpios = <&tlmm 116 GPIO_ACTIVE_HIGH>;
> What if I want to power down Bluetooth now?


It cannot be pulled low because it is not possible to determine whether 
the inserted M.2 card is UART‑based or USB‑based.

Identifying whether the interface is USB or UART would allow control of 
the UART probe accordingly;

however, no reliable solution is available so far. Additional approaches 
are still being explored.


>
>>   		wlan-enable-gpios = <&tlmm 117 GPIO_ACTIVE_HIGH>;
>>   
>> -		pinctrl-0 = <&wcn_bt_en>, <&wcn_wlan_en>;
>> +		pinctrl-0 = <&wcn_wlan_en>;
>>   		pinctrl-names = "default";
>>   
>>   		regulators {
>> @@ -1398,11 +1397,12 @@ wcd_default: wcd-reset-n-active-state {
>>   		output-low;
>>   	};
>>   
>> -	wcn_bt_en: wcn-bt-en-state {
>> -		pins = "gpio116";
>> -		function = "gpio";
>> -		drive-strength = <2>;
>> -		bias-disable;
>> +	wcn_bt_en_hog: wcn-bt-en-state-hog {
> This name is illegal (make CHECK_DTBS=1 qcom/hamoa-iot-evk.dtb)


|I will use tlmm to control|


>
>> +		gpio-hog;
>> +		gpios = <116 GPIO_ACTIVE_HIGH>;
>> +		output-high;
>> +		input-disable;
> This property is not allowed for TLMM pins
>
>> +		link-name = "BT_EN";
> This property doesn't exist


I  will remove it;


>
> Konrad


thanks,
Shuai

Re: [PATCH v1] arm64: dts: qcom: hamoa-iot-evk: support Bluetooth over both USB and UART
Posted by Dmitry Baryshkov 3 weeks, 5 days ago
On Fri, Mar 13, 2026 at 02:37:39PM +0800, Shuai Zhang wrote:
> Hi Konrad
> 
> On 3/11/2026 9:07 PM, Konrad Dybcio wrote:
> > On 3/11/26 10:09 AM, Shuai Zhang wrote:
> > > When Bluetooth supports both USB and UART, the BT UART driver is
> > > always loaded, while USB is hot-pluggable. As a result, when Bluetooth
> > > is used over USB, the UART driver still be probed and drive BT_EN low,
> > > which causes the Bluetooth device on USB to be disconnected.
> > Is bluetooth connected over UART *and* USB simultaneously?
> BT uses either UART or USB, never both at the same time.
> 
> On platforms supporting both, the UART driver is always probed, while USB is
> hot‑pluggable.
> 
> As a result, when BT runs over USB, the UART driver still probes and pulls
> BT_EN low,
> 
> unintentionally powering off the USB BT device.

Could you please confirm if [1] would solve the problem?


[1] https://lore.kernel.org/r/20260224-pci-m2-e-v5-9-dd9b9501d33c@oss.qualcomm.com

> 
> > 
> > > Configure BT_EN as a GPIO hog so that it is controlled by the platform
> > What's "the platform"?
> 
> hamoa-evk
> 
> 

-- 
With best wishes
Dmitry
Re: [PATCH v1] arm64: dts: qcom: hamoa-iot-evk: support Bluetooth over both USB and UART
Posted by Konrad Dybcio 3 weeks, 5 days ago
On 3/13/26 7:37 AM, Shuai Zhang wrote:
> Hi Konrad
> 
> On 3/11/2026 9:07 PM, Konrad Dybcio wrote:
>> On 3/11/26 10:09 AM, Shuai Zhang wrote:
>>> When Bluetooth supports both USB and UART, the BT UART driver is
>>> always loaded, while USB is hot-pluggable. As a result, when Bluetooth
>>> is used over USB, the UART driver still be probed and drive BT_EN low,
>>> which causes the Bluetooth device on USB to be disconnected.
>> Is bluetooth connected over UART *and* USB simultaneously?
> BT uses either UART or USB, never both at the same time.

[...]

>>>   -    wcn_bt_en: wcn-bt-en-state {
>>> -        pins = "gpio116";
>>> -        function = "gpio";
>>> -        drive-strength = <2>;
>>> -        bias-disable;
>>> +    wcn_bt_en_hog: wcn-bt-en-state-hog {
>> This name is illegal (make CHECK_DTBS=1 qcom/hamoa-iot-evk.dtb)
> 
> 
> |I will use tlmm to control|
> 
> 
>>
>>> +        gpio-hog;
>>> +        gpios = <116 GPIO_ACTIVE_HIGH>;
>>> +        output-high;
>>> +        input-disable;
>> This property is not allowed for TLMM pins
>>
>>> +        link-name = "BT_EN";
>> This property doesn't exist
> 
> 
> I  will remove it;

Please run

make [...] CHECK_DTBS=1 qcom/hamoa-iot-evk.dtb

for your next submission to ensure the schema checks succeed

Konrad
Re: [PATCH v1] arm64: dts: qcom: hamoa-iot-evk: support Bluetooth over both USB and UART
Posted by Konrad Dybcio 3 weeks, 5 days ago
On 3/13/26 7:37 AM, Shuai Zhang wrote:
> Hi Konrad
> 
> On 3/11/2026 9:07 PM, Konrad Dybcio wrote:
>> On 3/11/26 10:09 AM, Shuai Zhang wrote:
>>> When Bluetooth supports both USB and UART, the BT UART driver is
>>> always loaded, while USB is hot-pluggable. As a result, when Bluetooth
>>> is used over USB, the UART driver still be probed and drive BT_EN low,
>>> which causes the Bluetooth device on USB to be disconnected.
>> Is bluetooth connected over UART *and* USB simultaneously?
> BT uses either UART or USB, never both at the same time.
> 
> On platforms supporting both, the UART driver is always probed, while USB is hot‑pluggable.
> 
> As a result, when BT runs over USB, the UART driver still probes and pulls BT_EN low,
> 
> unintentionally powering off the USB BT device.

Please describe in more detail how that difference can appear in practice.

Is there an M.2 slot, into which different kinds of cards (i.e. ones with
BT-over-USB vs BT-over-UART) may be plugged in?

Konrad
Re: [PATCH v1] arm64: dts: qcom: hamoa-iot-evk: support Bluetooth over both USB and UART
Posted by Shuai Zhang 3 weeks ago
Hi Konrad

Thanks for your review.

On 3/13/2026 8:34 PM, Konrad Dybcio wrote:
> On 3/13/26 7:37 AM, Shuai Zhang wrote:
>> Hi Konrad
>>
>> On 3/11/2026 9:07 PM, Konrad Dybcio wrote:
>>> On 3/11/26 10:09 AM, Shuai Zhang wrote:
>>>> When Bluetooth supports both USB and UART, the BT UART driver is
>>>> always loaded, while USB is hot-pluggable. As a result, when Bluetooth
>>>> is used over USB, the UART driver still be probed and drive BT_EN low,
>>>> which causes the Bluetooth device on USB to be disconnected.
>>> Is bluetooth connected over UART *and* USB simultaneously?
>> BT uses either UART or USB, never both at the same time.
>>
>> On platforms supporting both, the UART driver is always probed, while USB is hot‑pluggable.
>>
>> As a result, when BT runs over USB, the UART driver still probes and pulls BT_EN low,
>>
>> unintentionally powering off the USB BT device.
> Please describe in more detail how that difference can appear in practice.
>
> Is there an M.2 slot, into which different kinds of cards (i.e. ones with
> BT-over-USB vs BT-over-UART) may be plugged in?

Yes, this is an M.2 slot that can accommodate different types of cards.
Additionally, the maintainer proposed option [1], which should be able 
to resolve my issue.

I am currently evaluating it.

[1]https://lore.kernel.org/r/20260224-pci-m2-e-v5-9-dd9b9501d33c@oss.qualcomm.com

>
> Konrad


Thanks,
Shuai