// SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2022, Collabora Ltd * Author: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> */ /dts-v1/; #include <dt-bindings/gpio/gpio.h> #include "mt6795.dtsi" #include "mt6331.dtsi" / { model = "Sony Xperia M5"; compatible = "sony,xperia-m5", "mediatek,mt6795"; chassis-type = "handset"; aliases { mmc0 = &mmc0; mmc1 = &mmc1; mmc2 = &mmc2; serial0 = &uart0; serial1 = &uart1; }; backlight_lcd0: backlight { compatible = "led-backlight"; leds = <&disp_led_pwm>, <&pmic_bl_led>; default-brightness-level = <300>; }; led-controller-display { compatible = "pwm-leds"; disp_led_pwm: led-0 { label = "backlight-pwm"; pwms = <&pwm0 0 500000>; max-brightness = <1024>; }; }; memory@40000000 { device_type = "memory"; reg = <0 0x40000000 0 0x1e800000>; }; reserved_memory: reserved-memory { #address-cells = <2>; #size-cells = <2>; ranges; /* 128 KiB reserved for ARM Trusted Firmware (BL31) */ bl31_secmon_reserved: secmon@43000000 { reg = <0 0x43000000 0 0x30000>; no-map; }; /* preloader and bootloader regions cannot be touched */ preloader-region@44800000 { reg = <0 0x44800000 0 0x100000>; no-map; }; bootloader-region@46000000 { reg = <0 0x46000000 0 0x400000>; no-map; }; }; vreg_disp_avdd: regulator-disp-avdd { compatible = "regulator-fixed"; regulator-name = "disp_avdd"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; gpio = <&pio 138 GPIO_ACTIVE_HIGH>; enable-active-high; }; vreg_disp_avee: regulator-disp-avee { compatible = "regulator-fixed"; regulator-name = "disp_avee"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; gpio = <&pio 139 GPIO_ACTIVE_HIGH>; enable-active-high; }; vreg_disp_vddh: regulator-disp-vddh { compatible = "regulator-fixed"; regulator-name = "disp_vddh"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-always-on; regulator-boot-on; }; }; &dsi0 { status = "okay"; #address-cells = <1>; #size-cells = <0>; panel: panel@0 { compatible = "sharp,ls060t1sx01"; reg = <0>; avdd-supply = <&vreg_disp_avdd>; avee-supply = <&vreg_disp_avee>; vddi-supply = <&mt6331_vgp3_reg>; vddh-supply = <&vreg_disp_vddh>; reset-gpios = <&pio 106 GPIO_ACTIVE_LOW>; backlight = <&backlight_lcd0>; pinctrl-0 = <&disp_rst_pins>; pinctrl-names = "default"; port { panel_in: endpoint { remote-endpoint = <&dsi0_out>; }; }; }; port { dsi0_out: endpoint { remote-endpoint = <&panel_in>; }; }; }; &fhctl { clocks = <&apmixedsys CLK_APMIXED_MAINPLL>, <&apmixedsys CLK_APMIXED_MPLL>, <&apmixedsys CLK_APMIXED_MSDCPLL>; mediatek,hopping-ssc-percent = <8>, <5>, <8>; status = "okay"; }; &i2c0 { pinctrl-names = "default"; pinctrl-0 = <&i2c0_pins>; status = "okay"; }; &i2c1 { pinctrl-names = "default"; pinctrl-0 = <&i2c1_pins>; status = "okay"; accelerometer@10 { compatible = "bosch,bma255"; reg = <0x10>; pinctrl-names = "default"; pinctrl-0 = <&accel_pins>; }; magnetometer@12 { compatible = "bosch,bmm150"; reg = <0x12>; }; }; &i2c2 { pinctrl-names = "default"; pinctrl-0 = <&i2c2_pins>; status = "okay"; touchscreen@20 { compatible = "syna,rmi4-i2c"; reg = <0x20>; #address-cells = <1>; #size-cells = <0>; interrupts-extended = <&pio 6 IRQ_TYPE_EDGE_FALLING>; pinctrl-names = "default"; pinctrl-0 = <&ts_pins>; syna,startup-delay-ms = <160>; syna,reset-delay-ms = <90>; rmi4-f01@1 { reg = <0x1>; syna,nosleep-mode = <1>; }; rmi4-f12@12 { reg = <0x12>; syna,sensor-type = <1>; }; }; }; &i2c3 { pinctrl-names = "default"; pinctrl-0 = <&i2c3_pins>; status = "okay"; pn547: nfc@28 { compatible = "nxp,pn544-i2c"; reg = <0x28>; interrupts-extended = <&pio 3 IRQ_TYPE_EDGE_RISING>; pinctrl-names = "default"; pinctrl-0 = <&nfc_pins>; enable-gpios = <&pio 149 GPIO_ACTIVE_HIGH>; firmware-gpios = <&pio 94 GPIO_ACTIVE_HIGH>; }; proximity@48 { compatible = "sensortek,stk3310"; reg = <0x48>; interrupts-extended = <&pio 8 IRQ_TYPE_EDGE_FALLING>; pinctrl-names = "default"; pinctrl-0 = <&proximity_pins>; }; }; &mmc0 { /* eMMC controller */ mediatek,latch-ck = <0x14>; /* hs400 */ mediatek,hs200-cmd-int-delay = <1>; mediatek,hs400-cmd-int-delay = <1>; mediatek,hs400-ds-dly3 = <0x1a>; non-removable; pinctrl-names = "default", "state_uhs"; pinctrl-0 = <&mmc0_pins_default>; pinctrl-1 = <&mmc0_pins_uhs>; vmmc-supply = <&mt6331_vemc33_reg>; vqmmc-supply = <&mt6331_vio18_reg>; status = "okay"; }; &mmc1 { /* MicroSD card slot */ vmmc-supply = <&mt6331_vmc_reg>; vqmmc-supply = <&mt6331_vmch_reg>; status = "okay"; }; &mmc2 { /* SDIO WiFi on MMC2 */ vmmc-supply = <&mt6331_vmc_reg>; vqmmc-supply = <&mt6331_vmch_reg>; status = "okay"; }; &mt6331_vgp3_reg { regulator-min-microvolt = <1800000>; }; &pio { disp_rst_pins: lcm-pins { pins-rst { pinmux = <PINMUX_GPIO106__FUNC_GPIO106>; }; }; mmc0_pins_default: emmc-sdr-pins { pins-cmd-dat { pinmux = <PINMUX_GPIO154__FUNC_MSDC0_DAT0>, <PINMUX_GPIO155__FUNC_MSDC0_DAT1>, <PINMUX_GPIO156__FUNC_MSDC0_DAT2>, <PINMUX_GPIO157__FUNC_MSDC0_DAT3>, <PINMUX_GPIO158__FUNC_MSDC0_DAT4>, <PINMUX_GPIO159__FUNC_MSDC0_DAT5>, <PINMUX_GPIO160__FUNC_MSDC0_DAT6>, <PINMUX_GPIO161__FUNC_MSDC0_DAT7>, <PINMUX_GPIO162__FUNC_MSDC0_CMD>; input-enable; bias-pull-up = <MTK_PUPD_SET_R1R0_01>; }; pins-clk { pinmux = <PINMUX_GPIO163__FUNC_MSDC0_CLK>; bias-pull-down = <MTK_PUPD_SET_R1R0_10>; }; pins-rst { pinmux = <PINMUX_GPIO165__FUNC_MSDC0_RSTB>; bias-pull-up = <MTK_PUPD_SET_R1R0_10>; }; }; mmc0_pins_uhs: emmc-uhs-pins { pins-cmd-dat { pinmux = <PINMUX_GPIO154__FUNC_MSDC0_DAT0>, <PINMUX_GPIO155__FUNC_MSDC0_DAT1>, <PINMUX_GPIO156__FUNC_MSDC0_DAT2>, <PINMUX_GPIO157__FUNC_MSDC0_DAT3>, <PINMUX_GPIO158__FUNC_MSDC0_DAT4>, <PINMUX_GPIO159__FUNC_MSDC0_DAT5>, <PINMUX_GPIO160__FUNC_MSDC0_DAT6>, <PINMUX_GPIO161__FUNC_MSDC0_DAT7>, <PINMUX_GPIO162__FUNC_MSDC0_CMD>; input-enable; drive-strength = <6>; bias-pull-up = <MTK_PUPD_SET_R1R0_01>; }; pins-clk { pinmux = <PINMUX_GPIO163__FUNC_MSDC0_CLK>; drive-strength = <6>; bias-pull-down = <MTK_PUPD_SET_R1R0_10>; }; pins-rst { pinmux = <PINMUX_GPIO165__FUNC_MSDC0_RSTB>; drive-strength = <6>; bias-pull-up = <MTK_PUPD_SET_R1R0_10>; }; pins-ds { pinmux = <PINMUX_GPIO164__FUNC_MSDC0_DSL>; drive-strength = <6>; bias-pull-down = <MTK_PUPD_SET_R1R0_10>; }; }; nfc_pins: nfc-pins { pins-irq { pinmux = <PINMUX_GPIO3__FUNC_GPIO3>; bias-pull-down; input-enable; }; pins-fw-ven { pinmux = <PINMUX_GPIO94__FUNC_GPIO94>, <PINMUX_GPIO149__FUNC_GPIO149>; }; }; ts_pins: touchscreen-pins { pins-irq { pinmux = <PINMUX_GPIO6__FUNC_GPIO6>; bias-pull-up; input-enable; }; pins-rst { pinmux = <PINMUX_GPIO102__FUNC_GPIO102>; output-high; }; }; proximity_pins: proximity-pins { pins-irq { pinmux = <PINMUX_GPIO8__FUNC_GPIO8>; bias-pull-up; input-enable; }; }; accel_pins: accelerometer-pins { pins-irq { pinmux = <PINMUX_GPIO12__FUNC_GPIO12>; bias-pull-up; input-enable; }; }; i2c0_pins: i2c0-pins { pins-bus { pinmux = <PINMUX_GPIO45__FUNC_SDA0>, <PINMUX_GPIO46__FUNC_SCL0>; input-enable; }; }; i2c1_pins: i2c1-pins { pins-bus { pinmux = <PINMUX_GPIO125__FUNC_SDA1>, <PINMUX_GPIO126__FUNC_SCL1>; bias-disable; }; }; i2c2_pins: i2c2-pins { pins-bus { pinmux = <PINMUX_GPIO43__FUNC_SDA2>, <PINMUX_GPIO44__FUNC_SCL2>; bias-disable; }; }; i2c3_pins: i2c3-pins { pins-bus { pinmux = <PINMUX_GPIO136__FUNC_SDA3>, <PINMUX_GPIO137__FUNC_SCL3>; bias-disable; }; }; i2c4_pins: i2c4-pins { pins-bus { pinmux = <PINMUX_GPIO100__FUNC_SDA4>, <PINMUX_GPIO101__FUNC_SCL4>; bias-disable; }; }; uart0_pins: uart0-pins { pins-rx { pinmux = <PINMUX_GPIO113__FUNC_URXD0>; bias-pull-up; input-enable; }; pins-tx { pinmux = <PINMUX_GPIO114__FUNC_UTXD0>; output-high; }; }; uart2_pins: uart2-pins { pins-rx { pinmux = <PINMUX_GPIO31__FUNC_URXD2>; bias-pull-up; input-enable; }; pins-tx { pinmux = <PINMUX_GPIO32__FUNC_UTXD2>; }; }; }; &pmic { /* * Smartphones, including the Xperia M5, are equipped with a companion * MT6332 PMIC: when this is present, the main MT6331 PMIC will fire * an interrupt on the companion, so we use the MT6332 IRQ GPIO. */ interrupts = <GIC_SPI 160 IRQ_TYPE_LEVEL_HIGH>; mt6332-led { compatible = "mediatek,mt6332-led"; #address-cells = <1>; #size-cells = <0>; pmic_bl_led: led@0 { reg = <0>; label = "backlight-pmic"; }; }; }; &pwm0 { status = "okay"; }; &uart0 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&uart0_pins>; }; &uart2 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&uart2_pins>; };