# 0 "arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.1.dts" # 0 "" # 0 "" # 1 "arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.1.dts" /dts-v1/; # 1 "arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi" 1 # 1 "arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi" 1 # 1 "./scripts/dtc/include-prefixes/dt-bindings/clock/sun50i-a64-ccu.h" 1 # 7 "arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi" 2 # 1 "./scripts/dtc/include-prefixes/dt-bindings/clock/sun6i-rtc.h" 1 # 8 "arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi" 2 # 1 "./scripts/dtc/include-prefixes/dt-bindings/clock/sun8i-de2.h" 1 # 9 "arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi" 2 # 1 "./scripts/dtc/include-prefixes/dt-bindings/clock/sun8i-r-ccu.h" 1 # 10 "arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi" 2 # 1 "./scripts/dtc/include-prefixes/dt-bindings/interrupt-controller/arm-gic.h" 1 # 9 "./scripts/dtc/include-prefixes/dt-bindings/interrupt-controller/arm-gic.h" # 1 "./scripts/dtc/include-prefixes/dt-bindings/interrupt-controller/irq.h" 1 # 10 "./scripts/dtc/include-prefixes/dt-bindings/interrupt-controller/arm-gic.h" 2 # 11 "arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi" 2 # 1 "./scripts/dtc/include-prefixes/dt-bindings/reset/sun50i-a64-ccu.h" 1 # 12 "arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi" 2 # 1 "./scripts/dtc/include-prefixes/dt-bindings/reset/sun8i-de2.h" 1 # 13 "arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi" 2 # 1 "./scripts/dtc/include-prefixes/dt-bindings/reset/sun8i-r-ccu.h" 1 # 14 "arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi" 2 # 1 "./scripts/dtc/include-prefixes/dt-bindings/thermal/thermal.h" 1 # 15 "arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi" 2 / { interrupt-parent = <&gic>; #address-cells = <1>; #size-cells = <1>; aliases { mmc0 = &mmc0; mmc1 = &mmc1; mmc2 = &mmc2; }; chosen { #address-cells = <1>; #size-cells = <1>; ranges; simplefb_lcd: framebuffer-lcd { compatible = "allwinner,simple-framebuffer", "simple-framebuffer"; allwinner,pipeline = "mixer0-lcd0"; clocks = <&ccu 100>, <&display_clocks 6>; status = "disabled"; }; simplefb_hdmi: framebuffer-hdmi { compatible = "allwinner,simple-framebuffer", "simple-framebuffer"; allwinner,pipeline = "mixer1-lcd1-hdmi"; clocks = <&display_clocks 7>, <&ccu 101>, <&ccu 110>; status = "disabled"; }; }; cpus { #address-cells = <1>; #size-cells = <0>; cpu0: cpu@0 { compatible = "arm,cortex-a53"; device_type = "cpu"; reg = <0>; enable-method = "psci"; next-level-cache = <&L2>; clocks = <&ccu 21>; clock-names = "cpu"; #cooling-cells = <2>; }; cpu1: cpu@1 { compatible = "arm,cortex-a53"; device_type = "cpu"; reg = <1>; enable-method = "psci"; next-level-cache = <&L2>; clocks = <&ccu 21>; clock-names = "cpu"; #cooling-cells = <2>; }; cpu2: cpu@2 { compatible = "arm,cortex-a53"; device_type = "cpu"; reg = <2>; enable-method = "psci"; next-level-cache = <&L2>; clocks = <&ccu 21>; clock-names = "cpu"; #cooling-cells = <2>; }; cpu3: cpu@3 { compatible = "arm,cortex-a53"; device_type = "cpu"; reg = <3>; enable-method = "psci"; next-level-cache = <&L2>; clocks = <&ccu 21>; clock-names = "cpu"; #cooling-cells = <2>; }; L2: l2-cache { compatible = "cache"; cache-level = <2>; cache-unified; }; }; de: display-engine { compatible = "allwinner,sun50i-a64-display-engine"; allwinner,pipelines = <&mixer0>, <&mixer1>; status = "disabled"; }; gpu_opp_table: opp-table-gpu { compatible = "operating-points-v2"; opp-120000000 { opp-hz = /bits/ 64 <120000000>; }; opp-312000000 { opp-hz = /bits/ 64 <312000000>; }; opp-432000000 { opp-hz = /bits/ 64 <432000000>; }; }; osc24M: osc24M_clk { #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <24000000>; clock-output-names = "osc24M"; }; osc32k: osc32k_clk { #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <32768>; clock-output-names = "ext-osc32k"; }; pmu { compatible = "arm,cortex-a53-pmu"; interrupts = <0 116 4>, <0 117 4>, <0 118 4>, <0 119 4>; interrupt-affinity = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>; }; psci { compatible = "arm,psci-0.2"; method = "smc"; }; scpi_protocol: scpi { compatible = "arm,scpi"; mboxes = <&msgbox 2>, <&msgbox 3>; mbox-names = "tx", "rx"; shmem = <&scpi_sram>; }; sound: sound { #address-cells = <1>; #size-cells = <0>; compatible = "simple-audio-card"; simple-audio-card,name = "sun50i-a64-audio"; simple-audio-card,aux-devs = <&codec_analog>; simple-audio-card,routing = "Left DAC", "DACL", "Right DAC", "DACR", "ADCL", "Left ADC", "ADCR", "Right ADC"; status = "disabled"; simple-audio-card,dai-link@0 { format = "i2s"; frame-master = <&link0_cpu>; bitclock-master = <&link0_cpu>; mclk-fs = <128>; link0_cpu: cpu { sound-dai = <&dai>; }; link0_codec: codec { sound-dai = <&codec 0>; }; }; }; sound_hdmi: sound_hdmi { compatible = "allwinner,sun9i-a80-hdmi-audio", "allwinner,sun50i-a64-hdmi-audio"; status = "disabled"; codec { sound-dai = <&hdmi>; }; cpu { sound-dai = <&i2s2>; }; }; timer { compatible = "arm,armv8-timer"; allwinner,erratum-unknown1; arm,no-tick-in-suspend; interrupts = <1 13 ((((1 << (4)) - 1) << 8) | 4)>, <1 14 ((((1 << (4)) - 1) << 8) | 4)>, <1 11 ((((1 << (4)) - 1) << 8) | 4)>, <1 10 ((((1 << (4)) - 1) << 8) | 4)>; }; thermal-zones { cpu_thermal: cpu0-thermal { polling-delay-passive = <0>; polling-delay = <0>; thermal-sensors = <&ths 0>; cooling-maps { map0 { trip = <&cpu_alert0>; cooling-device = <&cpu0 (~0) (~0)>, <&cpu1 (~0) (~0)>, <&cpu2 (~0) (~0)>, <&cpu3 (~0) (~0)>; }; map1 { trip = <&cpu_alert1>; cooling-device = <&cpu0 (~0) (~0)>, <&cpu1 (~0) (~0)>, <&cpu2 (~0) (~0)>, <&cpu3 (~0) (~0)>; }; }; trips { cpu_alert0: cpu_alert0 { temperature = <75000>; hysteresis = <2000>; type = "passive"; }; cpu_alert1: cpu_alert1 { temperature = <90000>; hysteresis = <2000>; type = "hot"; }; cpu_crit: cpu_crit { temperature = <110000>; hysteresis = <2000>; type = "critical"; }; }; }; gpu0_thermal: gpu0-thermal { polling-delay-passive = <0>; polling-delay = <0>; thermal-sensors = <&ths 1>; trips { gpu0_crit: gpu-crit { temperature = <110000>; hysteresis = <2000>; type = "critical"; }; }; }; gpu1_thermal: gpu1-thermal { polling-delay-passive = <0>; polling-delay = <0>; thermal-sensors = <&ths 2>; trips { gpu1_crit: gpu-crit { temperature = <110000>; hysteresis = <2000>; type = "critical"; }; }; }; }; soc { compatible = "simple-bus"; #address-cells = <1>; #size-cells = <1>; ranges; bus@1000000 { compatible = "allwinner,sun50i-a64-de2"; reg = <0x1000000 0x400000>; allwinner,sram = <&de2_sram 1>; #address-cells = <1>; #size-cells = <1>; ranges = <0 0x1000000 0x400000>; display_clocks: clock@0 { compatible = "allwinner,sun50i-a64-de2-clk"; reg = <0x0 0x10000>; clocks = <&ccu 52>, <&ccu 99>; clock-names = "bus", "mod"; resets = <&ccu 30>; #clock-cells = <1>; #reset-cells = <1>; }; rotate: rotate@20000 { compatible = "allwinner,sun50i-a64-de2-rotate", "allwinner,sun8i-a83t-de2-rotate"; reg = <0x20000 0x10000>; interrupts = <0 96 4>; clocks = <&display_clocks 9>, <&display_clocks 10>; clock-names = "bus", "mod"; resets = <&display_clocks 3>; }; mixer0: mixer@100000 { compatible = "allwinner,sun50i-a64-de2-mixer-0"; reg = <0x100000 0x100000>; clocks = <&display_clocks 0>, <&display_clocks 6>; clock-names = "bus", "mod"; resets = <&display_clocks 0>; ports { #address-cells = <1>; #size-cells = <0>; mixer0_out: port@1 { #address-cells = <1>; #size-cells = <0>; reg = <1>; mixer0_out_tcon0: endpoint@0 { reg = <0>; remote-endpoint = <&tcon0_in_mixer0>; }; mixer0_out_tcon1: endpoint@1 { reg = <1>; remote-endpoint = <&tcon1_in_mixer0>; }; }; }; }; mixer1: mixer@200000 { compatible = "allwinner,sun50i-a64-de2-mixer-1"; reg = <0x200000 0x100000>; clocks = <&display_clocks 1>, <&display_clocks 7>; clock-names = "bus", "mod"; resets = <&display_clocks 1>; ports { #address-cells = <1>; #size-cells = <0>; mixer1_out: port@1 { #address-cells = <1>; #size-cells = <0>; reg = <1>; mixer1_out_tcon0: endpoint@0 { reg = <0>; remote-endpoint = <&tcon0_in_mixer1>; }; mixer1_out_tcon1: endpoint@1 { reg = <1>; remote-endpoint = <&tcon1_in_mixer1>; }; }; }; }; }; syscon: syscon@1c00000 { compatible = "allwinner,sun50i-a64-system-control"; reg = <0x01c00000 0x1000>; #address-cells = <1>; #size-cells = <1>; ranges; sram_a2: sram@40000 { compatible = "mmio-sram"; reg = <0x00040000 0x14000>; #address-cells = <1>; #size-cells = <1>; ranges = <0 0x00040000 0x14000>; scpi_sram: scp-shmem@13c00 { compatible = "arm,scp-shmem"; reg = <0x13c00 0x200>; }; }; sram_c: sram@18000 { compatible = "mmio-sram"; reg = <0x00018000 0x28000>; #address-cells = <1>; #size-cells = <1>; ranges = <0 0x00018000 0x28000>; de2_sram: sram-section@0 { compatible = "allwinner,sun50i-a64-sram-c"; reg = <0x0000 0x28000>; }; }; sram_c1: sram@1d00000 { compatible = "mmio-sram"; reg = <0x01d00000 0x40000>; #address-cells = <1>; #size-cells = <1>; ranges = <0 0x01d00000 0x40000>; ve_sram: sram-section@0 { compatible = "allwinner,sun50i-a64-sram-c1", "allwinner,sun4i-a10-sram-c1"; reg = <0x000000 0x40000>; }; }; }; dma: dma-controller@1c02000 { compatible = "allwinner,sun50i-a64-dma"; reg = <0x01c02000 0x1000>; interrupts = <0 50 4>; clocks = <&ccu 30>; dma-channels = <8>; dma-requests = <27>; resets = <&ccu 7>; #dma-cells = <1>; }; tcon0: lcd-controller@1c0c000 { compatible = "allwinner,sun50i-a64-tcon-lcd", "allwinner,sun8i-a83t-tcon-lcd"; reg = <0x01c0c000 0x1000>; interrupts = <0 86 4>; clocks = <&ccu 47>, <&ccu 100>; clock-names = "ahb", "tcon-ch0"; clock-output-names = "tcon-data-clock"; #clock-cells = <0>; resets = <&ccu 24>, <&ccu 35>; reset-names = "lcd", "lvds"; ports { #address-cells = <1>; #size-cells = <0>; tcon0_in: port@0 { #address-cells = <1>; #size-cells = <0>; reg = <0>; tcon0_in_mixer0: endpoint@0 { reg = <0>; remote-endpoint = <&mixer0_out_tcon0>; }; tcon0_in_mixer1: endpoint@1 { reg = <1>; remote-endpoint = <&mixer1_out_tcon0>; }; }; tcon0_out: port@1 { #address-cells = <1>; #size-cells = <0>; reg = <1>; tcon0_out_dsi: endpoint@1 { reg = <1>; remote-endpoint = <&dsi_in_tcon0>; allwinner,tcon-channel = <1>; }; }; }; }; tcon1: lcd-controller@1c0d000 { compatible = "allwinner,sun50i-a64-tcon-tv", "allwinner,sun8i-a83t-tcon-tv"; reg = <0x01c0d000 0x1000>; interrupts = <0 87 4>; clocks = <&ccu 48>, <&ccu 101>; clock-names = "ahb", "tcon-ch1"; resets = <&ccu 25>; reset-names = "lcd"; ports { #address-cells = <1>; #size-cells = <0>; tcon1_in: port@0 { #address-cells = <1>; #size-cells = <0>; reg = <0>; tcon1_in_mixer0: endpoint@0 { reg = <0>; remote-endpoint = <&mixer0_out_tcon1>; }; tcon1_in_mixer1: endpoint@1 { reg = <1>; remote-endpoint = <&mixer1_out_tcon1>; }; }; tcon1_out: port@1 { #address-cells = <1>; #size-cells = <0>; reg = <1>; tcon1_out_hdmi: endpoint@1 { reg = <1>; remote-endpoint = <&hdmi_in_tcon1>; }; }; }; }; video-codec@1c0e000 { compatible = "allwinner,sun50i-a64-video-engine"; reg = <0x01c0e000 0x1000>; clocks = <&ccu 46>, <&ccu 106>, <&ccu 95>; clock-names = "ahb", "mod", "ram"; resets = <&ccu 23>; interrupts = <0 58 4>; allwinner,sram = <&ve_sram 1>; }; mmc0: mmc@1c0f000 { compatible = "allwinner,sun50i-a64-mmc"; reg = <0x01c0f000 0x1000>; clocks = <&ccu 31>, <&ccu 75>; clock-names = "ahb", "mmc"; resets = <&ccu 8>; reset-names = "ahb"; interrupts = <0 60 4>; max-frequency = <150000000>; status = "disabled"; #address-cells = <1>; #size-cells = <0>; }; mmc1: mmc@1c10000 { compatible = "allwinner,sun50i-a64-mmc"; reg = <0x01c10000 0x1000>; clocks = <&ccu 32>, <&ccu 76>; clock-names = "ahb", "mmc"; resets = <&ccu 9>; reset-names = "ahb"; interrupts = <0 61 4>; max-frequency = <150000000>; status = "disabled"; #address-cells = <1>; #size-cells = <0>; }; mmc2: mmc@1c11000 { compatible = "allwinner,sun50i-a64-emmc"; reg = <0x01c11000 0x1000>; clocks = <&ccu 33>, <&ccu 77>; clock-names = "ahb", "mmc"; resets = <&ccu 10>; reset-names = "ahb"; interrupts = <0 62 4>; max-frequency = <150000000>; status = "disabled"; #address-cells = <1>; #size-cells = <0>; }; sid: eeprom@1c14000 { compatible = "allwinner,sun50i-a64-sid"; reg = <0x1c14000 0x400>; #address-cells = <1>; #size-cells = <1>; ths_calibration: thermal-sensor-calibration@34 { reg = <0x34 0x8>; }; }; crypto: crypto@1c15000 { compatible = "allwinner,sun50i-a64-crypto"; reg = <0x01c15000 0x1000>; interrupts = <0 94 4>; clocks = <&ccu 29>, <&ccu 79>; clock-names = "bus", "mod"; resets = <&ccu 6>; }; msgbox: mailbox@1c17000 { compatible = "allwinner,sun50i-a64-msgbox", "allwinner,sun6i-a31-msgbox"; reg = <0x01c17000 0x1000>; clocks = <&ccu 54>; resets = <&ccu 32>; interrupts = <0 49 4>; #mbox-cells = <1>; }; usb_otg: usb@1c19000 { compatible = "allwinner,sun8i-a33-musb"; reg = <0x01c19000 0x0400>; clocks = <&ccu 41>; resets = <&ccu 18>; interrupts = <0 71 4>; interrupt-names = "mc"; phys = <&usbphy 0>; phy-names = "usb"; extcon = <&usbphy 0>; dr_mode = "otg"; status = "disabled"; }; usbphy: phy@1c19400 { compatible = "allwinner,sun50i-a64-usb-phy"; reg = <0x01c19400 0x14>, <0x01c1a800 0x4>, <0x01c1b800 0x4>; reg-names = "phy_ctrl", "pmu0", "pmu1"; clocks = <&ccu 86>, <&ccu 87>; clock-names = "usb0_phy", "usb1_phy"; resets = <&ccu 0>, <&ccu 1>; reset-names = "usb0_reset", "usb1_reset"; status = "disabled"; #phy-cells = <1>; }; ehci0: usb@1c1a000 { compatible = "allwinner,sun50i-a64-ehci", "generic-ehci"; reg = <0x01c1a000 0x100>; interrupts = <0 72 4>; clocks = <&ccu 44>, <&ccu 42>, <&ccu 91>; resets = <&ccu 21>, <&ccu 19>; phys = <&usbphy 0>; phy-names = "usb"; status = "disabled"; }; ohci0: usb@1c1a400 { compatible = "allwinner,sun50i-a64-ohci", "generic-ohci"; reg = <0x01c1a400 0x100>; interrupts = <0 73 4>; clocks = <&ccu 44>, <&ccu 91>; resets = <&ccu 21>; phys = <&usbphy 0>; phy-names = "usb"; status = "disabled"; }; ehci1: usb@1c1b000 { compatible = "allwinner,sun50i-a64-ehci", "generic-ehci"; reg = <0x01c1b000 0x100>; interrupts = <0 74 4>; clocks = <&ccu 45>, <&ccu 43>, <&ccu 93>; resets = <&ccu 22>, <&ccu 20>; phys = <&usbphy 1>; phy-names = "usb"; status = "disabled"; }; ohci1: usb@1c1b400 { compatible = "allwinner,sun50i-a64-ohci", "generic-ohci"; reg = <0x01c1b400 0x100>; interrupts = <0 75 4>; clocks = <&ccu 45>, <&ccu 93>; resets = <&ccu 22>; phys = <&usbphy 1>; phy-names = "usb"; status = "disabled"; }; ccu: clock@1c20000 { compatible = "allwinner,sun50i-a64-ccu"; reg = <0x01c20000 0x400>; clocks = <&osc24M>, <&rtc 0>; clock-names = "hosc", "losc"; protected-clocks = <54>; #clock-cells = <1>; #reset-cells = <1>; }; pio: pinctrl@1c20800 { compatible = "allwinner,sun50i-a64-pinctrl"; reg = <0x01c20800 0x400>; interrupt-parent = <&r_intc>; interrupts = <0 11 4>, <0 17 4>, <0 21 4>; clocks = <&ccu 58>, <&osc24M>, <&rtc 0>; clock-names = "apb", "hosc", "losc"; gpio-controller; #gpio-cells = <3>; interrupt-controller; #interrupt-cells = <3>; /omit-if-no-ref/ aif2_pins: aif2-pins { pins = "PB4", "PB5", "PB6", "PB7"; function = "aif2"; }; /omit-if-no-ref/ aif3_pins: aif3-pins { pins = "PG10", "PG11", "PG12", "PG13"; function = "aif3"; }; csi_pins: csi-pins { pins = "PE0", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11"; function = "csi"; }; /omit-if-no-ref/ csi_mclk_pin: csi-mclk-pin { pins = "PE1"; function = "csi"; }; i2c0_pins: i2c0-pins { pins = "PH0", "PH1"; function = "i2c0"; }; i2c1_pins: i2c1-pins { pins = "PH2", "PH3"; function = "i2c1"; }; i2c2_pins: i2c2-pins { pins = "PE14", "PE15"; function = "i2c2"; }; /omit-if-no-ref/ lcd_rgb666_pins: lcd-rgb666-pins { pins = "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PD18", "PD19", "PD20", "PD21"; function = "lcd0"; }; mmc0_pins: mmc0-pins { pins = "PF0", "PF1", "PF2", "PF3", "PF4", "PF5"; function = "mmc0"; drive-strength = <30>; bias-pull-up; }; mmc1_pins: mmc1-pins { pins = "PG0", "PG1", "PG2", "PG3", "PG4", "PG5"; function = "mmc1"; drive-strength = <30>; bias-pull-up; }; mmc2_pins: mmc2-pins { pins = "PC5", "PC6", "PC8", "PC9", "PC10","PC11", "PC12", "PC13", "PC14", "PC15", "PC16"; function = "mmc2"; drive-strength = <30>; bias-pull-up; }; mmc2_ds_pin: mmc2-ds-pin { pins = "PC1"; function = "mmc2"; drive-strength = <30>; bias-pull-up; }; pwm_pin: pwm-pin { pins = "PD22"; function = "pwm"; }; rmii_pins: rmii-pins { pins = "PD10", "PD11", "PD13", "PD14", "PD17", "PD18", "PD19", "PD20", "PD22", "PD23"; function = "emac"; drive-strength = <40>; }; rgmii_pins: rgmii-pins { pins = "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD15", "PD16", "PD17", "PD18", "PD19", "PD20", "PD21", "PD22", "PD23"; function = "emac"; drive-strength = <40>; }; spdif_tx_pin: spdif-tx-pin { pins = "PH8"; function = "spdif"; }; spi0_pins: spi0-pins { pins = "PC0", "PC1", "PC2", "PC3"; function = "spi0"; }; spi1_pins: spi1-pins { pins = "PD0", "PD1", "PD2", "PD3"; function = "spi1"; }; uart0_pb_pins: uart0-pb-pins { pins = "PB8", "PB9"; function = "uart0"; }; uart1_pins: uart1-pins { pins = "PG6", "PG7"; function = "uart1"; }; uart1_rts_cts_pins: uart1-rts-cts-pins { pins = "PG8", "PG9"; function = "uart1"; }; uart2_pins: uart2-pins { pins = "PB0", "PB1"; function = "uart2"; }; uart3_pins: uart3-pins { pins = "PD0", "PD1"; function = "uart3"; }; uart4_pins: uart4-pins { pins = "PD2", "PD3"; function = "uart4"; }; uart4_rts_cts_pins: uart4-rts-cts-pins { pins = "PD4", "PD5"; function = "uart4"; }; }; timer@1c20c00 { compatible = "allwinner,sun50i-a64-timer", "allwinner,sun8i-a23-timer"; reg = <0x01c20c00 0xa0>; interrupts = <0 18 4>, <0 19 4>; clocks = <&osc24M>; }; wdt0: watchdog@1c20ca0 { compatible = "allwinner,sun50i-a64-wdt", "allwinner,sun6i-a31-wdt"; reg = <0x01c20ca0 0x20>; interrupts = <0 25 4>; clocks = <&osc24M>; }; spdif: spdif@1c21000 { #sound-dai-cells = <0>; compatible = "allwinner,sun50i-a64-spdif", "allwinner,sun8i-h3-spdif"; reg = <0x01c21000 0x400>; interrupts = <0 12 4>; clocks = <&ccu 57>, <&ccu 85>; resets = <&ccu 37>; clock-names = "apb", "spdif"; dmas = <&dma 2>; dma-names = "tx"; pinctrl-names = "default"; pinctrl-0 = <&spdif_tx_pin>; status = "disabled"; }; lradc: lradc@1c21800 { compatible = "allwinner,sun50i-a64-lradc", "allwinner,sun4i-a10-lradc-keys"; reg = <0x01c21800 0x400>; interrupt-parent = <&r_intc>; interrupts = <0 30 4>; status = "disabled"; }; i2s0: i2s@1c22000 { #sound-dai-cells = <0>; compatible = "allwinner,sun50i-a64-i2s", "allwinner,sun8i-h3-i2s"; reg = <0x01c22000 0x400>; interrupts = <0 13 4>; clocks = <&ccu 60>, <&ccu 82>; clock-names = "apb", "mod"; resets = <&ccu 39>; dma-names = "rx", "tx"; dmas = <&dma 3>, <&dma 3>; status = "disabled"; }; i2s1: i2s@1c22400 { #sound-dai-cells = <0>; compatible = "allwinner,sun50i-a64-i2s", "allwinner,sun8i-h3-i2s"; reg = <0x01c22400 0x400>; interrupts = <0 14 4>; clocks = <&ccu 61>, <&ccu 83>; clock-names = "apb", "mod"; resets = <&ccu 40>; dma-names = "rx", "tx"; dmas = <&dma 4>, <&dma 4>; status = "disabled"; }; i2s2: i2s@1c22800 { #sound-dai-cells = <0>; compatible = "allwinner,sun50i-a64-i2s", "allwinner,sun8i-h3-i2s"; reg = <0x01c22800 0x400>; interrupts = <0 15 4>; clocks = <&ccu 62>, <&ccu 84>; clock-names = "apb", "mod"; resets = <&ccu 41>; dma-names = "rx", "tx"; dmas = <&dma 27>, <&dma 27>; status = "disabled"; }; dai: dai@1c22c00 { #sound-dai-cells = <0>; compatible = "allwinner,sun50i-a64-codec-i2s"; reg = <0x01c22c00 0x200>; interrupts = <0 29 4>; clocks = <&ccu 56>, <&ccu 107>; clock-names = "apb", "mod"; resets = <&ccu 36>; dmas = <&dma 15>, <&dma 15>; dma-names = "rx", "tx"; status = "disabled"; }; codec: codec@1c22e00 { #sound-dai-cells = <1>; compatible = "allwinner,sun50i-a64-codec", "allwinner,sun8i-a33-codec"; reg = <0x01c22e00 0x600>; interrupts = <0 28 4>; clocks = <&ccu 56>, <&ccu 107>; clock-names = "bus", "mod"; status = "disabled"; }; ths: thermal-sensor@1c25000 { compatible = "allwinner,sun50i-a64-ths"; reg = <0x01c25000 0x100>; clocks = <&ccu 59>, <&ccu 73>; clock-names = "bus", "mod"; interrupts = <0 31 4>; resets = <&ccu 38>; nvmem-cells = <&ths_calibration>; nvmem-cell-names = "calibration"; #thermal-sensor-cells = <1>; }; uart0: serial@1c28000 { compatible = "snps,dw-apb-uart"; reg = <0x01c28000 0x400>; interrupts = <0 0 4>; reg-shift = <2>; reg-io-width = <4>; fifo-size = <64>; clocks = <&ccu 67>; resets = <&ccu 46>; status = "disabled"; }; uart1: serial@1c28400 { compatible = "snps,dw-apb-uart"; reg = <0x01c28400 0x400>; interrupts = <0 1 4>; reg-shift = <2>; reg-io-width = <4>; fifo-size = <64>; clocks = <&ccu 68>; resets = <&ccu 47>; status = "disabled"; }; uart2: serial@1c28800 { compatible = "snps,dw-apb-uart"; reg = <0x01c28800 0x400>; interrupts = <0 2 4>; reg-shift = <2>; reg-io-width = <4>; fifo-size = <64>; clocks = <&ccu 69>; resets = <&ccu 48>; status = "disabled"; }; uart3: serial@1c28c00 { compatible = "snps,dw-apb-uart"; reg = <0x01c28c00 0x400>; interrupts = <0 3 4>; reg-shift = <2>; reg-io-width = <4>; fifo-size = <64>; clocks = <&ccu 70>; resets = <&ccu 49>; status = "disabled"; }; uart4: serial@1c29000 { compatible = "snps,dw-apb-uart"; reg = <0x01c29000 0x400>; interrupts = <0 4 4>; reg-shift = <2>; reg-io-width = <4>; fifo-size = <64>; clocks = <&ccu 71>; resets = <&ccu 50>; status = "disabled"; }; i2c0: i2c@1c2ac00 { compatible = "allwinner,sun6i-a31-i2c"; reg = <0x01c2ac00 0x400>; interrupts = <0 6 4>; clocks = <&ccu 63>; resets = <&ccu 42>; pinctrl-names = "default"; pinctrl-0 = <&i2c0_pins>; status = "disabled"; #address-cells = <1>; #size-cells = <0>; }; i2c1: i2c@1c2b000 { compatible = "allwinner,sun6i-a31-i2c"; reg = <0x01c2b000 0x400>; interrupts = <0 7 4>; clocks = <&ccu 64>; resets = <&ccu 43>; pinctrl-names = "default"; pinctrl-0 = <&i2c1_pins>; status = "disabled"; #address-cells = <1>; #size-cells = <0>; }; i2c2: i2c@1c2b400 { compatible = "allwinner,sun6i-a31-i2c"; reg = <0x01c2b400 0x400>; interrupts = <0 8 4>; clocks = <&ccu 65>; resets = <&ccu 44>; pinctrl-names = "default"; pinctrl-0 = <&i2c2_pins>; status = "disabled"; #address-cells = <1>; #size-cells = <0>; }; spi0: spi@1c68000 { compatible = "allwinner,sun8i-h3-spi"; reg = <0x01c68000 0x1000>; interrupts = <0 65 4>; clocks = <&ccu 39>, <&ccu 80>; clock-names = "ahb", "mod"; dmas = <&dma 23>, <&dma 23>; dma-names = "rx", "tx"; pinctrl-names = "default"; pinctrl-0 = <&spi0_pins>; resets = <&ccu 16>; status = "disabled"; num-cs = <1>; #address-cells = <1>; #size-cells = <0>; }; spi1: spi@1c69000 { compatible = "allwinner,sun8i-h3-spi"; reg = <0x01c69000 0x1000>; interrupts = <0 66 4>; clocks = <&ccu 40>, <&ccu 81>; clock-names = "ahb", "mod"; dmas = <&dma 24>, <&dma 24>; dma-names = "rx", "tx"; pinctrl-names = "default"; pinctrl-0 = <&spi1_pins>; resets = <&ccu 17>; status = "disabled"; num-cs = <1>; #address-cells = <1>; #size-cells = <0>; }; emac: ethernet@1c30000 { compatible = "allwinner,sun50i-a64-emac"; syscon = <&syscon>; reg = <0x01c30000 0x10000>; interrupts = <0 82 4>; interrupt-names = "macirq"; resets = <&ccu 13>; reset-names = "stmmaceth"; clocks = <&ccu 36>; clock-names = "stmmaceth"; status = "disabled"; mdio: mdio { compatible = "snps,dwmac-mdio"; #address-cells = <1>; #size-cells = <0>; }; }; mali: gpu@1c40000 { compatible = "allwinner,sun50i-a64-mali", "arm,mali-400"; reg = <0x01c40000 0x10000>; interrupts = <0 97 4>, <0 98 4>, <0 99 4>, <0 100 4>, <0 102 4>, <0 103 4>, <0 101 4>; interrupt-names = "gp", "gpmmu", "pp0", "ppmmu0", "pp1", "ppmmu1", "pmu"; clocks = <&ccu 53>, <&ccu 114>; clock-names = "bus", "core"; resets = <&ccu 31>; operating-points-v2 = <&gpu_opp_table>; }; gic: interrupt-controller@1c81000 { compatible = "arm,gic-400"; reg = <0x01c81000 0x1000>, <0x01c82000 0x2000>, <0x01c84000 0x2000>, <0x01c86000 0x2000>; interrupts = <1 9 ((((1 << (4)) - 1) << 8) | 4)>; interrupt-controller; #interrupt-cells = <3>; }; pwm: pwm@1c21400 { compatible = "allwinner,sun50i-a64-pwm", "allwinner,sun5i-a13-pwm"; reg = <0x01c21400 0x400>; clocks = <&osc24M>; pinctrl-names = "default"; pinctrl-0 = <&pwm_pin>; #pwm-cells = <3>; status = "disabled"; }; mbus: dram-controller@1c62000 { compatible = "allwinner,sun50i-a64-mbus"; reg = <0x01c62000 0x1000>, <0x01c63000 0x1000>; reg-names = "mbus", "dram"; clocks = <&ccu 112>, <&ccu 94>, <&ccu 35>; clock-names = "mbus", "dram", "bus"; interrupts = <0 69 4>; #address-cells = <1>; #size-cells = <1>; dma-ranges = <0x00000000 0x40000000 0xc0000000>; #interconnect-cells = <1>; }; csi: csi@1cb0000 { compatible = "allwinner,sun50i-a64-csi"; reg = <0x01cb0000 0x1000>; interrupts = <0 84 4>; clocks = <&ccu 50>, <&ccu 104>, <&ccu 96>; clock-names = "bus", "mod", "ram"; resets = <&ccu 27>; pinctrl-names = "default"; pinctrl-0 = <&csi_pins>; status = "disabled"; }; dsi: dsi@1ca0000 { compatible = "allwinner,sun50i-a64-mipi-dsi"; reg = <0x01ca0000 0x1000>; interrupts = <0 89 4>; clocks = <&ccu 28>; resets = <&ccu 5>; phys = <&dphy>; phy-names = "dphy"; status = "disabled"; #address-cells = <1>; #size-cells = <0>; port { dsi_in_tcon0: endpoint { remote-endpoint = <&tcon0_out_dsi>; }; }; }; dphy: d-phy@1ca1000 { compatible = "allwinner,sun50i-a64-mipi-dphy", "allwinner,sun6i-a31-mipi-dphy"; reg = <0x01ca1000 0x1000>; interrupts = <0 89 4>; clocks = <&ccu 28>, <&ccu 113>; clock-names = "bus", "mod"; resets = <&ccu 5>; status = "disabled"; #phy-cells = <0>; }; deinterlace: deinterlace@1e00000 { compatible = "allwinner,sun50i-a64-deinterlace", "allwinner,sun8i-h3-deinterlace"; reg = <0x01e00000 0x20000>; clocks = <&ccu 49>, <&ccu 102>, <&ccu 97>; clock-names = "bus", "mod", "ram"; resets = <&ccu 26>; interrupts = <0 93 4>; interconnects = <&mbus 9>; interconnect-names = "dma-mem"; }; hdmi: hdmi@1ee0000 { #sound-dai-cells = <0>; compatible = "allwinner,sun50i-a64-dw-hdmi", "allwinner,sun8i-a83t-dw-hdmi"; reg = <0x01ee0000 0x10000>; reg-io-width = <1>; interrupts = <0 88 4>; clocks = <&ccu 51>, <&ccu 111>, <&ccu 110>, <&rtc 0>; clock-names = "iahb", "isfr", "tmds", "cec"; resets = <&ccu 29>; reset-names = "ctrl"; phys = <&hdmi_phy>; phy-names = "phy"; status = "disabled"; ports { #address-cells = <1>; #size-cells = <0>; hdmi_in: port@0 { reg = <0>; hdmi_in_tcon1: endpoint { remote-endpoint = <&tcon1_out_hdmi>; }; }; hdmi_out: port@1 { reg = <1>; }; }; }; hdmi_phy: hdmi-phy@1ef0000 { compatible = "allwinner,sun50i-a64-hdmi-phy"; reg = <0x01ef0000 0x10000>; clocks = <&ccu 51>, <&ccu 111>, <&ccu 7>; clock-names = "bus", "mod", "pll-0"; resets = <&ccu 28>; reset-names = "phy"; #phy-cells = <0>; }; rtc: rtc@1f00000 { compatible = "allwinner,sun50i-a64-rtc", "allwinner,sun8i-h3-rtc"; reg = <0x01f00000 0x400>; interrupt-parent = <&r_intc>; interrupts = <0 40 4>, <0 41 4>; clock-output-names = "osc32k", "osc32k-out", "iosc"; clocks = <&osc32k>; #clock-cells = <1>; }; r_intc: interrupt-controller@1f00c00 { compatible = "allwinner,sun50i-a64-r-intc", "allwinner,sun6i-a31-r-intc"; interrupt-controller; #interrupt-cells = <3>; reg = <0x01f00c00 0x400>; interrupts = <0 32 4>; }; r_ccu: clock@1f01400 { compatible = "allwinner,sun50i-a64-r-ccu"; reg = <0x01f01400 0x100>; clocks = <&osc24M>, <&rtc 0>, <&rtc 2>, <&ccu 11>; clock-names = "hosc", "losc", "iosc", "pll-periph"; protected-clocks = <10>; #clock-cells = <1>; #reset-cells = <1>; }; codec_analog: codec-analog@1f015c0 { compatible = "allwinner,sun50i-a64-codec-analog"; reg = <0x01f015c0 0x4>; status = "disabled"; }; r_i2c: i2c@1f02400 { compatible = "allwinner,sun50i-a64-i2c", "allwinner,sun6i-a31-i2c"; reg = <0x01f02400 0x400>; interrupts = <0 44 4>; clocks = <&r_ccu 9>; resets = <&r_ccu 5>; status = "disabled"; #address-cells = <1>; #size-cells = <0>; }; r_ir: ir@1f02000 { compatible = "allwinner,sun50i-a64-ir", "allwinner,sun6i-a31-ir"; reg = <0x01f02000 0x400>; clocks = <&r_ccu 4>, <&r_ccu 11>; clock-names = "apb", "ir"; resets = <&r_ccu 0>; interrupts = <0 37 4>; pinctrl-names = "default"; pinctrl-0 = <&r_ir_rx_pin>; status = "disabled"; }; r_pwm: pwm@1f03800 { compatible = "allwinner,sun50i-a64-pwm", "allwinner,sun5i-a13-pwm"; reg = <0x01f03800 0x400>; clocks = <&osc24M>; pinctrl-names = "default"; pinctrl-0 = <&r_pwm_pin>; #pwm-cells = <3>; status = "disabled"; }; r_pio: pinctrl@1f02c00 { compatible = "allwinner,sun50i-a64-r-pinctrl"; reg = <0x01f02c00 0x400>; interrupt-parent = <&r_intc>; interrupts = <0 45 4>; clocks = <&r_ccu 3>, <&osc24M>, <&osc32k>; clock-names = "apb", "hosc", "losc"; gpio-controller; #gpio-cells = <3>; interrupt-controller; #interrupt-cells = <3>; r_i2c_pl89_pins: r-i2c-pl89-pins { pins = "PL8", "PL9"; function = "s_i2c"; }; r_ir_rx_pin: r-ir-rx-pin { pins = "PL11"; function = "s_cir_rx"; }; r_pwm_pin: r-pwm-pin { pins = "PL10"; function = "s_pwm"; }; r_rsb_pins: r-rsb-pins { pins = "PL0", "PL1"; function = "s_rsb"; }; }; r_rsb: rsb@1f03400 { compatible = "allwinner,sun8i-a23-rsb"; reg = <0x01f03400 0x400>; interrupts = <0 39 4>; clocks = <&r_ccu 6>; clock-frequency = <3000000>; resets = <&r_ccu 2>; pinctrl-names = "default"; pinctrl-0 = <&r_rsb_pins>; status = "disabled"; #address-cells = <1>; #size-cells = <0>; }; }; }; # 7 "arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi" 2 # 1 "arch/arm64/boot/dts/allwinner/sun50i-a64-cpu-opp.dtsi" 1 / { cpu0_opp_table: opp-table-cpu { compatible = "operating-points-v2"; opp-shared; opp-648000000 { opp-hz = /bits/ 64 <648000000>; opp-microvolt = <1040000>; clock-latency-ns = <244144>; }; opp-816000000 { opp-hz = /bits/ 64 <816000000>; opp-microvolt = <1100000>; clock-latency-ns = <244144>; }; opp-912000000 { opp-hz = /bits/ 64 <912000000>; opp-microvolt = <1120000>; clock-latency-ns = <244144>; }; opp-960000000 { opp-hz = /bits/ 64 <960000000>; opp-microvolt = <1160000>; clock-latency-ns = <244144>; }; opp-1008000000 { opp-hz = /bits/ 64 <1008000000>; opp-microvolt = <1200000>; clock-latency-ns = <244144>; }; opp-1056000000 { opp-hz = /bits/ 64 <1056000000>; opp-microvolt = <1240000>; clock-latency-ns = <244144>; }; opp-1104000000 { opp-hz = /bits/ 64 <1104000000>; opp-microvolt = <1260000>; clock-latency-ns = <244144>; }; opp-1152000000 { opp-hz = /bits/ 64 <1152000000>; opp-microvolt = <1300000>; clock-latency-ns = <244144>; }; }; }; &cpu0 { operating-points-v2 = <&cpu0_opp_table>; }; &cpu1 { operating-points-v2 = <&cpu0_opp_table>; }; &cpu2 { operating-points-v2 = <&cpu0_opp_table>; }; &cpu3 { operating-points-v2 = <&cpu0_opp_table>; }; # 8 "arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi" 2 # 1 "./scripts/dtc/include-prefixes/dt-bindings/gpio/gpio.h" 1 # 10 "arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi" 2 # 1 "./scripts/dtc/include-prefixes/dt-bindings/input/input.h" 1 # 13 "./scripts/dtc/include-prefixes/dt-bindings/input/input.h" # 1 "./scripts/dtc/include-prefixes/dt-bindings/input/linux-event-codes.h" 1 # 14 "./scripts/dtc/include-prefixes/dt-bindings/input/input.h" 2 # 11 "arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi" 2 # 1 "./scripts/dtc/include-prefixes/dt-bindings/leds/common.h" 1 # 12 "arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi" 2 # 1 "./scripts/dtc/include-prefixes/dt-bindings/pwm/pwm.h" 1 # 13 "arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi" 2 # 1 "./scripts/dtc/include-prefixes/dt-bindings/usb/pd.h" 1 # 14 "arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi" 2 / { chassis-type = "handset"; aliases { ethernet0 = &rtl8723cs; serial0 = &uart0; }; backlight: backlight { compatible = "pwm-backlight"; pwms = <&r_pwm 0 50000 (1 << 0)>; enable-gpios = <&pio 7 10 0>; power-supply = <®_ps>; }; bat: battery { compatible = "simple-battery"; voltage-min-design-microvolt = <3000000>; voltage-max-design-microvolt = <4350000>; energy-full-design-microwatt-hours = <12000000>; charge-full-design-microamp-hours = <2750000>; precharge-current-microamp = <130000>; charge-term-current-microamp = <50000>; constant-charge-current-max-microamp = <1300000>; constant-charge-voltage-max-microvolt = <4350000>; factory-internal-resistance-micro-ohms = <150000>; resistance-temp-table = <20 150>; ocv-capacity-celsius = <20>; ocv-capacity-table-0 = <4334000 100>, <4319700 99>, <4304300 98>, <4292200 97>, <4280100 96>, <4269100 95>, <4253700 94>, <4242700 93>, <4232800 92>, <4222900 91>, <4211900 90>, <4203100 89>, <4192100 88>, <4177800 87>, <4167900 86>, <4155800 85>, <4147000 84>, <4136000 83>, <4126100 82>, <4111800 81>, <4102999 80>, <4093100 79>, <4084300 78>, <4075500 77>, <4064500 76>, <4054600 75>, <4042500 74>, <4035900 73>, <4029300 72>, <4018300 71>, <4006200 70>, <3993000 69>, <3974300 68>, <3964400 67>, <3956700 66>, <3949000 65>, <3943500 64>, <3938000 63>, <3931400 62>, <3923700 61>, <3917100 60>, <3903900 59>, <3895100 58>, <3887400 57>, <3878600 56>, <3870900 55>, <3863200 54>, <3855500 53>, <3848900 52>, <3837900 51>, <3830200 50>, <3825800 49>, <3821400 48>, <3815900 47>, <3810400 46>, <3806000 45>, <3801600 44>, <3797200 43>, <3792800 42>, <3789500 41>, <3786200 40>, <3781800 39>, <3778500 38>, <3775200 37>, <3770800 36>, <3764200 35>, <3760900 34>, <3758700 33>, <3755400 32>, <3754300 31>, <3752100 30>, <3748800 29>, <3749900 28>, <3745500 27>, <3742200 26>, <3741100 25>, <3737800 24>, <3734500 23>, <3731200 22>, <3730100 21>, <3724600 20>, <3722400 19>, <3718000 18>, <3713600 17>, <3708100 16>, <3701500 15>, <3689400 14>, <3682800 13>, <3674000 12>, <3666300 11>, <3659700 10>, <3653100 9>, <3647600 8>, <3641000 7>, <3625600 6>, <3613500 5>, <3591500 4>, <3554100 3>, <3489200 2>, <3393500 1>, <3256000 0>; x-powers,ocv-capacity-table = <0xc0 0>, <0xc1 1>, <0xc2 1>, <0xc3 2>, <0xc4 2>, <0xc5 4>, <0xc6 4>, <0xc7 5>, <0xc8 6>, <0xc9 8>, <0xca 11>, <0xcb 15>, <0xcc 22>, <0xcd 36>, <0xce 44>, <0xcf 48>, <0xd0 51>, <0xd1 53>, <0xd2 56>, <0xd3 60>, <0xd4 64>, <0xd5 69>, <0xd6 71>, <0xd7 75>, <0xd8 78>, <0xd9 82>, <0xda 84>, <0xdb 85>, <0xdc 88>, <0xdd 92>, <0xde 95>, <0xdf 98>; }; ppkb_battery: keyboard-battery { compatible = "simple-battery"; voltage-min-design-microvolt = <3000000>; voltage-max-design-microvolt = <4200000>; energy-full-design-microwatt-hours = <21000000>; charge-full-design-microamp-hours = <6000000>; precharge-current-microamp = <100000>; charge-term-current-microamp = <50000>; constant-charge-current-max-microamp = <2000000>; constant-charge-voltage-max-microvolt = <4200000>; factory-internal-resistance-micro-ohms = <120000>; ocv-capacity-celsius = <20>; ocv-capacity-table-0 = <4147328 100>, <4132636 99>, <4121720 98>, <4110905 97>, <4102063 96>, <4092428 95>, <4082371 94>, <4074137 93>, <4064172 92>, <4056387 91>, <4047198 90>, <4038599 89>, <4030933 88>, <4021831 87>, <4012613 86>, <4003863 85>, <3995132 84>, <3986108 83>, <3977434 82>, <3967977 81>, <3960286 80>, <3951737 79>, <3943518 78>, <3935723 77>, <3928692 76>, <3920093 75>, <3912676 74>, <3905481 73>, <3899881 72>, <3892341 71>, <3887140 70>, <3880005 69>, <3876060 68>, <3869195 67>, <3863234 66>, <3857808 65>, <3851464 64>, <3846976 63>, <3840724 62>, <3835254 61>, <3830946 60>, <3826564 59>, <3821275 58>, <3817413 57>, <3811941 56>, <3808947 55>, <3804959 54>, <3800958 53>, <3797447 52>, <3794303 51>, <3790341 50>, <3787022 49>, <3783436 48>, <3779936 47>, <3776176 46>, <3772160 45>, <3769348 44>, <3766705 43>, <3762481 42>, <3760894 41>, <3758396 40>, <3755803 39>, <3753543 38>, <3749691 37>, <3747026 36>, <3743937 35>, <3741872 34>, <3738529 33>, <3737528 32>, <3734059 31>, <3731586 30>, <3728576 29>, <3725939 28>, <3721208 27>, <3718239 26>, <3713032 25>, <3709785 24>, <3704045 23>, <3701203 22>, <3695965 21>, <3691074 20>, <3684562 19>, <3679140 18>, <3670993 17>, <3664243 16>, <3655383 15>, <3647666 14>, <3642747 13>, <3637775 12>, <3632593 11>, <3627120 10>, <3620923 9>, <3611465 8>, <3597536 7>, <3577366 6>, <3545253 5>, <3497377 4>, <3430377 3>, <3337780 2>, <3183953 1>, <3064061 0>; }; bt_sco_codec: bt-sco-codec { #sound-dai-cells = <1>; compatible = "linux,bt-sco"; sound-name-prefix = "Bluetooth"; }; chosen { stdout-path = "serial0:115200n8"; }; ec25_codec: ec25-codec { #sound-dai-cells = <1>; compatible = "quectel,ec25"; sound-name-prefix = "Modem"; }; i2c_csi: i2c-csi { compatible = "i2c-gpio"; sda-gpios = <&pio 4 13 (0 | (2 | 4))>; scl-gpios = <&pio 4 12 (0 | (2 | 4))>; i2c-gpio,delay-us = <3>; #address-cells = <1>; #size-cells = <0>; }; leds { compatible = "gpio-leds"; led-0 { function = "indicator"; color = <3>; gpios = <&pio 3 20 0>; retain-state-suspended; }; led-1 { function = "indicator"; color = <2>; gpios = <&pio 3 18 0>; retain-state-suspended; }; led-2 { function = "indicator"; color = <1>; gpios = <&pio 3 19 0>; retain-state-suspended; }; }; hdmi-connector { compatible = "hdmi-connector"; type = "a"; port { hdmi_con_in: endpoint { remote-endpoint = <&hdmi_out_con>; }; }; }; reg_anx1v0: anx1v0 { compatible = "regulator-fixed"; regulator-name = "anx1v0"; regulator-min-microvolt = <1000000>; regulator-max-microvolt = <1000000>; }; reg_ps: ps-regulator { compatible = "regulator-fixed"; regulator-name = "ps"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; regulator-boot-on; }; reg_usb_5v: usb-5v { compatible = "regulator-fixed"; regulator-name = "usb-5v"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; gpio = <&pio 3 8 0>; enable-active-high; }; reg_vbat_bb: vbat-bb { compatible = "regulator-fixed"; regulator-name = "vbat-bb"; regulator-min-microvolt = <3500000>; regulator-max-microvolt = <3500000>; gpio = <&r_pio 0 7 0>; enable-active-high; }; reg_vbat_wifi: vbat-wifi { compatible = "regulator-fixed"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-name = "vbat-wifi"; }; reg_vconn5v0: vconn5v0 { compatible = "regulator-fixed"; regulator-name = "vconn5v0"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; gpio = <&pio 3 9 0>; enable-active-high; }; sgm3140: led-controller { compatible = "sgmicro,sgm3140"; vin-supply = <®_dcdc1>; sgm3140_flash: led { function = "flash"; color = <0>; flash-max-timeout-us = <250000>; }; }; reboot-mode { compatible = "nvmem-reboot-mode"; nvmem-cells = <&reboot_mode>; nvmem-cell-names = "reboot-mode"; mode-normal = <0x0>; mode-fel = <0xb0010fe1>; mode-emmc-egon = <0xb001e33c>; mode-sd1 = <0xb0010020>; mode-sd2 = <0xb0010021>; mode-sd3 = <0xb0010022>; mode-sd4 = <0xb0010023>; mode-sd5 = <0xb0010024>; mode-sd6 = <0xb0010025>; mode-sd7 = <0xb0010026>; mode-sd8 = <0xb0010027>; mode-emmc1 = <0xb0010000>; mode-emmc2 = <0xb0010001>; mode-emmc3 = <0xb0010002>; mode-emmc4 = <0xb0010003>; mode-emmc5 = <0xb0010004>; mode-emmc6 = <0xb0010005>; mode-emmc7 = <0xb0010006>; mode-emmc8 = <0xb0010007>; mode-menu = <0xb00100ff>; }; speaker_amp: audio-amplifier { compatible = "simple-audio-amplifier"; enable-gpios = <&pio 2 7 0>; sound-name-prefix = "Speaker Amp"; }; vibrator { compatible = "gpio-vibrator"; enable-gpios = <&pio 3 2 0>; vcc-supply = <®_dcdc1>; }; keyboard-power { compatible = "megi,pinephone-keyboard-power-manager"; phone-battery = "axp20x-battery"; phone-usb = "axp20x-usb"; kb-battery = "ip5xxx-battery"; kb-boost = "ip5xxx-boost"; kb-usb = "ip5xxx-usb"; }; }; &codec { pinctrl-names = "default"; pinctrl-0 = <&aif2_pins>, <&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>; }; &csi { pinctrl-0 = <&csi_pins>, <&csi_mclk_pin>; status = "okay"; port { #address-cells = <1>; #size-cells = <0>; csi_ov5640_ep: endpoint@0 { reg = <0>; remote-endpoint = <&ov5640_ep>; bus-width = <8>; hsync-active = <1>; vsync-active = <0>; data-active = <1>; pclk-sample = <1>; }; csi_gc2145_ep: endpoint@1 { reg = <1>; remote-endpoint = <&gc2145_ep>; bus-width = <8>; hsync-active = <1>; vsync-active = <1>; data-active = <1>; pclk-sample = <1>; }; }; }; &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 1>; iovcc-supply = <®_dldo2>; vcc-supply = <®_ldo_io0>; backlight = <&backlight>; }; }; &ehci0 { status = "okay"; }; &ehci1 { status = "okay"; }; &hdmi { hvcc-supply = <®_dldo1>; status = "okay"; }; &hdmi_out { hdmi_out_con: endpoint { remote-endpoint = <&hdmi_con_in>; }; }; &sound_hdmi { status = "okay"; }; &i2c_csi { gc2145: front-camera@3c { compatible = "galaxycore,gc2145"; reg = <0x3c>; clocks = <&ccu 105>; clock-names = "xclk"; AVDD-supply = <®_dldo3>; DVDD-supply = <®_aldo1>; IOVDD-supply = <®_eldo3>; reset-gpios = <&pio 4 16 (1 | (2 | 4))>; enable-gpios = <&pio 4 17 (1 | (2 | 4))>; port { gc2145_ep: endpoint { remote-endpoint = <&csi_gc2145_ep>; bus-width = <8>; hsync-active = <1>; vsync-active = <1>; data-active = <1>; pclk-sample = <1>; }; }; }; ov5640: rear-camera@4c { compatible = "ovti,ov5640"; reg = <0x4c>; clocks = <&ccu 105>; clock-names = "xclk"; AVDD-supply = <®_dldo3>; DOVDD-supply = <®_aldo1>; DVDD-supply = <®_eldo3>; reset-gpios = <&pio 3 3 (1 | (2 | 4))>; powerdown-gpios = <&pio 2 0 (0 | (2 | 4))>; port { ov5640_ep: endpoint { remote-endpoint = <&csi_ov5640_ep>; bus-width = <8>; hsync-active = <1>; vsync-active = <0>; data-active = <1>; pclk-sample = <1>; }; }; }; }; &i2c0 { status = "okay"; clock-frequency = <400000>; touchscreen@5d { compatible = "goodix,gt917s"; reg = <0x5d>; interrupt-parent = <&pio>; interrupts = <7 4 4>; irq-gpios = <&pio 7 4 0>; reset-gpios = <&pio 7 11 0>; AVDD28-supply = <®_ldo_io0>; VDDIO-supply = <®_ldo_io0>; touchscreen-size-x = <720>; touchscreen-size-y = <1440>; poweroff-in-suspend; }; }; &i2c1 { status = "okay"; clock-frequency = <400000>; 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-sensor@48 { compatible = "sensortek,stk3311"; reg = <0x48>; interrupt-parent = <&pio>; interrupts = <1 0 2>; vdd-supply = <®_ldo_io0>; }; accelerometer@68 { compatible = "invensense,mpu6050"; reg = <0x68>; interrupt-parent = <&pio>; interrupts = <7 5 1>; vdd-supply = <®_dldo1>; vddio-supply = <®_dldo1>; mount-matrix = "0", "1", "0", "-1", "0", "0", "0", "0", "-1"; }; }; &i2c2 { status = "okay"; ppkb: keyboard@15 { compatible = "pine64,pinephone-keyboard"; reg = <0x15>; interrupt-parent = <&r_pio>; interrupts = <0 12 2>; vbat-supply = <®_usb_5v>; wakeup-source; i2c { #address-cells = <1>; #size-cells = <0>; charger@75 { compatible = "injoinic,ip5209"; reg = <0x75>; monitored-battery = <&ppkb_battery>; }; }; }; }; &i2s2 { status = "okay"; }; &lradc { vref-supply = <®_aldo3>; status = "okay"; button-200 { label = "Volume Up"; linux,code = <115>; channel = <0>; voltage = <200000>; }; button-400 { label = "Volume Down"; linux,code = <114>; channel = <0>; voltage = <400000>; }; }; &mmc0 { pinctrl-names = "default"; pinctrl-0 = <&mmc0_pins>; vmmc-supply = <®_dcdc1>; vqmmc-supply = <®_dcdc1>; cd-gpios = <&pio 5 6 1>; disable-wp; bus-width = <4>; post-power-on-delay-ms = <1>; status = "okay"; }; &mmc1 { pinctrl-names = "default"; pinctrl-0 = <&mmc1_pins>; vmmc-supply = <®_vbat_wifi>; vqmmc-supply = <®_dldo4>; bus-width = <4>; non-removable; post-power-on-delay-ms = <1>; status = "okay"; keep-power-in-suspend; rtl8723cs: wifi@1 { reg = <1>; interrupt-parent = <&r_pio>; interrupts = <0 3 2>; }; }; &mmc2 { pinctrl-names = "default"; pinctrl-0 = <&mmc2_pins>; vmmc-supply = <®_dcdc1>; vqmmc-supply = <®_dcdc1>; bus-width = <8>; non-removable; cap-mmc-hw-reset; post-power-on-delay-ms = <1>; 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 { }; &r_pwm { status = "okay"; }; &r_rsb { status = "okay"; axp803: pmic@3a3 { compatible = "x-powers,axp803"; reg = <0x3a3>; interrupt-parent = <&r_intc>; interrupts = <0 32 8>; }; }; # 1 "arch/arm64/boot/dts/allwinner/axp803.dtsi" 1 # 9 "arch/arm64/boot/dts/allwinner/axp803.dtsi" &axp803 { interrupt-controller; #interrupt-cells = <1>; ac_power_supply: ac-power { compatible = "x-powers,axp803-ac-power-supply", "x-powers,axp813-ac-power-supply"; status = "disabled"; }; axp_adc: adc { compatible = "x-powers,axp803-adc", "x-powers,axp813-adc"; #io-channel-cells = <1>; }; axp_gpio: gpio { compatible = "x-powers,axp803-gpio", "x-powers,axp813-gpio"; gpio-controller; #gpio-cells = <2>; }; battery_power_supply: battery-power { compatible = "x-powers,axp803-battery-power-supply", "x-powers,axp813-battery-power-supply"; status = "disabled"; }; regulators { x-powers,dcdc-freq = <3000>; reg_aldo1: aldo1 { regulator-name = "aldo1"; }; reg_aldo2: aldo2 { regulator-name = "aldo2"; }; reg_aldo3: aldo3 { regulator-name = "aldo3"; }; reg_dc1sw: dc1sw { regulator-name = "dc1sw"; }; reg_dcdc1: dcdc1 { regulator-name = "dcdc1"; }; reg_dcdc2: dcdc2 { regulator-name = "dcdc2"; }; reg_dcdc3: dcdc3 { regulator-name = "dcdc3"; }; reg_dcdc4: dcdc4 { regulator-name = "dcdc4"; }; reg_dcdc5: dcdc5 { regulator-name = "dcdc5"; }; reg_dcdc6: dcdc6 { regulator-name = "dcdc6"; }; reg_dldo1: dldo1 { regulator-name = "dldo1"; }; reg_dldo2: dldo2 { regulator-name = "dldo2"; }; reg_dldo3: dldo3 { regulator-name = "dldo3"; }; reg_dldo4: dldo4 { regulator-name = "dldo4"; }; reg_eldo1: eldo1 { regulator-name = "eldo1"; }; reg_eldo2: eldo2 { regulator-name = "eldo2"; }; reg_eldo3: eldo3 { regulator-name = "eldo3"; }; reg_fldo1: fldo1 { regulator-name = "fldo1"; }; reg_fldo2: fldo2 { regulator-name = "fldo2"; }; reg_ldo_io0: ldo-io0 { regulator-name = "ldo-io0"; status = "disabled"; }; reg_ldo_io1: ldo-io1 { regulator-name = "ldo-io1"; status = "disabled"; }; reg_rtc_ldo: rtc-ldo { regulator-always-on; regulator-min-microvolt = <3000000>; regulator-max-microvolt = <3000000>; regulator-name = "rtc-ldo"; }; reg_drivevbus: drivevbus { regulator-name = "drivevbus"; status = "disabled"; }; }; usb_power_supply: usb-power { compatible = "x-powers,axp803-usb-power-supply", "x-powers,axp813-usb-power-supply"; status = "disabled"; }; }; # 817 "arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi" 2 &battery_power_supply { status = "okay"; monitored-battery = <&bat>; }; ®_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"; }; ®_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"; }; &rtc { #address-cells = <1>; #size-cells = <1>; reboot_mode: reboot-mode@4 { reg = <0x4 0x4>; }; }; &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@1 { format = "dsp_a"; frame-master = <&link1_codec>; bitclock-master = <&link1_codec>; bitclock-inversion; link1_cpu: cpu { sound-dai = <&ec25_codec 0>; }; link1_codec: codec { sound-dai = <&codec 1>; dai-tdm-slot-num = <1>; dai-tdm-slot-width = <32>; }; }; 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 1>; enable-gpios = <&r_pio 0 4 0>; host-wake-gpios = <&r_pio 0 5 0>; }; }; &uart3 { pinctrl-names = "default"; pinctrl-0 = <&uart3_pins>; status = "okay"; }; &usb_otg { dr_mode = "otg"; status = "okay"; }; &usb_power_supply { status = "okay"; }; &usbphy { status = "okay"; }; # 7 "arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.1.dts" 2 / { model = "Pine64 PinePhone Braveheart (1.1)"; compatible = "pine64,pinephone-1.1", "pine64,pinephone", "allwinner,sun50i-a64"; reg_vbus: usb0-vbus { compatible = "regulator-fixed"; regulator-name = "usb0-vbus"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; gpio = <&pio 3 6 0>; enable-active-high; vin-supply = <®_drivevbus>; }; }; &axp803 { x-powers,drive-vbus-en; }; &backlight { power-supply = <®_ldo_io0>; lth-brightness = <10>; }; &codec_analog { allwinner,internal-bias-resistor; }; &i2c0 { anx7688: hdmi-bridge@28 { compatible = "analogix,anx7688"; reg = <0x28>; interrupt-parent = <&r_pio>; interrupts = <0 11 2>; enable-gpios = <&pio 3 10 1>; reset-gpios = <&r_pio 0 9 0>; cabledet-gpios = <&r_pio 0 8 0>; avdd10-supply = <®_anx1v0>; dvdd10-supply = <®_anx1v0>; avdd18-supply = <®_ldo_io1>; dvdd18-supply = <®_ldo_io1>; avdd33-supply = <®_dldo1>; i2c-supply = <®_ldo_io0>; vconn-supply = <®_vconn5v0>; hdmi_vt-supply = <®_dldo1>; source-caps = < (((0) << 30) | ((1 << 25) | (1 << 26) | (1 << 29)) | ((((5000) / 50) & 0x3ff) << 10) | ((((500) / 10) & 0x3ff) << 0)) >; sink-caps = < (((0) << 30) | ((1 << 25) | (1 << 26) | (1 << 29)) | ((((5000) / 50) & 0x3ff) << 10) | ((((3000) / 10) & 0x3ff) << 0)) >; # 78 "arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.1.dts" vbus-supply = <®_vbus>; vbus_in-supply = <&usb_power_supply>; port { typec0_dr_sw: endpoint { remote-endpoint = <&usb0_drd_sw>; }; }; }; }; ®_drivevbus { vin-supply = <®_usb_5v>; status = "okay"; }; &sgm3140 { enable-gpios = <&pio 3 24 0>; flash-gpios = <&pio 2 3 0>; }; &uart3 { modem { compatible = "quectel,eg25"; char-device-name = "modem-power"; power-supply = <®_vbat_bb>; enable-gpios = <&pio 7 8 1>; reset-gpios = <&pio 2 4 0>; pwrkey-gpios = <&pio 1 3 0>; sleep-gpios = <&pio 7 7 0>; wakeup-gpios = <&pio 1 2 0>; dtr-gpios = <&r_pio 0 6 0>; cts-gpios = <&pio 3 5 0>; rts-gpios = <&pio 3 4 0>; quectel,qdai = "1,1,0,1,0,0,1,1"; }; }; &usbphy { usb-role-switch; port { usb0_drd_sw: endpoint { remote-endpoint = <&typec0_dr_sw>; }; }; }; &hdmi { extcon = <&anx7688 0>; };