// SPDX-License-Identifier: (GPL-2.0+ OR MIT) // Copyright (C) 2019 Icenowy Zheng // Copyright (C) 2020 Martijn Braam // Copyright (C) 2020 Ondrej Jirman #include "sun50i-a64.dtsi" #include "sun50i-a64-cpu-opp.dtsi" #include #include #include #include / { chassis-type = "handset"; aliases { ethernet0 = &rtl8723cs; serial0 = &uart0; }; backlight: backlight { compatible = "pwm-backlight"; pwms = <&r_pwm 0 50000 PWM_POLARITY_INVERTED>; enable-gpios = <&pio 7 10 GPIO_ACTIVE_HIGH>; /* PH10 */ power-supply = <®_ps>; /* Backlight configuration differs per PinePhone revision. */ }; bt_sco_codec: bt-sco-codec { #sound-dai-cells = <1>; compatible = "linux,bt-sco"; }; chosen { stdout-path = "serial0:115200n8"; }; leds { compatible = "gpio-leds"; led0: led-0 { function = LED_FUNCTION_INDICATOR; color = ; gpios = <&pio 3 20 GPIO_ACTIVE_HIGH>; /* PD20 */ retain-state-suspended; }; led1: led-1 { function = LED_FUNCTION_INDICATOR; color = ; gpios = <&pio 3 18 GPIO_ACTIVE_HIGH>; /* PD18 */ retain-state-suspended; }; led2: led-2 { function = LED_FUNCTION_INDICATOR; color = ; gpios = <&pio 3 19 GPIO_ACTIVE_HIGH>; /* PD19 */ retain-state-suspended; }; }; multi-led { compatible = "leds-group-multicolor"; color = ; function = LED_FUNCTION_INDICATOR; leds = <&led0>, <&led1>, <&led2>; }; reg_ps: ps-regulator { compatible = "regulator-fixed"; regulator-name = "ps"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; regulator-boot-on; }; reg_vbat_wifi: vbat-wifi { compatible = "regulator-fixed"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-name = "vbat-wifi"; }; sgm3140: led-controller { compatible = "sgmicro,sgm3140"; vin-supply = <®_dcdc1>; sgm3140_flash: led { function = LED_FUNCTION_FLASH; color = ; flash-max-timeout-us = <250000>; }; }; speaker_amp: audio-amplifier { compatible = "simple-audio-amplifier"; enable-gpios = <&pio 2 7 GPIO_ACTIVE_HIGH>; /* PC7 */ sound-name-prefix = "Speaker Amp"; }; vibrator { compatible = "gpio-vibrator"; enable-gpios = <&pio 3 2 GPIO_ACTIVE_HIGH>; /* PD2 */ vcc-supply = <®_dcdc1>; }; }; &codec { pinctrl-names = "default"; pinctrl-0 = <&aif3_pins>; status = "okay"; }; &codec_analog { cpvdd-supply = <®_eldo1>; status = "okay"; }; &cpu0 { cpu-supply = <®_dcdc2>; }; &cpu1 { cpu-supply = <®_dcdc2>; }; &cpu2 { cpu-supply = <®_dcdc2>; }; &cpu3 { cpu-supply = <®_dcdc2>; }; &dai { status = "okay"; }; &de { status = "okay"; }; &dphy { status = "okay"; }; &dsi { vcc-dsi-supply = <®_dldo1>; status = "okay"; panel@0 { compatible = "xingbangda,xbd599"; reg = <0>; reset-gpios = <&pio 3 23 GPIO_ACTIVE_LOW>; /* PD23 */ iovcc-supply = <®_dldo2>; vcc-supply = <®_ldo_io0>; backlight = <&backlight>; }; }; &ehci0 { status = "okay"; }; &ehci1 { status = "okay"; }; &i2c0 { status = "okay"; touchscreen@5d { compatible = "goodix,gt917s"; reg = <0x5d>; interrupt-parent = <&pio>; interrupts = <7 4 IRQ_TYPE_LEVEL_HIGH>; /* PH4 */ irq-gpios = <&pio 7 4 GPIO_ACTIVE_HIGH>; /* PH4 */ reset-gpios = <&pio 7 11 GPIO_ACTIVE_HIGH>; /* PH11 */ AVDD28-supply = <®_ldo_io0>; VDDIO-supply = <®_ldo_io0>; touchscreen-size-x = <720>; touchscreen-size-y = <1440>; }; }; &i2c1 { status = "okay"; /* Alternative magnetometer */ af8133j: magnetometer@1c { compatible = "voltafield,af8133j"; reg = <0x1c>; reset-gpios = <&pio 1 1 GPIO_ACTIVE_LOW>; avdd-supply = <®_dldo1>; dvdd-supply = <®_dldo1>; mount-matrix = "0", "-1", "0", "-1", "0", "0", "0", "0", "-1"; /* status will be fixed up in firmware */ status = "disabled"; }; /* Magnetometer */ lis3mdl: magnetometer@1e { compatible = "st,lis3mdl-magn"; reg = <0x1e>; vdd-supply = <®_dldo1>; vddio-supply = <®_dldo1>; mount-matrix = "0", "1", "0", "-1", "0", "0", "0", "0", "1"; }; /* Light/proximity sensor */ light-sensor@48 { compatible = "sensortek,stk3311"; reg = <0x48>; interrupt-parent = <&pio>; interrupts = <1 0 IRQ_TYPE_EDGE_FALLING>; /* PB0 */ }; /* Accelerometer/gyroscope */ accelerometer@68 { compatible = "invensense,mpu6050"; reg = <0x68>; interrupt-parent = <&pio>; interrupts = <7 5 IRQ_TYPE_EDGE_RISING>; /* PH5 */ vdd-supply = <®_dldo1>; vddio-supply = <®_dldo1>; mount-matrix = "0", "1", "0", "-1", "0", "0", "0", "0", "1"; }; }; /* Connected to pogo pins (external spring based pinheader for user addons) */ &i2c2 { status = "okay"; }; &lradc { vref-supply = <®_aldo3>; wakeup-source; status = "okay"; button-200 { label = "Volume Up"; linux,code = ; channel = <0>; voltage = <200000>; }; button-400 { label = "Volume Down"; linux,code = ; channel = <0>; voltage = <400000>; }; }; &mmc0 { pinctrl-names = "default"; pinctrl-0 = <&mmc0_pins>; vmmc-supply = <®_dcdc1>; vqmmc-supply = <®_dcdc1>; cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */ disable-wp; bus-width = <4>; status = "okay"; }; &mmc1 { pinctrl-names = "default"; pinctrl-0 = <&mmc1_pins>; vmmc-supply = <®_vbat_wifi>; vqmmc-supply = <®_dldo4>; bus-width = <4>; non-removable; status = "okay"; rtl8723cs: wifi@1 { reg = <1>; }; }; &mmc2 { pinctrl-names = "default"; pinctrl-0 = <&mmc2_pins>; vmmc-supply = <®_dcdc1>; vqmmc-supply = <®_dcdc1>; bus-width = <8>; non-removable; cap-mmc-hw-reset; status = "okay"; }; &ohci0 { status = "okay"; }; &ohci1 { status = "okay"; }; &pio { vcc-pb-supply = <®_dcdc1>; vcc-pc-supply = <®_dcdc1>; vcc-pd-supply = <®_dcdc1>; vcc-pe-supply = <®_aldo1>; vcc-pf-supply = <®_dcdc1>; vcc-pg-supply = <®_dldo4>; vcc-ph-supply = <®_dcdc1>; }; &r_pio { /* * FIXME: We can't add that supply for now since it would * create a circular dependency between pinctrl, the regulator * and the RSB Bus. * * vcc-pl-supply = <®_aldo2>; */ }; &r_pwm { status = "okay"; }; &r_rsb { status = "okay"; axp803: pmic@3a3 { compatible = "x-powers,axp803"; reg = <0x3a3>; interrupt-parent = <&r_intc>; interrupts = ; }; }; #include "axp803.dtsi" &battery_power_supply { status = "okay"; }; ®_aldo1 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-name = "dovdd-csi"; }; ®_aldo2 { regulator-always-on; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-name = "vcc-pl"; }; ®_aldo3 { regulator-always-on; regulator-min-microvolt = <3000000>; regulator-max-microvolt = <3000000>; regulator-name = "vcc-pll-avcc"; }; ®_dcdc1 { regulator-always-on; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-name = "vcc-3v3"; }; ®_dcdc2 { regulator-always-on; regulator-min-microvolt = <1000000>; regulator-max-microvolt = <1300000>; regulator-name = "vdd-cpux"; }; /* DCDC3 is polyphased with DCDC2 */ ®_dcdc5 { regulator-always-on; regulator-min-microvolt = <1200000>; regulator-max-microvolt = <1200000>; regulator-name = "vcc-dram"; }; ®_dcdc6 { regulator-always-on; regulator-min-microvolt = <1100000>; regulator-max-microvolt = <1100000>; regulator-name = "vdd-sys"; }; ®_dldo1 { regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-name = "vcc-dsi-sensor"; }; ®_dldo2 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-name = "vcc-mipi-io"; }; ®_dldo3 { regulator-min-microvolt = <2800000>; regulator-max-microvolt = <2800000>; regulator-name = "avdd-csi"; }; ®_dldo4 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-name = "vcc-wifi-io"; }; ®_eldo1 { regulator-always-on; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-name = "vcc-lpddr"; }; ®_eldo3 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-name = "dvdd-1v8-csi"; }; ®_fldo1 { regulator-min-microvolt = <1200000>; regulator-max-microvolt = <1200000>; regulator-name = "vcc-1v2-hsic"; }; ®_fldo2 { regulator-always-on; regulator-min-microvolt = <1100000>; regulator-max-microvolt = <1100000>; regulator-name = "vdd-cpus"; }; ®_ldo_io0 { regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-name = "vcc-lcd-ctp-stk"; status = "okay"; }; ®_ldo_io1 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-name = "vcc-1v8-typec"; status = "okay"; }; ®_rtc_ldo { regulator-name = "vcc-rtc"; }; &sound { status = "okay"; simple-audio-card,name = "PinePhone"; simple-audio-card,aux-devs = <&codec_analog>, <&speaker_amp>; simple-audio-card,widgets = "Microphone", "Headset Microphone", "Microphone", "Internal Microphone", "Headphone", "Headphone Jack", "Speaker", "Internal Earpiece", "Speaker", "Internal Speaker"; simple-audio-card,routing = "Headphone Jack", "HP", "Internal Earpiece", "EARPIECE", "Internal Speaker", "Speaker Amp OUTL", "Internal Speaker", "Speaker Amp OUTR", "Speaker Amp INL", "LINEOUT", "Speaker Amp INR", "LINEOUT", "Left DAC", "DACL", "Right DAC", "DACR", "ADCL", "Left ADC", "ADCR", "Right ADC", "Internal Microphone", "MBIAS", "MIC1", "Internal Microphone", "Headset Microphone", "HBIAS", "MIC2", "Headset Microphone"; simple-audio-card,dai-link@2 { format = "dsp_a"; frame-master = <&link2_codec>; bitclock-master = <&link2_codec>; bitclock-inversion; link2_cpu: cpu { sound-dai = <&bt_sco_codec 0>; }; link2_codec: codec { sound-dai = <&codec 2>; dai-tdm-slot-num = <1>; dai-tdm-slot-width = <32>; }; }; }; &uart0 { pinctrl-names = "default"; pinctrl-0 = <&uart0_pb_pins>; status = "okay"; }; &uart1 { pinctrl-names = "default"; pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>; status = "okay"; bluetooth { compatible = "realtek,rtl8723cs-bt"; device-wake-gpios = <&pio 7 6 GPIO_ACTIVE_LOW>; /* PH6 */ enable-gpios = <&r_pio 0 4 GPIO_ACTIVE_HIGH>; /* PL4 */ host-wake-gpios = <&r_pio 0 5 GPIO_ACTIVE_HIGH>; /* PL5 */ }; }; /* Connected to the modem (hardware flow control can't be used) */ &uart3 { pinctrl-names = "default"; pinctrl-0 = <&uart3_pins>; status = "okay"; }; &usb_otg { dr_mode = "peripheral"; status = "okay"; }; &usb_power_supply { status = "okay"; }; &usbphy { status = "okay"; };