milos-linux/arch/arm64/boot/dts/qcom/milos-fairphone-fp6.dts
Jorijn van der Graaf 2e9adc633e Merge branch 'sensors' into combined-stable
# Conflicts:
#	arch/arm64/boot/dts/qcom/milos-fairphone-fp6.dts
2026-07-16 15:41:12 +02:00

1451 lines
31 KiB
Devicetree

// SPDX-License-Identifier: BSD-3-Clause
/*
* Copyright (c) 2025, Luca Weiss <luca.weiss@fairphone.com>
*/
/dts-v1/;
#define PMIV0104_SID 7
#include <dt-bindings/leds/common.h>
#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
#include "milos.dtsi"
#include "pm7550.dtsi"
#include "pm8550vs.dtsi"
#include "pmiv0104.dtsi" /* PMIV0108 */
#include "pmk8550.dtsi" /* PMK7635 */
#include "pmr735b.dtsi"
/ {
model = "The Fairphone (Gen. 6)";
compatible = "fairphone,fp6", "qcom,milos";
chassis-type = "handset";
aliases {
serial0 = &uart5;
serial1 = &uart11;
};
/*
* The sensor I2C bus sits on TLMM eGPIO pads that have no AP QUP
* function; on the stock OS it is driven by an island QUP of the
* Snapdragon Sensor Core (ADSP). From the AP the pads are only
* usable as software GPIOs, so bit-bang the bus.
* Devices on the bus: QMC6308 magnetometer @ 0x2c, SPL07
* barometer @ 0x76, STK3BCx ALS/proximity @ 0x48.
*/
i2c-sensors {
compatible = "i2c-gpio";
sda-gpios = <&tlmm 153 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
scl-gpios = <&tlmm 154 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
i2c-gpio,delay-us = <2>;
pinctrl-0 = <&sensor_i2c_default>;
pinctrl-names = "default";
#address-cells = <1>;
#size-cells = <0>;
magnetometer@2c {
compatible = "qstcorp,qmc6308";
reg = <0x2c>;
vdd-supply = <&vreg_l10b>;
mount-matrix = "0", "-1", "0",
"1", "0", "0",
"0", "0", "1";
};
};
gpio-keys {
compatible = "gpio-keys";
pinctrl-0 = <&volume_up_default>, <&hall_sensor_default>;
pinctrl-names = "default";
/* Powered by the always-on vreg_l10b */
event-hall-sensor {
label = "Hall Effect Sensor";
gpios = <&tlmm 70 GPIO_ACTIVE_LOW>;
linux,input-type = <EV_SW>;
linux,code = <SW_LID>;
linux,can-disable;
wakeup-source;
};
key-volume-up {
label = "Volume Up";
gpios = <&pm7550_gpios 6 GPIO_ACTIVE_LOW>;
linux,code = <KEY_VOLUMEUP>;
};
switch {
label = "Switch";
gpios = <&tlmm 107 GPIO_ACTIVE_HIGH>;
linux,input-type = <EV_SW>;
linux,code = <SW_MUTE_DEVICE>;
};
};
pmic-glink {
compatible = "qcom,milos-pmic-glink",
"qcom,sm8550-pmic-glink",
"qcom,pmic-glink";
#address-cells = <1>;
#size-cells = <0>;
orientation-gpios = <&tlmm 131 GPIO_ACTIVE_HIGH>;
connector@0 {
compatible = "usb-c-connector";
reg = <0>;
power-role = "dual";
data-role = "dual";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
pmic_glink_hs_in: endpoint {
remote-endpoint = <&usb_1_dwc3_hs>;
};
};
};
};
};
vreg_ff_afvdd_2p8: regulator-ff-afvdd-2p8 {
compatible = "regulator-fixed";
regulator-name = "ff_afvdd_2p8";
regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>;
startup-delay-us = <100>;
gpio = <&tlmm 93 GPIO_ACTIVE_HIGH>;
enable-active-high;
vin-supply = <&vreg_bob>;
};
vreg_uw_afvdd_2p8: regulator-uw-afvdd-2p8 {
compatible = "regulator-fixed";
regulator-name = "uw_afvdd_2p8";
regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>;
startup-delay-us = <100>;
gpio = <&tlmm 23 GPIO_ACTIVE_HIGH>;
enable-active-high;
vin-supply = <&vreg_bob>;
};
vreg_uw_dvdd: regulator-uw-dvdd {
compatible = "regulator-fixed";
regulator-name = "uw_dvdd";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>;
startup-delay-us = <100>;
gpio = <&tlmm 28 GPIO_ACTIVE_HIGH>;
enable-active-high;
vin-supply = <&vreg_s1b>;
};
vreg_ois_avdd0_1p8: regulator-ois-avdd0-1p8 {
compatible = "regulator-fixed";
regulator-name = "ois_avdd0_1p8";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
startup-delay-us = <100>;
gpio = <&tlmm 27 GPIO_ACTIVE_HIGH>;
enable-active-high;
vin-supply = <&vreg_bob>;
};
vreg_ois_vdd: regulator-ois-vdd {
compatible = "regulator-fixed";
regulator-name = "ois_vdd";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
startup-delay-us = <100>;
gpio = <&tlmm 24 GPIO_ACTIVE_HIGH>;
enable-active-high;
vin-supply = <&vph_pwr>;
};
vreg_oled_dvdd_1p2: regulator-oled-dvdd-1p2 {
compatible = "regulator-fixed";
regulator-name = "oled_dvdd_1p2";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>;
gpio = <&tlmm 54 GPIO_ACTIVE_HIGH>;
enable-active-high;
vin-supply = <&vreg_s2b>;
regulator-boot-on;
};
vreg_s1j: regulator-pm3001a-s1j {
compatible = "regulator-fixed";
regulator-name = "pm3001a_s1j";
regulator-min-microvolt = <2200000>;
regulator-max-microvolt = <2200000>;
startup-delay-us = <1000>;
gpio = <&pmr735b_gpios 1 GPIO_ACTIVE_HIGH>;
enable-active-high;
vin-supply = <&vph_pwr>;
pinctrl-0 = <&s1j_enable_default>;
pinctrl-names = "default";
};
vreg_vtof_ldo_3p3: regulator-vtof-ldo-3p3 {
compatible = "regulator-fixed";
regulator-name = "vtof_ldo_3p3";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
startup-delay-us = <100>;
gpio = <&tlmm 76 GPIO_ACTIVE_HIGH>;
enable-active-high;
vin-supply = <&vph_pwr>;
};
vph_pwr: regulator-vph-pwr {
compatible = "regulator-fixed";
regulator-name = "vph_pwr";
regulator-min-microvolt = <3700000>;
regulator-max-microvolt = <3700000>;
regulator-always-on;
regulator-boot-on;
};
sound {
compatible = "qcom,milos-sndcard", "qcom,sm8450-sndcard";
model = "Fairphone (Gen. 6)";
audio-routing = "AMIC1", "MIC BIAS1",
"AMIC2", "MIC BIAS2",
"AMIC3", "MIC BIAS3",
"TX SWR_INPUT0", "ADC1_OUTPUT",
"TX SWR_INPUT1", "ADC2_OUTPUT",
"TX SWR_INPUT2", "ADC3_OUTPUT";
pinctrl-0 = <&lpi_i2s2_active>;
pinctrl-1 = <&lpi_i2s2_sleep>;
pinctrl-names = "default",
"sleep";
wcd-capture-dai-link {
link-name = "WCD Capture";
codec {
sound-dai = <&wcd9378 1>, <&swr2 0>, <&lpass_txmacro 0>;
};
cpu {
sound-dai = <&q6apmbedai TX_CODEC_DMA_TX_3>;
};
platform {
sound-dai = <&q6apm>;
};
};
i2s-dai-link {
link-name = "Senary MI2S Playback";
codec {
sound-dai = <&aw88261_l>, <&aw88261_r>;
};
cpu {
sound-dai = <&q6apmbedai SENARY_MI2S_RX>;
};
platform {
sound-dai = <&q6apm>;
};
};
};
wcd9378: audio-codec {
compatible = "qcom,wcd9378-codec";
pinctrl-0 = <&wcd_reset_n_active>;
pinctrl-names = "default";
reset-gpios = <&tlmm 162 GPIO_ACTIVE_LOW>;
vdd-buck-supply = <&vreg_l8b>;
vdd-rxtx-supply = <&vreg_l7b>;
vdd-io-supply = <&vreg_l7b>;
vdd-mic-bias-supply = <&vreg_bob>;
qcom,micbias1-microvolt = <1800000>;
qcom,micbias2-microvolt = <1800000>;
qcom,micbias3-microvolt = <1800000>;
qcom,rx-device = <&wcd9378_rx>;
qcom,tx-device = <&wcd9378_tx>;
#sound-dai-cells = <1>;
};
thermal-zones {
pm8008-thermal {
polling-delay-passive = <100>;
thermal-sensors = <&pm8008>;
trips {
trip0 {
temperature = <95000>;
hysteresis = <0>;
type = "passive";
};
trip1 {
temperature = <115000>;
hysteresis = <0>;
type = "critical";
};
};
};
};
wcn6750-pmu {
compatible = "qcom,wcn6755-pmu", "qcom,wcn6750-pmu";
vddaon-supply = <&vreg_s3b>;
vddasd-supply = <&vreg_l7b>;
vddpmu-supply = <&vreg_s3b>;
vddrfa0p8-supply = <&vreg_s3b>;
vddrfa1p2-supply = <&vreg_s2b>;
vddrfa1p7-supply = <&vreg_s1b>;
vddrfa2p2-supply = <&vreg_s1j>;
bt-enable-gpios = <&tlmm 53 GPIO_ACTIVE_HIGH>;
clocks = <&rpmhcc RPMH_RF_CLK1>;
pinctrl-0 = <&bluetooth_enable_default>, <&pmk8550_sleep_clk_default>;
pinctrl-names = "default";
regulators {
vreg_pmu_rfa_cmn: ldo0 {
regulator-name = "vreg_pmu_rfa_cmn";
};
vreg_pmu_aon_0p59: ldo1 {
regulator-name = "vreg_pmu_aon_0p59";
};
vreg_pmu_wlcx_0p8: ldo2 {
regulator-name = "vreg_pmu_wlcx_0p8";
};
vreg_pmu_wlmx_0p85: ldo3 {
regulator-name = "vreg_pmu_wlmx_0p85";
};
vreg_pmu_btcmx_0p85: ldo4 {
regulator-name = "vreg_pmu_btcmx_0p85";
};
vreg_pmu_rfa_0p8: ldo5 {
regulator-name = "vreg_pmu_rfa_0p8";
};
vreg_pmu_rfa_1p2: ldo6 {
regulator-name = "vreg_pmu_rfa_1p2";
};
vreg_pmu_rfa_1p7: ldo7 {
regulator-name = "vreg_pmu_rfa_1p7";
};
vreg_pmu_pcie_0p9: ldo8 {
regulator-name = "vreg_pmu_pcie_0p9";
};
vreg_pmu_pcie_1p8: ldo9 {
regulator-name = "vreg_pmu_pcie_1p8";
};
};
};
};
&apps_rsc {
regulators-0 {
compatible = "qcom,pm7550-rpmh-regulators";
vdd-l1-supply = <&vreg_s1b>;
vdd-l2-l3-supply = <&vreg_s3b>;
vdd-l4-l5-supply = <&vreg_s2b>;
vdd-l6-supply = <&vreg_s2b>;
vdd-l7-supply = <&vreg_s1b>;
vdd-l8-supply = <&vreg_s1b>;
vdd-l9-l10-supply = <&vreg_s1b>;
vdd-l11-supply = <&vreg_s1b>;
vdd-l12-l14-supply = <&vreg_bob>;
vdd-l13-l16-supply = <&vreg_bob>;
vdd-l15-l17-l18-l19-l20-l21-l22-l23-supply = <&vreg_bob>;
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>;
qcom,pmic-id = "b";
vreg_s1b: smps1 {
regulator-name = "vreg_s1b";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <2080000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_s2b: smps2 {
regulator-name = "vreg_s2b";
regulator-min-microvolt = <1256000>;
regulator-max-microvolt = <1408000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_s3b: smps3 {
regulator-name = "vreg_s3b";
regulator-min-microvolt = <880000>;
regulator-max-microvolt = <1040000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l2b: ldo2 {
regulator-name = "vreg_l2b";
regulator-min-microvolt = <880000>;
regulator-max-microvolt = <912000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l3b: ldo3 {
regulator-name = "vreg_l3b";
regulator-min-microvolt = <880000>;
regulator-max-microvolt = <912000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l4b: ldo4 {
regulator-name = "vreg_l4b";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l5b: ldo5 {
regulator-name = "vreg_l5b";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l7b: ldo7 {
regulator-name = "vreg_l7b";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l8b: ldo8 {
regulator-name = "vreg_l8b";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l9b: ldo9 {
regulator-name = "vreg_l9b";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l10b: ldo10 {
regulator-name = "vreg_l10b";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
/* Hall sensor VDD */
regulator-always-on;
};
vreg_l11b: ldo11 {
regulator-name = "vreg_l11b";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l12b: ldo12 {
regulator-name = "vreg_l12b";
/*
* Skip voltage voting for UFS VCC.
*/
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l13b: ldo13 {
regulator-name = "vreg_l13b";
regulator-min-microvolt = <2700000>;
regulator-max-microvolt = <3300000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l14b: ldo14 {
regulator-name = "vreg_l14b";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3304000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l15b: ldo15 {
regulator-name = "vreg_l15b";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3304000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l16b: ldo16 {
regulator-name = "vreg_l16b";
regulator-min-microvolt = <3008000>;
regulator-max-microvolt = <3008000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l17b: ldo17 {
regulator-name = "vreg_l17b";
regulator-min-microvolt = <3104000>;
regulator-max-microvolt = <3104000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l18b: ldo18 {
regulator-name = "vreg_l18b";
regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l19b: ldo19 {
regulator-name = "vreg_l19b";
regulator-min-microvolt = <3000000>;
regulator-max-microvolt = <3000000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l20b: ldo20 {
regulator-name = "vreg_l20b";
regulator-min-microvolt = <1620000>;
regulator-max-microvolt = <3544000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l21b: ldo21 {
regulator-name = "vreg_l21b";
regulator-min-microvolt = <1620000>;
regulator-max-microvolt = <3544000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l22b: ldo22 {
regulator-name = "vreg_l22b";
regulator-min-microvolt = <3200000>;
regulator-max-microvolt = <3200000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l23b: ldo23 {
regulator-name = "vreg_l23b";
regulator-min-microvolt = <1650000>;
regulator-max-microvolt = <3544000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_bob: bob {
regulator-name = "vreg_bob";
regulator-min-microvolt = <3008000>;
regulator-max-microvolt = <3960000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
};
regulators-1 {
compatible = "qcom,pm8550vs-rpmh-regulators";
vdd-l1-supply = <&vreg_s3b>;
vdd-l3-supply = <&vreg_s3b>;
qcom,pmic-id = "c";
vreg_l2c: ldo2 {
regulator-name = "vreg_l2c";
regulator-min-microvolt = <320000>;
regulator-max-microvolt = <650000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
};
regulators-2 {
compatible = "qcom,pmr735b-rpmh-regulators";
vdd-l1-l2-supply= <&vreg_s3b>;
vdd-l3-supply= <&vreg_s3b>;
vdd-l4-supply= <&vreg_s1b>;
vdd-l5-supply= <&vreg_s2b>;
vdd-l6-supply= <&vreg_s2b>;
vdd-l7-l8-supply= <&vreg_s2b>;
vdd-l9-supply= <&vreg_s3b>;
vdd-l10-supply= <&vreg_s1b>;
vdd-l11-supply= <&vreg_s3b>;
vdd-l12-supply= <&vreg_s3b>;
qcom,pmic-id = "f";
vreg_l1f: ldo1 {
regulator-name = "vreg_l1f";
regulator-min-microvolt = <852000>;
regulator-max-microvolt = <950000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l2f: ldo2 {
regulator-name = "vreg_l2f";
regulator-min-microvolt = <751000>;
regulator-max-microvolt = <824000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l3f: ldo3 {
regulator-name = "vreg_l3f";
regulator-min-microvolt = <650000>;
regulator-max-microvolt = <880000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l4f: ldo4 {
regulator-name = "vreg_l4f";
regulator-min-microvolt = <1700000>;
regulator-max-microvolt = <1950000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l5f: ldo5 {
regulator-name = "vreg_l5f";
regulator-min-microvolt = <1140000>;
regulator-max-microvolt = <1260000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l6f: ldo6 {
regulator-name = "vreg_l6f";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l7f: ldo7 {
regulator-name = "vreg_l7f";
regulator-min-microvolt = <1080000>;
regulator-max-microvolt = <1350000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l8f: ldo8 {
regulator-name = "vreg_l8f";
regulator-min-microvolt = <1100000>;
regulator-max-microvolt = <1320000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l9f: ldo9 {
regulator-name = "vreg_l9f";
regulator-min-microvolt = <870000>;
regulator-max-microvolt = <970000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l10f: ldo10 {
regulator-name = "vreg_l10f";
regulator-min-microvolt = <1500000>;
regulator-max-microvolt = <1800000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
vreg_l11f: ldo11 {
regulator-name = "vreg_l11f";
regulator-min-microvolt = <320000>;
regulator-max-microvolt = <864000>;
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
};
};
&cci0 {
status = "okay";
};
&cci0_i2c0 {
/* Main cam: Sony IMX896 @ 0x1a */
eeprom@50 {
compatible = "puya,p24c128f", "atmel,24c128";
reg = <0x50>;
vcc-supply = <&vreg_l6p>;
read-only;
};
/* Dongwoon DW9784 VCM/OIS @ 0x72 */
};
&cci0_i2c1 {
/* Awinic AW86017 VCM @ 0x0c */
/* UW cam: OmniVision OV13B10 @ 0x36 */
eeprom@52 {
compatible = "puya,p24c128f", "atmel,24c128";
reg = <0x52>;
vcc-supply = <&vreg_l6p>;
read-only;
};
};
&cci1 {
/* cci1_i2c0 is not used for CCI */
pinctrl-0 = <&cci1_1_default>;
pinctrl-1 = <&cci1_1_sleep>;
status = "okay";
};
&cci1_i2c1 {
/* Awinic AW86016 VCM @ 0x0c */
/* Front cam: Samsung S5KKD1 @ 0x3d */
eeprom@51 {
compatible = "puya,p24c128f", "atmel,24c128";
reg = <0x51>;
vcc-supply = <&vreg_l6p>;
read-only;
};
};
&gcc {
protected-clocks = <GCC_PCIE_1_AUX_CLK>, <GCC_PCIE_1_AUX_CLK_SRC>,
<GCC_PCIE_1_CFG_AHB_CLK>, <GCC_PCIE_1_MSTR_AXI_CLK>,
<GCC_PCIE_1_PHY_RCHNG_CLK>, <GCC_PCIE_1_PHY_RCHNG_CLK_SRC>,
<GCC_PCIE_1_PIPE_CLK>, <GCC_PCIE_1_PIPE_CLK_SRC>,
<GCC_PCIE_1_PIPE_DIV2_CLK>, <GCC_PCIE_1_PIPE_DIV2_CLK_SRC>,
<GCC_PCIE_1_SLV_AXI_CLK>, <GCC_PCIE_1_SLV_Q2A_AXI_CLK>;
};
&gpu {
status = "okay";
};
&gpu_zap_shader {
firmware-name = "qcom/milos/fairphone/fp6/gen80300_zap.mbn";
};
&i2c1 {
status = "okay";
/*
* Samsung S3NRN4V NFC controller. XI is driven by the RF_CLK2 PMIC
* buffer; the chip has no oscillator of its own and gates the clock
* via its CLK_REQ line, so the clock must be voted on in response
* to it.
*/
nfc@27 {
compatible = "samsung,s3nrn4v";
reg = <0x27>;
clk-req-gpios = <&tlmm 6 GPIO_ACTIVE_HIGH>;
clocks = <&rpmhcc RPMH_RF_CLK2>;
en-gpios = <&tlmm 56 GPIO_ACTIVE_HIGH>;
interrupt-parent = <&tlmm>;
interrupts = <31 IRQ_TYPE_EDGE_RISING>;
pinctrl-0 = <&nfc_clk_req_default>, <&nfc_irq_default>,
<&nfc_pd_default>;
pinctrl-names = "default";
wake-gpios = <&tlmm 7 GPIO_ACTIVE_HIGH>;
};
};
&i2c3 {
status = "okay";
/* Top speaker / ear speaker */
aw88261_l: audio-codec@34 {
compatible = "awinic,aw88261";
reg = <0x34>;
dvdd-supply = <&vreg_l10b>;
sound-name-prefix = "Amplifier L";
firmware-name = "qcom/milos/fairphone/fp6/aw88261_acf.bin";
awinic,audio-channel = <0>;
awinic,sync-flag;
#sound-dai-cells = <0>;
};
/* Bottom speaker */
aw88261_r: audio-codec@35 {
compatible = "awinic,aw88261";
reg = <0x35>;
dvdd-supply = <&vreg_l10b>;
sound-name-prefix = "Amplifier R";
firmware-name = "qcom/milos/fairphone/fp6/aw88261_acf.bin";
awinic,audio-channel = <1>;
awinic,sync-flag;
#sound-dai-cells = <0>;
};
};
&i2c7 {
status = "okay";
pm8008: pmic@8 {
compatible = "qcom,pm8008";
reg = <0x8>;
interrupts-extended = <&tlmm 125 IRQ_TYPE_EDGE_RISING>;
reset-gpios = <&pmr735b_gpios 3 GPIO_ACTIVE_LOW>;
vdd-l1-l2-supply = <&vreg_s2b>;
vdd-l3-l4-supply = <&vreg_bob>;
vdd-l5-supply = <&vreg_bob>;
vdd-l6-supply = <&vreg_s1b>;
vdd-l7-supply = <&vreg_bob>;
pinctrl-0 = <&pm8008_int_default>, <&pm8008_reset_n_default>;
pinctrl-names = "default";
gpio-controller;
#gpio-cells = <2>;
gpio-ranges = <&pm8008 0 0 2>;
interrupt-controller;
#interrupt-cells = <2>;
#thermal-sensor-cells = <0>;
regulators {
vreg_l1p: ldo1 {
regulator-name = "vreg_l1p";
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1200000>;
};
vreg_l2p: ldo2 {
regulator-name = "vreg_l2p";
regulator-min-microvolt = <950000>;
regulator-max-microvolt = <1144000>;
};
vreg_l3p: ldo3 {
regulator-name = "vreg_l3p";
regulator-min-microvolt = <2700000>;
regulator-max-microvolt = <3000000>;
};
vreg_l4p: ldo4 {
regulator-name = "vreg_l4p";
regulator-min-microvolt = <2700000>;
regulator-max-microvolt = <2900000>;
};
vreg_l5p: ldo5 {
regulator-name = "vreg_l5p";
regulator-min-microvolt = <2704000>;
regulator-max-microvolt = <2900000>;
};
vreg_l6p: ldo6 {
regulator-name = "vreg_l6p";
regulator-min-microvolt = <1700000>;
regulator-max-microvolt = <1896000>;
};
vreg_l7p: ldo7 {
regulator-name = "vreg_l7p";
regulator-min-microvolt = <2700000>;
regulator-max-microvolt = <3400000>;
};
};
};
/* VL53L3 ToF @ 0x29 */
vibrator@5a {
compatible = "awinic,aw86938", "awinic,aw86927";
reg = <0x5a>;
interrupts-extended = <&tlmm 80 IRQ_TYPE_EDGE_FALLING>;
reset-gpios = <&tlmm 78 GPIO_ACTIVE_LOW>;
pinctrl-0 = <&aw86938_int_default>, <&aw86938_reset_default>;
pinctrl-names = "default";
};
};
&ipa {
firmware-name = "qcom/milos/fairphone/fp6/ipa_fws.mbn";
memory-region = <&ipa_fw_mem>;
qcom,gsi-loader = "self";
status = "okay";
};
&iris {
firmware-name = "qcom/milos/fairphone/fp6/vpu20_2v.mbn";
status = "okay";
};
&mdss {
status = "okay";
};
&mdss_dsi0 {
vdda-supply = <&vreg_l4b>;
status = "okay";
panel@0 {
compatible = "boe,bj631jhm-t71-d900";
reg = <0>;
reset-gpios = <&tlmm 12 GPIO_ACTIVE_LOW>;
vci-supply = <&vreg_l19b>;
vddio-supply = <&vreg_l9b>;
dvdd-supply = <&vreg_oled_dvdd_1p2>;
pinctrl-0 = <&disp_reset_n_active>, <&mdp_vsync>;
pinctrl-1 = <&disp_reset_n_suspend>, <&mdp_vsync>;
pinctrl-names = "default",
"sleep";
port {
panel_in: endpoint {
remote-endpoint = <&mdss_dsi0_out>;
};
};
};
};
&mdss_dsi0_out {
data-lanes = <0 1 2 3>;
remote-endpoint = <&panel_in>;
};
&mdss_dsi0_phy {
vdds-supply = <&vreg_l2b>;
status = "okay";
};
&pm8550vs_c {
status = "okay";
};
&pmiv0104_eusb2_repeater {
vdd18-supply = <&vreg_l7b>;
vdd3-supply = <&vreg_l17b>;
qcom,tune-res-fsdif = /bits/ 8 <0x5>;
qcom,tune-usb2-amplitude = /bits/ 8 <0x8>;
qcom,tune-usb2-disc-thres = /bits/ 8 <0x7>;
qcom,tune-usb2-preem = /bits/ 8 <0x6>;
};
&pmk8550_gpios {
pmk8550_sleep_clk_default: sleep-clk-default-state {
pins = "gpio5";
function = "func1";
input-disable;
output-enable;
bias-disable;
power-source = <0>;
};
};
&pmr735b_gpios {
s1j_enable_default: s1j-enable-default-state {
pins = "gpio1";
function = PMIC_GPIO_FUNC_NORMAL;
power-source = <0>;
bias-disable;
output-low;
};
pm8008_reset_n_default: pm8008-reset-n-default-state {
pins = "gpio3";
function = PMIC_GPIO_FUNC_NORMAL;
bias-pull-down;
};
};
&pm7550_gpios {
volume_up_default: volume-up-default-state {
pins = "gpio6";
function = PMIC_GPIO_FUNC_NORMAL;
power-source = <1>;
bias-pull-up;
};
};
&pm7550_flash {
status = "okay";
led-0 {
function = LED_FUNCTION_FLASH;
color = <LED_COLOR_ID_WHITE>;
led-sources = <1>, <4>;
led-max-microamp = <350000>;
flash-max-microamp = <1500000>;
flash-max-timeout-us = <400000>;
};
};
&pon_pwrkey {
status = "okay";
};
&pon_resin {
linux,code = <KEY_VOLUMEDOWN>;
status = "okay";
};
&qup_uart11_cts {
/*
* Configure a bias-bus-hold on CTS to lower power
* usage when Bluetooth is turned off. Bus hold will
* maintain a low power state regardless of whether
* the Bluetooth module drives the pin in either
* direction or leaves the pin fully unpowered.
*/
bias-bus-hold;
};
&qup_uart11_rts {
/* We'll drive RTS, so no pull */
drive-strength = <2>;
bias-disable;
};
&qup_uart11_rx {
/*
* Configure a pull-up on RX. This is needed to avoid
* garbage data when the TX pin of the Bluetooth module is
* in tri-state (module powered off or not driving the
* signal yet).
*/
bias-pull-up;
};
&qup_uart11_tx {
/* We'll drive TX, so no pull */
drive-strength = <2>;
bias-disable;
};
&qupv3_id_0 {
status = "okay";
};
&qupv3_id_1 {
status = "okay";
};
&remoteproc_adsp {
firmware-name = "qcom/milos/fairphone/fp6/adsp.mbn",
"qcom/milos/fairphone/fp6/adsp_dtb.mbn";
status = "okay";
};
&remoteproc_cdsp {
firmware-name = "qcom/milos/fairphone/fp6/cdsp.mbn",
"qcom/milos/fairphone/fp6/cdsp_dtb.mbn";
status = "okay";
};
&remoteproc_mpss {
firmware-name = "qcom/milos/fairphone/fp6/modem.mbn";
status = "okay";
};
&remoteproc_wpss {
firmware-name = "qcom/milos/fairphone/fp6/wpss.mbn";
status = "okay";
};
&rmtfs_mem {
/* Increase the size from 2.5 MiB to 6 MiB */
reg = <0x0 0xe1f00000 0x0 0x600000>;
};
&sdhc_2 {
cd-gpios = <&tlmm 65 GPIO_ACTIVE_HIGH>;
vmmc-supply = <&vreg_l13b>;
vqmmc-supply = <&vreg_l23b>;
no-sdio;
no-mmc;
pinctrl-0 = <&sdc2_default>, <&sdc2_card_det_n>;
pinctrl-1 = <&sdc2_sleep>, <&sdc2_card_det_n>;
pinctrl-names = "default", "sleep";
status = "okay";
};
&spi0 {
status = "okay";
touchscreen@0 {
compatible = "eswin,eph861x";
reg = <0>;
pinctrl-0 = <&ts_active>;
pinctrl-1 = <&ts_suspend>;
pinctrl-names = "ts_active", "ts_suspend";
avdd-supply = <&vreg_l22b>;
iovdd-supply = <&vreg_l9b>;
interrupt-parent = <&tlmm>;
spi-max-frequency = <2000000>;
bits-per-word = <8>;
spi-cpol;
spi-cpha;
eswin,spi-mode = <3>;
eswin,regulator_dvdd = "iovdd";
eswin,regulator_avdd = "avdd";
eswin,power-delay-ms = <200>;
eswin,irq-gpio = <&tlmm 19 GPIO_ACTIVE_HIGH>;
eswin,irq-on-state = <0x00>;
eswin,reset-gpio = <&tlmm 20 GPIO_ACTIVE_HIGH>;
eswin,reset-on-state = <0>;
eswin,reset-active-ms = <20>;
eswin,reset-delay-ms = <200>;
eswin,spi-byte-delay-us = <10>;
eswin,spi-block-delay-us = <10>;
eswin,suspend-mode = <2>;
eswin,fw_name = "EPH86XX_fw.bin";
eswin,input_name = "ESWIN EPH86XX Touchscreen";
eswin,panel-invert-x = <1>;
eswin,panel-invert-y = <0>;
eswin,panel-max-x = <1116>;
eswin,panel-max-y = <2484>;
};
};
&swr1 {
status = "okay";
/* WCD9378 RX */
wcd9378_rx: codec@0,4 {
compatible = "sdw20217011000";
reg = <0 4>;
qcom,rx-port-mapping = <1 2 3 4 5>;
};
};
&swr2 {
status = "okay";
/* WCD9378 TX */
wcd9378_tx: codec@0,3 {
compatible = "sdw20217011000";
reg = <0 3>;
/*
* WCD9378 TX port 1 (ADC1) <=> SWR2 port 1 (SWRM_TX1)
* WCD9378 TX port 2 (ADC2) <=> SWR2 port 1
* WCD9378 TX port 3 (ADC3) <=> SWR2 port 1
* WCD9378 TX port 4 (DMIC0,1, MBHC) <=> SWR2 port 2
* WCD9378 TX port 5 (DMIC2..5) <=> SWR2 port 3
*/
qcom,tx-port-mapping = <1 1 1 2 3>;
};
};
&tlmm {
gpio-reserved-ranges = <8 4>, /* Fingerprint SPI */
<13 1>, /* NC */
<63 2>; /* WLAN UART */
nfc_clk_req_default: nfc-clk-req-default-state {
pins = "gpio6";
function = "gpio";
drive-strength = <2>;
bias-disable;
};
sensor_i2c_default: sensor-i2c-default-state {
/* SDA, SCL; external pull-ups to vreg_l10b */
pins = "gpio153", "gpio154";
function = "gpio";
drive-strength = <2>;
bias-disable;
};
ts_active: ts-irq-active-state {
pins = "gpio19";
function = "gpio";
drive-strength = <2>;
bias-disable;
};
ts_suspend: ts-irq-suspend-state {
pins = "gpio19";
function = "gpio";
drive-strength = <2>;
bias-disable;
};
nfc_irq_default: nfc-irq-default-state {
pins = "gpio31";
function = "gpio";
drive-strength = <2>;
bias-disable;
};
qup_uart11_sleep_cts: qup-uart11-sleep-cts-state {
pins = "gpio48";
function = "gpio";
/*
* Configure a bias-bus-hold on CTS to lower power
* usage when Bluetooth is turned off. Bus hold will
* maintain a low power state regardless of whether
* the Bluetooth module drives the pin in either
* direction or leaves the pin fully unpowered.
*/
bias-bus-hold;
};
qup_uart11_sleep_rts: qup-uart11-sleep-rts-state {
pins = "gpio49";
function = "gpio";
/*
* 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).
*/
bias-pull-down;
};
qup_uart11_sleep_tx: qup-uart11-sleep-tx-state {
pins = "gpio50";
function = "gpio";
/*
* Configure pull-up on TX when it isn't actively driven
* to prevent BT SoC from receiving garbage during sleep.
*/
bias-pull-up;
};
qup_uart11_sleep_rx: qup-uart11-sleep-rx-state {
pins = "gpio51";
function = "gpio";
/*
* 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.
*/
bias-pull-up;
};
bluetooth_enable_default: bluetooth-enable-default-state {
pins = "gpio53";
function = "gpio";
output-low;
bias-disable;
};
disp_reset_n_active: disp-reset-n-active-state {
pins = "gpio12";
function = "gpio";
drive-strength = <8>;
bias-disable;
};
disp_reset_n_suspend: disp-reset-n-suspend-state {
pins = "gpio12";
function = "gpio";
drive-strength = <2>;
bias-pull-down;
};
/*
* Pulled up so the NFC chip stays powered down while the line is
* not driven (it is the chip's active-high power-down input).
*/
nfc_pd_default: nfc-pd-default-state {
pins = "gpio56";
function = "gpio";
drive-strength = <2>;
bias-pull-up;
};
sdc2_card_det_n: sdc2-card-det-state {
pins = "gpio65";
function = "gpio";
drive-strength = <2>;
bias-pull-up;
};
hall_sensor_default: hall-sensor-default-state {
pins = "gpio70";
function = "gpio";
drive-strength = <2>;
bias-disable;
};
aw86938_reset_default: aw86938-reset-default-state {
pins = "gpio78";
function = "gpio";
drive-strength = <2>;
bias-pull-down;
};
aw86938_int_default: aw86938-int-default-state {
pins = "gpio80";
function = "gpio";
drive-strength = <2>;
bias-pull-up;
};
pm8008_int_default: pm8008-int-default-state {
pins = "gpio125";
function = "gpio";
drive-strength = <2>;
bias-disable;
};
mdp_vsync: mdp-vsync-state {
pins = "gpio129";
function = "mdp_vsync";
drive-strength = <2>;
bias-pull-down;
};
wcd_reset_n_active: wcd-reset-n-active-state {
pins = "gpio162";
function = "gpio";
drive-strength = <16>;
output-high;
};
};
&uart5 {
status = "okay";
};
&uart11 {
/delete-property/ interrupts;
interrupts-extended = <&intc GIC_SPI 586 IRQ_TYPE_LEVEL_HIGH 0>,
<&tlmm 51 IRQ_TYPE_EDGE_FALLING>;
pinctrl-1 = <&qup_uart11_sleep_cts>,
<&qup_uart11_sleep_rts>,
<&qup_uart11_sleep_tx>,
<&qup_uart11_sleep_rx>;
pinctrl-names = "default",
"sleep";
status = "okay";
bluetooth {
compatible = "qcom,wcn6755-bt", "qcom,wcn6750-bt";
vddrfacmn-supply = <&vreg_pmu_rfa_cmn>;
vddaon-supply = <&vreg_pmu_aon_0p59>;
vddbtcmx-supply = <&vreg_pmu_btcmx_0p85>;
vddrfa0p8-supply = <&vreg_pmu_rfa_0p8>;
vddrfa1p7-supply = <&vreg_pmu_rfa_1p7>;
vddrfa1p2-supply = <&vreg_pmu_rfa_1p2>;
};
};
&ufs_mem_hc {
reset-gpios = <&tlmm 167 GPIO_ACTIVE_LOW>;
vcc-supply = <&vreg_l12b>;
vcc-max-microamp = <800000>;
vccq-supply = <&vreg_l5f>;
vccq-max-microamp = <750000>;
status = "okay";
};
&ufs_mem_phy {
vdda-phy-supply = <&vreg_l2b>;
vdda-pll-supply = <&vreg_l4b>;
status = "okay";
};
&usb_1 {
dr_mode = "otg";
/* USB 2.0 only, HW does not support USB 3.x */
qcom,select-utmi-as-pipe-clk;
status = "okay";
};
&usb_1_dwc3_hs {
remote-endpoint = <&pmic_glink_hs_in>;
};
&usb_1_hsphy {
vdd-supply = <&vreg_l2b>;
vdda12-supply = <&vreg_l4b>;
phys = <&pmiv0104_eusb2_repeater>;
status = "okay";
};
&wifi {
qcom,calibration-variant = "Fairphone_Gen_6";
status = "okay";
};