// SPDX-License-Identifier: BSD-3-Clause /* * Copyright (c) 2020, Konrad Dybcio */ #include "msm8994.dtsi" #include "pm8994.dtsi" #include "pmi8994.dtsi" #include #include / { /* required for bootloader to select correct board */ /* * We support MSM8994 v2 (0x20000) and v2.1 (0x20001). * The V1 chip (0x0 and 0x10000) is significantly different * and requires driver-side changes (including CPR, be warned!!). * Besides that, it's very rare. */ qcom,msm-id = <207 0x20000>, <207 0x20001>; /* We only use pm8994+pmi8994. */ qcom,pmic-id = <0x10009 0x1000a 0x00 0x00>; /* This property is shared across all kitakami devices. */ qcom,board-id = <8 0>; /* Kitakami firmware doesn't support PSCI */ /delete-node/ psci; gpio_keys { compatible = "gpio-keys"; input-name = "gpio-keys"; #address-cells = <1>; #size-cells = <0>; autorepeat; button@0 { label = "Volume Down"; gpios = <&pm8994_gpios 2 GPIO_ACTIVE_LOW>; linux,input-type = <1>; linux,code = ; wakeup-source; debounce-interval = <15>; }; button@1 { label = "Volume Up"; gpios = <&pm8994_gpios 3 GPIO_ACTIVE_LOW>; linux,input-type = <1>; linux,code = ; wakeup-source; debounce-interval = <15>; }; button@2 { label = "Camera Snapshot"; gpios = <&pm8994_gpios 4 GPIO_ACTIVE_LOW>; linux,input-type = <1>; linux,code = ; wakeup-source; debounce-interval = <15>; }; button@3 { label = "Camera Focus"; gpios = <&pm8994_gpios 5 GPIO_ACTIVE_LOW>; linux,input-type = <1>; linux,code = ; wakeup-source; debounce-interval = <15>; }; }; reserved-memory { /* This is for getting crash logs using Android downstream kernels */ ramoops@1fe00000 { compatible = "ramoops"; reg = <0 0x1fe00000 0 0x200000>; console-size = <0x100000>; record-size = <0x10000>; ftrace-size = <0x10000>; pmsg-size = <0x80000>; }; fb_region: fb_region@40000000 { reg = <0 0x40000000 0 0x1000000>; no-map; }; tzapp: memory@c7800000 { reg = <0 0xc7800000 0 0x1900000>; no-map; }; }; }; &blsp_spi0 { status = "okay"; /* FPC fingerprint reader */ }; /* I2C1 is disabled on this board */ &blsp_i2c2 { status = "okay"; /* NXP PN547 NFC */ }; &blsp_i2c4 { status = "okay"; /* Empty but active */ }; &blsp_i2c5 { status = "okay"; /* sii8620 HDMI/MHL bridge */ }; &blsp_i2c6 { status = "okay"; touchscreen: rmi4-i2c-dev@2c { compatible = "syna,rmi4-i2c"; reg = <0x2c>; #address-cells = <1>; #size-cells = <0>; interrupt-parent = <&tlmm>; interrupts = <42 IRQ_TYPE_EDGE_FALLING>; pinctrl-names = "default"; pinctrl-0 = <&ts_int_active &ts_reset_active>; vdd-supply = <&pm8994_l22>; vio-supply = <&pm8994_s4>; syna,reset-delay-ms = <220>; syna,startup-delay-ms = <220>; rmi4-f01@1 { reg = <0x01>; syna,nosleep-mode = <1>; }; rmi4-f11@11 { reg = <0x11>; syna,sensor-type = <1>; }; }; }; &blsp1_uart2 { status = "okay"; }; &blsp2_uart2 { status = "okay"; }; /* * Kitakami bootloader only turns cont_splash on when it detects * specific downstream MDSS/backlight nodes in the active DTB. * One way to use that framebuffer is to load a secondary instance of * LK with the downstream DTB appended and then, only from there, load * mainline Linux. */ &cont_splash_mem { reg = <0 0x3401000 0 0x2200000>; }; &pmi8994_spmi_regulators { /* * Yeah, this one *is* managed by RPMPD, but also needs * to be hacked up as a-o due to the GPU device only accepting a single * power domain.. which still isn't enough and forces us to bind * OXILI_CX and OXILI_GX together! */ vdd_gfx: s2@1700 { reg = <0x1700 0x100>; regulator-name = "VDD_GFX"; regulator-min-microvolt = <980000>; regulator-max-microvolt = <980000>; /* hack until we rig up the gpu consumer */ regulator-always-on; }; }; &rpm_requests { pm8994_regulators: pm8994-regulators { compatible = "qcom,rpm-pm8994-regulators"; vdd_s1-supply = <&vph_pwr>; vdd_s2-supply = <&vph_pwr>; vdd_s3-supply = <&vph_pwr>; vdd_s4-supply = <&vph_pwr>; vdd_s5-supply = <&vph_pwr>; vdd_s6-supply = <&vph_pwr>; vdd_s7-supply = <&vph_pwr>; vdd_s8-supply = <&vph_pwr>; vdd_s9-supply = <&vph_pwr>; vdd_s10-supply = <&vph_pwr>; vdd_s11-supply = <&vph_pwr>; vdd_s12-supply = <&vph_pwr>; vdd_l1-supply = <&pmi8994_s1>; vdd_l2_l26_l28-supply = <&pm8994_s3>; vdd_l3_l11-supply = <&pm8994_s3>; vdd_l4_l27_l31-supply = <&pm8994_s3>; vdd_l5_l7-supply = <&pm8994_s5>; vdd_l6_l12_l32-supply = <&pm8994_s5>; vdd_l8_l16_l30-supply = <&vph_pwr>; vdd_l9_l10_l18_l22-supply = <&pmi8994_bby>; vdd_l13_l19_l23_l24-supply = <&pmi8994_bby>; vdd_l14_l15-supply = <&pm8994_s5>; vdd_l17_l29-supply = <&pmi8994_bby>; vdd_l20_l21-supply = <&pmi8994_bby>; vdd_l25-supply = <&pm8994_s3>; vdd_lvs1_lvs2-supply = <&pm8994_s4>; /* S1, S2, S6 and S12 are managed by RPMPD */ pm8994_s3: s3 { regulator-min-microvolt = <1300000>; regulator-max-microvolt = <1300000>; }; pm8994_s4: s4 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-allow-set-load; regulator-always-on; regulator-system-load = <325000>; }; pm8994_s5: s5 { regulator-min-microvolt = <2150000>; regulator-max-microvolt = <2150000>; }; pm8994_s7: s7 { regulator-min-microvolt = <1000000>; regulator-max-microvolt = <1000000>; }; /* * S8 - SPMI-managed VDD_APC0 * S9, S10 and S11 (the main one) - SPMI-managed VDD_APC1 */ pm8994_l1: l1 { regulator-min-microvolt = <1000000>; regulator-max-microvolt = <1000000>; }; pm8994_l2: l2 { regulator-min-microvolt = <1250000>; regulator-max-microvolt = <1250000>; regulator-allow-set-load; regulator-system-load = <10000>; }; pm8994_l3: l3 { regulator-min-microvolt = <1100000>; regulator-max-microvolt = <1100000>; }; pm8994_l4: l4 { regulator-min-microvolt = <1225000>; regulator-max-microvolt = <1225000>; }; /* L5 is inaccessible from RPM */ pm8994_l6: l6 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; }; /* L7 is inaccessible from RPM */ pm8994_l8: l8 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; }; pm8994_l9: l9 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; }; pm8994_l10: l10 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; }; pm8994_l11: l11 { regulator-min-microvolt = <1200000>; regulator-max-microvolt = <1200000>; }; pm8994_l12: l12 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-allow-set-load; regulator-system-load = <10000>; }; pm8994_l13: l13 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <2950000>; }; pm8994_l14: l14 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-allow-set-load; regulator-system-load = <10000>; }; pm8994_l15: l15 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; }; pm8994_l16: l16 { regulator-min-microvolt = <2700000>; regulator-max-microvolt = <2700000>; }; pm8994_l17: l17 { regulator-min-microvolt = <2200000>; regulator-max-microvolt = <2200000>; }; pm8994_l18: l18 { regulator-min-microvolt = <2850000>; regulator-max-microvolt = <2850000>; regulator-always-on; }; pm8994_l19: l19 { regulator-min-microvolt = <2850000>; regulator-max-microvolt = <2850000>; }; pm8994_l20: l20 { regulator-min-microvolt = <2950000>; regulator-max-microvolt = <2950000>; regulator-always-on; regulator-boot-on; regulator-allow-set-load; regulator-system-load = <570000>; }; pm8994_l21: l21 { regulator-min-microvolt = <2950000>; regulator-max-microvolt = <2950000>; regulator-always-on; regulator-allow-set-load; regulator-system-load = <800000>; }; pm8994_l22: l22 { regulator-min-microvolt = <3000000>; regulator-max-microvolt = <3000000>; }; pm8994_l23: l23 { regulator-min-microvolt = <2800000>; regulator-max-microvolt = <2800000>; }; pm8994_l24: l24 { regulator-min-microvolt = <3075000>; regulator-max-microvolt = <3150000>; }; pm8994_l25: l25 { regulator-min-microvolt = <1000000>; regulator-max-microvolt = <1000000>; }; pm8994_l26: l26 { regulator-min-microvolt = <987500>; regulator-max-microvolt = <987500>; }; pm8994_l27: l27 { regulator-min-microvolt = <1200000>; regulator-max-microvolt = <1200000>; }; pm8994_l28: l28 { regulator-min-microvolt = <1000000>; regulator-max-microvolt = <1000000>; regulator-allow-set-load; regulator-system-load = <10000>; }; pm8994_l29: l29 { regulator-min-microvolt = <2700000>; regulator-max-microvolt = <2700000>; }; pm8994_l30: l30 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; }; pm8994_l31: l31 { regulator-min-microvolt = <1200000>; regulator-max-microvolt = <1200000>; regulator-allow-set-load; regulator-system-load = <10000>; }; pm8994_l32: l32 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; }; pm8994_lvs1: lvs1 {}; pm8994_lvs2: lvs2 {}; }; pmi8994_regulators: pmi8994-regulators { compatible = "qcom,rpm-pmi8994-regulators"; vdd_s1-supply = <&vph_pwr>; vdd_bst_byp-supply = <&vph_pwr>; pmi8994_s1: s1 { regulator-min-microvolt = <1025000>; regulator-max-microvolt = <1025000>; }; /* S2 & S3 - VDD_GFX */ pmi8994_bby: boost-bypass { regulator-min-microvolt = <3150000>; regulator-max-microvolt = <3600000>; }; }; }; &sdhc1 { /* * There is an issue with the eMMC causing permanent * damage to the card if a quirk isn't addressed. * Until it's fixed, disable the MMC so as not to brick * devices. */ status = "disabled"; /* * Downstream pushes 2.95V to the sdhci device, * but upstream driver REALLY wants to make vmmc 1.8v * cause of the hs400-1_8v mode. MMC works fine without * that regulator, so let's not use it for now. * vqmmc is also disabled cause driver stll complains. * * vmmc-supply = <&pm8994_l20>; * vqmmc-supply = <&pm8994_s4>; */ }; &sdhc2 { status = "okay"; cd-gpios = <&tlmm 100 0>; vmmc-supply = <&pm8994_l21>; vqmmc-supply = <&pm8994_l13>; }; &tlmm { ts_int_active: ts-int-active { pins = "gpio42"; drive-strength = <2>; bias-disable; input-enable; }; ts_reset_active: ts-reset-active { pins = "gpio109"; drive-strength = <2>; bias-disable; output-low; }; };