BT_REG_ON (BT_EN) line of the BCM4330 WLAN/BT combo chip is connected to the XMMC1CMD pad (GPK1[1]), while the XMDMADDR_4 pad (GPE1[4]) is connected to BT_RST (BT_nRST). The Bluetooth node however used GPE1[4] as shutdown-gpios and left the real BT_REG_ON line undriven, so it was kept low by the default SoC pull-down. This worked only by accident: the internal regulators of the BCM4330 are enabled when either WL_REG_ON or BT_REG_ON is high, so the Bluetooth core was powered via WL_REG_ON driven by the SDIO WLAN power sequence, while toggling GPE1[4] only released it from reset. Once 'cap-power-off-card' was added to the SDIO node, the MMC core started to power off the WLAN part (asserting WL_REG_ON low) whenever it was idle, what cut off the Bluetooth power as well and resulted in HCI command timeouts. Fix this by using GPK1[1] as shutdown-gpios and describing GPE1[4] as active-low reset-gpios. While touching this, move the GPE1[4] pin configuration to the pinctrl_0 node, as GPE1 bank belongs to that pin controller, what fixes the following error: samsung-pinctrl 11000000.pinctrl: does not have pin group gpe1-4 Fixes: 8929d4a9d204 ("ARM: dts: exynos: Enable BlueTooth support for Universal C210 board") Cc: stable@vger.kernel.org Signed-off-by: Marek Szyprowski --- This patch was developed with LLM assistance and have been tested on the real UniversalC210 board. Best regards Marek Szyprowski, PhD Samsung R&D Institute Poland --- .../boot/dts/samsung/exynos4210-universal_c210.dts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/arch/arm/boot/dts/samsung/exynos4210-universal_c210.dts b/arch/arm/boot/dts/samsung/exynos4210-universal_c210.dts index 744039068e8f..79c0c27d9377 100644 --- a/arch/arm/boot/dts/samsung/exynos4210-universal_c210.dts +++ b/arch/arm/boot/dts/samsung/exynos4210-universal_c210.dts @@ -537,7 +537,7 @@ &ohci { &pinctrl_1 { bt_shutdown: bt-shutdown-pins { - samsung,pins = "gpe1-4"; + samsung,pins = "gpk1-1"; samsung,pin-function = ; samsung,pin-pud = ; }; @@ -572,6 +572,12 @@ i2c_ddc_bus: i2c-ddc-bus-pins { samsung,pin-pud = ; samsung,pin-drv = ; }; + + bt_reset: bt-reset-pins { + samsung,pins = "gpe1-4"; + samsung,pin-function = ; + samsung,pin-pud = ; + }; }; &pwm { @@ -641,9 +647,10 @@ bluetooth { max-speed = <3000000>; - pinctrl-0 = <&bt_shutdown &bt_device_wakeup &bt_host_wakeup>; + pinctrl-0 = <&bt_shutdown &bt_reset &bt_device_wakeup &bt_host_wakeup>; pinctrl-names = "default"; - shutdown-gpios = <&gpe1 4 GPIO_ACTIVE_HIGH>; + shutdown-gpios = <&gpk1 1 GPIO_ACTIVE_HIGH>; + reset-gpios = <&gpe1 4 GPIO_ACTIVE_LOW>; device-wakeup-gpios = <&gpx3 1 GPIO_ACTIVE_HIGH>; host-wakeup-gpios = <&gpx2 6 GPIO_ACTIVE_HIGH>; }; -- 2.43.0