Add the necessary pinctrl, interrupt property and a suitable sleep config
to support Bluetooth wakeup feature.

GPIO mode is configured in sleep state to drive the RTS/RFR line low.
If QUP function is selected in sleep state, UART RTS/RFR is pulled high
during suspend and BT SoC not able to send wakeup bytes.

Signed-off-by: satya priya <ska...@codeaurora.org>
---
Changes in V2:
 - This patch adds sleep state for BT UART. Newly added in V2.

Changes in V3:
 - Remove "output-high" for TX from both sleep and default states
   as it is not required. Configure pull-up for TX in sleep state.

Changes in V4:
 - As per Matthias's comment, removed drive-strength for sleep state
   and fixed nit-pick.

Changes in V5:
 - As per Matthias's comments, moved pinmux change for sleep state,
   pinctrl and interrupt config to the board specific file.

Changes in V6:
 - As per Doug's comments changed subject, deleted interrupts property.
 - As per Bjorn's comments changed commit text and rationale for RTS,
   TX and RX.

 arch/arm64/boot/dts/qcom/sc7180-idp.dts | 55 +++++++++++++++++++++++++++++++++
 1 file changed, 55 insertions(+)

diff --git a/arch/arm64/boot/dts/qcom/sc7180-idp.dts 
b/arch/arm64/boot/dts/qcom/sc7180-idp.dts
index 04888df..e416409 100644
--- a/arch/arm64/boot/dts/qcom/sc7180-idp.dts
+++ b/arch/arm64/boot/dts/qcom/sc7180-idp.dts
@@ -346,6 +346,13 @@
 &uart3 {
        status = "okay";
 
+       /delete-property/interrupts;
+       interrupts-extended = <&intc GIC_SPI 604 IRQ_TYPE_LEVEL_HIGH>,
+                               <&tlmm 41 IRQ_TYPE_EDGE_FALLING>;
+
+       pinctrl-names = "default", "sleep";
+       pinctrl-1 = <&qup_uart3_sleep>;
+
        bluetooth: wcn3990-bt {
                compatible = "qcom,wcn3990-bt";
                vddio-supply = <&vreg_l10a_1p8>;
@@ -545,3 +552,51 @@
        };
 };
 
+&tlmm {
+       qup_uart3_sleep: qup-uart3-sleep {
+               pinmux {
+                       pins = "gpio38", "gpio39",
+                              "gpio40", "gpio41";
+                       function = "gpio";
+               };
+
+               pinconf-cts {
+                       /*
+                        * Configure a pull-down on CTS to match the pull of
+                        * the Bluetooth module.
+                        */
+                       pins = "gpio38";
+                       bias-pull-down;
+               };
+
+               pinconf-rts {
+                       /*
+                        * Configure pull-down on RTS. As RTS is active low
+                        * signal, pull it low to indicate the BT SoC that it
+                        * can wakeup the system anytime from suspend state by
+                        * pulling RX low (by sending wakeup bytes).
+                        */
+                        pins = "gpio39";
+                        bias-pull-down;
+               };
+
+               pinconf-tx {
+                       /*
+                        * Configure pull-up on TX when it isn't actively driven
+                        * to prevent BT SoC from receiving garbage during 
sleep.
+                        */
+                       pins = "gpio40";
+                       bias-pull-up;
+               };
+
+               pinconf-rx {
+                       /*
+                        * Configure a pull-up on RX. This is needed to avoid
+                        * garbage data when the TX pin of the Bluetooth module
+                        * is floating which may cause spurious wakeups.
+                        */
+                       pins = "gpio41";
+                       bias-pull-up;
+               };
+       };
+};
-- 
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member 
of Code Aurora Forum, hosted by The Linux Foundation

Reply via email to