milos-linux/arch/arm64/boot/dts/qcom/milos-fairphone-fp6.dts
Jorijn van der Graaf cf98406408 arm64: dts: qcom: milos-fairphone-fp6: add sensor i2c bus and magnetometer
The FP6 sensor suite (QMC6308 magnetometer @ 0x2c, SPL07 barometer
@ 0x76, STK3BCx ALS/proximity @ 0x48) sits on an I2C bus wired to
TLMM gpio153/gpio154. Those pads are eGPIOs with no AP serial-engine
function: on the stock OS the bus is driven by an island QUP owned by
the Snapdragon Sensor Core on the ADSP. From the AP they are only
usable as software GPIOs, so describe the bus as i2c-gpio, and add the
QMC6308 magnetometer node: powered from the always-on vreg_l10b (per
the schematics), mount matrix from the vendor SSC registry
(volcano_qmc630x_0.json .orient: sensor x -> device +y, sensor y ->
device -x, z -> z), validated against Earth's field with a four-point
cardinal rotation.

Assisted-by: Claude:claude-fable-5
Signed-off-by: Jorijn van der Graaf <jorijnvdgraaf@catcrafts.net>
2026-07-14 22:17:50 +02:00

1328 lines
29 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 = ...
pinctrl-0 = <&lpi_i2s2_active>;
pinctrl-1 = <&lpi_i2s2_sleep>;
pinctrl-names = "default",
"sleep";
/*
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>;
};
};
*/
};
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 {
/* Samsung NFC @ 0x27 */
status = "okay";
};
&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>;
};
};
&tlmm {
gpio-reserved-ranges = <8 4>, /* Fingerprint SPI */
<13 1>, /* NC */
<63 2>; /* WLAN UART */
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;
};
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;
};
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;
};
};
&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";
};