arm64: dts: qcom: sdm845-tama: Add Synaptics Touchscreen
authorKonrad Dybcio <konrad.dybcio@somainline.org>
Wed, 29 Mar 2023 19:41:19 +0000 (21:41 +0200)
committerBjorn Andersson <andersson@kernel.org>
Wed, 5 Apr 2023 03:29:44 +0000 (20:29 -0700)
Add required pins and RMI4 node to the common DT and remove it
from Akatsuki, as it uses a different touch.

Since the panels are super high tech proprietary incell, they
need to be handled with very precise timings. As such the panel
driver sets up the power rails and GPIOs and the touchscreen
driver *has to* probe afterwards.

Signed-off-by: Konrad Dybcio <konrad.dybcio@somainline.org>
Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
Link: https://lore.kernel.org/r/20230313-topic-tama_disp-v3-2-2b1567c039d7@linaro.org
arch/arm64/boot/dts/qcom/sdm845-sony-xperia-tama-akatsuki.dts
arch/arm64/boot/dts/qcom/sdm845-sony-xperia-tama.dtsi

index 81cbf535cb76c565d92b06876237ec368d808fa8..5d2052a0ff69fd6789da35833f839265dfe2630b 100644 (file)
@@ -7,6 +7,9 @@
 
 #include "sdm845-sony-xperia-tama.dtsi"
 
+/* XZ3 uses an Atmel touchscreen instead. */
+/delete-node/ &touchscreen;
+
 / {
        model = "Sony Xperia XZ3";
        compatible = "sony,akatsuki-row", "qcom,sdm845";
index 3c7d129d9d8ec10696e67153a6df9731f2ee7d4c..8172d0c9c1a32133c4a179cd87bbdf3233227d51 100644 (file)
 };
 
 &i2c5 {
-       status = "okay";
        clock-frequency = <400000>;
+       status = "okay";
+
+       touchscreen: touchscreen@2c {
+               compatible = "syna,rmi4-i2c";
+               reg = <0x2c>;
+
+               interrupts-extended = <&tlmm 125 IRQ_TYPE_EDGE_FALLING>;
+               vdd-supply = <&vreg_l14a_1p8>;
+               /*
+                * This is a blatant abuse of OF, but the panel driver *needs*
+                * to probe first, as the power/gpio switching needs to be precisely
+                * timed in order for both the display and touch panel to function properly.
+                */
+               incell-supply = <&panel>;
+
+               syna,reset-delay-ms = <220>;
+               syna,startup-delay-ms = <1000>;
+
+               pinctrl-0 = <&ts_default>;
+               pinctrl-1 = <&ts_sleep>;
+               pinctrl-names = "default", "sleep";
+
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               rmi4-f01@1 {
+                       reg = <0x01>;
+                       syna,nosleep-mode = <1>;
+               };
 
-       /* Synaptics touchscreen @ 2c, 3c */
+               rmi4-f12@12 {
+                       reg = <0x12>;
+                       syna,sensor-type = <1>;
+               };
+       };
 };
 
 &i2c10 {
                drive-strength = <2>;
                bias-pull-down;
        };
+
+       ts_default: ts-default-state {
+               reset-pins {
+                       pins = "gpio99";
+                       function = "gpio";
+                       drive-strength = <2>;
+                       bias-pull-up;
+               };
+
+               int-pins {
+                       pins = "gpio125";
+                       function = "gpio";
+                       drive-strength = <2>;
+                       bias-pull-up;
+               };
+       };
+
+       ts_sleep: ts-sleep-state {
+               reset-pins {
+                       pins = "gpio99";
+                       function = "gpio";
+                       drive-strength = <2>;
+                       bias-pull-down;
+               };
+
+               int-pins {
+                       pins = "gpio125";
+                       function = "gpio";
+                       drive-strength = <2>;
+                       bias-pull-down;
+               };
+       };
 };
 
 &uart6 {