From 9ae7ffb8c922cdc6ce6ecb8f24b9787e81cc0651 Mon Sep 17 00:00:00 2001 From: zador-blood-stained Date: Sat, 19 Aug 2017 17:09:34 +0300 Subject: [PATCH] Drop u-boot proxy usage for pine64-default --- config/sources/sun50iw1.conf | 19 +- packages/blobs/sunxi/a64/boot0-pine64.bin | Bin 0 -> 32768 bytes packages/blobs/sunxi/a64/boot0-pine64so.bin | Bin 0 -> 32768 bytes .../blobs/sunxi/a64/boot0-pinebook-a64.bin | Bin 0 -> 32768 bytes .../blobs/sunxi/a64/pine64-old(noplus).dts | 3442 +++++++++++++++++ packages/blobs/sunxi/a64/pine64.dts | 3442 +++++++++++++++++ packages/blobs/sunxi/a64/pine64so.dts | 3437 ++++++++++++++++ packages/blobs/sunxi/a64/pinebook-a64.dts | 3442 +++++++++++++++++ packages/blobs/sunxi/a64/scp.bin | Bin 0 -> 104660 bytes .../add-boot0img-tool.patch | 765 ++++ .../change-bmp-display-functions.patch | 16 +- .../stop-autoboot-double-esc.patch | 6 +- 12 files changed, 14555 insertions(+), 14 deletions(-) create mode 100644 packages/blobs/sunxi/a64/boot0-pine64.bin create mode 100644 packages/blobs/sunxi/a64/boot0-pine64so.bin create mode 100644 packages/blobs/sunxi/a64/boot0-pinebook-a64.bin create mode 100644 packages/blobs/sunxi/a64/pine64-old(noplus).dts create mode 100644 packages/blobs/sunxi/a64/pine64.dts create mode 100644 packages/blobs/sunxi/a64/pine64so.dts create mode 100644 packages/blobs/sunxi/a64/pinebook-a64.dts create mode 100644 packages/blobs/sunxi/a64/scp.bin create mode 100644 patch/u-boot/u-boot-pine64-default/add-boot0img-tool.patch diff --git a/config/sources/sun50iw1.conf b/config/sources/sun50iw1.conf index 9c4c74b5b0..be2ebc50a1 100644 --- a/config/sources/sun50iw1.conf +++ b/config/sources/sun50iw1.conf @@ -14,14 +14,19 @@ case $BRANCH in ATF_USE_GCC='> 6.0' ATF_TARGET_MAP='PLAT=sun50iw1p1 DEBUG=1 bl31;;build/sun50iw1p1/debug/bl31.bin' - BOOTSOURCE='https://github.com/armbian/u-boot-pine64-legacy.git' + BOOTSOURCE='https://github.com/longsleep/u-boot-pine64' BOOTDIR='u-boot-pine64' - BOOTBRANCH='branch:master' + BOOTBRANCH='branch:pine64-hacks' BOOTSCRIPT='boot-pine64-default.cmd:boot.cmd' BOOTENV_FILE='pine64-default.txt' UBOOT_TARGET_MAP=';;u-boot-with-dtb.bin' BOOTPATCHDIR='u-boot-pine64-default' + # legacy u-boot has one defconfig for all boards + BOOTCONFIG='sun50iw1p1_config' + UBOOT_COMPILER='arm-linux-gnueabihf-' + UBOOT_USE_GCC='> 5.0' + #KERNELSOURCE='https://github.com/longsleep/linux-pine64.git' #KERNELBRANCH='branch:pine64-hacks-1.2' #KERNELDIR='linux-pine64' @@ -30,7 +35,6 @@ case $BRANCH in KERNELBRANCH='branch:my-hacks-1.2' KERNELDIR='linux-pine64' - GOVERNOR=interactive INITRD_ARCH=arm @@ -59,6 +63,15 @@ write_uboot_platform() [[ -f $1/u-boot-sunxi-with-spl.bin ]] && dd if=$1/u-boot-sunxi-with-spl.bin of=$2 bs=1k seek=8 conv=fsync > /dev/null 2>&1 || true } +uboot_custom_postprocess() +{ + if [[ $BRANCH == default ]]; then + dtc -I dts -O dtb -o dt.dtb $SRC/packages/blobs/sunxi/a64/${BOARD}.dts + tools/boot0img -B $SRC/packages/blobs/sunxi/a64/boot0-${BOARD}.bin -s $SRC/packages/blobs/sunxi/a64/scp.bin \ + -d bl31.bin -u u-boot.bin -e -F dt.dtb -o u-boot-with-dtb.bin + fi +} + family_tweaks() { if [[ $BRANCH == default ]]; then diff --git a/packages/blobs/sunxi/a64/boot0-pine64.bin b/packages/blobs/sunxi/a64/boot0-pine64.bin new file mode 100644 index 0000000000000000000000000000000000000000..3ad8341f86190f61c71a729f40ac47dc1dfb4b50 GIT binary patch literal 32768 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 fkj@`2n+NuPq~LnA}JtpeVLX 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 literal 0 HcmV?d00001 diff --git a/packages/blobs/sunxi/a64/pine64-old(noplus).dts b/packages/blobs/sunxi/a64/pine64-old(noplus).dts new file mode 100644 index 0000000000..1ae4518892 --- /dev/null +++ b/packages/blobs/sunxi/a64/pine64-old(noplus).dts @@ -0,0 +1,3442 @@ +/dts-v1/; + +/memreserve/ 0x0000000045000000 0x0000000000200000; +/memreserve/ 0x0000000041010000 0x0000000000010000; +/memreserve/ 0x0000000041020000 0x0000000000000800; +/memreserve/ 0x0000000040100000 0x0000000000004000; +/memreserve/ 0x0000000040104000 0x0000000000001000; +/memreserve/ 0x0000000040105000 0x0000000000001000; +/ { + model = "Pine64"; + dt-name = "sun50iw1p1-pine64"; + compatible = "pine64,pine64"; + interrupt-parent = <0x1>; + #address-cells = <0x2>; + #size-cells = <0x2>; + + clocks { + compatible = "allwinner,sunxi-clk-init"; + device_type = "clocks"; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + reg = <0x0 0x1c20000 0x0 0x320 0x0 0x1f01400 0x0 0xb0 0x0 0x1f00060 0x0 0x4>; + + losc { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-clock"; + clock-frequency = <0x8000>; + clock-output-names = "losc"; + linux,phandle = <0xc>; + phandle = <0xc>; + }; + + iosc { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-clock"; + clock-frequency = <0xf42400>; + clock-output-names = "iosc"; + linux,phandle = <0xd>; + phandle = <0xd>; + }; + + hosc { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-clock"; + clock-frequency = <0x16e3600>; + clock-output-names = "hosc"; + linux,phandle = <0x6>; + phandle = <0x6>; + }; + + pll_cpu { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_cpu"; + }; + + pll_audio { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + assigned-clock-rates = <0x1770000>; + clock-output-names = "pll_audio"; + linux,phandle = <0x2>; + phandle = <0x2>; + }; + + pll_video0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + assigned-clock-rates = <0x11b3dc40>; + clock-output-names = "pll_video0"; + linux,phandle = <0x3>; + phandle = <0x3>; + }; + + pll_ve { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_ve"; + linux,phandle = <0x16>; + phandle = <0x16>; + }; + + pll_ddr0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_ddr0"; + linux,phandle = <0x93>; + phandle = <0x93>; + }; + + pll_periph0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_periph0"; + linux,phandle = <0x4>; + phandle = <0x4>; + }; + + pll_periph1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_periph1"; + linux,phandle = <0x5>; + phandle = <0x5>; + }; + + pll_video1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + assigned-clock-rates = <0x11b3dc40>; + clock-output-names = "pll_video1"; + }; + + pll_gpu { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_gpu"; + linux,phandle = <0x96>; + phandle = <0x96>; + }; + + pll_mipi { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_mipi"; + linux,phandle = <0x8>; + phandle = <0x8>; + }; + + pll_hsic { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_hsic"; + linux,phandle = <0x3a>; + phandle = <0x3a>; + }; + + pll_de { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + assigned-clock-rates = <0x11b3dc40>; + clock-output-names = "pll_de"; + linux,phandle = <0x7>; + phandle = <0x7>; + }; + + pll_ddr1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_ddr1"; + linux,phandle = <0x94>; + phandle = <0x94>; + }; + + pll_audiox8 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x2>; + clock-mult = <0x8>; + clock-div = <0x1>; + clock-output-names = "pll_audiox8"; + }; + + pll_audiox4 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x2>; + clock-mult = <0x8>; + clock-div = <0x2>; + clock-output-names = "pll_audiox4"; + linux,phandle = <0x3c>; + phandle = <0x3c>; + }; + + pll_audiox2 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x2>; + clock-mult = <0x8>; + clock-div = <0x4>; + clock-output-names = "pll_audiox2"; + }; + + pll_video0x2 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x3>; + clock-mult = <0x2>; + clock-div = <0x1>; + clock-output-names = "pll_video0x2"; + }; + + pll_periph0x2 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x4>; + clock-mult = <0x2>; + clock-div = <0x1>; + clock-output-names = "pll_periph0x2"; + linux,phandle = <0x7b>; + phandle = <0x7b>; + }; + + pll_periph1x2 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x5>; + clock-mult = <0x2>; + clock-div = <0x1>; + clock-output-names = "pll_periph1x2"; + linux,phandle = <0x5a>; + phandle = <0x5a>; + }; + + pll_periph0d2 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x4>; + clock-mult = <0x1>; + clock-div = <0x2>; + clock-output-names = "pll_periph0d2"; + }; + + hoscd2 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x6>; + clock-mult = <0x1>; + clock-div = <0x2>; + clock-output-names = "hoscd2"; + }; + + cpu { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "cpu"; + }; + + cpuapb { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "cpuapb"; + }; + + axi { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "axi"; + }; + + pll_periphahb0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "pll_periphahb0"; + }; + + ahb1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "ahb1"; + linux,phandle = <0x95>; + phandle = <0x95>; + }; + + apb1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "apb1"; + }; + + apb2 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "apb2"; + linux,phandle = <0x7e>; + phandle = <0x7e>; + }; + + ahb2 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "ahb2"; + }; + + ths { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "ths"; + linux,phandle = <0x84>; + phandle = <0x84>; + }; + + nand { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "nand"; + linux,phandle = <0x80>; + phandle = <0x80>; + }; + + sdmmc0_mod { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc0_mod"; + linux,phandle = <0x60>; + phandle = <0x60>; + }; + + sdmmc0_bus { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc0_bus"; + linux,phandle = <0x61>; + phandle = <0x61>; + }; + + sdmmc0_rst { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc0_rst"; + linux,phandle = <0x62>; + phandle = <0x62>; + }; + + sdmmc1_mod { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc1_mod"; + linux,phandle = <0x65>; + phandle = <0x65>; + }; + + sdmmc1_bus { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc1_bus"; + linux,phandle = <0x66>; + phandle = <0x66>; + }; + + sdmmc1_rst { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc1_rst"; + linux,phandle = <0x67>; + phandle = <0x67>; + }; + + sdmmc2_mod { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc2_mod"; + linux,phandle = <0x5b>; + phandle = <0x5b>; + }; + + sdmmc2_bus { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc2_bus"; + linux,phandle = <0x5c>; + phandle = <0x5c>; + }; + + sdmmc2_rst { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc2_rst"; + linux,phandle = <0x5d>; + phandle = <0x5d>; + }; + + ts { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "ts"; + }; + + ce { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "ce"; + linux,phandle = <0x7a>; + phandle = <0x7a>; + }; + + spi0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "spi0"; + linux,phandle = <0x52>; + phandle = <0x52>; + }; + + spi1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "spi1"; + linux,phandle = <0x56>; + phandle = <0x56>; + }; + + i2s0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "i2s0"; + linux,phandle = <0x42>; + phandle = <0x42>; + }; + + i2s1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "i2s1"; + linux,phandle = <0x47>; + phandle = <0x47>; + }; + + i2s2 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "i2s2"; + linux,phandle = <0x48>; + phandle = <0x48>; + }; + + spdif { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "spdif"; + linux,phandle = <0x49>; + phandle = <0x49>; + }; + + usbphy0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbphy0"; + linux,phandle = <0x32>; + phandle = <0x32>; + }; + + usbphy1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbphy1"; + linux,phandle = <0x36>; + phandle = <0x36>; + }; + + usbhsic { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbhsic"; + linux,phandle = <0x38>; + phandle = <0x38>; + }; + + usbhsic12m { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbhsic12m"; + linux,phandle = <0x39>; + phandle = <0x39>; + }; + + usbohci1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbohci1"; + linux,phandle = <0x3b>; + phandle = <0x3b>; + }; + + usbohci0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbohci0"; + linux,phandle = <0x35>; + phandle = <0x35>; + }; + + de { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + assigned-clock-parents = <0x7>; + assigned-clock-rates = <0x11b3dc40>; + clock-output-names = "de"; + linux,phandle = <0x6a>; + phandle = <0x6a>; + }; + + tcon0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + assigned-clock-parents = <0x8>; + clock-output-names = "tcon0"; + linux,phandle = <0x6b>; + phandle = <0x6b>; + }; + + tcon1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + assigned-clock-parents = <0x3>; + clock-output-names = "tcon1"; + linux,phandle = <0x6e>; + phandle = <0x6e>; + }; + + deinterlace { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "deinterlace"; + linux,phandle = <0x7c>; + phandle = <0x7c>; + }; + + csi_s { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "csi_s"; + linux,phandle = <0x73>; + phandle = <0x73>; + }; + + csi_m { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "csi_m"; + linux,phandle = <0x74>; + phandle = <0x74>; + }; + + csi_misc { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "csi_misc"; + linux,phandle = <0x75>; + phandle = <0x75>; + }; + + ve { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "ve"; + linux,phandle = <0x17>; + phandle = <0x17>; + }; + + adda { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "adda"; + linux,phandle = <0x41>; + phandle = <0x41>; + }; + + addax4 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "addax4"; + }; + + avs { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "avs"; + }; + + hdmi { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + assigned-clock-parents = <0x3>; + clock-output-names = "hdmi"; + linux,phandle = <0x6f>; + phandle = <0x6f>; + }; + + hdmi_slow { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "hdmi_slow"; + linux,phandle = <0x70>; + phandle = <0x70>; + }; + + mbus { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "mbus"; + }; + + mipidsi { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "mipidsi"; + linux,phandle = <0x6d>; + phandle = <0x6d>; + }; + + gpu { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "gpu"; + linux,phandle = <0x97>; + phandle = <0x97>; + }; + + usbehci_16 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbohci_16"; + }; + + usbehci1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbehci1"; + linux,phandle = <0x37>; + phandle = <0x37>; + }; + + usbehci0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbehci0"; + linux,phandle = <0x34>; + phandle = <0x34>; + }; + + usbotg { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbotg"; + linux,phandle = <0x33>; + phandle = <0x33>; + }; + + gmac { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "gmac"; + linux,phandle = <0x8f>; + phandle = <0x8f>; + }; + + sdram { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdram"; + }; + + dma { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "dma"; + linux,phandle = <0xb>; + phandle = <0xb>; + }; + + hwspinlock_rst { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "hwspinlock_rst"; + linux,phandle = <0xf>; + phandle = <0xf>; + }; + + hwspinlock_bus { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "hwspinlock_bus"; + linux,phandle = <0x10>; + phandle = <0x10>; + }; + + msgbox { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "msgbox"; + linux,phandle = <0xe>; + phandle = <0xe>; + }; + + lvds { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "lvds"; + linux,phandle = <0x6c>; + phandle = <0x6c>; + }; + + uart0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "uart0"; + linux,phandle = <0x18>; + phandle = <0x18>; + }; + + uart1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "uart1"; + linux,phandle = <0x1b>; + phandle = <0x1b>; + }; + + uart2 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "uart2"; + linux,phandle = <0x1e>; + phandle = <0x1e>; + }; + + uart3 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "uart3"; + linux,phandle = <0x21>; + phandle = <0x21>; + }; + + uart4 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "uart4"; + linux,phandle = <0x24>; + phandle = <0x24>; + }; + + scr { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "scr"; + linux,phandle = <0x7d>; + phandle = <0x7d>; + }; + + twi0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "twi0"; + linux,phandle = <0x27>; + phandle = <0x27>; + }; + + twi1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "twi1"; + linux,phandle = <0x2a>; + phandle = <0x2a>; + }; + + twi2 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "twi2"; + linux,phandle = <0x2d>; + phandle = <0x2d>; + }; + + twi3 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "twi3"; + }; + + pio { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "pio"; + linux,phandle = <0xa>; + phandle = <0xa>; + }; + + cpurcir { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "cpurcir"; + linux,phandle = <0x12>; + phandle = <0x12>; + }; + + cpurpio { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "cpurpio"; + linux,phandle = <0x9>; + phandle = <0x9>; + }; + + cpurpll_peri0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "cpurpll_peri0"; + }; + + cpurcpus { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "cpurcpus"; + }; + + cpurahbs { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "cpurahbs"; + }; + + cpurapbs { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "cpurapbs"; + }; + + losc_out { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "losc_out"; + linux,phandle = <0x98>; + phandle = <0x98>; + }; + }; + + soc@01c00000 { + compatible = "simple-bus"; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + device_type = "soc"; + + pinctrl@01f02c00 { + compatible = "allwinner,sun50i-r-pinctrl"; + reg = <0x0 0x1f02c00 0x0 0x400>; + interrupts = <0x0 0x2d 0x4>; + clocks = <0x9>; + device_type = "r_pio"; + gpio-controller; + interrupt-controller; + #interrupt-cells = <0x2>; + #size-cells = <0x0>; + #gpio-cells = <0x6>; + linux,phandle = <0x79>; + phandle = <0x79>; + + s_cir0@0 { + allwinner,pins = "PL11"; + allwinner,function = "s_cir0"; + allwinner,muxsel = <0x2>; + allwinner,drive = <0x2>; + allwinner,pull = <0x1>; + linux,phandle = <0x11>; + phandle = <0x11>; + }; + + spwm0@0 { + linux,phandle = <0xaf>; + phandle = <0xaf>; + allwinner,pins = "PL10"; + allwinner,function = "spwm0"; + allwinner,pname = "pwm_positive"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x0>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + spwm0@1 { + linux,phandle = <0xb0>; + phandle = <0xb0>; + allwinner,pins = "PL10"; + allwinner,function = "spwm0"; + allwinner,pname = "pwm_positive"; + allwinner,muxsel = <0x7>; + allwinner,pull = <0x0>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + s_uart0@0 { + linux,phandle = <0xb6>; + phandle = <0xb6>; + allwinner,pins = "PL2", "PL3"; + allwinner,function = "s_uart0"; + allwinner,pname = "s_uart0_tx", "s_uart0_rx"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + s_rsb0@0 { + linux,phandle = <0xb7>; + phandle = <0xb7>; + allwinner,pins = "PL0", "PL1"; + allwinner,function = "s_rsb0"; + allwinner,pname = "s_rsb0_sck", "s_rsb0_sda"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0x2>; + allwinner,data = <0xffffffff>; + }; + + s_jtag0@0 { + linux,phandle = <0xb8>; + phandle = <0xb8>; + allwinner,pins = "PL4", "PL5", "PL6", "PL7"; + allwinner,function = "s_jtag0"; + allwinner,pname = "s_jtag0_tms", "s_jtag0_tck", "s_jtag0_tdo", "s_jtag0_tdi"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0x2>; + allwinner,data = <0xffffffff>; + }; + }; + + pinctrl@01c20800 { + compatible = "allwinner,sun50i-pinctrl"; + reg = <0x0 0x1c20800 0x0 0x400>; + interrupts = <0x0 0xb 0x4 0x0 0x11 0x4 0x0 0x15 0x4>; + device_type = "pio"; + clocks = <0xa>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <0x2>; + #size-cells = <0x0>; + #gpio-cells = <0x6>; + linux,phandle = <0x30>; + phandle = <0x30>; + + uart0@1 { + allwinner,pins = "PB8", "PB9"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x1a>; + phandle = <0x1a>; + }; + + uart1@1 { + allwinner,pins = "PG6", "PG7", "PG8", "PG9"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x1d>; + phandle = <0x1d>; + }; + + uart2@1 { + allwinner,pins = "PB0", "PB1", "PB2", "PB3"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x20>; + phandle = <0x20>; + }; + + uart3@1 { + allwinner,pins = "PH4", "PH5", "PH6", "PH7"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x23>; + phandle = <0x23>; + }; + + uart4@1 { + allwinner,pins = "PD2", "PD3", "PD4", "PD5"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x26>; + phandle = <0x26>; + }; + + twi0@1 { + allwinner,pins = "PH0", "PH1"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x29>; + phandle = <0x29>; + }; + + twi1@1 { + allwinner,pins = "PH2", "PH3"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x2c>; + phandle = <0x2c>; + }; + + twi2@1 { + allwinner,pins = "PE14", "PE15"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x2f>; + phandle = <0x2f>; + }; + + spi0@2 { + allwinner,pins = "PC3", "PC2", "PC0", "PC1"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x55>; + phandle = <0x55>; + }; + + spi1@2 { + allwinner,pins = "PD0", "PD1", "PD2", "PD3"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x59>; + phandle = <0x59>; + }; + + sdc0@1 { + allwinner,pins = "PF0", "PF1", "PF2", "PF3", "PF4", "PF5"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x64>; + phandle = <0x64>; + }; + + sdc1@1 { + allwinner,pins = "PG0", "PG1", "PG2", "PG3", "PG4", "PG5"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x69>; + phandle = <0x69>; + }; + + sdc2@1 { + allwinner,pins = "PC1", "PC5", "PC6", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x5f>; + phandle = <0x5f>; + }; + + daudio0@0 { + allwinner,pins = "PB6", "PB3", "PB4", "PB5", "PB7"; + allwinner,function = "pcm0"; + allwinner,muxsel = <0x3>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x43>; + phandle = <0x43>; + }; + + daudio0_sleep@0 { + allwinner,pins = "PB6", "PB3", "PB4", "PB5", "PB7"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x44>; + phandle = <0x44>; + }; + + daudio1@0 { + allwinner,pins = "PG10", "PG11", "PG12", "PG13"; + allwinner,function = "pcm1"; + allwinner,muxsel = <0x3>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x45>; + phandle = <0x45>; + }; + + daudio1_sleep@0 { + allwinner,pins = "PG10", "PG11", "PG12", "PG13"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x46>; + phandle = <0x46>; + }; + + aif3@0 { + allwinner,pins = "PG10", "PG11", "PG12", "PG13"; + allwinner,function = "aif3"; + allwinner,muxsel = <0x2>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x3e>; + phandle = <0x3e>; + }; + + aif2_sleep@0 { + allwinner,pins = "PB6", "PB4", "PB5", "PB7"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x3f>; + phandle = <0x3f>; + }; + + aif3_sleep@0 { + allwinner,pins = "PG10", "PG11", "PG12", "PG13"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x40>; + phandle = <0x40>; + }; + + spdif@0 { + allwinner,pins = "PH8"; + allwinner,function = "spdif0"; + allwinner,muxsel = <0x2>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x4a>; + phandle = <0x4a>; + }; + + spdif_sleep@0 { + allwinner,pins = "PH8"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x4b>; + phandle = <0x4b>; + }; + + csi0_sleep@0 { + allwinner,pins = "PE0", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13"; + allwinner,pname = "csi0_pck", "csi0_hsync", "csi0_vsync", "csi0_d0", "csi0_d1", "csi0_d2", "csi0_d3", "csi0_d4", "csi0_d5", "csi0_d6", "csi0_d7", "csi0_sck", "csi0_sda"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + allwinner,data = <0x0>; + linux,phandle = <0x77>; + phandle = <0x77>; + }; + + smartcard@0 { + allwinner,pins = "PB1", "PB4", "PB5", "PB6", "PB7"; + allwinner,function = "sim0"; + allwinner,muxsel = <0x5>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x7f>; + phandle = <0x7f>; + }; + + nand0@2 { + allwinner,pins = "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PC18"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x83>; + phandle = <0x83>; + }; + + card0_boot_para@0 { + linux,phandle = <0x99>; + phandle = <0x99>; + allwinner,pins = "PF0", "PF1", "PF2", "PF3", "PF4", "PF5"; + allwinner,function = "card0_boot_para"; + allwinner,pname = "sdc_d1", "sdc_d0", "sdc_clk", "sdc_cmd", "sdc_d3", "sdc_d2"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0x2>; + allwinner,data = <0xffffffff>; + }; + + card2_boot_para@0 { + linux,phandle = <0x9a>; + phandle = <0x9a>; + allwinner,pins = "PC1", "PC5", "PC6", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16"; + allwinner,function = "card2_boot_para"; + allwinner,pname = "sdc_ds", "sdc_clk", "sdc_cmd", "sdc_d0", "sdc_d1", "sdc_d2", "sdc_d3", "sdc_d4", "sdc_d5", "sdc_d6", "sdc_d7", "sdc_emmc_rst"; + allwinner,muxsel = <0x3>; + allwinner,pull = <0x1>; + allwinner,drive = <0x3>; + allwinner,data = <0xffffffff>; + }; + + twi_para@0 { + linux,phandle = <0x9b>; + phandle = <0x9b>; + allwinner,pins = "PH0", "PH1"; + allwinner,function = "twi_para"; + allwinner,pname = "twi_scl", "twi_sda"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + uart_para@0 { + linux,phandle = <0x9c>; + phandle = <0x9c>; + allwinner,pins = "PB8", "PB9"; + allwinner,function = "uart_para"; + allwinner,pname = "uart_debug_tx", "uart_debug_rx"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + jtag_para@0 { + linux,phandle = <0x9d>; + phandle = <0x9d>; + allwinner,pins = "PB0", "PB1", "PB2", "PB3"; + allwinner,function = "jtag_para"; + allwinner,pname = "jtag_ms", "jtag_ck", "jtag_do", "jtag_di"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + gmac0@0 { + linux,phandle = <0x9e>; + phandle = <0x9e>; + allwinner,pins = "PD18", "PD17", "PD19", "PD20", "PD11", "PD10", "PD13", "PD22", "PD23"; + allwinner,function = "gmac0"; + allwinner,pname = "gmac_txd0", "gmac_txd1", "gmac_txclk", "gmac_txen", "gmac_rxd0", "gmac_rxd1", "gmac_rxdv", "gmac_mdc", "gmac_mdio"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0x3>; + allwinner,data = <0xffffffff>; + }; + + twi0@0 { + linux,phandle = <0x9f>; + phandle = <0x9f>; + allwinner,pins = "PH0", "PH1"; + allwinner,function = "twi0"; + allwinner,pname = "twi0_scl", "twi0_sda"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + twi1@0 { + linux,phandle = <0xa0>; + phandle = <0xa0>; + allwinner,pins = "PH2", "PH3"; + allwinner,function = "twi1"; + allwinner,pname = "twi1_scl", "twi1_sda"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + twi2@0 { + linux,phandle = <0xa1>; + phandle = <0xa1>; + allwinner,pins = "PE14", "PE15"; + allwinner,function = "twi2"; + allwinner,pname = "twi2_scl", "twi2_sda"; + allwinner,muxsel = <0x3>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + uart0@0 { + linux,phandle = <0xa2>; + phandle = <0xa2>; + allwinner,pins = "PB8", "PB9"; + allwinner,function = "uart0"; + allwinner,pname = "uart0_tx", "uart0_rx"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + uart1@0 { + linux,phandle = <0xa3>; + phandle = <0xa3>; + allwinner,pins = "PG6", "PG7", "PG8", "PG9"; + allwinner,function = "uart1"; + allwinner,pname = "uart1_tx", "uart1_rx", "uart1_rts", "uart1_cts"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + uart2@0 { + linux,phandle = <0xa4>; + phandle = <0xa4>; + allwinner,pins = "PB0", "PB1", "PB2", "PB3"; + allwinner,function = "uart2"; + allwinner,pname = "uart2_tx", "uart2_rx", "uart2_rts", "uart2_cts"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + uart3@0 { + linux,phandle = <0xa5>; + phandle = <0xa5>; + allwinner,pins = "PD0", "PD1"; + allwinner,function = "uart3"; + allwinner,pname = "uart3_tx", "uart3_rx"; + allwinner,muxsel = <0x3>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + uart4@0 { + linux,phandle = <0xa6>; + phandle = <0xa6>; + allwinner,pins = "PD2", "PD3", "PD4", "PD5"; + allwinner,function = "uart4"; + allwinner,pname = "uart4_tx", "uart4_rx", "uart4_rts", "uart4_cts"; + allwinner,muxsel = <0x3>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + spi0@0 { + linux,phandle = <0xa7>; + phandle = <0xa7>; + allwinner,pins = "PC3"; + allwinner,function = "spi0"; + allwinner,pname = "spi0_cs0"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + spi0@1 { + linux,phandle = <0xa8>; + phandle = <0xa8>; + allwinner,pins = "PC2", "PC0", "PC1"; + allwinner,function = "spi0"; + allwinner,pname = "spi0_sclk", "spi0_mosi", "spi0_miso"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + spi1@0 { + linux,phandle = <0xa9>; + phandle = <0xa9>; + allwinner,pins = "PD0"; + allwinner,function = "spi1"; + allwinner,pname = "spi1_cs0"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + spi1@1 { + linux,phandle = <0xaa>; + phandle = <0xaa>; + allwinner,pins = "PD1", "PD2", "PD3"; + allwinner,function = "spi1"; + allwinner,pname = "spi1_sclk", "spi1_mosi", "spi1_miso"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + nand0@0 { + linux,phandle = <0xab>; + phandle = <0xab>; + allwinner,pins = "PC0", "PC1", "PC2", "PC5", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16"; + allwinner,function = "nand0"; + allwinner,pname = "nand0_we", "nand0_ale", "nand0_cle", "nand0_nre", "nand0_d0", "nand0_d1", "nand0_d2", "nand0_d3", "nand0_d4", "nand0_d5", "nand0_d6", "nand0_d7", "nand0_ndqs"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x0>; + allwinner,drive = <0x1>; + allwinner,data = <0xffffffff>; + }; + + nand0@1 { + linux,phandle = <0xac>; + phandle = <0xac>; + allwinner,pins = "PC3", "PC4", "PC6", "PC7", "PC17", "PC18"; + allwinner,function = "nand0"; + allwinner,pname = "nand0_ce1", "nand0_ce0", "nand0_rb0", "nand0_rb1", "nand0_ce2", "nand0_ce3"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0x1>; + allwinner,data = <0xffffffff>; + }; + + pwm0@0 { + linux,phandle = <0xad>; + phandle = <0xad>; + allwinner,pins = "PD22"; + allwinner,function = "pwm0"; + allwinner,pname = "pwm_positive"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x0>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + pwm0@1 { + linux,phandle = <0xae>; + phandle = <0xae>; + allwinner,pins = "PD22"; + allwinner,function = "pwm0"; + allwinner,pname = "pwm_positive"; + allwinner,muxsel = <0x7>; + allwinner,pull = <0x0>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + csi0@0 { + linux,phandle = <0xb1>; + phandle = <0xb1>; + allwinner,pins = "PE0", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13"; + allwinner,function = "csi0"; + allwinner,pname = "csi0_pck", "csi0_hsync", "csi0_vsync", "csi0_d0", "csi0_d1", "csi0_d2", "csi0_d3", "csi0_d4", "csi0_d5", "csi0_d6", "csi0_d7", "csi0_sck", "csi0_sda"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + sdc0@0 { + linux,phandle = <0xb2>; + phandle = <0xb2>; + allwinner,pins = "PF0", "PF1", "PF2", "PF3", "PF4", "PF5"; + allwinner,function = "sdc0"; + allwinner,pname = "sdc0_d1", "sdc0_d0", "sdc0_clk", "sdc0_cmd", "sdc0_d3", "sdc0_d2"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0x2>; + allwinner,data = <0xffffffff>; + }; + + sdc1@0 { + linux,phandle = <0xb3>; + phandle = <0xb3>; + allwinner,pins = "PG0", "PG1", "PG2", "PG3", "PG4", "PG5"; + allwinner,function = "sdc1"; + allwinner,pname = "sdc1_clk", "sdc1_cmd", "sdc1_d0", "sdc1_d1", "sdc1_d2", "sdc1_d3"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0x3>; + allwinner,data = <0xffffffff>; + }; + + sdc2@0 { + linux,phandle = <0xb4>; + phandle = <0xb4>; + allwinner,pins = "PC1", "PC5", "PC6", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16"; + allwinner,function = "sdc2"; + allwinner,pname = "sdc2_ds", "sdc2_clk", "sdc2_cmd", "sdc2_d0", "sdc2_d1", "sdc2_d2", "sdc2_d3", "sdc2_d4", "sdc2_d5", "sdc2_d6", "sdc2_d7", "sdc2_emmc_rst"; + allwinner,muxsel = <0x3>; + allwinner,pull = <0x1>; + allwinner,drive = <0x3>; + allwinner,data = <0xffffffff>; + }; + + codec@0 { + linux,phandle = <0xb5>; + phandle = <0xb5>; + allwinner,pins = "PH7"; + allwinner,function = "codec"; + allwinner,pname = "gpio-spk"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + Vdevice@0 { + linux,phandle = <0xb9>; + phandle = <0xb9>; + allwinner,pins = "PB1", "PB2"; + allwinner,function = "Vdevice"; + allwinner,pname = "Vdevice_0", "Vdevice_1"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0x1>; + allwinner,drive = <0x2>; + allwinner,data = <0xffffffff>; + }; + + w1_pin@0 { + linux,phandle = <0xba>; + phandle = <0xba>; + allwinner,pins = "PC8"; + allwinner,function = "gpio_in"; + allwinner,pname = "w1"; + allwinner,muxsel = <0x0>; + allwinner,pull = <0x1>; + allwinner,drive = <0x0>; + allwinner,data = <0xffffffff>; + }; + }; + + pinctrl@0 { + compatible = "allwinner,axp-pinctrl"; + gpio-controller; + #size-cells = <0x0>; + #gpio-cells = <0x6>; + device_type = "axp_pio"; + linux,phandle = <0x31>; + phandle = <0x31>; + }; + + dma-controller@01c02000 { + compatible = "allwinner,sun50i-dma"; + reg = <0x0 0x1c02000 0x0 0x1000>; + interrupts = <0x0 0x32 0x4>; + clocks = <0xb>; + #dma-cells = <0x1>; + }; + + mbus-controller@01c62000 { + compatible = "allwinner,sun50i-mbus"; + reg = <0x0 0x1c62000 0x0 0x110>; + #mbus-cells = <0x1>; + }; + + arisc { + compatible = "allwinner,sunxi-arisc"; + #address-cells = <0x2>; + #size-cells = <0x2>; + clocks = <0xc 0xd 0x6 0x4>; + clock-names = "losc", "iosc", "hosc", "pll_periph0"; + powchk_used = <0x0>; + power_reg = <0x2309621>; + system_power = <0x32>; + }; + + arisc_space { + compatible = "allwinner,arisc_space"; + space1 = <0x40000 0x0 0x14000>; + space2 = <0x40100000 0x18000 0x4000>; + space3 = <0x40104000 0x0 0x1000>; + space4 = <0x40105000 0x0 0x1000>; + }; + + standby_space { + compatible = "allwinner,standby_space"; + space1 = <0x41020000 0x0 0x800>; + }; + + msgbox@1c17000 { + compatible = "allwinner,msgbox"; + clocks = <0xe>; + clock-names = "clk_msgbox"; + reg = <0x0 0x1c17000 0x0 0x1000>; + interrupts = <0x0 0x31 0x1>; + status = "okay"; + }; + + hwspinlock@1c18000 { + compatible = "allwinner,sunxi-hwspinlock"; + clocks = <0xf 0x10>; + clock-names = "clk_hwspinlock_rst", "clk_hwspinlock_bus"; + reg = <0x0 0x1c18000 0x0 0x1000>; + status = "okay"; + num-locks = <0x8>; + }; + + s_cir@1f02000 { + compatible = "allwinner,s_cir"; + reg = <0x0 0x1f02000 0x0 0x400>; + interrupts = <0x0 0x25 0x4>; + pinctrl-names = "default"; + pinctrl-0 = <0x11>; + clocks = <0x6 0x12>; + supply = "vcc-pl"; + ir_power_key_code = <0x4d>; + ir_addr_code = <0x4040>; + status = "okay"; + device_type = "s_cir0"; + }; + + s_uart@1f02800 { + compatible = "allwinner,s_uart"; + reg = <0x0 0x1f02800 0x0 0x400>; + interrupts = <0x0 0x26 0x4>; + pinctrl-names = "default"; + status = "okay"; + device_type = "s_uart0"; + pinctrl-0 = <0xb6>; + }; + + s_rsb@1f03400 { + compatible = "allwinner,s_rsb"; + reg = <0x0 0x1f03400 0x0 0x400>; + interrupts = <0x0 0x27 0x4>; + pinctrl-names = "default"; + status = "okay"; + device_type = "s_rsb0"; + pinctrl-0 = <0xb7>; + }; + + s_jtag0 { + compatible = "allwinner,s_jtag"; + pinctrl-names = "default"; + status = "disabled"; + device_type = "s_jtag0"; + pinctrl-0 = <0xb8>; + }; + + timer@1c20c00 { + compatible = "allwinner,sunxi-timer"; + device_type = "timer"; + reg = <0x0 0x1c20c00 0x0 0x90>; + interrupts = <0x0 0x12 0x1>; + clock-frequency = <0x16e3600>; + timer-prescale = <0x10>; + }; + + rtc@01f00000 { + compatible = "allwinner,sun50i-rtc"; + device_type = "rtc"; + reg = <0x0 0x1f00000 0x0 0x218>; + interrupts = <0x0 0x28 0x4>; + gpr_offset = <0x100>; + gpr_len = <0x4>; + }; + + ve@01c0e000 { + compatible = "allwinner,sunxi-cedar-ve"; + reg = <0x0 0x1c0e000 0x0 0x1000 0x0 0x1c00000 0x0 0x10 0x0 0x1c20000 0x0 0x800>; + interrupts = <0x0 0x3a 0x4>; + clocks = <0x16 0x17>; + }; + + uart@01c28000 { + compatible = "allwinner,sun50i-uart"; + device_type = "uart0"; + reg = <0x0 0x1c28000 0x0 0x400>; + interrupts = <0x0 0x0 0x4>; + clocks = <0x18>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x1a>; + uart0_port = <0x0>; + uart0_type = <0x2>; + status = "okay"; + pinctrl-0 = <0xa2>; + }; + + uart@01c28400 { + compatible = "allwinner,sun50i-uart"; + device_type = "uart1"; + reg = <0x0 0x1c28400 0x0 0x400>; + interrupts = <0x0 0x1 0x4>; + clocks = <0x1b>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x1d>; + uart1_port = <0x1>; + uart1_type = <0x4>; + status = "okay"; + pinctrl-0 = <0xa3>; + }; + + uart@01c28800 { + compatible = "allwinner,sun50i-uart"; + device_type = "uart2"; + reg = <0x0 0x1c28800 0x0 0x400>; + interrupts = <0x0 0x2 0x4>; + clocks = <0x1e>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x20>; + uart2_port = <0x2>; + uart2_type = <0x4>; + status = "okay"; + pinctrl-0 = <0xa4>; + }; + + uart@01c28c00 { + compatible = "allwinner,sun50i-uart"; + device_type = "uart3"; + reg = <0x0 0x1c28c00 0x0 0x400>; + interrupts = <0x0 0x3 0x4>; + clocks = <0x21>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x23>; + uart3_port = <0x3>; + uart3_type = <0x4>; + status = "okay"; + pinctrl-0 = <0xa5>; + }; + + uart@01c29000 { + compatible = "allwinner,sun50i-uart"; + device_type = "uart4"; + reg = <0x0 0x1c29000 0x0 0x400>; + interrupts = <0x0 0x4 0x4>; + clocks = <0x24>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x26>; + uart4_port = <0x4>; + uart4_type = <0x4>; + status = "okay"; + pinctrl-0 = <0xa6>; + }; + + twi@0x01c2ac00 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sun50i-twi"; + device_type = "twi0"; + reg = <0x0 0x1c2ac00 0x0 0x400>; + interrupts = <0x0 0x6 0x4>; + clocks = <0x27>; + clock-frequency = <0x61a80>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x29>; + status = "okay"; + pinctrl-0 = <0x9f>; + }; + + twi@0x01c2b000 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sun50i-twi"; + device_type = "twi1"; + reg = <0x0 0x1c2b000 0x0 0x400>; + interrupts = <0x0 0x7 0x4>; + clocks = <0x2a>; + clock-frequency = <0x30d40>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x2c>; + status = "okay"; + pinctrl-0 = <0xa0>; + }; + + twi@0x01c2b400 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sun50i-twi"; + device_type = "twi2"; + reg = <0x0 0x1c2b400 0x0 0x400>; + interrupts = <0x0 0x8 0x4>; + clocks = <0x2d>; + clock-frequency = <0x30d40>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x2f>; + status = "disabled"; + pinctrl-0 = <0xa1>; + }; + + usbc0@0 { + device_type = "usbc0"; + compatible = "allwinner,sunxi-otg-manager"; + usb_port_type = <0x1>; + usb_detect_type = <0x0>; + usb_host_init_state = <0x1>; + usb_regulator_io = "nocare"; + usb_wakeup_suspend = <0x1>; + usb_luns = <0x3>; + usb_serial_unique = <0x1>; + usb_serial_number = "20080411"; + rndis_wceis = <0x1>; + status = "okay"; + usb_id_gpio; + usb_det_vbus_gpio; + usb_drv_vbus_gpio; + }; + + udc-controller@0x01c19000 { + compatible = "allwinner,sunxi-udc"; + reg = <0x0 0x1c19000 0x0 0x1000 0x0 0x1c00000 0x0 0x100>; + interrupts = <0x0 0x47 0x4>; + clocks = <0x32 0x33>; + status = "okay"; + }; + + ehci0-controller@0x01c1a000 { + compatible = "allwinner,sunxi-ehci0"; + reg = <0x0 0x1c1a000 0x0 0xfff 0x0 0x1c00000 0x0 0x100 0x0 0x1c19000 0x0 0x1000>; + interrupts = <0x0 0x48 0x4>; + clocks = <0x32 0x34>; + hci_ctrl_no = <0x0>; + status = "okay"; + }; + + ohci0-controller@0x01c1a400 { + compatible = "allwinner,sunxi-ohci0"; + reg = <0x0 0x1c1a000 0x0 0xfff 0x0 0x1c00000 0x0 0x100 0x0 0x1c19000 0x0 0x1000>; + interrupts = <0x0 0x49 0x4>; + clocks = <0x32 0x35>; + hci_ctrl_no = <0x0>; + status = "okay"; + }; + + usbc1@0 { + device_type = "usbc1"; + usb_host_init_state = <0x1>; + usb_regulator_io = "nocare"; + usb_wakeup_suspend = <0x1>; + usb_hsic_used = <0x0>; + usb_hsic_regulator_io = "vcc-hsic-12"; + usb_hsic_ctrl = <0x0>; + usb_hsic_usb3503_flag = <0x0>; + status = "okay"; + usb_port_type = <0x1>; + usb_detect_type = <0x0>; + usb_drv_vbus_gpio; + usb_hsic_rdy_gpio; + usb_hsic_hub_connect_gpio; + usb_hsic_int_n_gpio; + usb_hsic_reset_n_gpio; + }; + + ehci1-controller@0x01c1b000 { + compatible = "allwinner,sunxi-ehci1"; + reg = <0x0 0x1c1b000 0x0 0xfff 0x0 0x1c00000 0x0 0x100 0x0 0x1c19000 0x0 0x1000>; + interrupts = <0x0 0x4a 0x4>; + clocks = <0x36 0x37 0x38 0x39 0x3a>; + hci_ctrl_no = <0x1>; + status = "okay"; + }; + + ohci1-controller@0x01c1b400 { + compatible = "allwinner,sunxi-ohci1"; + reg = <0x0 0x1c1b000 0x0 0xfff 0x0 0x1c00000 0x0 0x100 0x0 0x1c19000 0x0 0x1000>; + interrupts = <0x0 0x4b 0x4>; + clocks = <0x36 0x3b>; + hci_ctrl_no = <0x1>; + status = "okay"; + }; + + codec@0x01c22c00 { + compatible = "allwinner,sunxi-internal-codec"; + reg = <0x0 0x1c22c00 0x0 0x478 0x0 0x1f015c0 0x0 0x0>; + clocks = <0x3c>; + pinctrl-names = "aif2-default", "aif3-default", "aif2-sleep", "aif3-sleep"; + pinctrl-1 = <0x3e>; + pinctrl-2 = <0x3f>; + pinctrl-3 = <0x40>; + gpio-spk = <0x30 0x7 0x7 0x1 0x1 0x1 0x1>; + headphonevol = <0x3b>; + spkervol = <0x1a>; + earpiecevol = <0x1e>; + maingain = <0x4>; + headsetmicgain = <0x4>; + adcagc_cfg = <0x0>; + adcdrc_cfg = <0x0>; + adchpf_cfg = <0x0>; + dacdrc_cfg = <0x0>; + dachpf_cfg = <0x0>; + aif1_lrlk_div = <0x40>; + aif2_lrlk_div = <0x40>; + aif2config = <0x0>; + aif3config = <0x0>; + pa_sleep_time = <0x15e>; + dac_digital_vol = <0xa0a0>; + status = "okay"; + linux,phandle = <0x4d>; + phandle = <0x4d>; + device_type = "codec"; + pinctrl-0 = <0xb5>; + }; + + i2s0-controller@0x01c22c00 { + compatible = "allwinner,sunxi-internal-i2s"; + reg = <0x0 0x1c22c00 0x0 0x478>; + clocks = <0x2 0x41>; + status = "okay"; + linux,phandle = <0x4c>; + phandle = <0x4c>; + device_type = "i2s"; + }; + + daudio@0x01c22000 { + compatible = "allwinner,sunxi-daudio"; + reg = <0x0 0x1c22000 0x0 0x58>; + clocks = <0x2 0x42>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <0x43>; + pinctrl-1 = <0x44>; + pcm_lrck_period = <0x20>; + pcm_lrckr_period = <0x1>; + slot_width_select = <0x20>; + pcm_lsb_first = <0x0>; + tx_data_mode = <0x0>; + rx_data_mode = <0x0>; + daudio_master = <0x4>; + audio_format = <0x1>; + signal_inversion = <0x1>; + frametype = <0x0>; + tdm_config = <0x1>; + tdm_num = <0x0>; + status = "disabled"; + linux,phandle = <0x4e>; + phandle = <0x4e>; + device_type = "daudio0"; + }; + + daudio@0x01c22400 { + compatible = "allwinner,sunxi-daudio"; + reg = <0x0 0x1c22400 0x0 0x58>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <0x45>; + pinctrl-1 = <0x46>; + clocks = <0x2 0x47>; + pcm_lrck_period = <0x20>; + pcm_lrckr_period = <0x1>; + slot_width_select = <0x20>; + pcm_lsb_first = <0x0>; + tx_data_mode = <0x0>; + rx_data_mode = <0x0>; + daudio_master = <0x4>; + audio_format = <0x1>; + signal_inversion = <0x1>; + frametype = <0x0>; + tdm_config = <0x1>; + tdm_num = <0x1>; + status = "disabled"; + linux,phandle = <0x4f>; + phandle = <0x4f>; + device_type = "daudio1"; + }; + + daudio@0x01c22800 { + compatible = "allwinner,sunxi-tdmhdmi"; + reg = <0x0 0x1c22800 0x0 0x58>; + clocks = <0x2 0x48>; + status = "okay"; + linux,phandle = <0x50>; + phandle = <0x50>; + device_type = "daudio2"; + }; + + spdif-controller@0x01c21000 { + compatible = "allwinner,sunxi-spdif"; + reg = <0x0 0x1c21000 0x0 0x38>; + clocks = <0x2 0x49>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <0x4a>; + pinctrl-1 = <0x4b>; + status = "disabled"; + linux,phandle = <0x51>; + phandle = <0x51>; + device_type = "spdif"; + }; + + sound@0 { + compatible = "allwinner,sunxi-codec-machine"; + interrupts = <0x0 0x1c 0x4>; + sunxi,i2s-controller = <0x4c>; + sunxi,audio-codec = <0x4d>; + aif2fmt = <0x3>; + aif3fmt = <0x3>; + aif2master = <0x1>; + hp_detect_case = <0x1>; + status = "okay"; + device_type = "sndcodec"; + }; + + sound@1 { + compatible = "allwinner,sunxi-daudio0-machine"; + sunxi,daudio0-controller = <0x4e>; + status = "disabled"; + device_type = "snddaudio0"; + }; + + sound@2 { + compatible = "allwinner,sunxi-daudio1-machine"; + sunxi,daudio1-controller = <0x4f>; + status = "disabled"; + device_type = "snddaudio1"; + }; + + sound@3 { + compatible = "allwinner,sunxi-hdmi-machine"; + sunxi,hdmi-controller = <0x50>; + status = "okay"; + device_type = "sndhdmi"; + }; + + sound@4 { + compatible = "allwinner,sunxi-spdif-machine"; + sunxi,spdif-controller = <0x51>; + status = "disabled"; + device_type = "sndspdif"; + }; + + spi@01c68000 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sun50i-spi"; + device_type = "spi0"; + reg = <0x0 0x1c68000 0x0 0x1000>; + interrupts = <0x0 0x41 0x4>; + clocks = <0x4 0x52>; + clock-frequency = <0x5f5e100>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x55>; + spi0_cs_number = <0x1>; + spi0_cs_bitmap = <0x1>; + status = "disabled"; + pinctrl-0 = <0xa7 0xa8>; + + spidev@0 { + compatible = "spidev"; + reg = <0x0>; + spi-max-frequency = <0x2faf080>; + }; + }; + + spi@01c69000 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sun50i-spi"; + device_type = "spi1"; + reg = <0x0 0x1c69000 0x0 0x1000>; + interrupts = <0x0 0x42 0x4>; + clocks = <0x4 0x56>; + clock-frequency = <0x5f5e100>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x59>; + spi1_cs_number = <0x1>; + spi1_cs_bitmap = <0x1>; + status = "disabled"; + pinctrl-0 = <0xa9 0xaa>; + }; + + sdmmc@01C11000 { + compatible = "allwinner,sun50i-sdmmc2"; + device_type = "sdc2"; + reg = <0x0 0x1c11000 0x0 0x1000>; + interrupts = <0x0 0x3e 0x104>; + clocks = <0x6 0x5a 0x5b 0x5c 0x5d>; + clock-names = "osc24m", "pll_periph", "mmc", "ahb", "rst"; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x5f>; + bus-width = <0x8>; + max-frequency = <0x5f5e100>; + sdc_tm4_sm0_freq0 = <0x0>; + sdc_tm4_sm0_freq1 = <0x0>; + sdc_tm4_sm1_freq0 = <0x0>; + sdc_tm4_sm1_freq1 = <0x0>; + sdc_tm4_sm2_freq0 = <0x0>; + sdc_tm4_sm2_freq1 = <0x0>; + sdc_tm4_sm3_freq0 = <0x5000000>; + sdc_tm4_sm3_freq1 = <0x405>; + sdc_tm4_sm4_freq0 = <0x50000>; + sdc_tm4_sm4_freq1 = <0x408>; + status = "disabled"; + non-removable; + pinctrl-0 = <0xb4>; + cd-gpios; + sunxi-power-save-mode; + sunxi-dis-signal-vol-sw; + mmc-ddr-1_8v; + mmc-hs200-1_8v; + mmc-hs400-1_8v; + vmmc = "vcc-emmc"; + vqmmc = "vcc-lpddr"; + vdmmc = "none"; + }; + + sdmmc@01c0f000 { + compatible = "allwinner,sun50i-sdmmc0"; + device_type = "sdc0"; + reg = <0x0 0x1c0f000 0x0 0x1000>; + interrupts = <0x0 0x3c 0x104>; + clocks = <0x6 0x5a 0x60 0x61 0x62>; + clock-names = "osc24m", "pll_periph", "mmc", "ahb", "rst"; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x64>; + max-frequency = <0x2faf080>; + bus-width = <0x4>; + broken-cd; + status = "okay"; + pinctrl-0 = <0xb2>; + cd-gpios = <0x30 0x5 0x6 0x0 0x1 0x2 0xffffffff>; + sunxi-power-save-mode; + vmmc = "none"; + vqmmc = "none"; + vdmmc = "vcc-sdc"; + }; + + sdmmc@1C10000 { + compatible = "allwinner,sun50i-sdmmc1"; + device_type = "sdc1"; + reg = <0x0 0x1c10000 0x0 0x1000>; + interrupts = <0x0 0x3d 0x104>; + clocks = <0x6 0x5a 0x65 0x66 0x67>; + clock-names = "osc24m", "pll_periph", "mmc", "ahb", "rst"; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x69>; + max-frequency = <0x8f0d180>; + bus-width = <0x4>; + sunxi-dly-52M-ddr4 = <0x1 0x0 0x0 0x0 0x2>; + sunxi-dly-104M = <0x1 0x0 0x0 0x0 0x1>; + sunxi-dly-208M = <0x1 0x0 0x0 0x0 0x1>; + status = "okay"; + pinctrl-0 = <0xb3>; + sd-uhs-sdr50; + sd-uhs-ddr50; + sd-uhs-sdr104; + cap-sdio-irq; + keep-power-in-suspend; + ignore-pm-notify; + }; + + disp@01000000 { + compatible = "allwinner,sun50i-disp"; + reg = <0x0 0x1000000 0x0 0x300000 0x0 0x1c0c000 0x0 0x17fc 0x0 0x1ca0000 0x0 0x10fc>; + interrupts = <0x0 0x56 0x104 0x0 0x57 0x104 0x0 0x59 0x104>; + clocks = <0x6a 0x6b 0x6c 0x6d 0x6e>; + status = "okay"; + device_type = "disp"; + disp_init_enable = <0x1>; + disp_mode = <0x0>; + screen0_output_type = <0x3>; + screen0_output_mode = <0xa>; + screen1_output_type = <0x3>; + screen1_output_mode = <0xa>; + fb0_format = <0x0>; + fb0_width = <0x0>; + fb0_height = <0x0>; + fb1_format = <0x0>; + fb1_width = <0x0>; + fb1_height = <0x0>; + }; + + lcd0@01c0c000 { + compatible = "allwinner,sunxi-lcd0"; + pinctrl-names = "active", "sleep"; + status = "okay"; + device_type = "lcd0"; + lcd_used = <0x0>; + lcd_driver_name = "mb709_mipi"; + lcd_backlight = <0x32>; + lcd_if = <0x4>; + lcd_x = <0x400>; + lcd_y = <0x258>; + lcd_width = <0x0>; + lcd_height = <0x0>; + lcd_dclk_freq = <0x37>; + lcd_pwm_used = <0x1>; + lcd_pwm_ch = <0x10>; + lcd_pwm_freq = <0xc350>; + lcd_pwm_pol = <0x1>; + lcd_pwm_max_limit = <0xfa>; + lcd_hbp = <0x78>; + lcd_ht = <0x604>; + lcd_hspw = <0x14>; + lcd_vbp = <0x17>; + lcd_vt = <0x27b>; + lcd_vspw = <0x2>; + lcd_dsi_if = <0x2>; + lcd_dsi_lane = <0x4>; + lcd_dsi_format = <0x0>; + lcd_dsi_eotp = <0x0>; + lcd_dsi_vc = <0x0>; + lcd_dsi_te = <0x0>; + lcd_frm = <0x0>; + lcd_gamma_en = <0x0>; + lcd_bright_curve_en = <0x0>; + lcd_cmap_en = <0x0>; + lcd_bl_en = <0x30 0x7 0xa 0x1 0x0 0xffffffff 0x1>; + lcd_bl_en_power = "none"; + lcd_power = "vcc-mipi"; + lcd_fix_power = "vcc-dsi-33"; + lcd_gpio_0 = <0x30 0x3 0x18 0x1 0x0 0xffffffff 0x1>; + }; + + hdmi@01ee0000 { + compatible = "allwinner,sunxi-hdmi"; + reg = <0x0 0x1ee0000 0x0 0x20000>; + clocks = <0x6f 0x70>; + device_type = "hdmi"; + status = "okay"; + hdmi_power = "vcc-hdmi-33"; + hdmi_hdcp_enable = <0x0>; + hdmi_cts_compatibility = <0x0>; + }; + + tr@01000000 { + compatible = "allwinner,sun50i-tr"; + reg = <0x0 0x1000000 0x0 0x200bc>; + interrupts = <0x0 0x60 0x104>; + clocks = <0x6a>; + status = "okay"; + }; + + pwm@01c21400 { + compatible = "allwinner,sunxi-pwm"; + reg = <0x0 0x1c21400 0x0 0x3c>; + pwm-number = <0x1>; + pwm-base = <0x0>; + pwms = <0x71>; + }; + + pwm0@01c21400 { + compatible = "allwinner,sunxi-pwm0"; + pinctrl-names = "active", "sleep"; + reg_base = <0x1c21400>; + reg_busy_offset = <0x0>; + reg_busy_shift = <0x1c>; + reg_enable_offset = <0x0>; + reg_enable_shift = <0x4>; + reg_clk_gating_offset = <0x0>; + reg_clk_gating_shift = <0x6>; + reg_bypass_offset = <0x0>; + reg_bypass_shift = <0x9>; + reg_pulse_start_offset = <0x0>; + reg_pulse_start_shift = <0x8>; + reg_mode_offset = <0x0>; + reg_mode_shift = <0x7>; + reg_polarity_offset = <0x0>; + reg_polarity_shift = <0x5>; + reg_period_offset = <0x4>; + reg_period_shift = <0x10>; + reg_period_width = <0x10>; + reg_active_offset = <0x4>; + reg_active_shift = <0x0>; + reg_active_width = <0x10>; + reg_prescal_offset = <0x0>; + reg_prescal_shift = <0x0>; + reg_prescal_width = <0x4>; + linux,phandle = <0x71>; + phandle = <0x71>; + device_type = "pwm0"; + pwm_used = <0x0>; + pinctrl-0 = <0xad>; + pinctrl-1 = <0xae>; + }; + + s_pwm@1f03800 { + compatible = "allwinner,sunxi-s_pwm"; + reg = <0x0 0x1f03800 0x0 0x3c>; + pwm-number = <0x1>; + pwm-base = <0x10>; + pwms = <0x72>; + }; + + spwm0@0x01f03800 { + compatible = "allwinner,sunxi-pwm16"; + pinctrl-names = "active", "sleep"; + reg_base = <0x1f03800>; + reg_busy_offset = <0x0>; + reg_busy_shift = <0x1c>; + reg_enable_offset = <0x0>; + reg_enable_shift = <0x4>; + reg_clk_gating_offset = <0x0>; + reg_clk_gating_shift = <0x6>; + reg_bypass_offset = <0x0>; + reg_bypass_shift = <0x9>; + reg_pulse_start_offset = <0x0>; + reg_pulse_start_shift = <0x8>; + reg_mode_offset = <0x0>; + reg_mode_shift = <0x7>; + reg_polarity_offset = <0x0>; + reg_polarity_shift = <0x5>; + reg_period_offset = <0x4>; + reg_period_shift = <0x10>; + reg_period_width = <0x10>; + reg_active_offset = <0x4>; + reg_active_shift = <0x0>; + reg_active_width = <0x10>; + reg_prescal_offset = <0x0>; + reg_prescal_shift = <0x0>; + reg_prescal_width = <0x4>; + linux,phandle = <0x72>; + phandle = <0x72>; + device_type = "spwm0"; + s_pwm_used = <0x1>; + pinctrl-0 = <0xaf>; + pinctrl-1 = <0xb0>; + }; + + boot_disp { + compatible = "allwinner,boot_disp"; + device_type = "boot_disp"; + output_disp = <0x0>; + output_type = <0x3>; + output_mode = <0xa>; + }; + + cci@0x01cb3000 { + compatible = "allwinner,sunxi-csi_cci"; + reg = <0x0 0x1cb3000 0x0 0x1000>; + interrupts = <0x0 0x55 0x4>; + status = "okay"; + }; + + csi_res@0x01cb0000 { + compatible = "allwinner,sunxi-csi"; + reg = <0x0 0x1cb0000 0x0 0x1000>; + status = "okay"; + }; + + vfe@0 { + device_type = "csi0"; + compatible = "allwinner,sunxi-vfe"; + interrupts = <0x0 0x54 0x4>; + clocks = <0x73 0x74 0x75 0x4 0x6 0x5>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x77>; + csi0_sensor_list = <0x1>; + status = "okay"; + pinctrl-0 = <0xb1>; + csi0_mck = <0x30 0x4 0x1 0x0 0x0 0x1 0x0>; + + dev@0 { + csi0_dev0_mname = "s5k4ec"; + csi0_dev0_twi_addr = <0x5a>; + csi0_dev0_pos = "rear"; + csi0_dev0_isp_used = <0x1>; + csi0_dev0_fmt = <0x0>; + csi0_dev0_stby_mode = <0x1>; + csi0_dev0_vflip = <0x0>; + csi0_dev0_hflip = <0x0>; + csi0_dev0_iovdd = "iovdd-csi"; + csi0_dev0_iovdd_vol = <0x2ab980>; + csi0_dev0_avdd = "avdd-csi"; + csi0_dev0_avdd_vol = <0x2ab980>; + csi0_dev0_dvdd = "dvdd-csi-18"; + csi0_dev0_dvdd_vol = <0x16e360>; + csi0_dev0_flash_used = <0x0>; + csi0_dev0_flash_type = <0x2>; + csi0_dev0_flvdd = "vdd-csi-led"; + csi0_dev0_flvdd_vol = <0x325aa0>; + csi0_dev0_act_used = <0x0>; + csi0_dev0_act_name = "ad5820_act"; + csi0_dev0_act_slave = <0x18>; + status = "disabled"; + device_type = "csi0_dev0"; + csi0_dev0_afvdd; + csi0_dev0_afvdd_vol; + csi0_dev0_power_en; + csi0_dev0_reset = <0x30 0x4 0x10 0x0 0x0 0x1 0x0>; + csi0_dev0_pwdn = <0x30 0x4 0x11 0x0 0x0 0x1 0x0>; + csi0_dev0_flash_en; + csi0_dev0_flash_mode; + csi0_dev0_af_pwdn; + }; + + dev@1 { + csi0_dev1_mname = "gc2145"; + csi0_dev1_twi_addr = <0x78>; + csi0_dev1_pos = "front"; + csi0_dev1_isp_used = <0x1>; + csi0_dev1_fmt = <0x0>; + csi0_dev1_stby_mode = <0x1>; + csi0_dev1_vflip = <0x0>; + csi0_dev1_hflip = <0x0>; + csi0_dev1_iovdd = "iovdd-csi"; + csi0_dev1_iovdd_vol = <0x2ab980>; + csi0_dev1_avdd = "avdd-csi"; + csi0_dev1_avdd_vol = <0x2ab980>; + csi0_dev1_dvdd = "dvdd-csi-18"; + csi0_dev1_dvdd_vol = <0x1b7740>; + csi0_dev1_flash_used = <0x0>; + csi0_dev1_flash_type = <0x2>; + csi0_dev1_flvdd = "vdd-csi-led"; + csi0_dev1_flvdd_vol = <0x325aa0>; + csi0_dev1_act_used = <0x0>; + csi0_dev1_act_name = "ad5820_act"; + csi0_dev1_act_slave = <0x18>; + status = "disabled"; + device_type = "csi0_dev1"; + csi0_dev1_afvdd; + csi0_dev1_afvdd_vol; + csi0_dev1_power_en; + csi0_dev1_reset = <0x30 0x4 0x10 0x0 0x0 0x1 0x0>; + csi0_dev1_pwdn = <0x30 0x4 0x11 0x0 0x0 0x1 0x0>; + csi0_dev1_flash_en; + csi0_dev1_flash_mode; + csi0_dev1_af_pwdn; + }; + }; + + vdevice@0 { + compatible = "allwinner,sun50i-vdevice"; + pinctrl-names = "default"; + test-gpios = <0x79 0xb 0x0 0x1 0x2 0x3 0x4>; + status = "okay"; + device_type = "Vdevice"; + pinctrl-0 = <0xb9>; + }; + + onewire_device@0 { + compatible = "w1-gpio"; + gpios = <0x30 0x2 0x8 0x0 0x0 0x0 0x0>; + pinctrl-names = "default"; + pinctrl-0 = <0xba>; + status = "okay"; + }; + + ce@1c15000 { + compatible = "allwinner,sunxi-ce"; + reg = <0x0 0x1c15000 0x0 0x80 0x0 0x1c15800 0x0 0x80>; + interrupts = <0x0 0x5e 0xff01 0x0 0x50 0xff01>; + clock-frequency = <0x11e1a300 0xbebc200>; + clocks = <0x7a 0x7b>; + }; + + deinterlace@0x01e00000 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sunxi-deinterlace"; + reg = <0x0 0x1e00000 0x0 0x77c>; + interrupts = <0x0 0x5d 0x4>; + clocks = <0x7c 0x4>; + status = "okay"; + device_type = "di"; + }; + + smartcard@0x01c2c400 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sunxi-scr"; + reg = <0x0 0x1c2c400 0x0 0x100>; + interrupts = <0x0 0x53 0x4>; + clocks = <0x7d 0x7e>; + clock-frequency = <0x16e3600>; + pinctrl-names = "default"; + pinctrl-0 = <0x7f>; + status = "okay"; + device_type = "smc"; + smc_used; + smc_rst; + smc_vppen; + smc_vppp; + smc_det; + smc_vccen; + smc_sck; + smc_sda; + }; + + nmi@0x01f00c00 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sunxi-nmi"; + reg = <0x0 0x1f00c00 0x0 0x50>; + nmi_irq_ctrl = <0xc>; + nmi_irq_en = <0x40>; + nmi_irq_status = <0x10>; + nmi_irq_mask = <0x50>; + status = "okay"; + }; + + pmu0@0 { + compatible = "allwinner,pmu0"; + device_type = "pmu0"; + pmu_batdeten = <0x1>; + pmu_init_chgend_rate = <0x14>; + pmu_init_chg_enabled = <0x1>; + pmu_init_adc_freq = <0x320>; + pmu_init_adcts_freq = <0x320>; + pmu_init_chg_pretime = <0x46>; + pmu_init_chg_csttime = <0x2d0>; + pmu_batt_cap_correct = <0x1>; + pmu_chg_end_on_en = <0x0>; + pmu_pwroff_vol = <0xce4>; + pmu_pwron_vol = <0xa28>; + pmu_powkey_off_delay_time = <0x0>; + pmu_pwrok_time = <0x40>; + pmu_reset_shutdown_en = <0x1>; + pmu_restvol_adjust_time = <0x3c>; + pmu_ocv_cou_adjust_time = <0x3c>; + pmu_vbusen_func = <0x1>; + pmu_reset = <0x0>; + pmu_IRQ_wakeup = <0x1>; + pmu_hot_shutdowm = <0x1>; + pmu_inshort = <0x0>; + pmu_bat_shutdown_ltf = <0xc80>; + pmu_bat_shutdown_htf = <0xed>; + status = "okay"; + pmu_id = <0x6>; + pmu_twi_addr = <0x34>; + pmu_twi_id = <0x1>; + pmu_irq_id = <0x40>; + pmu_chg_ic_temp = <0x0>; + pmu_battery_rdc = <0x58>; + pmu_battery_cap = <0x12c0>; + pmu_runtime_chgcur = <0x1c2>; + pmu_suspend_chgcur = <0x5dc>; + pmu_shutdown_chgcur = <0x5dc>; + pmu_init_chgvol = <0x1068>; + pmu_ac_vol = <0xfa0>; + pmu_ac_cur = <0xdac>; + pmu_usbpc_vol = <0x1130>; + pmu_usbpc_cur = <0x1f4>; + pmu_battery_warning_level1 = <0xf>; + pmu_battery_warning_level2 = <0x0>; + pmu_chgled_func = <0x0>; + pmu_chgled_type = <0x0>; + pmu_bat_para1 = <0x0>; + pmu_bat_para2 = <0x0>; + pmu_bat_para3 = <0x0>; + pmu_bat_para4 = <0x0>; + pmu_bat_para5 = <0x0>; + pmu_bat_para6 = <0x0>; + pmu_bat_para7 = <0x1>; + pmu_bat_para8 = <0x1>; + pmu_bat_para9 = <0x2>; + pmu_bat_para10 = <0x3>; + pmu_bat_para11 = <0x4>; + pmu_bat_para12 = <0xa>; + pmu_bat_para13 = <0x11>; + pmu_bat_para14 = <0x1a>; + pmu_bat_para15 = <0x29>; + pmu_bat_para16 = <0x2e>; + pmu_bat_para17 = <0x33>; + pmu_bat_para18 = <0x38>; + pmu_bat_para19 = <0x3b>; + pmu_bat_para20 = <0x41>; + pmu_bat_para21 = <0x45>; + pmu_bat_para22 = <0x4b>; + pmu_bat_para23 = <0x4f>; + pmu_bat_para24 = <0x53>; + pmu_bat_para25 = <0x59>; + pmu_bat_para26 = <0x5f>; + pmu_bat_para27 = <0x62>; + pmu_bat_para28 = <0x64>; + pmu_bat_para29 = <0x64>; + pmu_bat_para30 = <0x64>; + pmu_bat_para31 = <0x64>; + pmu_bat_para32 = <0x64>; + pmu_bat_temp_enable = <0x1>; + pmu_bat_charge_ltf = <0x8d5>; + pmu_bat_charge_htf = <0x184>; + pmu_bat_temp_para1 = <0x1d2a>; + pmu_bat_temp_para2 = <0x1180>; + pmu_bat_temp_para3 = <0xdbe>; + pmu_bat_temp_para4 = <0xae2>; + pmu_bat_temp_para5 = <0x8af>; + pmu_bat_temp_para6 = <0x6fc>; + pmu_bat_temp_para7 = <0x5a8>; + pmu_bat_temp_para8 = <0x3c9>; + pmu_bat_temp_para9 = <0x298>; + pmu_bat_temp_para10 = <0x1d2>; + pmu_bat_temp_para11 = <0x189>; + pmu_bat_temp_para12 = <0x14d>; + pmu_bat_temp_para13 = <0x11b>; + pmu_bat_temp_para14 = <0xf2>; + pmu_bat_temp_para15 = <0xb3>; + pmu_bat_temp_para16 = <0x86>; + pmu_powkey_off_time = <0x1770>; + pmu_powkey_off_func = <0x0>; + pmu_powkey_off_en = <0x1>; + pmu_powkey_long_time = <0x5dc>; + pmu_powkey_on_time = <0x3e8>; + power_start = <0x0>; + }; + + regu@0 { + compatible = "allwinner,pmu0_regu"; + regulator_count = <0x17>; + status = "okay"; + device_type = "pmu0_regu"; + regulator1 = "axp81x_dcdc1 none vcc-nand vcc-emmc vcc-sdc vcc-usb-30 vcc-io vcc-pd"; + regulator2 = "axp81x_dcdc2 none vdd-cpua"; + regulator3 = "axp81x_dcdc3 none"; + regulator4 = "axp81x_dcdc4 none"; + regulator5 = "axp81x_dcdc5 none vcc-dram"; + regulator6 = "axp81x_dcdc6 none vdd-sys"; + regulator7 = "axp81x_dcdc7 none"; + regulator8 = "axp81x_rtc none"; + regulator9 = "axp81x_aldo1 none vdd-csi-led iovdd-csi vcc-pe"; + regulator10 = "axp81x_aldo2 none vcc-pl"; + regulator11 = "axp81x_aldo3 none vcc-avcc vcc-pll"; + regulator12 = "axp81x_dldo1 none vcc-hdmi-33"; + regulator13 = "axp81x_dldo2 none vcc-mipi"; + regulator14 = "axp81x_dldo3 none avdd-csi"; + regulator15 = "axp81x_dldo4 none vcc-deviceio"; + regulator16 = "axp81x_eldo1 none vcc-cpvdd vcc-wifi-io vcc-pc vcc-pg"; + regulator17 = "axp81x_eldo2 none vcc-lcd-0"; + regulator18 = "axp81x_eldo3 none dvdd-csi-18"; + regulator19 = "axp81x_fldo1 none vcc-hsic-12"; + regulator20 = "axp81x_fldo2 none vdd-cpus"; + regulator21 = "axp81x_gpio0ldo none vcc-ctp"; + regulator22 = "axp81x_gpio1ldo none"; + regulator23 = "axp81x_dc1sw none vcc-lvds vcc-dsi-33"; + }; + + nand0@01c03000 { + compatible = "allwinner,sun50i-nand"; + device_type = "nand0"; + reg = <0x0 0x1c03000 0x0 0x1000>; + interrupts = <0x0 0x46 0x4>; + clocks = <0x4 0x80>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x83>; + nand0_regulator1 = "vcc-nand"; + nand0_regulator2 = "none"; + nand0_cache_level = <0x55aaaa55>; + nand0_flush_cache_num = <0x55aaaa55>; + nand0_capacity_level = <0x55aaaa55>; + nand0_id_number_ctl = <0x55aaaa55>; + nand0_print_level = <0x55aaaa55>; + nand0_p0 = <0x55aaaa55>; + nand0_p1 = <0x55aaaa55>; + nand0_p2 = <0x55aaaa55>; + nand0_p3 = <0x55aaaa55>; + status = "disabled"; + nand0_support_2ch = <0x0>; + pinctrl-0 = <0xab 0xac>; + }; + + thermal_sensor { + compatible = "allwinner,thermal_sensor"; + reg = <0x0 0x1c25000 0x0 0x400>; + interrupts = <0x0 0x1f 0x0>; + clocks = <0x6 0x84>; + sensor_num = <0x3>; + shut_temp = <0x78>; + status = "okay"; + + combine0 { + #thermal-sensor-cells = <0x1>; + combine_cnt = <0x3>; + combine_type = "max"; + combine_chn = <0x0 0x1 0x2>; + linux,phandle = <0x85>; + phandle = <0x85>; + }; + }; + + cpu_budget_cool { + compatible = "allwinner,budget_cooling"; + #cooling-cells = <0x2>; + status = "okay"; + state_cnt = <0xa>; + cluster_num = <0x1>; + state0 = <0x119400 0x4>; + state1 = <0x10d880 0x4>; + state2 = <0x101d00 0x4>; + state3 = <0xf6180 0x4>; + state4 = <0xea600 0x4>; + state5 = <0xdea80 0x4>; + state6 = <0xc7380 0x4>; + state7 = <0x9e340 0x4>; + state8 = <0x9e340 0x2>; + state9 = <0x9e340 0x1>; + linux,phandle = <0x87>; + phandle = <0x87>; + }; + + gpu_cooling { + compatible = "allwinner,gpu_cooling"; + reg = <0x0 0x0 0x0 0x0>; + #cooling-cells = <0x2>; + status = "okay"; + state_cnt = <0x3>; + state0 = <0x0>; + state1 = <0x168>; + state2 = <0x90>; + linux,phandle = <0x8c>; + phandle = <0x8c>; + }; + + thermal-zones { + + soc_thermal { + polling-delay-passive = <0x1f4>; + polling-delay = <0x7d0>; + thermal-sensors = <0x85 0x0>; + + trips { + + t0 { + temperature = <0x50>; + type = "passive"; + hysteresis = <0x0>; + linux,phandle = <0x86>; + phandle = <0x86>; + }; + + t1 { + temperature = <0x55>; + type = "passive"; + hysteresis = <0x0>; + linux,phandle = <0x88>; + phandle = <0x88>; + }; + + t2 { + temperature = <0x5a>; + type = "passive"; + hysteresis = <0x0>; + linux,phandle = <0x89>; + phandle = <0x89>; + }; + + t3 { + temperature = <0x5f>; + type = "passive"; + hysteresis = <0x0>; + linux,phandle = <0x8a>; + phandle = <0x8a>; + }; + + t4 { + temperature = <0x55>; + type = "passive"; + hysteresis = <0x0>; + linux,phandle = <0x8b>; + phandle = <0x8b>; + }; + + t5 { + temperature = <0x5a>; + type = "passive"; + hysteresis = <0x0>; + linux,phandle = <0x8d>; + phandle = <0x8d>; + }; + + t6 { + temperature = <0x6c>; + type = "critical"; + hysteresis = <0x0>; + }; + }; + + cooling-maps { + + bind0 { + contribution = <0x0>; + trip = <0x86>; + cooling-device = <0x87 0x1 0x1>; + }; + + bind1 { + contribution = <0x0>; + trip = <0x88>; + cooling-device = <0x87 0x2 0x2>; + }; + + bind2 { + contribution = <0x0>; + trip = <0x89>; + cooling-device = <0x87 0x3 0x6>; + }; + + bind3 { + contribution = <0x0>; + trip = <0x8a>; + cooling-device = <0x87 0x7 0x9>; + }; + + bind4 { + contribution = <0x0>; + trip = <0x8b>; + cooling-device = <0x8c 0x1 0x1>; + }; + + bind5 { + contribution = <0x0>; + trip = <0x8d>; + cooling-device = <0x8c 0x2 0x2>; + }; + }; + }; + }; + + keyboard { + compatible = "allwinner,keyboard_2000mv"; + reg = <0x0 0x1c21800 0x0 0x400>; + interrupts = <0x0 0x1e 0x0>; + status = "okay"; + key_cnt = <0x5>; + key1 = <0xf0 0x73>; + key2 = <0x1f4 0x72>; + key3 = <0x2bc 0x8b>; + key4 = <0x37a 0x1c>; + key5 = <0x7d0 0x66>; + }; + + eth@01c30000 { + compatible = "allwinner,sunxi-gmac"; + reg = <0x0 0x1c30000 0x0 0x10000 0x0 0x1c00000 0x0 0x30>; + pinctrl-names = "default"; + interrupts = <0x0 0x52 0x4>; + interrupt-names = "gmacirq"; + clocks = <0x8f>; + clock-names = "gmac"; + phy-mode = "rmii"; + tx-delay = <0x0>; + rx-delay = <0x0>; + gmac_power1 = "axp81x_dc1sw:0"; + status = "okay"; + device_type = "gmac0"; + pinctrl-0 = <0x9e>; + gmac_power2; + gmac_power3; + }; + + product { + device_type = "product"; + version = "100"; + machine = "evb"; + }; + + platform { + device_type = "platform"; + eraseflag = <0x1>; + }; + + target { + device_type = "target"; + boot_clock = <0x3f0>; + storage_type = <0xffffffff>; + burn_key = <0x0>; + }; + + power_sply { + device_type = "power_sply"; + dcdc1_vol = <0xf4f24>; + dcdc2_vol = <0xf468c>; + dcdc6_vol = <0xf468c>; + aldo1_vol = <0xaf0>; + aldo2_vol = <0xf4948>; + aldo3_vol = <0xf4df8>; + dldo1_vol = <0xce4>; + dldo2_vol = <0xce4>; + dldo3_vol = <0xaf0>; + dldo4_vol = <0xf4f24>; + eldo1_vol = <0xf4948>; + eldo2_vol = <0x708>; + eldo3_vol = <0x708>; + fldo1_vol = <0x4b0>; + fldo2_vol = <0xf468c>; + gpio0_vol = <0xc1c>; + }; + + card_boot { + device_type = "card_boot"; + logical_start = <0xa000>; + sprite_gpio0; + }; + + pm_para { + device_type = "pm_para"; + standby_mode = <0x1>; + }; + + card0_boot_para { + device_type = "card0_boot_para"; + card_ctrl = <0x0>; + card_high_speed = <0x1>; + card_line = <0x4>; + pinctrl-0 = <0x99>; + }; + + card2_boot_para { + device_type = "card2_boot_para"; + sdc_io_1v8 = <0x1>; + card_ctrl = <0x2>; + card_high_speed = <0x1>; + card_line = <0x8>; + pinctrl-0 = <0x9a>; + sdc_ex_dly_used = <0x2>; + }; + + twi_para { + device_type = "twi_para"; + twi_port = <0x0>; + pinctrl-0 = <0x9b>; + }; + + uart_para { + device_type = "uart_para"; + uart_debug_port = <0x0>; + pinctrl-0 = <0x9c>; + }; + + jtag_para { + device_type = "jtag_para"; + jtag_enable = <0x1>; + pinctrl-0 = <0x9d>; + }; + + clock { + device_type = "clock"; + pll4 = <0x12c>; + pll6 = <0x258>; + pll8 = <0x168>; + pll9 = <0x129>; + pll10 = <0x108>; + }; + + rtp_para { + device_type = "rtp_para"; + rtp_used = <0x0>; + rtp_screen_size = <0x5>; + rtp_regidity_level = <0x5>; + rtp_press_threshold_enable = <0x0>; + rtp_press_threshold = <0x1f40>; + rtp_sensitive_level = <0xf>; + rtp_exchange_x_y_flag = <0x0>; + }; + + ctp { + device_type = "ctp"; + compatible = "allwinner,sun50i-ctp-para"; + status = "disabled"; + ctp_name = "gt911_DB"; + ctp_twi_id = <0x0>; + ctp_twi_addr = <0x40>; + ctp_screen_max_x = <0x400>; + ctp_screen_max_y = <0x258>; + ctp_revert_x_flag = <0x1>; + ctp_revert_y_flag = <0x1>; + ctp_exchange_x_y_flag = <0x0>; + ctp_int_port = <0x30 0x7 0x4 0x6 0xffffffff 0xffffffff 0xffffffff>; + ctp_wakeup = <0x30 0x7 0xb 0x1 0xffffffff 0xffffffff 0x1>; + ctp_power_ldo = "vcc-ctp"; + ctp_power_ldo_vol = <0xce4>; + ctp_power_io; + }; + + ctp_list { + device_type = "ctp_list"; + compatible = "allwinner,sun50i-ctp-list"; + status = "okay"; + gslX680new = <0x1>; + gt9xx_ts = <0x0>; + gt9xxf_ts = <0x1>; + gt9xxnew_ts = <0x0>; + gt82x = <0x1>; + zet622x = <0x1>; + aw5306_ts = <0x1>; + }; + + tkey_para { + device_type = "tkey_para"; + tkey_used = <0x0>; + tkey_twi_id; + tkey_twi_addr; + tkey_int; + }; + + motor_para { + device_type = "motor_para"; + motor_used = <0x0>; + motor_shake = <0x31 0xfffe 0x3 0x1 0xffffffff 0xffffffff 0x1>; + }; + + tvout_para { + device_type = "tvout_para"; + tvout_used; + tvout_channel_num; + tv_en; + }; + + tvin_para { + device_type = "tvin_para"; + tvin_used; + tvin_channel_num; + }; + + serial_feature { + device_type = "serial_feature"; + sn_filename = "sn.txt"; + }; + + gsensor { + device_type = "gsensor"; + compatible = "allwinner,sun50i-gsensor-para"; + status = "okay"; + gsensor_twi_id = <0x1>; + gsensor_twi_addr = <0x1d>; + gsensor_vcc_io = "vcc-deviceio"; + gsensor_vcc_io_val = <0xce4>; + gsensor_int1 = <0x30 0x7 0x5 0x6 0x1 0xffffffff 0xffffffff>; + gsensor_int2 = <0x30 0x7 0x6 0x6 0x1 0xffffffff 0xffffffff>; + }; + + gsensor_list { + device_type = "gsensor_list"; + compatible = "allwinner,sun50i-gsensor-list-para"; + gsensor_list__used = <0x1>; + lsm9ds0_acc_mag = <0x1>; + bma250 = <0x1>; + mma8452 = <0x1>; + mma7660 = <0x1>; + mma865x = <0x1>; + afa750 = <0x1>; + lis3de_acc = <0x1>; + lis3dh_acc = <0x1>; + kxtik = <0x1>; + dmard10 = <0x0>; + dmard06 = <0x1>; + mxc622x = <0x1>; + fxos8700 = <0x1>; + lsm303d = <0x0>; + sc7a30 = <0x1>; + }; + + 3g_para { + device_type = "3g_para"; + 3g_used = <0x0>; + 3g_usbc_num = <0x2>; + 3g_uart_num = <0x0>; + bb_vbat = <0x79 0xb 0x3 0x1 0xffffffff 0xffffffff 0x0>; + bb_host_wake = <0x79 0xc 0x0 0x1 0xffffffff 0xffffffff 0x0>; + bb_on = <0x79 0xc 0x1 0x1 0xffffffff 0xffffffff 0x0>; + bb_pwr_on = <0x79 0xc 0x3 0x1 0xffffffff 0xffffffff 0x0>; + bb_wake = <0x79 0xc 0x4 0x1 0xffffffff 0xffffffff 0x0>; + bb_rf_dis = <0x79 0xc 0x5 0x1 0xffffffff 0xffffffff 0x0>; + bb_rst = <0x79 0xc 0x6 0x1 0xffffffff 0xffffffff 0x0>; + 3g_int; + }; + + gyroscopesensor { + device_type = "gyroscopesensor"; + compatible = "allwinner,sun50i-gyr_sensors-para"; + status = "disabled"; + gy_twi_id = <0x2>; + gy_twi_addr = <0x6a>; + gy_int1 = <0x30 0x0 0xa 0x6 0x1 0xffffffff 0xffffffff>; + gy_int2; + }; + + gy_list { + device_type = "gy_list"; + compatible = "allwinner,sun50i-gyr_sensors-list-para"; + status = "disabled"; + lsm9ds0_gyr = <0x1>; + l3gd20_gyr = <0x0>; + bmg160_gyr = <0x1>; + }; + + lightsensor { + device_type = "lightsensor"; + compatible = "allwinner,sun50i-lsensors-para"; + status = "disabled"; + ls_twi_id = <0x2>; + ls_twi_addr = <0x23>; + ls_int = <0x30 0x0 0xc 0x6 0x1 0xffffffff 0xffffffff>; + }; + + ls_list { + device_type = "ls_list"; + compatible = "allwinner,sun50i-lsensors-list-para"; + status = "disabled"; + ltr_501als = <0x1>; + jsa1212 = <0x0>; + jsa1127 = <0x1>; + stk3x1x = <0x0>; + }; + + compasssensor { + device_type = "compasssensor"; + compatible = "allwinner,sun50i-compass-para"; + status = "disabled"; + compass_twi_id = <0x2>; + compass_twi_addr = <0xd>; + compass_int = <0x30 0x0 0xb 0x6 0x1 0xffffffff 0xffffffff>; + }; + + compass_list { + device_type = "compass_list"; + compatible = "allwinner,sun50i-compass-list-para"; + status = "disabled"; + lsm9ds0 = <0x1>; + lsm303d = <0x0>; + }; + + recovery_key { + device_type = "recovery_key"; + key_max = <0xc>; + key_min = <0xa>; + }; + + fastboot_key { + device_type = "fastboot_key"; + key_max = <0x6>; + key_min = <0x4>; + }; + }; + + aliases { + serial0 = "/soc@01c00000/uart@01c28000"; + serial1 = "/soc@01c00000/uart@01c28400"; + serial2 = "/soc@01c00000/uart@01c28800"; + serial3 = "/soc@01c00000/uart@01c28c00"; + serial4 = "/soc@01c00000/uart@01c29000"; + twi0 = "/soc@01c00000/twi@0x01c2ac00"; + twi1 = "/soc@01c00000/twi@0x01c2b000"; + twi2 = "/soc@01c00000/twi@0x01c2b400"; + spi0 = "/soc@01c00000/spi@01c68000"; + spi1 = "/soc@01c00000/spi@01c69000"; + global_timer0 = "/soc@01c00000/timer@1c20c00"; + cci0 = "/soc@01c00000/cci@0x01cb3000"; + csi_res0 = "/soc@01c00000/csi_res@0x01cb0000"; + vfe0 = "/soc@01c00000/vfe@0"; + mmc0 = "/soc@01c00000/sdmmc@01c0f000"; + mmc2 = "/soc@01c00000/sdmmc@01C11000"; + nand0 = "/soc@01c00000/nand0@01c03000"; + disp = "/soc@01c00000/disp@01000000"; + lcd0 = "/soc@01c00000/lcd0@01c0c000"; + hdmi = "/soc@01c00000/hdmi@01ee0000"; + pwm = "/soc@01c00000/pwm@01c21400"; + pwm0 = "/soc@01c00000/pwm0@01c21400"; + s_pwm = "/soc@01c00000/s_pwm@1f03800"; + spwm0 = "/soc@01c00000/spwm0@0x01f03800"; + boot_disp = "/soc@01c00000/boot_disp"; + }; + + chosen { + bootargs = "earlyprintk=sunxi-uart,0x01c28000 loglevel=8 initcall_debug=1 console=ttyS0 init=/init"; + linux,initrd-start = <0x0 0x0>; + linux,initrd-end = <0x0 0x0>; + }; + + cpus { + #address-cells = <0x2>; + #size-cells = <0x0>; + + cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x0>; + enable-method = "psci"; + cpufreq_tbl = <0x75300 0x927c0 0xafc80 0xc7380 0xdea80 0xea600 0xf6180 0x101d00 0x10d880 0x119400 0x124f80 0x148200>; + clock-latency = <0x1e8480>; + clock-frequency = <0x3c14dc00>; + cpu-idle-states = <0x90 0x91 0x92>; + }; + + cpu@1 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x1>; + enable-method = "psci"; + clock-frequency = <0x3c14dc00>; + cpu-idle-states = <0x90 0x91 0x92>; + }; + + cpu@2 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x2>; + enable-method = "psci"; + clock-frequency = <0x3c14dc00>; + cpu-idle-states = <0x90 0x91 0x92>; + }; + + cpu@3 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x3>; + enable-method = "psci"; + clock-frequency = <0x3c14dc00>; + cpu-idle-states = <0x90 0x91 0x92>; + }; + + idle-states { + entry-method = "arm,psci"; + + cpu-sleep-0 { + compatible = "arm,idle-state"; + arm,psci-suspend-param = <0x10000>; + entry-latency-us = <0x28>; + exit-latency-us = <0x64>; + min-residency-us = <0x96>; + linux,phandle = <0x90>; + phandle = <0x90>; + }; + + cluster-sleep-0 { + compatible = "arm,idle-state"; + arm,psci-suspend-param = <0x1010000>; + entry-latency-us = <0x1f4>; + exit-latency-us = <0x3e8>; + min-residency-us = <0x9c4>; + linux,phandle = <0x91>; + phandle = <0x91>; + }; + + sys-sleep-0 { + compatible = "arm,idle-state"; + arm,psci-suspend-param = <0x2010000>; + entry-latency-us = <0x3e8>; + exit-latency-us = <0x7d0>; + min-residency-us = <0x1194>; + linux,phandle = <0x92>; + phandle = <0x92>; + }; + }; + }; + + psci { + compatible = "arm,psci-0.2"; + method = "smc"; + psci_version = <0x84000000>; + cpu_suspend = <0xc4000001>; + cpu_off = <0x84000002>; + cpu_on = <0xc4000003>; + affinity_info = <0xc4000004>; + migrate = <0xc4000005>; + migrate_info_type = <0x84000006>; + migrate_info_up_cpu = <0xc4000007>; + system_off = <0x84000008>; + system_reset = <0x84000009>; + }; + + n_brom { + compatible = "allwinner,n-brom"; + reg = <0x0 0x0 0x0 0xc000>; + }; + + s_brom { + compatible = "allwinner,s-brom"; + reg = <0x0 0x0 0x0 0x10000>; + }; + + sram_a1 { + compatible = "allwinner,sram_a1"; + reg = <0x0 0x10000 0x0 0x8000>; + }; + + sram_a2 { + compatible = "allwinner,sram_a2"; + reg = <0x0 0x40000 0x0 0x14000>; + }; + + prcm { + compatible = "allwinner,prcm"; + reg = <0x0 0x1f01400 0x0 0x400>; + }; + + cpuscfg { + compatible = "allwinner,cpuscfg"; + reg = <0x0 0x1f01c00 0x0 0x400>; + }; + + ion { + compatible = "allwinner,sunxi-ion"; + + system_contig { + type = <0x1>; + }; + + cma { + type = <0x4>; + }; + + system { + type = <0x0>; + }; + }; + + dram { + compatible = "allwinner,dram"; + clocks = <0x93 0x94>; + clock-names = "pll_ddr0", "pll_ddr1"; + dram_clk = <0x2a0>; + dram_type = <0x3>; + dram_zq = <0x3b3bdd>; + dram_odt_en = <0x1>; + dram_para1 = <0x10e40400>; + dram_para2 = <0x4000000>; + dram_mr0 = <0x1c70>; + dram_mr1 = <0x40>; + dram_mr2 = <0x18>; + dram_mr3 = <0x0>; + dram_tpr0 = <0x48a192>; + dram_tpr1 = <0x1c2418d>; + dram_tpr2 = <0x76051>; + dram_tpr3 = <0x50005dc>; + dram_tpr4 = <0x0>; + dram_tpr5 = <0x0>; + dram_tpr6 = <0x0>; + dram_tpr7 = <0x2a066198>; + dram_tpr8 = <0x0>; + dram_tpr9 = <0x0>; + dram_tpr10 = <0x8808>; + dram_tpr11 = <0x40a60066>; + dram_tpr12 = <0x55550000>; + dram_tpr13 = <0x4000903>; + device_type = "dram"; + }; + + memory@40000000 { + device_type = "memory"; + reg = <0x0 0x41000000 0x0 0x3f000000>; + }; + + interrupt-controller@1c81000 { + compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; + #interrupt-cells = <0x3>; + #address-cells = <0x0>; + device_type = "gic"; + interrupt-controller; + reg = <0x0 0x1c81000 0x0 0x1000 0x0 0x1c82000 0x0 0x2000 0x0 0x1c84000 0x0 0x2000 0x0 0x1c86000 0x0 0x2000>; + interrupts = <0x1 0x9 0xf04>; + linux,phandle = <0x1>; + phandle = <0x1>; + }; + + sunxi-chipid@1c14200 { + compatible = "allwinner,sunxi-chipid"; + device_type = "chipid"; + reg = <0x0 0x1c14200 0x0 0x400>; + }; + + timer { + compatible = "arm,armv8-timer"; + interrupts = <0x1 0xd 0xff01 0x1 0xe 0xff01 0x1 0xb 0xff01 0x1 0xa 0xff01>; + clock-frequency = <0x16e3600>; + }; + + pmu { + compatible = "arm,armv8-pmuv3"; + interrupts = <0x0 0x78 0x4 0x0 0x79 0x4 0x0 0x7a 0x4 0x0 0x7b 0x4>; + }; + + dvfs_table { + compatible = "allwinner,dvfs_table"; + max_freq = <0x44aa2000>; + min_freq = <0x1c9c3800>; + lv_count = <0x8>; + lv1_freq = <0x44aa2000>; + lv1_volt = <0x514>; + lv2_freq = <0x41cdb400>; + lv2_volt = <0x4ec>; + lv3_freq = <0x3ef14800>; + lv3_volt = <0x4d8>; + lv4_freq = <0x3c14dc00>; + lv4_volt = <0x4b0>; + lv5_freq = <0x39387000>; + lv5_volt = <0x488>; + lv6_freq = <0x365c0400>; + lv6_volt = <0x460>; + lv7_freq = <0x30a32c00>; + lv7_volt = <0x438>; + lv8_freq = <0x269fb200>; + lv8_volt = <0x410>; + device_type = "dvfs_table"; + }; + + dramfreq { + compatible = "allwinner,sunxi-dramfreq"; + reg = <0x0 0x1c62000 0x0 0x1000 0x0 0x1c63000 0x0 0x1000 0x0 0x1c20000 0x0 0x800>; + clocks = <0x93 0x94 0x95>; + status = "okay"; + }; + + uboot { + }; + + gpu@0x01c40000 { + compatible = "arm,mali-400", "arm,mali-utgard"; + reg = <0x0 0x1c40000 0x0 0x10000>; + interrupts = <0x0 0x61 0x4 0x0 0x62 0x4 0x0 0x63 0x4 0x0 0x64 0x4 0x0 0x66 0x4 0x0 0x67 0x4>; + interrupt-names = "IRQGP", "IRQGPMMU", "IRQPP0", "IRQPPMMU0", "IRQPP1", "IRQPPMMU1"; + clocks = <0x96 0x97>; + device_type = "gpu_mali400_0"; + normal_freq = <0x198>; + scene_ctrl_status = <0x0>; + temp_ctrl_status = <0x1>; + }; + + wlan { + compatible = "allwinner,sunxi-wlan"; + wlan_io_regulator = "vcc-wifi-io"; + wlan_busnum = <0x1>; + status = "okay"; + device_type = "wlan"; + clocks; + wlan_power; + wlan_regon = <0x79 0xb 0x2 0x1 0xffffffff 0xffffffff 0x0>; + wlan_hostwake = <0x79 0xb 0x3 0x6 0xffffffff 0xffffffff 0x0>; + efuse_map_path = "wifi_efuse_8189e_for_MB1019Q5.map"; + }; + + bt { + compatible = "allwinner,sunxi-bt"; + bt_io_regulator = "vcc-wifi-io"; + status = "okay"; + device_type = "bt"; + clocks; + bt_power; + bt_rst_n = <0x79 0xb 0x4 0x1 0xffffffff 0xffffffff 0x0>; + }; + + btlpm { + compatible = "allwinner,sunxi-btlpm"; + uart_index = <0x1>; + status = "okay"; + device_type = "btlpm"; + bt_wake = <0x79 0xb 0x6 0x1 0xffffffff 0xffffffff 0x1>; + bt_hostwake = <0x79 0xb 0x5 0x6 0xffffffff 0xffffffff 0x0>; + }; +}; diff --git a/packages/blobs/sunxi/a64/pine64.dts b/packages/blobs/sunxi/a64/pine64.dts new file mode 100644 index 0000000000..77a4f1e677 --- /dev/null +++ b/packages/blobs/sunxi/a64/pine64.dts @@ -0,0 +1,3442 @@ +/dts-v1/; + +/memreserve/ 0x0000000045000000 0x0000000000200000; +/memreserve/ 0x0000000041010000 0x0000000000010000; +/memreserve/ 0x0000000041020000 0x0000000000000800; +/memreserve/ 0x0000000040100000 0x0000000000004000; +/memreserve/ 0x0000000040104000 0x0000000000001000; +/memreserve/ 0x0000000040105000 0x0000000000001000; +/ { + model = "Pine64+"; + dt-name = "sun50iw1p1-pine64-plus"; + compatible = "pine64,pine64-plus"; + interrupt-parent = <0x1>; + #address-cells = <0x2>; + #size-cells = <0x2>; + + clocks { + compatible = "allwinner,sunxi-clk-init"; + device_type = "clocks"; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + reg = <0x0 0x1c20000 0x0 0x320 0x0 0x1f01400 0x0 0xb0 0x0 0x1f00060 0x0 0x4>; + + losc { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-clock"; + clock-frequency = <0x8000>; + clock-output-names = "losc"; + linux,phandle = <0xc>; + phandle = <0xc>; + }; + + iosc { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-clock"; + clock-frequency = <0xf42400>; + clock-output-names = "iosc"; + linux,phandle = <0xd>; + phandle = <0xd>; + }; + + hosc { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-clock"; + clock-frequency = <0x16e3600>; + clock-output-names = "hosc"; + linux,phandle = <0x6>; + phandle = <0x6>; + }; + + pll_cpu { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_cpu"; + }; + + pll_audio { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + assigned-clock-rates = <0x1770000>; + clock-output-names = "pll_audio"; + linux,phandle = <0x2>; + phandle = <0x2>; + }; + + pll_video0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + assigned-clock-rates = <0x11b3dc40>; + clock-output-names = "pll_video0"; + linux,phandle = <0x3>; + phandle = <0x3>; + }; + + pll_ve { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_ve"; + linux,phandle = <0x16>; + phandle = <0x16>; + }; + + pll_ddr0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_ddr0"; + linux,phandle = <0x93>; + phandle = <0x93>; + }; + + pll_periph0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_periph0"; + linux,phandle = <0x4>; + phandle = <0x4>; + }; + + pll_periph1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_periph1"; + linux,phandle = <0x5>; + phandle = <0x5>; + }; + + pll_video1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + assigned-clock-rates = <0x11b3dc40>; + clock-output-names = "pll_video1"; + }; + + pll_gpu { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_gpu"; + linux,phandle = <0x96>; + phandle = <0x96>; + }; + + pll_mipi { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_mipi"; + linux,phandle = <0x8>; + phandle = <0x8>; + }; + + pll_hsic { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_hsic"; + linux,phandle = <0x3a>; + phandle = <0x3a>; + }; + + pll_de { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + assigned-clock-rates = <0x11b3dc40>; + clock-output-names = "pll_de"; + linux,phandle = <0x7>; + phandle = <0x7>; + }; + + pll_ddr1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_ddr1"; + linux,phandle = <0x94>; + phandle = <0x94>; + }; + + pll_audiox8 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x2>; + clock-mult = <0x8>; + clock-div = <0x1>; + clock-output-names = "pll_audiox8"; + }; + + pll_audiox4 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x2>; + clock-mult = <0x8>; + clock-div = <0x2>; + clock-output-names = "pll_audiox4"; + linux,phandle = <0x3c>; + phandle = <0x3c>; + }; + + pll_audiox2 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x2>; + clock-mult = <0x8>; + clock-div = <0x4>; + clock-output-names = "pll_audiox2"; + }; + + pll_video0x2 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x3>; + clock-mult = <0x2>; + clock-div = <0x1>; + clock-output-names = "pll_video0x2"; + }; + + pll_periph0x2 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x4>; + clock-mult = <0x2>; + clock-div = <0x1>; + clock-output-names = "pll_periph0x2"; + linux,phandle = <0x7b>; + phandle = <0x7b>; + }; + + pll_periph1x2 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x5>; + clock-mult = <0x2>; + clock-div = <0x1>; + clock-output-names = "pll_periph1x2"; + linux,phandle = <0x5a>; + phandle = <0x5a>; + }; + + pll_periph0d2 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x4>; + clock-mult = <0x1>; + clock-div = <0x2>; + clock-output-names = "pll_periph0d2"; + }; + + hoscd2 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x6>; + clock-mult = <0x1>; + clock-div = <0x2>; + clock-output-names = "hoscd2"; + }; + + cpu { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "cpu"; + }; + + cpuapb { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "cpuapb"; + }; + + axi { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "axi"; + }; + + pll_periphahb0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "pll_periphahb0"; + }; + + ahb1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "ahb1"; + linux,phandle = <0x95>; + phandle = <0x95>; + }; + + apb1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "apb1"; + }; + + apb2 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "apb2"; + linux,phandle = <0x7e>; + phandle = <0x7e>; + }; + + ahb2 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "ahb2"; + }; + + ths { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "ths"; + linux,phandle = <0x84>; + phandle = <0x84>; + }; + + nand { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "nand"; + linux,phandle = <0x80>; + phandle = <0x80>; + }; + + sdmmc0_mod { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc0_mod"; + linux,phandle = <0x60>; + phandle = <0x60>; + }; + + sdmmc0_bus { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc0_bus"; + linux,phandle = <0x61>; + phandle = <0x61>; + }; + + sdmmc0_rst { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc0_rst"; + linux,phandle = <0x62>; + phandle = <0x62>; + }; + + sdmmc1_mod { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc1_mod"; + linux,phandle = <0x65>; + phandle = <0x65>; + }; + + sdmmc1_bus { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc1_bus"; + linux,phandle = <0x66>; + phandle = <0x66>; + }; + + sdmmc1_rst { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc1_rst"; + linux,phandle = <0x67>; + phandle = <0x67>; + }; + + sdmmc2_mod { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc2_mod"; + linux,phandle = <0x5b>; + phandle = <0x5b>; + }; + + sdmmc2_bus { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc2_bus"; + linux,phandle = <0x5c>; + phandle = <0x5c>; + }; + + sdmmc2_rst { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc2_rst"; + linux,phandle = <0x5d>; + phandle = <0x5d>; + }; + + ts { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "ts"; + }; + + ce { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "ce"; + linux,phandle = <0x7a>; + phandle = <0x7a>; + }; + + spi0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "spi0"; + linux,phandle = <0x52>; + phandle = <0x52>; + }; + + spi1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "spi1"; + linux,phandle = <0x56>; + phandle = <0x56>; + }; + + i2s0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "i2s0"; + linux,phandle = <0x42>; + phandle = <0x42>; + }; + + i2s1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "i2s1"; + linux,phandle = <0x47>; + phandle = <0x47>; + }; + + i2s2 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "i2s2"; + linux,phandle = <0x48>; + phandle = <0x48>; + }; + + spdif { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "spdif"; + linux,phandle = <0x49>; + phandle = <0x49>; + }; + + usbphy0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbphy0"; + linux,phandle = <0x32>; + phandle = <0x32>; + }; + + usbphy1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbphy1"; + linux,phandle = <0x36>; + phandle = <0x36>; + }; + + usbhsic { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbhsic"; + linux,phandle = <0x38>; + phandle = <0x38>; + }; + + usbhsic12m { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbhsic12m"; + linux,phandle = <0x39>; + phandle = <0x39>; + }; + + usbohci1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbohci1"; + linux,phandle = <0x3b>; + phandle = <0x3b>; + }; + + usbohci0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbohci0"; + linux,phandle = <0x35>; + phandle = <0x35>; + }; + + de { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + assigned-clock-parents = <0x7>; + assigned-clock-rates = <0x11b3dc40>; + clock-output-names = "de"; + linux,phandle = <0x6a>; + phandle = <0x6a>; + }; + + tcon0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + assigned-clock-parents = <0x8>; + clock-output-names = "tcon0"; + linux,phandle = <0x6b>; + phandle = <0x6b>; + }; + + tcon1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + assigned-clock-parents = <0x3>; + clock-output-names = "tcon1"; + linux,phandle = <0x6e>; + phandle = <0x6e>; + }; + + deinterlace { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "deinterlace"; + linux,phandle = <0x7c>; + phandle = <0x7c>; + }; + + csi_s { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "csi_s"; + linux,phandle = <0x73>; + phandle = <0x73>; + }; + + csi_m { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "csi_m"; + linux,phandle = <0x74>; + phandle = <0x74>; + }; + + csi_misc { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "csi_misc"; + linux,phandle = <0x75>; + phandle = <0x75>; + }; + + ve { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "ve"; + linux,phandle = <0x17>; + phandle = <0x17>; + }; + + adda { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "adda"; + linux,phandle = <0x41>; + phandle = <0x41>; + }; + + addax4 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "addax4"; + }; + + avs { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "avs"; + }; + + hdmi { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + assigned-clock-parents = <0x3>; + clock-output-names = "hdmi"; + linux,phandle = <0x6f>; + phandle = <0x6f>; + }; + + hdmi_slow { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "hdmi_slow"; + linux,phandle = <0x70>; + phandle = <0x70>; + }; + + mbus { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "mbus"; + }; + + mipidsi { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "mipidsi"; + linux,phandle = <0x6d>; + phandle = <0x6d>; + }; + + gpu { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "gpu"; + linux,phandle = <0x97>; + phandle = <0x97>; + }; + + usbehci_16 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbohci_16"; + }; + + usbehci1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbehci1"; + linux,phandle = <0x37>; + phandle = <0x37>; + }; + + usbehci0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbehci0"; + linux,phandle = <0x34>; + phandle = <0x34>; + }; + + usbotg { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbotg"; + linux,phandle = <0x33>; + phandle = <0x33>; + }; + + gmac { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "gmac"; + linux,phandle = <0x8f>; + phandle = <0x8f>; + }; + + sdram { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdram"; + }; + + dma { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "dma"; + linux,phandle = <0xb>; + phandle = <0xb>; + }; + + hwspinlock_rst { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "hwspinlock_rst"; + linux,phandle = <0xf>; + phandle = <0xf>; + }; + + hwspinlock_bus { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "hwspinlock_bus"; + linux,phandle = <0x10>; + phandle = <0x10>; + }; + + msgbox { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "msgbox"; + linux,phandle = <0xe>; + phandle = <0xe>; + }; + + lvds { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "lvds"; + linux,phandle = <0x6c>; + phandle = <0x6c>; + }; + + uart0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "uart0"; + linux,phandle = <0x18>; + phandle = <0x18>; + }; + + uart1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "uart1"; + linux,phandle = <0x1b>; + phandle = <0x1b>; + }; + + uart2 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "uart2"; + linux,phandle = <0x1e>; + phandle = <0x1e>; + }; + + uart3 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "uart3"; + linux,phandle = <0x21>; + phandle = <0x21>; + }; + + uart4 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "uart4"; + linux,phandle = <0x24>; + phandle = <0x24>; + }; + + scr { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "scr"; + linux,phandle = <0x7d>; + phandle = <0x7d>; + }; + + twi0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "twi0"; + linux,phandle = <0x27>; + phandle = <0x27>; + }; + + twi1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "twi1"; + linux,phandle = <0x2a>; + phandle = <0x2a>; + }; + + twi2 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "twi2"; + linux,phandle = <0x2d>; + phandle = <0x2d>; + }; + + twi3 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "twi3"; + }; + + pio { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "pio"; + linux,phandle = <0xa>; + phandle = <0xa>; + }; + + cpurcir { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "cpurcir"; + linux,phandle = <0x12>; + phandle = <0x12>; + }; + + cpurpio { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "cpurpio"; + linux,phandle = <0x9>; + phandle = <0x9>; + }; + + cpurpll_peri0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "cpurpll_peri0"; + }; + + cpurcpus { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "cpurcpus"; + }; + + cpurahbs { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "cpurahbs"; + }; + + cpurapbs { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "cpurapbs"; + }; + + losc_out { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "losc_out"; + linux,phandle = <0x98>; + phandle = <0x98>; + }; + }; + + soc@01c00000 { + compatible = "simple-bus"; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + device_type = "soc"; + + pinctrl@01f02c00 { + compatible = "allwinner,sun50i-r-pinctrl"; + reg = <0x0 0x1f02c00 0x0 0x400>; + interrupts = <0x0 0x2d 0x4>; + clocks = <0x9>; + device_type = "r_pio"; + gpio-controller; + interrupt-controller; + #interrupt-cells = <0x2>; + #size-cells = <0x0>; + #gpio-cells = <0x6>; + linux,phandle = <0x79>; + phandle = <0x79>; + + s_cir0@0 { + allwinner,pins = "PL11"; + allwinner,function = "s_cir0"; + allwinner,muxsel = <0x2>; + allwinner,drive = <0x2>; + allwinner,pull = <0x1>; + linux,phandle = <0x11>; + phandle = <0x11>; + }; + + spwm0@0 { + linux,phandle = <0xaf>; + phandle = <0xaf>; + allwinner,pins = "PL10"; + allwinner,function = "spwm0"; + allwinner,pname = "pwm_positive"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x0>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + spwm0@1 { + linux,phandle = <0xb0>; + phandle = <0xb0>; + allwinner,pins = "PL10"; + allwinner,function = "spwm0"; + allwinner,pname = "pwm_positive"; + allwinner,muxsel = <0x7>; + allwinner,pull = <0x0>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + s_uart0@0 { + linux,phandle = <0xb6>; + phandle = <0xb6>; + allwinner,pins = "PL2", "PL3"; + allwinner,function = "s_uart0"; + allwinner,pname = "s_uart0_tx", "s_uart0_rx"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + s_rsb0@0 { + linux,phandle = <0xb7>; + phandle = <0xb7>; + allwinner,pins = "PL0", "PL1"; + allwinner,function = "s_rsb0"; + allwinner,pname = "s_rsb0_sck", "s_rsb0_sda"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0x2>; + allwinner,data = <0xffffffff>; + }; + + s_jtag0@0 { + linux,phandle = <0xb8>; + phandle = <0xb8>; + allwinner,pins = "PL4", "PL5", "PL6", "PL7"; + allwinner,function = "s_jtag0"; + allwinner,pname = "s_jtag0_tms", "s_jtag0_tck", "s_jtag0_tdo", "s_jtag0_tdi"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0x2>; + allwinner,data = <0xffffffff>; + }; + }; + + pinctrl@01c20800 { + compatible = "allwinner,sun50i-pinctrl"; + reg = <0x0 0x1c20800 0x0 0x400>; + interrupts = <0x0 0xb 0x4 0x0 0x11 0x4 0x0 0x15 0x4>; + device_type = "pio"; + clocks = <0xa>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <0x2>; + #size-cells = <0x0>; + #gpio-cells = <0x6>; + linux,phandle = <0x30>; + phandle = <0x30>; + + uart0@1 { + allwinner,pins = "PB8", "PB9"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x1a>; + phandle = <0x1a>; + }; + + uart1@1 { + allwinner,pins = "PG6", "PG7", "PG8", "PG9"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x1d>; + phandle = <0x1d>; + }; + + uart2@1 { + allwinner,pins = "PB0", "PB1", "PB2", "PB3"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x20>; + phandle = <0x20>; + }; + + uart3@1 { + allwinner,pins = "PH4", "PH5", "PH6", "PH7"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x23>; + phandle = <0x23>; + }; + + uart4@1 { + allwinner,pins = "PD2", "PD3", "PD4", "PD5"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x26>; + phandle = <0x26>; + }; + + twi0@1 { + allwinner,pins = "PH0", "PH1"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x29>; + phandle = <0x29>; + }; + + twi1@1 { + allwinner,pins = "PH2", "PH3"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x2c>; + phandle = <0x2c>; + }; + + twi2@1 { + allwinner,pins = "PE14", "PE15"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x2f>; + phandle = <0x2f>; + }; + + spi0@2 { + allwinner,pins = "PC3", "PC2", "PC0", "PC1"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x55>; + phandle = <0x55>; + }; + + spi1@2 { + allwinner,pins = "PD0", "PD1", "PD2", "PD3"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x59>; + phandle = <0x59>; + }; + + sdc0@1 { + allwinner,pins = "PF0", "PF1", "PF2", "PF3", "PF4", "PF5"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x64>; + phandle = <0x64>; + }; + + sdc1@1 { + allwinner,pins = "PG0", "PG1", "PG2", "PG3", "PG4", "PG5"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x69>; + phandle = <0x69>; + }; + + sdc2@1 { + allwinner,pins = "PC1", "PC5", "PC6", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x5f>; + phandle = <0x5f>; + }; + + daudio0@0 { + allwinner,pins = "PB6", "PB3", "PB4", "PB5", "PB7"; + allwinner,function = "pcm0"; + allwinner,muxsel = <0x3>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x43>; + phandle = <0x43>; + }; + + daudio0_sleep@0 { + allwinner,pins = "PB6", "PB3", "PB4", "PB5", "PB7"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x44>; + phandle = <0x44>; + }; + + daudio1@0 { + allwinner,pins = "PG10", "PG11", "PG12", "PG13"; + allwinner,function = "pcm1"; + allwinner,muxsel = <0x3>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x45>; + phandle = <0x45>; + }; + + daudio1_sleep@0 { + allwinner,pins = "PG10", "PG11", "PG12", "PG13"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x46>; + phandle = <0x46>; + }; + + aif3@0 { + allwinner,pins = "PG10", "PG11", "PG12", "PG13"; + allwinner,function = "aif3"; + allwinner,muxsel = <0x2>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x3e>; + phandle = <0x3e>; + }; + + aif2_sleep@0 { + allwinner,pins = "PB6", "PB4", "PB5", "PB7"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x3f>; + phandle = <0x3f>; + }; + + aif3_sleep@0 { + allwinner,pins = "PG10", "PG11", "PG12", "PG13"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x40>; + phandle = <0x40>; + }; + + spdif@0 { + allwinner,pins = "PH8"; + allwinner,function = "spdif0"; + allwinner,muxsel = <0x2>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x4a>; + phandle = <0x4a>; + }; + + spdif_sleep@0 { + allwinner,pins = "PH8"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x4b>; + phandle = <0x4b>; + }; + + csi0_sleep@0 { + allwinner,pins = "PE0", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13"; + allwinner,pname = "csi0_pck", "csi0_hsync", "csi0_vsync", "csi0_d0", "csi0_d1", "csi0_d2", "csi0_d3", "csi0_d4", "csi0_d5", "csi0_d6", "csi0_d7", "csi0_sck", "csi0_sda"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + allwinner,data = <0x0>; + linux,phandle = <0x77>; + phandle = <0x77>; + }; + + smartcard@0 { + allwinner,pins = "PB1", "PB4", "PB5", "PB6", "PB7"; + allwinner,function = "sim0"; + allwinner,muxsel = <0x5>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x7f>; + phandle = <0x7f>; + }; + + nand0@2 { + allwinner,pins = "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PC18"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x83>; + phandle = <0x83>; + }; + + card0_boot_para@0 { + linux,phandle = <0x99>; + phandle = <0x99>; + allwinner,pins = "PF0", "PF1", "PF2", "PF3", "PF4", "PF5"; + allwinner,function = "card0_boot_para"; + allwinner,pname = "sdc_d1", "sdc_d0", "sdc_clk", "sdc_cmd", "sdc_d3", "sdc_d2"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0x2>; + allwinner,data = <0xffffffff>; + }; + + card2_boot_para@0 { + linux,phandle = <0x9a>; + phandle = <0x9a>; + allwinner,pins = "PC1", "PC5", "PC6", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16"; + allwinner,function = "card2_boot_para"; + allwinner,pname = "sdc_ds", "sdc_clk", "sdc_cmd", "sdc_d0", "sdc_d1", "sdc_d2", "sdc_d3", "sdc_d4", "sdc_d5", "sdc_d6", "sdc_d7", "sdc_emmc_rst"; + allwinner,muxsel = <0x3>; + allwinner,pull = <0x1>; + allwinner,drive = <0x3>; + allwinner,data = <0xffffffff>; + }; + + twi_para@0 { + linux,phandle = <0x9b>; + phandle = <0x9b>; + allwinner,pins = "PH0", "PH1"; + allwinner,function = "twi_para"; + allwinner,pname = "twi_scl", "twi_sda"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + uart_para@0 { + linux,phandle = <0x9c>; + phandle = <0x9c>; + allwinner,pins = "PB8", "PB9"; + allwinner,function = "uart_para"; + allwinner,pname = "uart_debug_tx", "uart_debug_rx"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + jtag_para@0 { + linux,phandle = <0x9d>; + phandle = <0x9d>; + allwinner,pins = "PB0", "PB1", "PB2", "PB3"; + allwinner,function = "jtag_para"; + allwinner,pname = "jtag_ms", "jtag_ck", "jtag_do", "jtag_di"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + gmac0@0 { + linux,phandle = <0x9e>; + phandle = <0x9e>; + allwinner,pins = "PD18", "PD17", "PD16", "PD15", "PD20", "PD19", "PD11", "PD10", "PD9", "PD8", "PD13", "PD12", "PD21", "PD22", "PD23"; + allwinner,function = "gmac0"; + allwinner,pname = "gmac_txd0", "gmac_txd1", "gmac_txd2", "gmac_txd3", "gmac_txen", "gmac_gtxclk", "gmac_rxd0", "gmac_rxd1", "gmac_rxd2", "gmac_rxd3", "gmac_rxdv", "gmac_rxclk", "gmac_clkin", "gmac_mdc", "gmac_mdio"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + twi0@0 { + linux,phandle = <0x9f>; + phandle = <0x9f>; + allwinner,pins = "PH0", "PH1"; + allwinner,function = "twi0"; + allwinner,pname = "twi0_scl", "twi0_sda"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + twi1@0 { + linux,phandle = <0xa0>; + phandle = <0xa0>; + allwinner,pins = "PH2", "PH3"; + allwinner,function = "twi1"; + allwinner,pname = "twi1_scl", "twi1_sda"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + twi2@0 { + linux,phandle = <0xa1>; + phandle = <0xa1>; + allwinner,pins = "PE14", "PE15"; + allwinner,function = "twi2"; + allwinner,pname = "twi2_scl", "twi2_sda"; + allwinner,muxsel = <0x3>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + uart0@0 { + linux,phandle = <0xa2>; + phandle = <0xa2>; + allwinner,pins = "PB8", "PB9"; + allwinner,function = "uart0"; + allwinner,pname = "uart0_tx", "uart0_rx"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + uart1@0 { + linux,phandle = <0xa3>; + phandle = <0xa3>; + allwinner,pins = "PG6", "PG7", "PG8", "PG9"; + allwinner,function = "uart1"; + allwinner,pname = "uart1_tx", "uart1_rx", "uart1_rts", "uart1_cts"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + uart2@0 { + linux,phandle = <0xa4>; + phandle = <0xa4>; + allwinner,pins = "PB0", "PB1", "PB2", "PB3"; + allwinner,function = "uart2"; + allwinner,pname = "uart2_tx", "uart2_rx", "uart2_rts", "uart2_cts"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + uart3@0 { + linux,phandle = <0xa5>; + phandle = <0xa5>; + allwinner,pins = "PD0", "PD1"; + allwinner,function = "uart3"; + allwinner,pname = "uart3_tx", "uart3_rx"; + allwinner,muxsel = <0x3>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + uart4@0 { + linux,phandle = <0xa6>; + phandle = <0xa6>; + allwinner,pins = "PD2", "PD3", "PD4", "PD5"; + allwinner,function = "uart4"; + allwinner,pname = "uart4_tx", "uart4_rx", "uart4_rts", "uart4_cts"; + allwinner,muxsel = <0x3>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + spi0@0 { + linux,phandle = <0xa7>; + phandle = <0xa7>; + allwinner,pins = "PC3"; + allwinner,function = "spi0"; + allwinner,pname = "spi0_cs0"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + spi0@1 { + linux,phandle = <0xa8>; + phandle = <0xa8>; + allwinner,pins = "PC2", "PC0", "PC1"; + allwinner,function = "spi0"; + allwinner,pname = "spi0_sclk", "spi0_mosi", "spi0_miso"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + spi1@0 { + linux,phandle = <0xa9>; + phandle = <0xa9>; + allwinner,pins = "PD0"; + allwinner,function = "spi1"; + allwinner,pname = "spi1_cs0"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + spi1@1 { + linux,phandle = <0xaa>; + phandle = <0xaa>; + allwinner,pins = "PD1", "PD2", "PD3"; + allwinner,function = "spi1"; + allwinner,pname = "spi1_sclk", "spi1_mosi", "spi1_miso"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + nand0@0 { + linux,phandle = <0xab>; + phandle = <0xab>; + allwinner,pins = "PC0", "PC1", "PC2", "PC5", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16"; + allwinner,function = "nand0"; + allwinner,pname = "nand0_we", "nand0_ale", "nand0_cle", "nand0_nre", "nand0_d0", "nand0_d1", "nand0_d2", "nand0_d3", "nand0_d4", "nand0_d5", "nand0_d6", "nand0_d7", "nand0_ndqs"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x0>; + allwinner,drive = <0x1>; + allwinner,data = <0xffffffff>; + }; + + nand0@1 { + linux,phandle = <0xac>; + phandle = <0xac>; + allwinner,pins = "PC3", "PC4", "PC6", "PC7", "PC17", "PC18"; + allwinner,function = "nand0"; + allwinner,pname = "nand0_ce1", "nand0_ce0", "nand0_rb0", "nand0_rb1", "nand0_ce2", "nand0_ce3"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0x1>; + allwinner,data = <0xffffffff>; + }; + + pwm0@0 { + linux,phandle = <0xad>; + phandle = <0xad>; + allwinner,pins = "PD22"; + allwinner,function = "pwm0"; + allwinner,pname = "pwm_positive"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x0>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + pwm0@1 { + linux,phandle = <0xae>; + phandle = <0xae>; + allwinner,pins = "PD22"; + allwinner,function = "pwm0"; + allwinner,pname = "pwm_positive"; + allwinner,muxsel = <0x7>; + allwinner,pull = <0x0>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + csi0@0 { + linux,phandle = <0xb1>; + phandle = <0xb1>; + allwinner,pins = "PE0", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13"; + allwinner,function = "csi0"; + allwinner,pname = "csi0_pck", "csi0_hsync", "csi0_vsync", "csi0_d0", "csi0_d1", "csi0_d2", "csi0_d3", "csi0_d4", "csi0_d5", "csi0_d6", "csi0_d7", "csi0_sck", "csi0_sda"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + sdc0@0 { + linux,phandle = <0xb2>; + phandle = <0xb2>; + allwinner,pins = "PF0", "PF1", "PF2", "PF3", "PF4", "PF5"; + allwinner,function = "sdc0"; + allwinner,pname = "sdc0_d1", "sdc0_d0", "sdc0_clk", "sdc0_cmd", "sdc0_d3", "sdc0_d2"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0x2>; + allwinner,data = <0xffffffff>; + }; + + sdc1@0 { + linux,phandle = <0xb3>; + phandle = <0xb3>; + allwinner,pins = "PG0", "PG1", "PG2", "PG3", "PG4", "PG5"; + allwinner,function = "sdc1"; + allwinner,pname = "sdc1_clk", "sdc1_cmd", "sdc1_d0", "sdc1_d1", "sdc1_d2", "sdc1_d3"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0x3>; + allwinner,data = <0xffffffff>; + }; + + sdc2@0 { + linux,phandle = <0xb4>; + phandle = <0xb4>; + allwinner,pins = "PC1", "PC5", "PC6", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16"; + allwinner,function = "sdc2"; + allwinner,pname = "sdc2_ds", "sdc2_clk", "sdc2_cmd", "sdc2_d0", "sdc2_d1", "sdc2_d2", "sdc2_d3", "sdc2_d4", "sdc2_d5", "sdc2_d6", "sdc2_d7", "sdc2_emmc_rst"; + allwinner,muxsel = <0x3>; + allwinner,pull = <0x1>; + allwinner,drive = <0x3>; + allwinner,data = <0xffffffff>; + }; + + codec@0 { + linux,phandle = <0xb5>; + phandle = <0xb5>; + allwinner,pins = "PH7"; + allwinner,function = "codec"; + allwinner,pname = "gpio-spk"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + Vdevice@0 { + linux,phandle = <0xb9>; + phandle = <0xb9>; + allwinner,pins = "PB1", "PB2"; + allwinner,function = "Vdevice"; + allwinner,pname = "Vdevice_0", "Vdevice_1"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0x1>; + allwinner,drive = <0x2>; + allwinner,data = <0xffffffff>; + }; + + w1_pin@0 { + linux,phandle = <0xba>; + phandle = <0xba>; + allwinner,pins = "PC8"; + allwinner,function = "gpio_in"; + allwinner,pname = "w1"; + allwinner,muxsel = <0x0>; + allwinner,pull = <0x1>; + allwinner,drive = <0x0>; + allwinner,data = <0xffffffff>; + }; + }; + + pinctrl@0 { + compatible = "allwinner,axp-pinctrl"; + gpio-controller; + #size-cells = <0x0>; + #gpio-cells = <0x6>; + device_type = "axp_pio"; + linux,phandle = <0x31>; + phandle = <0x31>; + }; + + dma-controller@01c02000 { + compatible = "allwinner,sun50i-dma"; + reg = <0x0 0x1c02000 0x0 0x1000>; + interrupts = <0x0 0x32 0x4>; + clocks = <0xb>; + #dma-cells = <0x1>; + }; + + mbus-controller@01c62000 { + compatible = "allwinner,sun50i-mbus"; + reg = <0x0 0x1c62000 0x0 0x110>; + #mbus-cells = <0x1>; + }; + + arisc { + compatible = "allwinner,sunxi-arisc"; + #address-cells = <0x2>; + #size-cells = <0x2>; + clocks = <0xc 0xd 0x6 0x4>; + clock-names = "losc", "iosc", "hosc", "pll_periph0"; + powchk_used = <0x0>; + power_reg = <0x2309621>; + system_power = <0x32>; + }; + + arisc_space { + compatible = "allwinner,arisc_space"; + space1 = <0x40000 0x0 0x14000>; + space2 = <0x40100000 0x18000 0x4000>; + space3 = <0x40104000 0x0 0x1000>; + space4 = <0x40105000 0x0 0x1000>; + }; + + standby_space { + compatible = "allwinner,standby_space"; + space1 = <0x41020000 0x0 0x800>; + }; + + msgbox@1c17000 { + compatible = "allwinner,msgbox"; + clocks = <0xe>; + clock-names = "clk_msgbox"; + reg = <0x0 0x1c17000 0x0 0x1000>; + interrupts = <0x0 0x31 0x1>; + status = "okay"; + }; + + hwspinlock@1c18000 { + compatible = "allwinner,sunxi-hwspinlock"; + clocks = <0xf 0x10>; + clock-names = "clk_hwspinlock_rst", "clk_hwspinlock_bus"; + reg = <0x0 0x1c18000 0x0 0x1000>; + status = "okay"; + num-locks = <0x8>; + }; + + s_cir@1f02000 { + compatible = "allwinner,s_cir"; + reg = <0x0 0x1f02000 0x0 0x400>; + interrupts = <0x0 0x25 0x4>; + pinctrl-names = "default"; + pinctrl-0 = <0x11>; + clocks = <0x6 0x12>; + supply = "vcc-pl"; + ir_power_key_code = <0x4d>; + ir_addr_code = <0x4040>; + status = "okay"; + device_type = "s_cir0"; + }; + + s_uart@1f02800 { + compatible = "allwinner,s_uart"; + reg = <0x0 0x1f02800 0x0 0x400>; + interrupts = <0x0 0x26 0x4>; + pinctrl-names = "default"; + status = "okay"; + device_type = "s_uart0"; + pinctrl-0 = <0xb6>; + }; + + s_rsb@1f03400 { + compatible = "allwinner,s_rsb"; + reg = <0x0 0x1f03400 0x0 0x400>; + interrupts = <0x0 0x27 0x4>; + pinctrl-names = "default"; + status = "okay"; + device_type = "s_rsb0"; + pinctrl-0 = <0xb7>; + }; + + s_jtag0 { + compatible = "allwinner,s_jtag"; + pinctrl-names = "default"; + status = "disabled"; + device_type = "s_jtag0"; + pinctrl-0 = <0xb8>; + }; + + timer@1c20c00 { + compatible = "allwinner,sunxi-timer"; + device_type = "timer"; + reg = <0x0 0x1c20c00 0x0 0x90>; + interrupts = <0x0 0x12 0x1>; + clock-frequency = <0x16e3600>; + timer-prescale = <0x10>; + }; + + rtc@01f00000 { + compatible = "allwinner,sun50i-rtc"; + device_type = "rtc"; + reg = <0x0 0x1f00000 0x0 0x218>; + interrupts = <0x0 0x28 0x4>; + gpr_offset = <0x100>; + gpr_len = <0x4>; + }; + + ve@01c0e000 { + compatible = "allwinner,sunxi-cedar-ve"; + reg = <0x0 0x1c0e000 0x0 0x1000 0x0 0x1c00000 0x0 0x10 0x0 0x1c20000 0x0 0x800>; + interrupts = <0x0 0x3a 0x4>; + clocks = <0x16 0x17>; + }; + + uart@01c28000 { + compatible = "allwinner,sun50i-uart"; + device_type = "uart0"; + reg = <0x0 0x1c28000 0x0 0x400>; + interrupts = <0x0 0x0 0x4>; + clocks = <0x18>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x1a>; + uart0_port = <0x0>; + uart0_type = <0x2>; + status = "okay"; + pinctrl-0 = <0xa2>; + }; + + uart@01c28400 { + compatible = "allwinner,sun50i-uart"; + device_type = "uart1"; + reg = <0x0 0x1c28400 0x0 0x400>; + interrupts = <0x0 0x1 0x4>; + clocks = <0x1b>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x1d>; + uart1_port = <0x1>; + uart1_type = <0x4>; + status = "okay"; + pinctrl-0 = <0xa3>; + }; + + uart@01c28800 { + compatible = "allwinner,sun50i-uart"; + device_type = "uart2"; + reg = <0x0 0x1c28800 0x0 0x400>; + interrupts = <0x0 0x2 0x4>; + clocks = <0x1e>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x20>; + uart2_port = <0x2>; + uart2_type = <0x4>; + status = "okay"; + pinctrl-0 = <0xa4>; + }; + + uart@01c28c00 { + compatible = "allwinner,sun50i-uart"; + device_type = "uart3"; + reg = <0x0 0x1c28c00 0x0 0x400>; + interrupts = <0x0 0x3 0x4>; + clocks = <0x21>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x23>; + uart3_port = <0x3>; + uart3_type = <0x4>; + status = "okay"; + pinctrl-0 = <0xa5>; + }; + + uart@01c29000 { + compatible = "allwinner,sun50i-uart"; + device_type = "uart4"; + reg = <0x0 0x1c29000 0x0 0x400>; + interrupts = <0x0 0x4 0x4>; + clocks = <0x24>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x26>; + uart4_port = <0x4>; + uart4_type = <0x4>; + status = "okay"; + pinctrl-0 = <0xa6>; + }; + + twi@0x01c2ac00 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sun50i-twi"; + device_type = "twi0"; + reg = <0x0 0x1c2ac00 0x0 0x400>; + interrupts = <0x0 0x6 0x4>; + clocks = <0x27>; + clock-frequency = <0x61a80>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x29>; + status = "okay"; + pinctrl-0 = <0x9f>; + }; + + twi@0x01c2b000 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sun50i-twi"; + device_type = "twi1"; + reg = <0x0 0x1c2b000 0x0 0x400>; + interrupts = <0x0 0x7 0x4>; + clocks = <0x2a>; + clock-frequency = <0x30d40>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x2c>; + status = "okay"; + pinctrl-0 = <0xa0>; + }; + + twi@0x01c2b400 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sun50i-twi"; + device_type = "twi2"; + reg = <0x0 0x1c2b400 0x0 0x400>; + interrupts = <0x0 0x8 0x4>; + clocks = <0x2d>; + clock-frequency = <0x30d40>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x2f>; + status = "disabled"; + pinctrl-0 = <0xa1>; + }; + + usbc0@0 { + device_type = "usbc0"; + compatible = "allwinner,sunxi-otg-manager"; + usb_port_type = <0x1>; + usb_detect_type = <0x0>; + usb_host_init_state = <0x1>; + usb_regulator_io = "nocare"; + usb_wakeup_suspend = <0x1>; + usb_luns = <0x3>; + usb_serial_unique = <0x1>; + usb_serial_number = "20080411"; + rndis_wceis = <0x1>; + status = "okay"; + usb_id_gpio; + usb_det_vbus_gpio; + usb_drv_vbus_gpio; + }; + + udc-controller@0x01c19000 { + compatible = "allwinner,sunxi-udc"; + reg = <0x0 0x1c19000 0x0 0x1000 0x0 0x1c00000 0x0 0x100>; + interrupts = <0x0 0x47 0x4>; + clocks = <0x32 0x33>; + status = "okay"; + }; + + ehci0-controller@0x01c1a000 { + compatible = "allwinner,sunxi-ehci0"; + reg = <0x0 0x1c1a000 0x0 0xfff 0x0 0x1c00000 0x0 0x100 0x0 0x1c19000 0x0 0x1000>; + interrupts = <0x0 0x48 0x4>; + clocks = <0x32 0x34>; + hci_ctrl_no = <0x0>; + status = "okay"; + }; + + ohci0-controller@0x01c1a400 { + compatible = "allwinner,sunxi-ohci0"; + reg = <0x0 0x1c1a000 0x0 0xfff 0x0 0x1c00000 0x0 0x100 0x0 0x1c19000 0x0 0x1000>; + interrupts = <0x0 0x49 0x4>; + clocks = <0x32 0x35>; + hci_ctrl_no = <0x0>; + status = "okay"; + }; + + usbc1@0 { + device_type = "usbc1"; + usb_host_init_state = <0x1>; + usb_regulator_io = "nocare"; + usb_wakeup_suspend = <0x1>; + usb_hsic_used = <0x0>; + usb_hsic_regulator_io = "vcc-hsic-12"; + usb_hsic_ctrl = <0x0>; + usb_hsic_usb3503_flag = <0x0>; + status = "okay"; + usb_port_type = <0x1>; + usb_detect_type = <0x0>; + usb_drv_vbus_gpio; + usb_hsic_rdy_gpio; + usb_hsic_hub_connect_gpio; + usb_hsic_int_n_gpio; + usb_hsic_reset_n_gpio; + }; + + ehci1-controller@0x01c1b000 { + compatible = "allwinner,sunxi-ehci1"; + reg = <0x0 0x1c1b000 0x0 0xfff 0x0 0x1c00000 0x0 0x100 0x0 0x1c19000 0x0 0x1000>; + interrupts = <0x0 0x4a 0x4>; + clocks = <0x36 0x37 0x38 0x39 0x3a>; + hci_ctrl_no = <0x1>; + status = "okay"; + }; + + ohci1-controller@0x01c1b400 { + compatible = "allwinner,sunxi-ohci1"; + reg = <0x0 0x1c1b000 0x0 0xfff 0x0 0x1c00000 0x0 0x100 0x0 0x1c19000 0x0 0x1000>; + interrupts = <0x0 0x4b 0x4>; + clocks = <0x36 0x3b>; + hci_ctrl_no = <0x1>; + status = "okay"; + }; + + codec@0x01c22c00 { + compatible = "allwinner,sunxi-internal-codec"; + reg = <0x0 0x1c22c00 0x0 0x478 0x0 0x1f015c0 0x0 0x0>; + clocks = <0x3c>; + pinctrl-names = "aif2-default", "aif3-default", "aif2-sleep", "aif3-sleep"; + pinctrl-1 = <0x3e>; + pinctrl-2 = <0x3f>; + pinctrl-3 = <0x40>; + gpio-spk = <0x30 0x7 0x7 0x1 0x1 0x1 0x1>; + headphonevol = <0x3b>; + spkervol = <0x1a>; + earpiecevol = <0x1e>; + maingain = <0x4>; + headsetmicgain = <0x4>; + adcagc_cfg = <0x0>; + adcdrc_cfg = <0x0>; + adchpf_cfg = <0x0>; + dacdrc_cfg = <0x0>; + dachpf_cfg = <0x0>; + aif1_lrlk_div = <0x40>; + aif2_lrlk_div = <0x40>; + aif2config = <0x0>; + aif3config = <0x0>; + pa_sleep_time = <0x15e>; + dac_digital_vol = <0xa0a0>; + status = "okay"; + linux,phandle = <0x4d>; + phandle = <0x4d>; + device_type = "codec"; + pinctrl-0 = <0xb5>; + }; + + i2s0-controller@0x01c22c00 { + compatible = "allwinner,sunxi-internal-i2s"; + reg = <0x0 0x1c22c00 0x0 0x478>; + clocks = <0x2 0x41>; + status = "okay"; + linux,phandle = <0x4c>; + phandle = <0x4c>; + device_type = "i2s"; + }; + + daudio@0x01c22000 { + compatible = "allwinner,sunxi-daudio"; + reg = <0x0 0x1c22000 0x0 0x58>; + clocks = <0x2 0x42>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <0x43>; + pinctrl-1 = <0x44>; + pcm_lrck_period = <0x20>; + pcm_lrckr_period = <0x1>; + slot_width_select = <0x20>; + pcm_lsb_first = <0x0>; + tx_data_mode = <0x0>; + rx_data_mode = <0x0>; + daudio_master = <0x4>; + audio_format = <0x1>; + signal_inversion = <0x1>; + frametype = <0x0>; + tdm_config = <0x1>; + tdm_num = <0x0>; + status = "disabled"; + linux,phandle = <0x4e>; + phandle = <0x4e>; + device_type = "daudio0"; + }; + + daudio@0x01c22400 { + compatible = "allwinner,sunxi-daudio"; + reg = <0x0 0x1c22400 0x0 0x58>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <0x45>; + pinctrl-1 = <0x46>; + clocks = <0x2 0x47>; + pcm_lrck_period = <0x20>; + pcm_lrckr_period = <0x1>; + slot_width_select = <0x20>; + pcm_lsb_first = <0x0>; + tx_data_mode = <0x0>; + rx_data_mode = <0x0>; + daudio_master = <0x4>; + audio_format = <0x1>; + signal_inversion = <0x1>; + frametype = <0x0>; + tdm_config = <0x1>; + tdm_num = <0x1>; + status = "disabled"; + linux,phandle = <0x4f>; + phandle = <0x4f>; + device_type = "daudio1"; + }; + + daudio@0x01c22800 { + compatible = "allwinner,sunxi-tdmhdmi"; + reg = <0x0 0x1c22800 0x0 0x58>; + clocks = <0x2 0x48>; + status = "okay"; + linux,phandle = <0x50>; + phandle = <0x50>; + device_type = "daudio2"; + }; + + spdif-controller@0x01c21000 { + compatible = "allwinner,sunxi-spdif"; + reg = <0x0 0x1c21000 0x0 0x38>; + clocks = <0x2 0x49>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <0x4a>; + pinctrl-1 = <0x4b>; + status = "disabled"; + linux,phandle = <0x51>; + phandle = <0x51>; + device_type = "spdif"; + }; + + sound@0 { + compatible = "allwinner,sunxi-codec-machine"; + interrupts = <0x0 0x1c 0x4>; + sunxi,i2s-controller = <0x4c>; + sunxi,audio-codec = <0x4d>; + aif2fmt = <0x3>; + aif3fmt = <0x3>; + aif2master = <0x1>; + hp_detect_case = <0x1>; + status = "okay"; + device_type = "sndcodec"; + }; + + sound@1 { + compatible = "allwinner,sunxi-daudio0-machine"; + sunxi,daudio0-controller = <0x4e>; + status = "disabled"; + device_type = "snddaudio0"; + }; + + sound@2 { + compatible = "allwinner,sunxi-daudio1-machine"; + sunxi,daudio1-controller = <0x4f>; + status = "disabled"; + device_type = "snddaudio1"; + }; + + sound@3 { + compatible = "allwinner,sunxi-hdmi-machine"; + sunxi,hdmi-controller = <0x50>; + status = "okay"; + device_type = "sndhdmi"; + }; + + sound@4 { + compatible = "allwinner,sunxi-spdif-machine"; + sunxi,spdif-controller = <0x51>; + status = "disabled"; + device_type = "sndspdif"; + }; + + spi@01c68000 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sun50i-spi"; + device_type = "spi0"; + reg = <0x0 0x1c68000 0x0 0x1000>; + interrupts = <0x0 0x41 0x4>; + clocks = <0x4 0x52>; + clock-frequency = <0x5f5e100>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x55>; + spi0_cs_number = <0x1>; + spi0_cs_bitmap = <0x1>; + status = "disabled"; + pinctrl-0 = <0xa7 0xa8>; + + spidev@0 { + compatible = "spidev"; + reg = <0x0>; + spi-max-frequency = <0x2faf080>; + }; + }; + + spi@01c69000 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sun50i-spi"; + device_type = "spi1"; + reg = <0x0 0x1c69000 0x0 0x1000>; + interrupts = <0x0 0x42 0x4>; + clocks = <0x4 0x56>; + clock-frequency = <0x5f5e100>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x59>; + spi1_cs_number = <0x1>; + spi1_cs_bitmap = <0x1>; + status = "disabled"; + pinctrl-0 = <0xa9 0xaa>; + }; + + sdmmc@01C11000 { + compatible = "allwinner,sun50i-sdmmc2"; + device_type = "sdc2"; + reg = <0x0 0x1c11000 0x0 0x1000>; + interrupts = <0x0 0x3e 0x104>; + clocks = <0x6 0x5a 0x5b 0x5c 0x5d>; + clock-names = "osc24m", "pll_periph", "mmc", "ahb", "rst"; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x5f>; + bus-width = <0x8>; + max-frequency = <0x5f5e100>; + sdc_tm4_sm0_freq0 = <0x0>; + sdc_tm4_sm0_freq1 = <0x0>; + sdc_tm4_sm1_freq0 = <0x0>; + sdc_tm4_sm1_freq1 = <0x0>; + sdc_tm4_sm2_freq0 = <0x0>; + sdc_tm4_sm2_freq1 = <0x0>; + sdc_tm4_sm3_freq0 = <0x5000000>; + sdc_tm4_sm3_freq1 = <0x405>; + sdc_tm4_sm4_freq0 = <0x50000>; + sdc_tm4_sm4_freq1 = <0x408>; + status = "disabled"; + non-removable; + pinctrl-0 = <0xb4>; + cd-gpios; + sunxi-power-save-mode; + sunxi-dis-signal-vol-sw; + mmc-ddr-1_8v; + mmc-hs200-1_8v; + mmc-hs400-1_8v; + vmmc = "vcc-emmc"; + vqmmc = "vcc-lpddr"; + vdmmc = "none"; + }; + + sdmmc@01c0f000 { + compatible = "allwinner,sun50i-sdmmc0"; + device_type = "sdc0"; + reg = <0x0 0x1c0f000 0x0 0x1000>; + interrupts = <0x0 0x3c 0x104>; + clocks = <0x6 0x5a 0x60 0x61 0x62>; + clock-names = "osc24m", "pll_periph", "mmc", "ahb", "rst"; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x64>; + max-frequency = <0x2faf080>; + bus-width = <0x4>; + broken-cd; + status = "okay"; + pinctrl-0 = <0xb2>; + cd-gpios = <0x30 0x5 0x6 0x0 0x1 0x2 0xffffffff>; + sunxi-power-save-mode; + vmmc = "none"; + vqmmc = "none"; + vdmmc = "vcc-sdc"; + }; + + sdmmc@1C10000 { + compatible = "allwinner,sun50i-sdmmc1"; + device_type = "sdc1"; + reg = <0x0 0x1c10000 0x0 0x1000>; + interrupts = <0x0 0x3d 0x104>; + clocks = <0x6 0x5a 0x65 0x66 0x67>; + clock-names = "osc24m", "pll_periph", "mmc", "ahb", "rst"; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x69>; + max-frequency = <0x8f0d180>; + bus-width = <0x4>; + sunxi-dly-52M-ddr4 = <0x1 0x0 0x0 0x0 0x2>; + sunxi-dly-104M = <0x1 0x0 0x0 0x0 0x1>; + sunxi-dly-208M = <0x1 0x0 0x0 0x0 0x1>; + status = "okay"; + pinctrl-0 = <0xb3>; + sd-uhs-sdr50; + sd-uhs-ddr50; + sd-uhs-sdr104; + cap-sdio-irq; + keep-power-in-suspend; + ignore-pm-notify; + }; + + disp@01000000 { + compatible = "allwinner,sun50i-disp"; + reg = <0x0 0x1000000 0x0 0x300000 0x0 0x1c0c000 0x0 0x17fc 0x0 0x1ca0000 0x0 0x10fc>; + interrupts = <0x0 0x56 0x104 0x0 0x57 0x104 0x0 0x59 0x104>; + clocks = <0x6a 0x6b 0x6c 0x6d 0x6e>; + status = "okay"; + device_type = "disp"; + disp_init_enable = <0x1>; + disp_mode = <0x0>; + screen0_output_type = <0x3>; + screen0_output_mode = <0xa>; + screen1_output_type = <0x3>; + screen1_output_mode = <0xa>; + fb0_format = <0x0>; + fb0_width = <0x0>; + fb0_height = <0x0>; + fb1_format = <0x0>; + fb1_width = <0x0>; + fb1_height = <0x0>; + }; + + lcd0@01c0c000 { + compatible = "allwinner,sunxi-lcd0"; + pinctrl-names = "active", "sleep"; + status = "okay"; + device_type = "lcd0"; + lcd_used = <0x0>; + lcd_driver_name = "mb709_mipi"; + lcd_backlight = <0x32>; + lcd_if = <0x4>; + lcd_x = <0x400>; + lcd_y = <0x258>; + lcd_width = <0x0>; + lcd_height = <0x0>; + lcd_dclk_freq = <0x37>; + lcd_pwm_used = <0x1>; + lcd_pwm_ch = <0x10>; + lcd_pwm_freq = <0xc350>; + lcd_pwm_pol = <0x1>; + lcd_pwm_max_limit = <0xfa>; + lcd_hbp = <0x78>; + lcd_ht = <0x604>; + lcd_hspw = <0x14>; + lcd_vbp = <0x17>; + lcd_vt = <0x27b>; + lcd_vspw = <0x2>; + lcd_dsi_if = <0x2>; + lcd_dsi_lane = <0x4>; + lcd_dsi_format = <0x0>; + lcd_dsi_eotp = <0x0>; + lcd_dsi_vc = <0x0>; + lcd_dsi_te = <0x0>; + lcd_frm = <0x0>; + lcd_gamma_en = <0x0>; + lcd_bright_curve_en = <0x0>; + lcd_cmap_en = <0x0>; + lcd_bl_en = <0x30 0x7 0xa 0x1 0x0 0xffffffff 0x1>; + lcd_bl_en_power = "none"; + lcd_power = "vcc-mipi"; + lcd_fix_power = "vcc-dsi-33"; + lcd_gpio_0 = <0x30 0x3 0x18 0x1 0x0 0xffffffff 0x1>; + }; + + hdmi@01ee0000 { + compatible = "allwinner,sunxi-hdmi"; + reg = <0x0 0x1ee0000 0x0 0x20000>; + clocks = <0x6f 0x70>; + device_type = "hdmi"; + status = "okay"; + hdmi_power = "vcc-hdmi-33"; + hdmi_hdcp_enable = <0x0>; + hdmi_cts_compatibility = <0x0>; + }; + + tr@01000000 { + compatible = "allwinner,sun50i-tr"; + reg = <0x0 0x1000000 0x0 0x200bc>; + interrupts = <0x0 0x60 0x104>; + clocks = <0x6a>; + status = "okay"; + }; + + pwm@01c21400 { + compatible = "allwinner,sunxi-pwm"; + reg = <0x0 0x1c21400 0x0 0x3c>; + pwm-number = <0x1>; + pwm-base = <0x0>; + pwms = <0x71>; + }; + + pwm0@01c21400 { + compatible = "allwinner,sunxi-pwm0"; + pinctrl-names = "active", "sleep"; + reg_base = <0x1c21400>; + reg_busy_offset = <0x0>; + reg_busy_shift = <0x1c>; + reg_enable_offset = <0x0>; + reg_enable_shift = <0x4>; + reg_clk_gating_offset = <0x0>; + reg_clk_gating_shift = <0x6>; + reg_bypass_offset = <0x0>; + reg_bypass_shift = <0x9>; + reg_pulse_start_offset = <0x0>; + reg_pulse_start_shift = <0x8>; + reg_mode_offset = <0x0>; + reg_mode_shift = <0x7>; + reg_polarity_offset = <0x0>; + reg_polarity_shift = <0x5>; + reg_period_offset = <0x4>; + reg_period_shift = <0x10>; + reg_period_width = <0x10>; + reg_active_offset = <0x4>; + reg_active_shift = <0x0>; + reg_active_width = <0x10>; + reg_prescal_offset = <0x0>; + reg_prescal_shift = <0x0>; + reg_prescal_width = <0x4>; + linux,phandle = <0x71>; + phandle = <0x71>; + device_type = "pwm0"; + pwm_used = <0x0>; + pinctrl-0 = <0xad>; + pinctrl-1 = <0xae>; + }; + + s_pwm@1f03800 { + compatible = "allwinner,sunxi-s_pwm"; + reg = <0x0 0x1f03800 0x0 0x3c>; + pwm-number = <0x1>; + pwm-base = <0x10>; + pwms = <0x72>; + }; + + spwm0@0x01f03800 { + compatible = "allwinner,sunxi-pwm16"; + pinctrl-names = "active", "sleep"; + reg_base = <0x1f03800>; + reg_busy_offset = <0x0>; + reg_busy_shift = <0x1c>; + reg_enable_offset = <0x0>; + reg_enable_shift = <0x4>; + reg_clk_gating_offset = <0x0>; + reg_clk_gating_shift = <0x6>; + reg_bypass_offset = <0x0>; + reg_bypass_shift = <0x9>; + reg_pulse_start_offset = <0x0>; + reg_pulse_start_shift = <0x8>; + reg_mode_offset = <0x0>; + reg_mode_shift = <0x7>; + reg_polarity_offset = <0x0>; + reg_polarity_shift = <0x5>; + reg_period_offset = <0x4>; + reg_period_shift = <0x10>; + reg_period_width = <0x10>; + reg_active_offset = <0x4>; + reg_active_shift = <0x0>; + reg_active_width = <0x10>; + reg_prescal_offset = <0x0>; + reg_prescal_shift = <0x0>; + reg_prescal_width = <0x4>; + linux,phandle = <0x72>; + phandle = <0x72>; + device_type = "spwm0"; + s_pwm_used = <0x1>; + pinctrl-0 = <0xaf>; + pinctrl-1 = <0xb0>; + }; + + boot_disp { + compatible = "allwinner,boot_disp"; + device_type = "boot_disp"; + output_disp = <0x0>; + output_type = <0x3>; + output_mode = <0xa>; + }; + + cci@0x01cb3000 { + compatible = "allwinner,sunxi-csi_cci"; + reg = <0x0 0x1cb3000 0x0 0x1000>; + interrupts = <0x0 0x55 0x4>; + status = "okay"; + }; + + csi_res@0x01cb0000 { + compatible = "allwinner,sunxi-csi"; + reg = <0x0 0x1cb0000 0x0 0x1000>; + status = "okay"; + }; + + vfe@0 { + device_type = "csi0"; + compatible = "allwinner,sunxi-vfe"; + interrupts = <0x0 0x54 0x4>; + clocks = <0x73 0x74 0x75 0x4 0x6 0x5>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x77>; + csi0_sensor_list = <0x1>; + status = "okay"; + pinctrl-0 = <0xb1>; + csi0_mck = <0x30 0x4 0x1 0x0 0x0 0x1 0x0>; + + dev@0 { + csi0_dev0_mname = "s5k4ec"; + csi0_dev0_twi_addr = <0x5a>; + csi0_dev0_pos = "rear"; + csi0_dev0_isp_used = <0x1>; + csi0_dev0_fmt = <0x0>; + csi0_dev0_stby_mode = <0x1>; + csi0_dev0_vflip = <0x0>; + csi0_dev0_hflip = <0x0>; + csi0_dev0_iovdd = "iovdd-csi"; + csi0_dev0_iovdd_vol = <0x2ab980>; + csi0_dev0_avdd = "avdd-csi"; + csi0_dev0_avdd_vol = <0x2ab980>; + csi0_dev0_dvdd = "dvdd-csi-18"; + csi0_dev0_dvdd_vol = <0x16e360>; + csi0_dev0_flash_used = <0x0>; + csi0_dev0_flash_type = <0x2>; + csi0_dev0_flvdd = "vdd-csi-led"; + csi0_dev0_flvdd_vol = <0x325aa0>; + csi0_dev0_act_used = <0x0>; + csi0_dev0_act_name = "ad5820_act"; + csi0_dev0_act_slave = <0x18>; + status = "disabled"; + device_type = "csi0_dev0"; + csi0_dev0_afvdd; + csi0_dev0_afvdd_vol; + csi0_dev0_power_en; + csi0_dev0_reset = <0x30 0x4 0x10 0x0 0x0 0x1 0x0>; + csi0_dev0_pwdn = <0x30 0x4 0x11 0x0 0x0 0x1 0x0>; + csi0_dev0_flash_en; + csi0_dev0_flash_mode; + csi0_dev0_af_pwdn; + }; + + dev@1 { + csi0_dev1_mname = "gc2145"; + csi0_dev1_twi_addr = <0x78>; + csi0_dev1_pos = "front"; + csi0_dev1_isp_used = <0x1>; + csi0_dev1_fmt = <0x0>; + csi0_dev1_stby_mode = <0x1>; + csi0_dev1_vflip = <0x0>; + csi0_dev1_hflip = <0x0>; + csi0_dev1_iovdd = "iovdd-csi"; + csi0_dev1_iovdd_vol = <0x2ab980>; + csi0_dev1_avdd = "avdd-csi"; + csi0_dev1_avdd_vol = <0x2ab980>; + csi0_dev1_dvdd = "dvdd-csi-18"; + csi0_dev1_dvdd_vol = <0x1b7740>; + csi0_dev1_flash_used = <0x0>; + csi0_dev1_flash_type = <0x2>; + csi0_dev1_flvdd = "vdd-csi-led"; + csi0_dev1_flvdd_vol = <0x325aa0>; + csi0_dev1_act_used = <0x0>; + csi0_dev1_act_name = "ad5820_act"; + csi0_dev1_act_slave = <0x18>; + status = "disabled"; + device_type = "csi0_dev1"; + csi0_dev1_afvdd; + csi0_dev1_afvdd_vol; + csi0_dev1_power_en; + csi0_dev1_reset = <0x30 0x4 0x10 0x0 0x0 0x1 0x0>; + csi0_dev1_pwdn = <0x30 0x4 0x11 0x0 0x0 0x1 0x0>; + csi0_dev1_flash_en; + csi0_dev1_flash_mode; + csi0_dev1_af_pwdn; + }; + }; + + vdevice@0 { + compatible = "allwinner,sun50i-vdevice"; + pinctrl-names = "default"; + test-gpios = <0x79 0xb 0x0 0x1 0x2 0x3 0x4>; + status = "okay"; + device_type = "Vdevice"; + pinctrl-0 = <0xb9>; + }; + + onewire_device@0 { + compatible = "w1-gpio"; + gpios = <0x30 0x2 0x8 0x0 0x0 0x0 0x0>; + pinctrl-names = "default"; + pinctrl-0 = <0xba>; + status = "okay"; + }; + + ce@1c15000 { + compatible = "allwinner,sunxi-ce"; + reg = <0x0 0x1c15000 0x0 0x80 0x0 0x1c15800 0x0 0x80>; + interrupts = <0x0 0x5e 0xff01 0x0 0x50 0xff01>; + clock-frequency = <0x11e1a300 0xbebc200>; + clocks = <0x7a 0x7b>; + }; + + deinterlace@0x01e00000 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sunxi-deinterlace"; + reg = <0x0 0x1e00000 0x0 0x77c>; + interrupts = <0x0 0x5d 0x4>; + clocks = <0x7c 0x4>; + status = "okay"; + device_type = "di"; + }; + + smartcard@0x01c2c400 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sunxi-scr"; + reg = <0x0 0x1c2c400 0x0 0x100>; + interrupts = <0x0 0x53 0x4>; + clocks = <0x7d 0x7e>; + clock-frequency = <0x16e3600>; + pinctrl-names = "default"; + pinctrl-0 = <0x7f>; + status = "okay"; + device_type = "smc"; + smc_used; + smc_rst; + smc_vppen; + smc_vppp; + smc_det; + smc_vccen; + smc_sck; + smc_sda; + }; + + nmi@0x01f00c00 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sunxi-nmi"; + reg = <0x0 0x1f00c00 0x0 0x50>; + nmi_irq_ctrl = <0xc>; + nmi_irq_en = <0x40>; + nmi_irq_status = <0x10>; + nmi_irq_mask = <0x50>; + status = "okay"; + }; + + pmu0@0 { + compatible = "allwinner,pmu0"; + device_type = "pmu0"; + pmu_batdeten = <0x1>; + pmu_init_chgend_rate = <0x14>; + pmu_init_chg_enabled = <0x1>; + pmu_init_adc_freq = <0x320>; + pmu_init_adcts_freq = <0x320>; + pmu_init_chg_pretime = <0x46>; + pmu_init_chg_csttime = <0x2d0>; + pmu_batt_cap_correct = <0x1>; + pmu_chg_end_on_en = <0x0>; + pmu_pwroff_vol = <0xce4>; + pmu_pwron_vol = <0xa28>; + pmu_powkey_off_delay_time = <0x0>; + pmu_pwrok_time = <0x40>; + pmu_reset_shutdown_en = <0x1>; + pmu_restvol_adjust_time = <0x3c>; + pmu_ocv_cou_adjust_time = <0x3c>; + pmu_vbusen_func = <0x1>; + pmu_reset = <0x0>; + pmu_IRQ_wakeup = <0x1>; + pmu_hot_shutdowm = <0x1>; + pmu_inshort = <0x0>; + pmu_bat_shutdown_ltf = <0xc80>; + pmu_bat_shutdown_htf = <0xed>; + status = "okay"; + pmu_id = <0x6>; + pmu_twi_addr = <0x34>; + pmu_twi_id = <0x1>; + pmu_irq_id = <0x40>; + pmu_chg_ic_temp = <0x0>; + pmu_battery_rdc = <0x58>; + pmu_battery_cap = <0x12c0>; + pmu_runtime_chgcur = <0x1c2>; + pmu_suspend_chgcur = <0x5dc>; + pmu_shutdown_chgcur = <0x5dc>; + pmu_init_chgvol = <0x1068>; + pmu_ac_vol = <0xfa0>; + pmu_ac_cur = <0xdac>; + pmu_usbpc_vol = <0x1130>; + pmu_usbpc_cur = <0x1f4>; + pmu_battery_warning_level1 = <0xf>; + pmu_battery_warning_level2 = <0x0>; + pmu_chgled_func = <0x0>; + pmu_chgled_type = <0x0>; + pmu_bat_para1 = <0x0>; + pmu_bat_para2 = <0x0>; + pmu_bat_para3 = <0x0>; + pmu_bat_para4 = <0x0>; + pmu_bat_para5 = <0x0>; + pmu_bat_para6 = <0x0>; + pmu_bat_para7 = <0x1>; + pmu_bat_para8 = <0x1>; + pmu_bat_para9 = <0x2>; + pmu_bat_para10 = <0x3>; + pmu_bat_para11 = <0x4>; + pmu_bat_para12 = <0xa>; + pmu_bat_para13 = <0x11>; + pmu_bat_para14 = <0x1a>; + pmu_bat_para15 = <0x29>; + pmu_bat_para16 = <0x2e>; + pmu_bat_para17 = <0x33>; + pmu_bat_para18 = <0x38>; + pmu_bat_para19 = <0x3b>; + pmu_bat_para20 = <0x41>; + pmu_bat_para21 = <0x45>; + pmu_bat_para22 = <0x4b>; + pmu_bat_para23 = <0x4f>; + pmu_bat_para24 = <0x53>; + pmu_bat_para25 = <0x59>; + pmu_bat_para26 = <0x5f>; + pmu_bat_para27 = <0x62>; + pmu_bat_para28 = <0x64>; + pmu_bat_para29 = <0x64>; + pmu_bat_para30 = <0x64>; + pmu_bat_para31 = <0x64>; + pmu_bat_para32 = <0x64>; + pmu_bat_temp_enable = <0x1>; + pmu_bat_charge_ltf = <0x8d5>; + pmu_bat_charge_htf = <0x184>; + pmu_bat_temp_para1 = <0x1d2a>; + pmu_bat_temp_para2 = <0x1180>; + pmu_bat_temp_para3 = <0xdbe>; + pmu_bat_temp_para4 = <0xae2>; + pmu_bat_temp_para5 = <0x8af>; + pmu_bat_temp_para6 = <0x6fc>; + pmu_bat_temp_para7 = <0x5a8>; + pmu_bat_temp_para8 = <0x3c9>; + pmu_bat_temp_para9 = <0x298>; + pmu_bat_temp_para10 = <0x1d2>; + pmu_bat_temp_para11 = <0x189>; + pmu_bat_temp_para12 = <0x14d>; + pmu_bat_temp_para13 = <0x11b>; + pmu_bat_temp_para14 = <0xf2>; + pmu_bat_temp_para15 = <0xb3>; + pmu_bat_temp_para16 = <0x86>; + pmu_powkey_off_time = <0x1770>; + pmu_powkey_off_func = <0x0>; + pmu_powkey_off_en = <0x1>; + pmu_powkey_long_time = <0x5dc>; + pmu_powkey_on_time = <0x3e8>; + power_start = <0x0>; + }; + + regu@0 { + compatible = "allwinner,pmu0_regu"; + regulator_count = <0x17>; + status = "okay"; + device_type = "pmu0_regu"; + regulator1 = "axp81x_dcdc1 none vcc-nand vcc-emmc vcc-sdc vcc-usb-30 vcc-io vcc-pd"; + regulator2 = "axp81x_dcdc2 none vdd-cpua"; + regulator3 = "axp81x_dcdc3 none"; + regulator4 = "axp81x_dcdc4 none"; + regulator5 = "axp81x_dcdc5 none vcc-dram"; + regulator6 = "axp81x_dcdc6 none vdd-sys"; + regulator7 = "axp81x_dcdc7 none"; + regulator8 = "axp81x_rtc none"; + regulator9 = "axp81x_aldo1 none vdd-csi-led iovdd-csi vcc-pe"; + regulator10 = "axp81x_aldo2 none vcc-pl"; + regulator11 = "axp81x_aldo3 none vcc-avcc vcc-pll"; + regulator12 = "axp81x_dldo1 none vcc-hdmi-33"; + regulator13 = "axp81x_dldo2 none vcc-mipi"; + regulator14 = "axp81x_dldo3 none avdd-csi"; + regulator15 = "axp81x_dldo4 none vcc-deviceio"; + regulator16 = "axp81x_eldo1 none vcc-cpvdd vcc-wifi-io vcc-pc vcc-pg"; + regulator17 = "axp81x_eldo2 none vcc-lcd-0"; + regulator18 = "axp81x_eldo3 none dvdd-csi-18"; + regulator19 = "axp81x_fldo1 none vcc-hsic-12"; + regulator20 = "axp81x_fldo2 none vdd-cpus"; + regulator21 = "axp81x_gpio0ldo none vcc-ctp"; + regulator22 = "axp81x_gpio1ldo none"; + regulator23 = "axp81x_dc1sw none vcc-lvds vcc-dsi-33"; + }; + + nand0@01c03000 { + compatible = "allwinner,sun50i-nand"; + device_type = "nand0"; + reg = <0x0 0x1c03000 0x0 0x1000>; + interrupts = <0x0 0x46 0x4>; + clocks = <0x4 0x80>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x83>; + nand0_regulator1 = "vcc-nand"; + nand0_regulator2 = "none"; + nand0_cache_level = <0x55aaaa55>; + nand0_flush_cache_num = <0x55aaaa55>; + nand0_capacity_level = <0x55aaaa55>; + nand0_id_number_ctl = <0x55aaaa55>; + nand0_print_level = <0x55aaaa55>; + nand0_p0 = <0x55aaaa55>; + nand0_p1 = <0x55aaaa55>; + nand0_p2 = <0x55aaaa55>; + nand0_p3 = <0x55aaaa55>; + status = "disabled"; + nand0_support_2ch = <0x0>; + pinctrl-0 = <0xab 0xac>; + }; + + thermal_sensor { + compatible = "allwinner,thermal_sensor"; + reg = <0x0 0x1c25000 0x0 0x400>; + interrupts = <0x0 0x1f 0x0>; + clocks = <0x6 0x84>; + sensor_num = <0x3>; + shut_temp = <0x78>; + status = "okay"; + + combine0 { + #thermal-sensor-cells = <0x1>; + combine_cnt = <0x3>; + combine_type = "max"; + combine_chn = <0x0 0x1 0x2>; + linux,phandle = <0x85>; + phandle = <0x85>; + }; + }; + + cpu_budget_cool { + compatible = "allwinner,budget_cooling"; + #cooling-cells = <0x2>; + status = "okay"; + state_cnt = <0xa>; + cluster_num = <0x1>; + state0 = <0x119400 0x4>; + state1 = <0x10d880 0x4>; + state2 = <0x101d00 0x4>; + state3 = <0xf6180 0x4>; + state4 = <0xea600 0x4>; + state5 = <0xdea80 0x4>; + state6 = <0xc7380 0x4>; + state7 = <0x9e340 0x4>; + state8 = <0x9e340 0x2>; + state9 = <0x9e340 0x1>; + linux,phandle = <0x87>; + phandle = <0x87>; + }; + + gpu_cooling { + compatible = "allwinner,gpu_cooling"; + reg = <0x0 0x0 0x0 0x0>; + #cooling-cells = <0x2>; + status = "okay"; + state_cnt = <0x3>; + state0 = <0x0>; + state1 = <0x168>; + state2 = <0x90>; + linux,phandle = <0x8c>; + phandle = <0x8c>; + }; + + thermal-zones { + + soc_thermal { + polling-delay-passive = <0x1f4>; + polling-delay = <0x7d0>; + thermal-sensors = <0x85 0x0>; + + trips { + + t0 { + temperature = <0x50>; + type = "passive"; + hysteresis = <0x0>; + linux,phandle = <0x86>; + phandle = <0x86>; + }; + + t1 { + temperature = <0x55>; + type = "passive"; + hysteresis = <0x0>; + linux,phandle = <0x88>; + phandle = <0x88>; + }; + + t2 { + temperature = <0x5a>; + type = "passive"; + hysteresis = <0x0>; + linux,phandle = <0x89>; + phandle = <0x89>; + }; + + t3 { + temperature = <0x5f>; + type = "passive"; + hysteresis = <0x0>; + linux,phandle = <0x8a>; + phandle = <0x8a>; + }; + + t4 { + temperature = <0x55>; + type = "passive"; + hysteresis = <0x0>; + linux,phandle = <0x8b>; + phandle = <0x8b>; + }; + + t5 { + temperature = <0x5a>; + type = "passive"; + hysteresis = <0x0>; + linux,phandle = <0x8d>; + phandle = <0x8d>; + }; + + t6 { + temperature = <0x6c>; + type = "critical"; + hysteresis = <0x0>; + }; + }; + + cooling-maps { + + bind0 { + contribution = <0x0>; + trip = <0x86>; + cooling-device = <0x87 0x1 0x1>; + }; + + bind1 { + contribution = <0x0>; + trip = <0x88>; + cooling-device = <0x87 0x2 0x2>; + }; + + bind2 { + contribution = <0x0>; + trip = <0x89>; + cooling-device = <0x87 0x3 0x6>; + }; + + bind3 { + contribution = <0x0>; + trip = <0x8a>; + cooling-device = <0x87 0x7 0x9>; + }; + + bind4 { + contribution = <0x0>; + trip = <0x8b>; + cooling-device = <0x8c 0x1 0x1>; + }; + + bind5 { + contribution = <0x0>; + trip = <0x8d>; + cooling-device = <0x8c 0x2 0x2>; + }; + }; + }; + }; + + keyboard { + compatible = "allwinner,keyboard_2000mv"; + reg = <0x0 0x1c21800 0x0 0x400>; + interrupts = <0x0 0x1e 0x0>; + status = "okay"; + key_cnt = <0x5>; + key1 = <0xf0 0x73>; + key2 = <0x1f4 0x72>; + key3 = <0x2bc 0x8b>; + key4 = <0x37a 0x1c>; + key5 = <0x7d0 0x66>; + }; + + eth@01c30000 { + compatible = "allwinner,sunxi-gmac"; + reg = <0x0 0x1c30000 0x0 0x10000 0x0 0x1c00000 0x0 0x30>; + pinctrl-names = "default"; + interrupts = <0x0 0x52 0x4>; + interrupt-names = "gmacirq"; + clocks = <0x8f>; + clock-names = "gmac"; + phy-mode = "rgmii"; + tx-delay = <0x3>; + rx-delay = <0x0>; + gmac_power1 = "axp81x_dc1sw:0"; + status = "okay"; + device_type = "gmac0"; + pinctrl-0 = <0x9e>; + gmac_power2; + gmac_power3; + }; + + product { + device_type = "product"; + version = "100"; + machine = "evb"; + }; + + platform { + device_type = "platform"; + eraseflag = <0x1>; + }; + + target { + device_type = "target"; + boot_clock = <0x3f0>; + storage_type = <0xffffffff>; + burn_key = <0x0>; + }; + + power_sply { + device_type = "power_sply"; + dcdc1_vol = <0xf4f24>; + dcdc2_vol = <0xf468c>; + dcdc6_vol = <0xf468c>; + aldo1_vol = <0xaf0>; + aldo2_vol = <0xf4948>; + aldo3_vol = <0xf4df8>; + dldo1_vol = <0xce4>; + dldo2_vol = <0xce4>; + dldo3_vol = <0xaf0>; + dldo4_vol = <0xf4f24>; + eldo1_vol = <0xf4948>; + eldo2_vol = <0x708>; + eldo3_vol = <0x708>; + fldo1_vol = <0x4b0>; + fldo2_vol = <0xf468c>; + gpio0_vol = <0xc1c>; + }; + + card_boot { + device_type = "card_boot"; + logical_start = <0xa000>; + sprite_gpio0; + }; + + pm_para { + device_type = "pm_para"; + standby_mode = <0x1>; + }; + + card0_boot_para { + device_type = "card0_boot_para"; + card_ctrl = <0x0>; + card_high_speed = <0x1>; + card_line = <0x4>; + pinctrl-0 = <0x99>; + }; + + card2_boot_para { + device_type = "card2_boot_para"; + sdc_io_1v8 = <0x1>; + card_ctrl = <0x2>; + card_high_speed = <0x1>; + card_line = <0x8>; + pinctrl-0 = <0x9a>; + sdc_ex_dly_used = <0x2>; + }; + + twi_para { + device_type = "twi_para"; + twi_port = <0x0>; + pinctrl-0 = <0x9b>; + }; + + uart_para { + device_type = "uart_para"; + uart_debug_port = <0x0>; + pinctrl-0 = <0x9c>; + }; + + jtag_para { + device_type = "jtag_para"; + jtag_enable = <0x1>; + pinctrl-0 = <0x9d>; + }; + + clock { + device_type = "clock"; + pll4 = <0x12c>; + pll6 = <0x258>; + pll8 = <0x168>; + pll9 = <0x129>; + pll10 = <0x108>; + }; + + rtp_para { + device_type = "rtp_para"; + rtp_used = <0x0>; + rtp_screen_size = <0x5>; + rtp_regidity_level = <0x5>; + rtp_press_threshold_enable = <0x0>; + rtp_press_threshold = <0x1f40>; + rtp_sensitive_level = <0xf>; + rtp_exchange_x_y_flag = <0x0>; + }; + + ctp { + device_type = "ctp"; + compatible = "allwinner,sun50i-ctp-para"; + status = "disabled"; + ctp_name = "gt911_DB"; + ctp_twi_id = <0x0>; + ctp_twi_addr = <0x40>; + ctp_screen_max_x = <0x400>; + ctp_screen_max_y = <0x258>; + ctp_revert_x_flag = <0x1>; + ctp_revert_y_flag = <0x1>; + ctp_exchange_x_y_flag = <0x0>; + ctp_int_port = <0x30 0x7 0x4 0x6 0xffffffff 0xffffffff 0xffffffff>; + ctp_wakeup = <0x30 0x7 0xb 0x1 0xffffffff 0xffffffff 0x1>; + ctp_power_ldo = "vcc-ctp"; + ctp_power_ldo_vol = <0xce4>; + ctp_power_io; + }; + + ctp_list { + device_type = "ctp_list"; + compatible = "allwinner,sun50i-ctp-list"; + status = "okay"; + gslX680new = <0x1>; + gt9xx_ts = <0x0>; + gt9xxf_ts = <0x1>; + gt9xxnew_ts = <0x0>; + gt82x = <0x1>; + zet622x = <0x1>; + aw5306_ts = <0x1>; + }; + + tkey_para { + device_type = "tkey_para"; + tkey_used = <0x0>; + tkey_twi_id; + tkey_twi_addr; + tkey_int; + }; + + motor_para { + device_type = "motor_para"; + motor_used = <0x0>; + motor_shake = <0x31 0xfffe 0x3 0x1 0xffffffff 0xffffffff 0x1>; + }; + + tvout_para { + device_type = "tvout_para"; + tvout_used; + tvout_channel_num; + tv_en; + }; + + tvin_para { + device_type = "tvin_para"; + tvin_used; + tvin_channel_num; + }; + + serial_feature { + device_type = "serial_feature"; + sn_filename = "sn.txt"; + }; + + gsensor { + device_type = "gsensor"; + compatible = "allwinner,sun50i-gsensor-para"; + status = "okay"; + gsensor_twi_id = <0x1>; + gsensor_twi_addr = <0x1d>; + gsensor_vcc_io = "vcc-deviceio"; + gsensor_vcc_io_val = <0xce4>; + gsensor_int1 = <0x30 0x7 0x5 0x6 0x1 0xffffffff 0xffffffff>; + gsensor_int2 = <0x30 0x7 0x6 0x6 0x1 0xffffffff 0xffffffff>; + }; + + gsensor_list { + device_type = "gsensor_list"; + compatible = "allwinner,sun50i-gsensor-list-para"; + gsensor_list__used = <0x1>; + lsm9ds0_acc_mag = <0x1>; + bma250 = <0x1>; + mma8452 = <0x1>; + mma7660 = <0x1>; + mma865x = <0x1>; + afa750 = <0x1>; + lis3de_acc = <0x1>; + lis3dh_acc = <0x1>; + kxtik = <0x1>; + dmard10 = <0x0>; + dmard06 = <0x1>; + mxc622x = <0x1>; + fxos8700 = <0x1>; + lsm303d = <0x0>; + sc7a30 = <0x1>; + }; + + 3g_para { + device_type = "3g_para"; + 3g_used = <0x0>; + 3g_usbc_num = <0x2>; + 3g_uart_num = <0x0>; + bb_vbat = <0x79 0xb 0x3 0x1 0xffffffff 0xffffffff 0x0>; + bb_host_wake = <0x79 0xc 0x0 0x1 0xffffffff 0xffffffff 0x0>; + bb_on = <0x79 0xc 0x1 0x1 0xffffffff 0xffffffff 0x0>; + bb_pwr_on = <0x79 0xc 0x3 0x1 0xffffffff 0xffffffff 0x0>; + bb_wake = <0x79 0xc 0x4 0x1 0xffffffff 0xffffffff 0x0>; + bb_rf_dis = <0x79 0xc 0x5 0x1 0xffffffff 0xffffffff 0x0>; + bb_rst = <0x79 0xc 0x6 0x1 0xffffffff 0xffffffff 0x0>; + 3g_int; + }; + + gyroscopesensor { + device_type = "gyroscopesensor"; + compatible = "allwinner,sun50i-gyr_sensors-para"; + status = "disabled"; + gy_twi_id = <0x2>; + gy_twi_addr = <0x6a>; + gy_int1 = <0x30 0x0 0xa 0x6 0x1 0xffffffff 0xffffffff>; + gy_int2; + }; + + gy_list { + device_type = "gy_list"; + compatible = "allwinner,sun50i-gyr_sensors-list-para"; + status = "disabled"; + lsm9ds0_gyr = <0x1>; + l3gd20_gyr = <0x0>; + bmg160_gyr = <0x1>; + }; + + lightsensor { + device_type = "lightsensor"; + compatible = "allwinner,sun50i-lsensors-para"; + status = "disabled"; + ls_twi_id = <0x2>; + ls_twi_addr = <0x23>; + ls_int = <0x30 0x0 0xc 0x6 0x1 0xffffffff 0xffffffff>; + }; + + ls_list { + device_type = "ls_list"; + compatible = "allwinner,sun50i-lsensors-list-para"; + status = "disabled"; + ltr_501als = <0x1>; + jsa1212 = <0x0>; + jsa1127 = <0x1>; + stk3x1x = <0x0>; + }; + + compasssensor { + device_type = "compasssensor"; + compatible = "allwinner,sun50i-compass-para"; + status = "disabled"; + compass_twi_id = <0x2>; + compass_twi_addr = <0xd>; + compass_int = <0x30 0x0 0xb 0x6 0x1 0xffffffff 0xffffffff>; + }; + + compass_list { + device_type = "compass_list"; + compatible = "allwinner,sun50i-compass-list-para"; + status = "disabled"; + lsm9ds0 = <0x1>; + lsm303d = <0x0>; + }; + + recovery_key { + device_type = "recovery_key"; + key_max = <0xc>; + key_min = <0xa>; + }; + + fastboot_key { + device_type = "fastboot_key"; + key_max = <0x6>; + key_min = <0x4>; + }; + }; + + aliases { + serial0 = "/soc@01c00000/uart@01c28000"; + serial1 = "/soc@01c00000/uart@01c28400"; + serial2 = "/soc@01c00000/uart@01c28800"; + serial3 = "/soc@01c00000/uart@01c28c00"; + serial4 = "/soc@01c00000/uart@01c29000"; + twi0 = "/soc@01c00000/twi@0x01c2ac00"; + twi1 = "/soc@01c00000/twi@0x01c2b000"; + twi2 = "/soc@01c00000/twi@0x01c2b400"; + spi0 = "/soc@01c00000/spi@01c68000"; + spi1 = "/soc@01c00000/spi@01c69000"; + global_timer0 = "/soc@01c00000/timer@1c20c00"; + cci0 = "/soc@01c00000/cci@0x01cb3000"; + csi_res0 = "/soc@01c00000/csi_res@0x01cb0000"; + vfe0 = "/soc@01c00000/vfe@0"; + mmc0 = "/soc@01c00000/sdmmc@01c0f000"; + mmc2 = "/soc@01c00000/sdmmc@01C11000"; + nand0 = "/soc@01c00000/nand0@01c03000"; + disp = "/soc@01c00000/disp@01000000"; + lcd0 = "/soc@01c00000/lcd0@01c0c000"; + hdmi = "/soc@01c00000/hdmi@01ee0000"; + pwm = "/soc@01c00000/pwm@01c21400"; + pwm0 = "/soc@01c00000/pwm0@01c21400"; + s_pwm = "/soc@01c00000/s_pwm@1f03800"; + spwm0 = "/soc@01c00000/spwm0@0x01f03800"; + boot_disp = "/soc@01c00000/boot_disp"; + }; + + chosen { + bootargs = "earlyprintk=sunxi-uart,0x01c28000 loglevel=8 initcall_debug=1 console=ttyS0 init=/init"; + linux,initrd-start = <0x0 0x0>; + linux,initrd-end = <0x0 0x0>; + }; + + cpus { + #address-cells = <0x2>; + #size-cells = <0x0>; + + cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x0>; + enable-method = "psci"; + cpufreq_tbl = <0x75300 0x927c0 0xafc80 0xc7380 0xdea80 0xea600 0xf6180 0x101d00 0x10d880 0x119400 0x124f80 0x148200>; + clock-latency = <0x1e8480>; + clock-frequency = <0x3c14dc00>; + cpu-idle-states = <0x90 0x91 0x92>; + }; + + cpu@1 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x1>; + enable-method = "psci"; + clock-frequency = <0x3c14dc00>; + cpu-idle-states = <0x90 0x91 0x92>; + }; + + cpu@2 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x2>; + enable-method = "psci"; + clock-frequency = <0x3c14dc00>; + cpu-idle-states = <0x90 0x91 0x92>; + }; + + cpu@3 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x3>; + enable-method = "psci"; + clock-frequency = <0x3c14dc00>; + cpu-idle-states = <0x90 0x91 0x92>; + }; + + idle-states { + entry-method = "arm,psci"; + + cpu-sleep-0 { + compatible = "arm,idle-state"; + arm,psci-suspend-param = <0x10000>; + entry-latency-us = <0x28>; + exit-latency-us = <0x64>; + min-residency-us = <0x96>; + linux,phandle = <0x90>; + phandle = <0x90>; + }; + + cluster-sleep-0 { + compatible = "arm,idle-state"; + arm,psci-suspend-param = <0x1010000>; + entry-latency-us = <0x1f4>; + exit-latency-us = <0x3e8>; + min-residency-us = <0x9c4>; + linux,phandle = <0x91>; + phandle = <0x91>; + }; + + sys-sleep-0 { + compatible = "arm,idle-state"; + arm,psci-suspend-param = <0x2010000>; + entry-latency-us = <0x3e8>; + exit-latency-us = <0x7d0>; + min-residency-us = <0x1194>; + linux,phandle = <0x92>; + phandle = <0x92>; + }; + }; + }; + + psci { + compatible = "arm,psci-0.2"; + method = "smc"; + psci_version = <0x84000000>; + cpu_suspend = <0xc4000001>; + cpu_off = <0x84000002>; + cpu_on = <0xc4000003>; + affinity_info = <0xc4000004>; + migrate = <0xc4000005>; + migrate_info_type = <0x84000006>; + migrate_info_up_cpu = <0xc4000007>; + system_off = <0x84000008>; + system_reset = <0x84000009>; + }; + + n_brom { + compatible = "allwinner,n-brom"; + reg = <0x0 0x0 0x0 0xc000>; + }; + + s_brom { + compatible = "allwinner,s-brom"; + reg = <0x0 0x0 0x0 0x10000>; + }; + + sram_a1 { + compatible = "allwinner,sram_a1"; + reg = <0x0 0x10000 0x0 0x8000>; + }; + + sram_a2 { + compatible = "allwinner,sram_a2"; + reg = <0x0 0x40000 0x0 0x14000>; + }; + + prcm { + compatible = "allwinner,prcm"; + reg = <0x0 0x1f01400 0x0 0x400>; + }; + + cpuscfg { + compatible = "allwinner,cpuscfg"; + reg = <0x0 0x1f01c00 0x0 0x400>; + }; + + ion { + compatible = "allwinner,sunxi-ion"; + + system_contig { + type = <0x1>; + }; + + cma { + type = <0x4>; + }; + + system { + type = <0x0>; + }; + }; + + dram { + compatible = "allwinner,dram"; + clocks = <0x93 0x94>; + clock-names = "pll_ddr0", "pll_ddr1"; + dram_clk = <0x2a0>; + dram_type = <0x3>; + dram_zq = <0x3b3bdd>; + dram_odt_en = <0x1>; + dram_para1 = <0x10e40400>; + dram_para2 = <0x4000000>; + dram_mr0 = <0x1c70>; + dram_mr1 = <0x40>; + dram_mr2 = <0x18>; + dram_mr3 = <0x0>; + dram_tpr0 = <0x48a192>; + dram_tpr1 = <0x1c2418d>; + dram_tpr2 = <0x76051>; + dram_tpr3 = <0x50005dc>; + dram_tpr4 = <0x0>; + dram_tpr5 = <0x0>; + dram_tpr6 = <0x0>; + dram_tpr7 = <0x2a066198>; + dram_tpr8 = <0x0>; + dram_tpr9 = <0x0>; + dram_tpr10 = <0x8808>; + dram_tpr11 = <0x40a60066>; + dram_tpr12 = <0x55550000>; + dram_tpr13 = <0x4000903>; + device_type = "dram"; + }; + + memory@40000000 { + device_type = "memory"; + reg = <0x0 0x41000000 0x0 0x3f000000>; + }; + + interrupt-controller@1c81000 { + compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; + #interrupt-cells = <0x3>; + #address-cells = <0x0>; + device_type = "gic"; + interrupt-controller; + reg = <0x0 0x1c81000 0x0 0x1000 0x0 0x1c82000 0x0 0x2000 0x0 0x1c84000 0x0 0x2000 0x0 0x1c86000 0x0 0x2000>; + interrupts = <0x1 0x9 0xf04>; + linux,phandle = <0x1>; + phandle = <0x1>; + }; + + sunxi-chipid@1c14200 { + compatible = "allwinner,sunxi-chipid"; + device_type = "chipid"; + reg = <0x0 0x1c14200 0x0 0x400>; + }; + + timer { + compatible = "arm,armv8-timer"; + interrupts = <0x1 0xd 0xff01 0x1 0xe 0xff01 0x1 0xb 0xff01 0x1 0xa 0xff01>; + clock-frequency = <0x16e3600>; + }; + + pmu { + compatible = "arm,armv8-pmuv3"; + interrupts = <0x0 0x78 0x4 0x0 0x79 0x4 0x0 0x7a 0x4 0x0 0x7b 0x4>; + }; + + dvfs_table { + compatible = "allwinner,dvfs_table"; + max_freq = <0x44aa2000>; + min_freq = <0x1c9c3800>; + lv_count = <0x8>; + lv1_freq = <0x44aa2000>; + lv1_volt = <0x514>; + lv2_freq = <0x41cdb400>; + lv2_volt = <0x4ec>; + lv3_freq = <0x3ef14800>; + lv3_volt = <0x4d8>; + lv4_freq = <0x3c14dc00>; + lv4_volt = <0x4b0>; + lv5_freq = <0x39387000>; + lv5_volt = <0x488>; + lv6_freq = <0x365c0400>; + lv6_volt = <0x460>; + lv7_freq = <0x30a32c00>; + lv7_volt = <0x438>; + lv8_freq = <0x269fb200>; + lv8_volt = <0x410>; + device_type = "dvfs_table"; + }; + + dramfreq { + compatible = "allwinner,sunxi-dramfreq"; + reg = <0x0 0x1c62000 0x0 0x1000 0x0 0x1c63000 0x0 0x1000 0x0 0x1c20000 0x0 0x800>; + clocks = <0x93 0x94 0x95>; + status = "okay"; + }; + + uboot { + }; + + gpu@0x01c40000 { + compatible = "arm,mali-400", "arm,mali-utgard"; + reg = <0x0 0x1c40000 0x0 0x10000>; + interrupts = <0x0 0x61 0x4 0x0 0x62 0x4 0x0 0x63 0x4 0x0 0x64 0x4 0x0 0x66 0x4 0x0 0x67 0x4>; + interrupt-names = "IRQGP", "IRQGPMMU", "IRQPP0", "IRQPPMMU0", "IRQPP1", "IRQPPMMU1"; + clocks = <0x96 0x97>; + device_type = "gpu_mali400_0"; + normal_freq = <0x198>; + scene_ctrl_status = <0x0>; + temp_ctrl_status = <0x1>; + }; + + wlan { + compatible = "allwinner,sunxi-wlan"; + wlan_io_regulator = "vcc-wifi-io"; + wlan_busnum = <0x1>; + status = "okay"; + device_type = "wlan"; + clocks; + wlan_power; + wlan_regon = <0x79 0xb 0x2 0x1 0xffffffff 0xffffffff 0x0>; + wlan_hostwake = <0x79 0xb 0x3 0x6 0xffffffff 0xffffffff 0x0>; + efuse_map_path = "wifi_efuse_8189e_for_MB1019Q5.map"; + }; + + bt { + compatible = "allwinner,sunxi-bt"; + bt_io_regulator = "vcc-wifi-io"; + status = "okay"; + device_type = "bt"; + clocks; + bt_power; + bt_rst_n = <0x79 0xb 0x4 0x1 0xffffffff 0xffffffff 0x0>; + }; + + btlpm { + compatible = "allwinner,sunxi-btlpm"; + uart_index = <0x1>; + status = "okay"; + device_type = "btlpm"; + bt_wake = <0x79 0xb 0x6 0x1 0xffffffff 0xffffffff 0x1>; + bt_hostwake = <0x79 0xb 0x5 0x6 0xffffffff 0xffffffff 0x0>; + }; +}; diff --git a/packages/blobs/sunxi/a64/pine64so.dts b/packages/blobs/sunxi/a64/pine64so.dts new file mode 100644 index 0000000000..c37e418fe7 --- /dev/null +++ b/packages/blobs/sunxi/a64/pine64so.dts @@ -0,0 +1,3437 @@ +/dts-v1/; + +/memreserve/ 0x0000000045000000 0x0000000000200000; +/memreserve/ 0x0000000041010000 0x0000000000010000; +/memreserve/ 0x0000000041020000 0x0000000000000800; +/memreserve/ 0x0000000040100000 0x0000000000004000; +/memreserve/ 0x0000000040104000 0x0000000000001000; +/memreserve/ 0x0000000040105000 0x0000000000001000; +/ { + model = "SOPine"; + dt-name = "sun50iw1p1-pine64so"; + compatible = "pine64,pine64-plus,sopine"; + interrupt-parent = <0x1>; + #address-cells = <0x2>; + #size-cells = <0x2>; + + clocks { + compatible = "allwinner,sunxi-clk-init"; + device_type = "clocks"; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + reg = <0x0 0x1c20000 0x0 0x320 0x0 0x1f01400 0x0 0xb0 0x0 0x1f00060 0x0 0x4>; + + losc { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-clock"; + clock-frequency = <0x8000>; + clock-output-names = "losc"; + linux,phandle = <0xc>; + phandle = <0xc>; + }; + + iosc { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-clock"; + clock-frequency = <0xf42400>; + clock-output-names = "iosc"; + linux,phandle = <0xd>; + phandle = <0xd>; + }; + + hosc { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-clock"; + clock-frequency = <0x16e3600>; + clock-output-names = "hosc"; + linux,phandle = <0x6>; + phandle = <0x6>; + }; + + pll_cpu { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_cpu"; + }; + + pll_audio { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + assigned-clock-rates = <0x1770000>; + clock-output-names = "pll_audio"; + linux,phandle = <0x2>; + phandle = <0x2>; + }; + + pll_video0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + assigned-clock-rates = <0x11b3dc40>; + clock-output-names = "pll_video0"; + linux,phandle = <0x3>; + phandle = <0x3>; + }; + + pll_ve { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_ve"; + linux,phandle = <0x16>; + phandle = <0x16>; + }; + + pll_ddr0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_ddr0"; + linux,phandle = <0x93>; + phandle = <0x93>; + }; + + pll_periph0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_periph0"; + linux,phandle = <0x4>; + phandle = <0x4>; + }; + + pll_periph1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_periph1"; + linux,phandle = <0x5>; + phandle = <0x5>; + }; + + pll_video1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + assigned-clock-rates = <0x11b3dc40>; + clock-output-names = "pll_video1"; + }; + + pll_gpu { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_gpu"; + linux,phandle = <0x96>; + phandle = <0x96>; + }; + + pll_mipi { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_mipi"; + linux,phandle = <0x8>; + phandle = <0x8>; + }; + + pll_hsic { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_hsic"; + linux,phandle = <0x3a>; + phandle = <0x3a>; + }; + + pll_de { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + assigned-clock-rates = <0x11b3dc40>; + clock-output-names = "pll_de"; + linux,phandle = <0x7>; + phandle = <0x7>; + }; + + pll_ddr1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_ddr1"; + linux,phandle = <0x94>; + phandle = <0x94>; + }; + + pll_audiox8 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x2>; + clock-mult = <0x8>; + clock-div = <0x1>; + clock-output-names = "pll_audiox8"; + }; + + pll_audiox4 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x2>; + clock-mult = <0x8>; + clock-div = <0x2>; + clock-output-names = "pll_audiox4"; + linux,phandle = <0x3c>; + phandle = <0x3c>; + }; + + pll_audiox2 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x2>; + clock-mult = <0x8>; + clock-div = <0x4>; + clock-output-names = "pll_audiox2"; + }; + + pll_video0x2 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x3>; + clock-mult = <0x2>; + clock-div = <0x1>; + clock-output-names = "pll_video0x2"; + }; + + pll_periph0x2 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x4>; + clock-mult = <0x2>; + clock-div = <0x1>; + clock-output-names = "pll_periph0x2"; + linux,phandle = <0x7b>; + phandle = <0x7b>; + }; + + pll_periph1x2 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x5>; + clock-mult = <0x2>; + clock-div = <0x1>; + clock-output-names = "pll_periph1x2"; + linux,phandle = <0x5a>; + phandle = <0x5a>; + }; + + pll_periph0d2 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x4>; + clock-mult = <0x1>; + clock-div = <0x2>; + clock-output-names = "pll_periph0d2"; + }; + + hoscd2 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x6>; + clock-mult = <0x1>; + clock-div = <0x2>; + clock-output-names = "hoscd2"; + }; + + cpu { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "cpu"; + }; + + cpuapb { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "cpuapb"; + }; + + axi { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "axi"; + }; + + pll_periphahb0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "pll_periphahb0"; + }; + + ahb1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "ahb1"; + linux,phandle = <0x95>; + phandle = <0x95>; + }; + + apb1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "apb1"; + }; + + apb2 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "apb2"; + linux,phandle = <0x7e>; + phandle = <0x7e>; + }; + + ahb2 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "ahb2"; + }; + + ths { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "ths"; + linux,phandle = <0x84>; + phandle = <0x84>; + }; + + nand { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "nand"; + linux,phandle = <0x80>; + phandle = <0x80>; + }; + + sdmmc0_mod { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc0_mod"; + linux,phandle = <0x60>; + phandle = <0x60>; + }; + + sdmmc0_bus { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc0_bus"; + linux,phandle = <0x61>; + phandle = <0x61>; + }; + + sdmmc0_rst { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc0_rst"; + linux,phandle = <0x62>; + phandle = <0x62>; + }; + + sdmmc1_mod { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc1_mod"; + linux,phandle = <0x65>; + phandle = <0x65>; + }; + + sdmmc1_bus { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc1_bus"; + linux,phandle = <0x66>; + phandle = <0x66>; + }; + + sdmmc1_rst { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc1_rst"; + linux,phandle = <0x67>; + phandle = <0x67>; + }; + + sdmmc2_mod { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc2_mod"; + linux,phandle = <0x5b>; + phandle = <0x5b>; + }; + + sdmmc2_bus { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc2_bus"; + linux,phandle = <0x5c>; + phandle = <0x5c>; + }; + + sdmmc2_rst { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc2_rst"; + linux,phandle = <0x5d>; + phandle = <0x5d>; + }; + + ts { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "ts"; + }; + + ce { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "ce"; + linux,phandle = <0x7a>; + phandle = <0x7a>; + }; + + spi0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "spi0"; + linux,phandle = <0x52>; + phandle = <0x52>; + }; + + spi1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "spi1"; + linux,phandle = <0x56>; + phandle = <0x56>; + }; + + i2s0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "i2s0"; + linux,phandle = <0x42>; + phandle = <0x42>; + }; + + i2s1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "i2s1"; + linux,phandle = <0x47>; + phandle = <0x47>; + }; + + i2s2 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "i2s2"; + linux,phandle = <0x48>; + phandle = <0x48>; + }; + + spdif { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "spdif"; + linux,phandle = <0x49>; + phandle = <0x49>; + }; + + usbphy0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbphy0"; + linux,phandle = <0x32>; + phandle = <0x32>; + }; + + usbphy1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbphy1"; + linux,phandle = <0x36>; + phandle = <0x36>; + }; + + usbhsic { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbhsic"; + linux,phandle = <0x38>; + phandle = <0x38>; + }; + + usbhsic12m { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbhsic12m"; + linux,phandle = <0x39>; + phandle = <0x39>; + }; + + usbohci1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbohci1"; + linux,phandle = <0x3b>; + phandle = <0x3b>; + }; + + usbohci0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbohci0"; + linux,phandle = <0x35>; + phandle = <0x35>; + }; + + de { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + assigned-clock-parents = <0x7>; + assigned-clock-rates = <0x11b3dc40>; + clock-output-names = "de"; + linux,phandle = <0x6a>; + phandle = <0x6a>; + }; + + tcon0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + assigned-clock-parents = <0x8>; + clock-output-names = "tcon0"; + linux,phandle = <0x6b>; + phandle = <0x6b>; + }; + + tcon1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + assigned-clock-parents = <0x3>; + clock-output-names = "tcon1"; + linux,phandle = <0x6e>; + phandle = <0x6e>; + }; + + deinterlace { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "deinterlace"; + linux,phandle = <0x7c>; + phandle = <0x7c>; + }; + + csi_s { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "csi_s"; + linux,phandle = <0x73>; + phandle = <0x73>; + }; + + csi_m { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "csi_m"; + linux,phandle = <0x74>; + phandle = <0x74>; + }; + + csi_misc { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "csi_misc"; + linux,phandle = <0x75>; + phandle = <0x75>; + }; + + ve { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "ve"; + linux,phandle = <0x17>; + phandle = <0x17>; + }; + + adda { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "adda"; + linux,phandle = <0x41>; + phandle = <0x41>; + }; + + addax4 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "addax4"; + }; + + avs { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "avs"; + }; + + hdmi { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + assigned-clock-parents = <0x3>; + clock-output-names = "hdmi"; + linux,phandle = <0x6f>; + phandle = <0x6f>; + }; + + hdmi_slow { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "hdmi_slow"; + linux,phandle = <0x70>; + phandle = <0x70>; + }; + + mbus { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "mbus"; + }; + + mipidsi { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "mipidsi"; + linux,phandle = <0x6d>; + phandle = <0x6d>; + }; + + gpu { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "gpu"; + linux,phandle = <0x97>; + phandle = <0x97>; + }; + + usbehci_16 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbohci_16"; + }; + + usbehci1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbehci1"; + linux,phandle = <0x37>; + phandle = <0x37>; + }; + + usbehci0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbehci0"; + linux,phandle = <0x34>; + phandle = <0x34>; + }; + + usbotg { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbotg"; + linux,phandle = <0x33>; + phandle = <0x33>; + }; + + gmac { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "gmac"; + linux,phandle = <0x8f>; + phandle = <0x8f>; + }; + + sdram { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdram"; + }; + + dma { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "dma"; + linux,phandle = <0xb>; + phandle = <0xb>; + }; + + hwspinlock_rst { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "hwspinlock_rst"; + linux,phandle = <0xf>; + phandle = <0xf>; + }; + + hwspinlock_bus { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "hwspinlock_bus"; + linux,phandle = <0x10>; + phandle = <0x10>; + }; + + msgbox { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "msgbox"; + linux,phandle = <0xe>; + phandle = <0xe>; + }; + + lvds { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "lvds"; + linux,phandle = <0x6c>; + phandle = <0x6c>; + }; + + uart0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "uart0"; + linux,phandle = <0x18>; + phandle = <0x18>; + }; + + uart1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "uart1"; + linux,phandle = <0x1b>; + phandle = <0x1b>; + }; + + uart2 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "uart2"; + linux,phandle = <0x1e>; + phandle = <0x1e>; + }; + + uart3 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "uart3"; + linux,phandle = <0x21>; + phandle = <0x21>; + }; + + uart4 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "uart4"; + linux,phandle = <0x24>; + phandle = <0x24>; + }; + + scr { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "scr"; + linux,phandle = <0x7d>; + phandle = <0x7d>; + }; + + twi0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "twi0"; + linux,phandle = <0x27>; + phandle = <0x27>; + }; + + twi1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "twi1"; + linux,phandle = <0x2a>; + phandle = <0x2a>; + }; + + twi2 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "twi2"; + linux,phandle = <0x2d>; + phandle = <0x2d>; + }; + + twi3 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "twi3"; + }; + + pio { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "pio"; + linux,phandle = <0xa>; + phandle = <0xa>; + }; + + cpurcir { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "cpurcir"; + linux,phandle = <0x12>; + phandle = <0x12>; + }; + + cpurpio { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "cpurpio"; + linux,phandle = <0x9>; + phandle = <0x9>; + }; + + cpurpll_peri0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "cpurpll_peri0"; + }; + + cpurcpus { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "cpurcpus"; + }; + + cpurahbs { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "cpurahbs"; + }; + + cpurapbs { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "cpurapbs"; + }; + + losc_out { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "losc_out"; + linux,phandle = <0x98>; + phandle = <0x98>; + }; + }; + + soc@01c00000 { + compatible = "simple-bus"; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + device_type = "soc"; + + pinctrl@01f02c00 { + compatible = "allwinner,sun50i-r-pinctrl"; + reg = <0x0 0x1f02c00 0x0 0x400>; + interrupts = <0x0 0x2d 0x4>; + clocks = <0x9>; + device_type = "r_pio"; + gpio-controller; + interrupt-controller; + #interrupt-cells = <0x2>; + #size-cells = <0x0>; + #gpio-cells = <0x6>; + linux,phandle = <0x79>; + phandle = <0x79>; + + s_cir0@0 { + allwinner,pins = "PL11"; + allwinner,function = "s_cir0"; + allwinner,muxsel = <0x2>; + allwinner,drive = <0x2>; + allwinner,pull = <0x1>; + linux,phandle = <0x11>; + phandle = <0x11>; + }; + + spwm0@0 { + linux,phandle = <0xaf>; + phandle = <0xaf>; + allwinner,pins = "PL10"; + allwinner,function = "spwm0"; + allwinner,pname = "pwm_positive"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x0>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + spwm0@1 { + linux,phandle = <0xb0>; + phandle = <0xb0>; + allwinner,pins = "PL10"; + allwinner,function = "spwm0"; + allwinner,pname = "pwm_positive"; + allwinner,muxsel = <0x7>; + allwinner,pull = <0x0>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + s_uart0@0 { + linux,phandle = <0xb6>; + phandle = <0xb6>; + allwinner,pins = "PL2", "PL3"; + allwinner,function = "s_uart0"; + allwinner,pname = "s_uart0_tx", "s_uart0_rx"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + s_rsb0@0 { + linux,phandle = <0xb7>; + phandle = <0xb7>; + allwinner,pins = "PL0", "PL1"; + allwinner,function = "s_rsb0"; + allwinner,pname = "s_rsb0_sck", "s_rsb0_sda"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0x2>; + allwinner,data = <0xffffffff>; + }; + + s_jtag0@0 { + linux,phandle = <0xb8>; + phandle = <0xb8>; + allwinner,pins = "PL4", "PL5", "PL6", "PL7"; + allwinner,function = "s_jtag0"; + allwinner,pname = "s_jtag0_tms", "s_jtag0_tck", "s_jtag0_tdo", "s_jtag0_tdi"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0x2>; + allwinner,data = <0xffffffff>; + }; + }; + + pinctrl@01c20800 { + compatible = "allwinner,sun50i-pinctrl"; + reg = <0x0 0x1c20800 0x0 0x400>; + interrupts = <0x0 0xb 0x4 0x0 0x11 0x4 0x0 0x15 0x4>; + device_type = "pio"; + clocks = <0xa>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <0x2>; + #size-cells = <0x0>; + #gpio-cells = <0x6>; + linux,phandle = <0x30>; + phandle = <0x30>; + + uart0@1 { + allwinner,pins = "PB8", "PB9"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x1a>; + phandle = <0x1a>; + }; + + uart1@1 { + allwinner,pins = "PG6", "PG7", "PG8", "PG9"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x1d>; + phandle = <0x1d>; + }; + + uart2@1 { + allwinner,pins = "PB0", "PB1", "PB2", "PB3"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x20>; + phandle = <0x20>; + }; + + uart3@1 { + allwinner,pins = "PH4", "PH5", "PH6", "PH7"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x23>; + phandle = <0x23>; + }; + + uart4@1 { + allwinner,pins = "PD2", "PD3", "PD4", "PD5"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x26>; + phandle = <0x26>; + }; + + twi0@1 { + allwinner,pins = "PH0", "PH1"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x29>; + phandle = <0x29>; + }; + + twi1@1 { + allwinner,pins = "PH2", "PH3"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x2c>; + phandle = <0x2c>; + }; + + twi2@1 { + allwinner,pins = "PE14", "PE15"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x2f>; + phandle = <0x2f>; + }; + + spi0@2 { + allwinner,pins = "PC3", "PC2", "PC0", "PC1"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x55>; + phandle = <0x55>; + }; + + spi1@2 { + allwinner,pins = "PD0", "PD1", "PD2", "PD3"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x59>; + phandle = <0x59>; + }; + + sdc0@1 { + allwinner,pins = "PF0", "PF1", "PF2", "PF3", "PF4", "PF5"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x64>; + phandle = <0x64>; + }; + + sdc1@1 { + allwinner,pins = "PG0", "PG1", "PG2", "PG3", "PG4", "PG5"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x69>; + phandle = <0x69>; + }; + + sdc2@1 { + allwinner,pins = "PC1", "PC5", "PC6", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x5f>; + phandle = <0x5f>; + }; + + daudio0@0 { + allwinner,pins = "PB6", "PB3", "PB4", "PB5", "PB7"; + allwinner,function = "pcm0"; + allwinner,muxsel = <0x3>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x43>; + phandle = <0x43>; + }; + + daudio0_sleep@0 { + allwinner,pins = "PB6", "PB3", "PB4", "PB5", "PB7"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x44>; + phandle = <0x44>; + }; + + daudio1@0 { + allwinner,pins = "PG10", "PG11", "PG12", "PG13"; + allwinner,function = "pcm1"; + allwinner,muxsel = <0x3>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x45>; + phandle = <0x45>; + }; + + daudio1_sleep@0 { + allwinner,pins = "PG10", "PG11", "PG12", "PG13"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x46>; + phandle = <0x46>; + }; + + aif3@0 { + allwinner,pins = "PG10", "PG11", "PG12", "PG13"; + allwinner,function = "aif3"; + allwinner,muxsel = <0x2>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x3e>; + phandle = <0x3e>; + }; + + aif2_sleep@0 { + allwinner,pins = "PB6", "PB4", "PB5", "PB7"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x3f>; + phandle = <0x3f>; + }; + + aif3_sleep@0 { + allwinner,pins = "PG10", "PG11", "PG12", "PG13"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x40>; + phandle = <0x40>; + }; + + spdif@0 { + allwinner,pins = "PH8"; + allwinner,function = "spdif0"; + allwinner,muxsel = <0x2>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x4a>; + phandle = <0x4a>; + }; + + spdif_sleep@0 { + allwinner,pins = "PH8"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x4b>; + phandle = <0x4b>; + }; + + csi0_sleep@0 { + allwinner,pins = "PE0", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13"; + allwinner,pname = "csi0_pck", "csi0_hsync", "csi0_vsync", "csi0_d0", "csi0_d1", "csi0_d2", "csi0_d3", "csi0_d4", "csi0_d5", "csi0_d6", "csi0_d7", "csi0_sck", "csi0_sda"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + allwinner,data = <0x0>; + linux,phandle = <0x77>; + phandle = <0x77>; + }; + + smartcard@0 { + allwinner,pins = "PB1", "PB4", "PB5", "PB6", "PB7"; + allwinner,function = "sim0"; + allwinner,muxsel = <0x5>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x7f>; + phandle = <0x7f>; + }; + + nand0@2 { + allwinner,pins = "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PC18"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x83>; + phandle = <0x83>; + }; + + card0_boot_para@0 { + linux,phandle = <0x99>; + phandle = <0x99>; + allwinner,pins = "PF0", "PF1", "PF2", "PF3", "PF4", "PF5"; + allwinner,function = "card0_boot_para"; + allwinner,pname = "sdc_d1", "sdc_d0", "sdc_clk", "sdc_cmd", "sdc_d3", "sdc_d2"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0x2>; + allwinner,data = <0xffffffff>; + }; + + card2_boot_para@0 { + linux,phandle = <0x9a>; + phandle = <0x9a>; + allwinner,pins = "PC1", "PC5", "PC6", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16"; + allwinner,function = "card2_boot_para"; + allwinner,pname = "sdc_ds", "sdc_clk", "sdc_cmd", "sdc_d0", "sdc_d1", "sdc_d2", "sdc_d3", "sdc_d4", "sdc_d5", "sdc_d6", "sdc_d7", "sdc_emmc_rst"; + allwinner,muxsel = <0x3>; + allwinner,pull = <0x1>; + allwinner,drive = <0x3>; + allwinner,data = <0xffffffff>; + }; + + twi_para@0 { + linux,phandle = <0x9b>; + phandle = <0x9b>; + allwinner,pins = "PH0", "PH1"; + allwinner,function = "twi_para"; + allwinner,pname = "twi_scl", "twi_sda"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + uart_para@0 { + linux,phandle = <0x9c>; + phandle = <0x9c>; + allwinner,pins = "PB8", "PB9"; + allwinner,function = "uart_para"; + allwinner,pname = "uart_debug_tx", "uart_debug_rx"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + jtag_para@0 { + linux,phandle = <0x9d>; + phandle = <0x9d>; + allwinner,pins = "PB0", "PB1", "PB2", "PB3"; + allwinner,function = "jtag_para"; + allwinner,pname = "jtag_ms", "jtag_ck", "jtag_do", "jtag_di"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + gmac0@0 { + linux,phandle = <0x9e>; + phandle = <0x9e>; + allwinner,pins = "PD18", "PD17", "PD16", "PD15", "PD20", "PD19", "PD11", "PD10", "PD9", "PD8", "PD13", "PD12", "PD21", "PD22", "PD23"; + allwinner,function = "gmac0"; + allwinner,pname = "gmac_txd0", "gmac_txd1", "gmac_txd2", "gmac_txd3", "gmac_txen", "gmac_gtxclk", "gmac_rxd0", "gmac_rxd1", "gmac_rxd2", "gmac_rxd3", "gmac_rxdv", "gmac_rxclk", "gmac_clkin", "gmac_mdc", "gmac_mdio"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + twi0@0 { + linux,phandle = <0x9f>; + phandle = <0x9f>; + allwinner,pins = "PH0", "PH1"; + allwinner,function = "twi0"; + allwinner,pname = "twi0_scl", "twi0_sda"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + twi1@0 { + linux,phandle = <0xa0>; + phandle = <0xa0>; + allwinner,pins = "PH2", "PH3"; + allwinner,function = "twi1"; + allwinner,pname = "twi1_scl", "twi1_sda"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + twi2@0 { + linux,phandle = <0xa1>; + phandle = <0xa1>; + allwinner,pins = "PE14", "PE15"; + allwinner,function = "twi2"; + allwinner,pname = "twi2_scl", "twi2_sda"; + allwinner,muxsel = <0x3>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + uart0@0 { + linux,phandle = <0xa2>; + phandle = <0xa2>; + allwinner,pins = "PB8", "PB9"; + allwinner,function = "uart0"; + allwinner,pname = "uart0_tx", "uart0_rx"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + uart1@0 { + linux,phandle = <0xa3>; + phandle = <0xa3>; + allwinner,pins = "PG6", "PG7", "PG8", "PG9"; + allwinner,function = "uart1"; + allwinner,pname = "uart1_tx", "uart1_rx", "uart1_rts", "uart1_cts"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + uart2@0 { + linux,phandle = <0xa4>; + phandle = <0xa4>; + allwinner,pins = "PB0", "PB1", "PB2", "PB3"; + allwinner,function = "uart2"; + allwinner,pname = "uart2_tx", "uart2_rx", "uart2_rts", "uart2_cts"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + uart3@0 { + linux,phandle = <0xa5>; + phandle = <0xa5>; + allwinner,pins = "PD0", "PD1"; + allwinner,function = "uart3"; + allwinner,pname = "uart3_tx", "uart3_rx"; + allwinner,muxsel = <0x3>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + uart4@0 { + linux,phandle = <0xa6>; + phandle = <0xa6>; + allwinner,pins = "PD2", "PD3", "PD4", "PD5"; + allwinner,function = "uart4"; + allwinner,pname = "uart4_tx", "uart4_rx", "uart4_rts", "uart4_cts"; + allwinner,muxsel = <0x3>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + spi0@0 { + linux,phandle = <0xa7>; + phandle = <0xa7>; + allwinner,pins = "PC3"; + allwinner,function = "spi0"; + allwinner,pname = "spi0_cs0"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + spi0@1 { + linux,phandle = <0xa8>; + phandle = <0xa8>; + allwinner,pins = "PC2", "PC0", "PC1"; + allwinner,function = "spi0"; + allwinner,pname = "spi0_sclk", "spi0_mosi", "spi0_miso"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + spi1@0 { + linux,phandle = <0xa9>; + phandle = <0xa9>; + allwinner,pins = "PD0"; + allwinner,function = "spi1"; + allwinner,pname = "spi1_cs0"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + spi1@1 { + linux,phandle = <0xaa>; + phandle = <0xaa>; + allwinner,pins = "PD1", "PD2", "PD3"; + allwinner,function = "spi1"; + allwinner,pname = "spi1_sclk", "spi1_mosi", "spi1_miso"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + nand0@0 { + linux,phandle = <0xab>; + phandle = <0xab>; + allwinner,pins = "PC0", "PC1", "PC2", "PC5", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16"; + allwinner,function = "nand0"; + allwinner,pname = "nand0_we", "nand0_ale", "nand0_cle", "nand0_nre", "nand0_d0", "nand0_d1", "nand0_d2", "nand0_d3", "nand0_d4", "nand0_d5", "nand0_d6", "nand0_d7", "nand0_ndqs"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x0>; + allwinner,drive = <0x1>; + allwinner,data = <0xffffffff>; + }; + + nand0@1 { + linux,phandle = <0xac>; + phandle = <0xac>; + allwinner,pins = "PC3", "PC4", "PC6", "PC7", "PC17", "PC18"; + allwinner,function = "nand0"; + allwinner,pname = "nand0_ce1", "nand0_ce0", "nand0_rb0", "nand0_rb1", "nand0_ce2", "nand0_ce3"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0x1>; + allwinner,data = <0xffffffff>; + }; + + pwm0@0 { + linux,phandle = <0xad>; + phandle = <0xad>; + allwinner,pins = "PD22"; + allwinner,function = "pwm0"; + allwinner,pname = "pwm_positive"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x0>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + pwm0@1 { + linux,phandle = <0xae>; + phandle = <0xae>; + allwinner,pins = "PD22"; + allwinner,function = "pwm0"; + allwinner,pname = "pwm_positive"; + allwinner,muxsel = <0x7>; + allwinner,pull = <0x0>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + csi0@0 { + linux,phandle = <0xb1>; + phandle = <0xb1>; + allwinner,pins = "PE0", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13"; + allwinner,function = "csi0"; + allwinner,pname = "csi0_pck", "csi0_hsync", "csi0_vsync", "csi0_d0", "csi0_d1", "csi0_d2", "csi0_d3", "csi0_d4", "csi0_d5", "csi0_d6", "csi0_d7", "csi0_sck", "csi0_sda"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + sdc0@0 { + linux,phandle = <0xb2>; + phandle = <0xb2>; + allwinner,pins = "PF0", "PF1", "PF2", "PF3", "PF4", "PF5"; + allwinner,function = "sdc0"; + allwinner,pname = "sdc0_d1", "sdc0_d0", "sdc0_clk", "sdc0_cmd", "sdc0_d3", "sdc0_d2"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0x2>; + allwinner,data = <0xffffffff>; + }; + + sdc1@0 { + linux,phandle = <0xb3>; + phandle = <0xb3>; + allwinner,pins = "PG0", "PG1", "PG2", "PG3", "PG4", "PG5"; + allwinner,function = "sdc1"; + allwinner,pname = "sdc1_clk", "sdc1_cmd", "sdc1_d0", "sdc1_d1", "sdc1_d2", "sdc1_d3"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0x3>; + allwinner,data = <0xffffffff>; + }; + + sdc2@0 { + linux,phandle = <0xb4>; + phandle = <0xb4>; + allwinner,pins = "PC1", "PC5", "PC6", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16"; + allwinner,function = "sdc2"; + allwinner,pname = "sdc2_ds", "sdc2_clk", "sdc2_cmd", "sdc2_d0", "sdc2_d1", "sdc2_d2", "sdc2_d3", "sdc2_d4", "sdc2_d5", "sdc2_d6", "sdc2_d7", "sdc2_emmc_rst"; + allwinner,muxsel = <0x3>; + allwinner,pull = <0x1>; + allwinner,drive = <0x3>; + allwinner,data = <0xffffffff>; + }; + + codec@0 { + linux,phandle = <0xb5>; + phandle = <0xb5>; + allwinner,pins = "PH7"; + allwinner,function = "codec"; + allwinner,pname = "gpio-spk"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + Vdevice@0 { + linux,phandle = <0xb9>; + phandle = <0xb9>; + allwinner,pins = "PB1", "PB2"; + allwinner,function = "Vdevice"; + allwinner,pname = "Vdevice_0", "Vdevice_1"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0x1>; + allwinner,drive = <0x2>; + allwinner,data = <0xffffffff>; + }; + + w1_pin@0 { + linux,phandle = <0xba>; + phandle = <0xba>; + allwinner,pins = "PC8"; + allwinner,function = "gpio_in"; + allwinner,pname = "w1"; + allwinner,muxsel = <0x0>; + allwinner,pull = <0x1>; + allwinner,drive = <0x0>; + allwinner,data = <0xffffffff>; + }; + }; + + pinctrl@0 { + compatible = "allwinner,axp-pinctrl"; + gpio-controller; + #size-cells = <0x0>; + #gpio-cells = <0x6>; + device_type = "axp_pio"; + linux,phandle = <0x31>; + phandle = <0x31>; + }; + + dma-controller@01c02000 { + compatible = "allwinner,sun50i-dma"; + reg = <0x0 0x1c02000 0x0 0x1000>; + interrupts = <0x0 0x32 0x4>; + clocks = <0xb>; + #dma-cells = <0x1>; + }; + + mbus-controller@01c62000 { + compatible = "allwinner,sun50i-mbus"; + reg = <0x0 0x1c62000 0x0 0x110>; + #mbus-cells = <0x1>; + }; + + arisc { + compatible = "allwinner,sunxi-arisc"; + #address-cells = <0x2>; + #size-cells = <0x2>; + clocks = <0xc 0xd 0x6 0x4>; + clock-names = "losc", "iosc", "hosc", "pll_periph0"; + powchk_used = <0x0>; + power_reg = <0x2309621>; + system_power = <0x32>; + }; + + arisc_space { + compatible = "allwinner,arisc_space"; + space1 = <0x40000 0x0 0x14000>; + space2 = <0x40100000 0x18000 0x4000>; + space3 = <0x40104000 0x0 0x1000>; + space4 = <0x40105000 0x0 0x1000>; + }; + + standby_space { + compatible = "allwinner,standby_space"; + space1 = <0x41020000 0x0 0x800>; + }; + + msgbox@1c17000 { + compatible = "allwinner,msgbox"; + clocks = <0xe>; + clock-names = "clk_msgbox"; + reg = <0x0 0x1c17000 0x0 0x1000>; + interrupts = <0x0 0x31 0x1>; + status = "okay"; + }; + + hwspinlock@1c18000 { + compatible = "allwinner,sunxi-hwspinlock"; + clocks = <0xf 0x10>; + clock-names = "clk_hwspinlock_rst", "clk_hwspinlock_bus"; + reg = <0x0 0x1c18000 0x0 0x1000>; + status = "okay"; + num-locks = <0x8>; + }; + + s_cir@1f02000 { + compatible = "allwinner,s_cir"; + reg = <0x0 0x1f02000 0x0 0x400>; + interrupts = <0x0 0x25 0x4>; + pinctrl-names = "default"; + pinctrl-0 = <0x11>; + clocks = <0x6 0x12>; + supply = "vcc-pl"; + ir_power_key_code = <0x4d>; + ir_addr_code = <0x4040>; + status = "okay"; + device_type = "s_cir0"; + }; + + s_uart@1f02800 { + compatible = "allwinner,s_uart"; + reg = <0x0 0x1f02800 0x0 0x400>; + interrupts = <0x0 0x26 0x4>; + pinctrl-names = "default"; + status = "okay"; + device_type = "s_uart0"; + pinctrl-0 = <0xb6>; + }; + + s_rsb@1f03400 { + compatible = "allwinner,s_rsb"; + reg = <0x0 0x1f03400 0x0 0x400>; + interrupts = <0x0 0x27 0x4>; + pinctrl-names = "default"; + status = "okay"; + device_type = "s_rsb0"; + pinctrl-0 = <0xb7>; + }; + + s_jtag0 { + compatible = "allwinner,s_jtag"; + pinctrl-names = "default"; + status = "disabled"; + device_type = "s_jtag0"; + pinctrl-0 = <0xb8>; + }; + + timer@1c20c00 { + compatible = "allwinner,sunxi-timer"; + device_type = "timer"; + reg = <0x0 0x1c20c00 0x0 0x90>; + interrupts = <0x0 0x12 0x1>; + clock-frequency = <0x16e3600>; + timer-prescale = <0x10>; + }; + + rtc@01f00000 { + compatible = "allwinner,sun50i-rtc"; + device_type = "rtc"; + reg = <0x0 0x1f00000 0x0 0x218>; + interrupts = <0x0 0x28 0x4>; + gpr_offset = <0x100>; + gpr_len = <0x4>; + }; + + ve@01c0e000 { + compatible = "allwinner,sunxi-cedar-ve"; + reg = <0x0 0x1c0e000 0x0 0x1000 0x0 0x1c00000 0x0 0x10 0x0 0x1c20000 0x0 0x800>; + interrupts = <0x0 0x3a 0x4>; + clocks = <0x16 0x17>; + }; + + uart@01c28000 { + compatible = "allwinner,sun50i-uart"; + device_type = "uart0"; + reg = <0x0 0x1c28000 0x0 0x400>; + interrupts = <0x0 0x0 0x4>; + clocks = <0x18>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x1a>; + uart0_port = <0x0>; + uart0_type = <0x2>; + status = "okay"; + pinctrl-0 = <0xa2>; + }; + + uart@01c28400 { + compatible = "allwinner,sun50i-uart"; + device_type = "uart1"; + reg = <0x0 0x1c28400 0x0 0x400>; + interrupts = <0x0 0x1 0x4>; + clocks = <0x1b>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x1d>; + uart1_port = <0x1>; + uart1_type = <0x4>; + status = "okay"; + pinctrl-0 = <0xa3>; + }; + + uart@01c28800 { + compatible = "allwinner,sun50i-uart"; + device_type = "uart2"; + reg = <0x0 0x1c28800 0x0 0x400>; + interrupts = <0x0 0x2 0x4>; + clocks = <0x1e>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x20>; + uart2_port = <0x2>; + uart2_type = <0x4>; + status = "okay"; + pinctrl-0 = <0xa4>; + }; + + uart@01c28c00 { + compatible = "allwinner,sun50i-uart"; + device_type = "uart3"; + reg = <0x0 0x1c28c00 0x0 0x400>; + interrupts = <0x0 0x3 0x4>; + clocks = <0x21>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x23>; + uart3_port = <0x3>; + uart3_type = <0x4>; + status = "okay"; + pinctrl-0 = <0xa5>; + }; + + uart@01c29000 { + compatible = "allwinner,sun50i-uart"; + device_type = "uart4"; + reg = <0x0 0x1c29000 0x0 0x400>; + interrupts = <0x0 0x4 0x4>; + clocks = <0x24>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x26>; + uart4_port = <0x4>; + uart4_type = <0x4>; + status = "okay"; + pinctrl-0 = <0xa6>; + }; + + twi@0x01c2ac00 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sun50i-twi"; + device_type = "twi0"; + reg = <0x0 0x1c2ac00 0x0 0x400>; + interrupts = <0x0 0x6 0x4>; + clocks = <0x27>; + clock-frequency = <0x61a80>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x29>; + status = "okay"; + pinctrl-0 = <0x9f>; + }; + + twi@0x01c2b000 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sun50i-twi"; + device_type = "twi1"; + reg = <0x0 0x1c2b000 0x0 0x400>; + interrupts = <0x0 0x7 0x4>; + clocks = <0x2a>; + clock-frequency = <0x30d40>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x2c>; + status = "okay"; + pinctrl-0 = <0xa0>; + }; + + twi@0x01c2b400 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sun50i-twi"; + device_type = "twi2"; + reg = <0x0 0x1c2b400 0x0 0x400>; + interrupts = <0x0 0x8 0x4>; + clocks = <0x2d>; + clock-frequency = <0x30d40>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x2f>; + status = "disabled"; + pinctrl-0 = <0xa1>; + }; + + usbc0@0 { + device_type = "usbc0"; + compatible = "allwinner,sunxi-otg-manager"; + usb_port_type = <0x1>; + usb_detect_type = <0x0>; + usb_host_init_state = <0x1>; + usb_regulator_io = "nocare"; + usb_wakeup_suspend = <0x1>; + usb_luns = <0x3>; + usb_serial_unique = <0x1>; + usb_serial_number = "20080411"; + rndis_wceis = <0x1>; + status = "okay"; + usb_id_gpio; + usb_det_vbus_gpio; + usb_drv_vbus_gpio; + }; + + udc-controller@0x01c19000 { + compatible = "allwinner,sunxi-udc"; + reg = <0x0 0x1c19000 0x0 0x1000 0x0 0x1c00000 0x0 0x100>; + interrupts = <0x0 0x47 0x4>; + clocks = <0x32 0x33>; + status = "okay"; + }; + + ehci0-controller@0x01c1a000 { + compatible = "allwinner,sunxi-ehci0"; + reg = <0x0 0x1c1a000 0x0 0xfff 0x0 0x1c00000 0x0 0x100 0x0 0x1c19000 0x0 0x1000>; + interrupts = <0x0 0x48 0x4>; + clocks = <0x32 0x34>; + hci_ctrl_no = <0x0>; + status = "okay"; + }; + + ohci0-controller@0x01c1a400 { + compatible = "allwinner,sunxi-ohci0"; + reg = <0x0 0x1c1a000 0x0 0xfff 0x0 0x1c00000 0x0 0x100 0x0 0x1c19000 0x0 0x1000>; + interrupts = <0x0 0x49 0x4>; + clocks = <0x32 0x35>; + hci_ctrl_no = <0x0>; + status = "okay"; + }; + + usbc1@0 { + device_type = "usbc1"; + usb_host_init_state = <0x1>; + usb_regulator_io = "nocare"; + usb_wakeup_suspend = <0x1>; + usb_hsic_used = <0x0>; + usb_hsic_regulator_io = "vcc-hsic-12"; + usb_hsic_ctrl = <0x0>; + usb_hsic_usb3503_flag = <0x0>; + status = "okay"; + usb_port_type = <0x1>; + usb_detect_type = <0x0>; + usb_drv_vbus_gpio; + usb_hsic_rdy_gpio; + usb_hsic_hub_connect_gpio; + usb_hsic_int_n_gpio; + usb_hsic_reset_n_gpio; + }; + + ehci1-controller@0x01c1b000 { + compatible = "allwinner,sunxi-ehci1"; + reg = <0x0 0x1c1b000 0x0 0xfff 0x0 0x1c00000 0x0 0x100 0x0 0x1c19000 0x0 0x1000>; + interrupts = <0x0 0x4a 0x4>; + clocks = <0x36 0x37 0x38 0x39 0x3a>; + hci_ctrl_no = <0x1>; + status = "okay"; + }; + + ohci1-controller@0x01c1b400 { + compatible = "allwinner,sunxi-ohci1"; + reg = <0x0 0x1c1b000 0x0 0xfff 0x0 0x1c00000 0x0 0x100 0x0 0x1c19000 0x0 0x1000>; + interrupts = <0x0 0x4b 0x4>; + clocks = <0x36 0x3b>; + hci_ctrl_no = <0x1>; + status = "okay"; + }; + + codec@0x01c22c00 { + compatible = "allwinner,sunxi-internal-codec"; + reg = <0x0 0x1c22c00 0x0 0x478 0x0 0x1f015c0 0x0 0x0>; + clocks = <0x3c>; + pinctrl-names = "aif2-default", "aif3-default", "aif2-sleep", "aif3-sleep"; + pinctrl-1 = <0x3e>; + pinctrl-2 = <0x3f>; + pinctrl-3 = <0x40>; + gpio-spk = <0x30 0x7 0x7 0x1 0x1 0x1 0x1>; + headphonevol = <0x3b>; + spkervol = <0x1a>; + earpiecevol = <0x1e>; + maingain = <0x4>; + headsetmicgain = <0x4>; + adcagc_cfg = <0x0>; + adcdrc_cfg = <0x0>; + adchpf_cfg = <0x0>; + dacdrc_cfg = <0x0>; + dachpf_cfg = <0x0>; + aif1_lrlk_div = <0x40>; + aif2_lrlk_div = <0x40>; + aif2config = <0x0>; + aif3config = <0x0>; + pa_sleep_time = <0x15e>; + dac_digital_vol = <0xa0a0>; + status = "okay"; + linux,phandle = <0x4d>; + phandle = <0x4d>; + device_type = "codec"; + pinctrl-0 = <0xb5>; + }; + + i2s0-controller@0x01c22c00 { + compatible = "allwinner,sunxi-internal-i2s"; + reg = <0x0 0x1c22c00 0x0 0x478>; + clocks = <0x2 0x41>; + status = "okay"; + linux,phandle = <0x4c>; + phandle = <0x4c>; + device_type = "i2s"; + }; + + daudio@0x01c22000 { + compatible = "allwinner,sunxi-daudio"; + reg = <0x0 0x1c22000 0x0 0x58>; + clocks = <0x2 0x42>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <0x43>; + pinctrl-1 = <0x44>; + pcm_lrck_period = <0x20>; + pcm_lrckr_period = <0x1>; + slot_width_select = <0x20>; + pcm_lsb_first = <0x0>; + tx_data_mode = <0x0>; + rx_data_mode = <0x0>; + daudio_master = <0x4>; + audio_format = <0x1>; + signal_inversion = <0x1>; + frametype = <0x0>; + tdm_config = <0x1>; + tdm_num = <0x0>; + status = "disabled"; + linux,phandle = <0x4e>; + phandle = <0x4e>; + device_type = "daudio0"; + }; + + daudio@0x01c22400 { + compatible = "allwinner,sunxi-daudio"; + reg = <0x0 0x1c22400 0x0 0x58>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <0x45>; + pinctrl-1 = <0x46>; + clocks = <0x2 0x47>; + pcm_lrck_period = <0x20>; + pcm_lrckr_period = <0x1>; + slot_width_select = <0x20>; + pcm_lsb_first = <0x0>; + tx_data_mode = <0x0>; + rx_data_mode = <0x0>; + daudio_master = <0x4>; + audio_format = <0x1>; + signal_inversion = <0x1>; + frametype = <0x0>; + tdm_config = <0x1>; + tdm_num = <0x1>; + status = "disabled"; + linux,phandle = <0x4f>; + phandle = <0x4f>; + device_type = "daudio1"; + }; + + daudio@0x01c22800 { + compatible = "allwinner,sunxi-tdmhdmi"; + reg = <0x0 0x1c22800 0x0 0x58>; + clocks = <0x2 0x48>; + status = "okay"; + linux,phandle = <0x50>; + phandle = <0x50>; + device_type = "daudio2"; + }; + + spdif-controller@0x01c21000 { + compatible = "allwinner,sunxi-spdif"; + reg = <0x0 0x1c21000 0x0 0x38>; + clocks = <0x2 0x49>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <0x4a>; + pinctrl-1 = <0x4b>; + status = "disabled"; + linux,phandle = <0x51>; + phandle = <0x51>; + device_type = "spdif"; + }; + + sound@0 { + compatible = "allwinner,sunxi-codec-machine"; + interrupts = <0x0 0x1c 0x4>; + sunxi,i2s-controller = <0x4c>; + sunxi,audio-codec = <0x4d>; + aif2fmt = <0x3>; + aif3fmt = <0x3>; + aif2master = <0x1>; + hp_detect_case = <0x1>; + status = "okay"; + device_type = "sndcodec"; + }; + + sound@1 { + compatible = "allwinner,sunxi-daudio0-machine"; + sunxi,daudio0-controller = <0x4e>; + status = "disabled"; + device_type = "snddaudio0"; + }; + + sound@2 { + compatible = "allwinner,sunxi-daudio1-machine"; + sunxi,daudio1-controller = <0x4f>; + status = "disabled"; + device_type = "snddaudio1"; + }; + + sound@3 { + compatible = "allwinner,sunxi-hdmi-machine"; + sunxi,hdmi-controller = <0x50>; + status = "okay"; + device_type = "sndhdmi"; + }; + + sound@4 { + compatible = "allwinner,sunxi-spdif-machine"; + sunxi,spdif-controller = <0x51>; + status = "disabled"; + device_type = "sndspdif"; + }; + + spi@01c68000 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sun50i-spi"; + device_type = "spi0"; + reg = <0x0 0x1c68000 0x0 0x1000>; + interrupts = <0x0 0x41 0x4>; + clocks = <0x4 0x52>; + clock-frequency = <0x5f5e100>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x55>; + spi0_cs_number = <0x1>; + spi0_cs_bitmap = <0x1>; + status = "disabled"; + pinctrl-0 = <0xa7 0xa8>; + }; + + spi@01c69000 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sun50i-spi"; + device_type = "spi1"; + reg = <0x0 0x1c69000 0x0 0x1000>; + interrupts = <0x0 0x42 0x4>; + clocks = <0x4 0x56>; + clock-frequency = <0x5f5e100>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x59>; + spi1_cs_number = <0x1>; + spi1_cs_bitmap = <0x1>; + status = "disabled"; + pinctrl-0 = <0xa9 0xaa>; + }; + + sdmmc@01C11000 { + compatible = "allwinner,sun50i-sdmmc2"; + device_type = "sdc2"; + reg = <0x0 0x1c11000 0x0 0x1000>; + interrupts = <0x0 0x3e 0x104>; + clocks = <0x6 0x5a 0x5b 0x5c 0x5d>; + clock-names = "osc24m", "pll_periph", "mmc", "ahb", "rst"; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x5f>; + bus-width = <0x8>; + max-frequency = <0x5f5e100>; + sdc_tm4_sm0_freq0 = <0x0>; + sdc_tm4_sm0_freq1 = <0x0>; + sdc_tm4_sm1_freq0 = <0x0>; + sdc_tm4_sm1_freq1 = <0x0>; + sdc_tm4_sm2_freq0 = <0x0>; + sdc_tm4_sm2_freq1 = <0x0>; + sdc_tm4_sm3_freq0 = <0x5000000>; + sdc_tm4_sm3_freq1 = <0x405>; + sdc_tm4_sm4_freq0 = <0x50000>; + sdc_tm4_sm4_freq1 = <0x408>; + status = "okay"; + pinctrl-0 = <0xb4>; + non-removable; + cd-gpios; + sunxi-power-save-mode; + sunxi-dis-signal-vol-sw; + mmc-ddr-1_8v; + mmc-hs200-1_8v; + mmc-hs400-1_8v; + vmmc = "vcc-emmc"; + vqmmc = "vcc-lpddr"; + vdmmc = "none"; + }; + + sdmmc@01c0f000 { + compatible = "allwinner,sun50i-sdmmc0"; + device_type = "sdc0"; + reg = <0x0 0x1c0f000 0x0 0x1000>; + interrupts = <0x0 0x3c 0x104>; + clocks = <0x6 0x5a 0x60 0x61 0x62>; + clock-names = "osc24m", "pll_periph", "mmc", "ahb", "rst"; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x64>; + max-frequency = <0x2faf080>; + bus-width = <0x4>; + broken-cd; + status = "okay"; + non-removable = <0x1>; + pinctrl-0 = <0xb2>; + cd-gpios = <0x30 0x5 0x6 0x0 0x1 0x2 0x0>; + sunxi-power-save-mode; + vmmc = "none"; + vqmmc = "none"; + vdmmc = "vcc-sdc"; + }; + + sdmmc@1C10000 { + compatible = "allwinner,sun50i-sdmmc1"; + device_type = "sdc1"; + reg = <0x0 0x1c10000 0x0 0x1000>; + interrupts = <0x0 0x3d 0x104>; + clocks = <0x6 0x5a 0x65 0x66 0x67>; + clock-names = "osc24m", "pll_periph", "mmc", "ahb", "rst"; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x69>; + max-frequency = <0x8f0d180>; + bus-width = <0x4>; + sunxi-dly-52M-ddr4 = <0x1 0x0 0x0 0x0 0x2>; + sunxi-dly-104M = <0x1 0x0 0x0 0x0 0x1>; + sunxi-dly-208M = <0x1 0x0 0x0 0x0 0x1>; + status = "okay"; + pinctrl-0 = <0xb3>; + sd-uhs-sdr50; + sd-uhs-ddr50; + sd-uhs-sdr104; + cap-sdio-irq; + keep-power-in-suspend; + ignore-pm-notify; + }; + + disp@01000000 { + compatible = "allwinner,sun50i-disp"; + reg = <0x0 0x1000000 0x0 0x300000 0x0 0x1c0c000 0x0 0x17fc 0x0 0x1ca0000 0x0 0x10fc>; + interrupts = <0x0 0x56 0x104 0x0 0x57 0x104 0x0 0x59 0x104>; + clocks = <0x6a 0x6b 0x6c 0x6d 0x6e>; + status = "okay"; + device_type = "disp"; + disp_init_enable = <0x1>; + disp_mode = <0x0>; + screen0_output_type = <0x3>; + screen0_output_mode = <0xa>; + screen1_output_type = <0x3>; + screen1_output_mode = <0xa>; + fb0_format = <0x0>; + fb0_width = <0x0>; + fb0_height = <0x0>; + fb1_format = <0x0>; + fb1_width = <0x0>; + fb1_height = <0x0>; + }; + + lcd0@01c0c000 { + compatible = "allwinner,sunxi-lcd0"; + pinctrl-names = "active", "sleep"; + status = "okay"; + device_type = "lcd0"; + lcd_used = <0x0>; + lcd_driver_name = "mb709_mipi"; + lcd_backlight = <0x32>; + lcd_if = <0x4>; + lcd_x = <0x400>; + lcd_y = <0x258>; + lcd_width = <0x0>; + lcd_height = <0x0>; + lcd_dclk_freq = <0x37>; + lcd_pwm_used = <0x1>; + lcd_pwm_ch = <0x10>; + lcd_pwm_freq = <0xc350>; + lcd_pwm_pol = <0x1>; + lcd_pwm_max_limit = <0xfa>; + lcd_hbp = <0x78>; + lcd_ht = <0x604>; + lcd_hspw = <0x14>; + lcd_vbp = <0x17>; + lcd_vt = <0x27b>; + lcd_vspw = <0x2>; + lcd_dsi_if = <0x2>; + lcd_dsi_lane = <0x4>; + lcd_dsi_format = <0x0>; + lcd_dsi_eotp = <0x0>; + lcd_dsi_vc = <0x0>; + lcd_dsi_te = <0x0>; + lcd_frm = <0x0>; + lcd_gamma_en = <0x0>; + lcd_bright_curve_en = <0x0>; + lcd_cmap_en = <0x0>; + lcd_bl_en = <0x30 0x7 0xa 0x1 0x0 0xffffffff 0x1>; + lcd_bl_en_power = "none"; + lcd_power = "vcc-mipi"; + lcd_fix_power = "vcc-dsi-33"; + lcd_gpio_0 = <0x30 0x3 0x18 0x1 0x0 0xffffffff 0x1>; + }; + + hdmi@01ee0000 { + compatible = "allwinner,sunxi-hdmi"; + reg = <0x0 0x1ee0000 0x0 0x20000>; + clocks = <0x6f 0x70>; + device_type = "hdmi"; + status = "okay"; + hdmi_power = "vcc-hdmi-33"; + hdmi_hdcp_enable = <0x0>; + hdmi_cts_compatibility = <0x0>; + }; + + tr@01000000 { + compatible = "allwinner,sun50i-tr"; + reg = <0x0 0x1000000 0x0 0x200bc>; + interrupts = <0x0 0x60 0x104>; + clocks = <0x6a>; + status = "okay"; + }; + + pwm@01c21400 { + compatible = "allwinner,sunxi-pwm"; + reg = <0x0 0x1c21400 0x0 0x3c>; + pwm-number = <0x1>; + pwm-base = <0x0>; + pwms = <0x71>; + }; + + pwm0@01c21400 { + compatible = "allwinner,sunxi-pwm0"; + pinctrl-names = "active", "sleep"; + reg_base = <0x1c21400>; + reg_busy_offset = <0x0>; + reg_busy_shift = <0x1c>; + reg_enable_offset = <0x0>; + reg_enable_shift = <0x4>; + reg_clk_gating_offset = <0x0>; + reg_clk_gating_shift = <0x6>; + reg_bypass_offset = <0x0>; + reg_bypass_shift = <0x9>; + reg_pulse_start_offset = <0x0>; + reg_pulse_start_shift = <0x8>; + reg_mode_offset = <0x0>; + reg_mode_shift = <0x7>; + reg_polarity_offset = <0x0>; + reg_polarity_shift = <0x5>; + reg_period_offset = <0x4>; + reg_period_shift = <0x10>; + reg_period_width = <0x10>; + reg_active_offset = <0x4>; + reg_active_shift = <0x0>; + reg_active_width = <0x10>; + reg_prescal_offset = <0x0>; + reg_prescal_shift = <0x0>; + reg_prescal_width = <0x4>; + linux,phandle = <0x71>; + phandle = <0x71>; + device_type = "pwm0"; + pwm_used = <0x0>; + pinctrl-0 = <0xad>; + pinctrl-1 = <0xae>; + }; + + s_pwm@1f03800 { + compatible = "allwinner,sunxi-s_pwm"; + reg = <0x0 0x1f03800 0x0 0x3c>; + pwm-number = <0x1>; + pwm-base = <0x10>; + pwms = <0x72>; + }; + + spwm0@0x01f03800 { + compatible = "allwinner,sunxi-pwm16"; + pinctrl-names = "active", "sleep"; + reg_base = <0x1f03800>; + reg_busy_offset = <0x0>; + reg_busy_shift = <0x1c>; + reg_enable_offset = <0x0>; + reg_enable_shift = <0x4>; + reg_clk_gating_offset = <0x0>; + reg_clk_gating_shift = <0x6>; + reg_bypass_offset = <0x0>; + reg_bypass_shift = <0x9>; + reg_pulse_start_offset = <0x0>; + reg_pulse_start_shift = <0x8>; + reg_mode_offset = <0x0>; + reg_mode_shift = <0x7>; + reg_polarity_offset = <0x0>; + reg_polarity_shift = <0x5>; + reg_period_offset = <0x4>; + reg_period_shift = <0x10>; + reg_period_width = <0x10>; + reg_active_offset = <0x4>; + reg_active_shift = <0x0>; + reg_active_width = <0x10>; + reg_prescal_offset = <0x0>; + reg_prescal_shift = <0x0>; + reg_prescal_width = <0x4>; + linux,phandle = <0x72>; + phandle = <0x72>; + device_type = "spwm0"; + s_pwm_used = <0x1>; + pinctrl-0 = <0xaf>; + pinctrl-1 = <0xb0>; + }; + + boot_disp { + compatible = "allwinner,boot_disp"; + device_type = "boot_disp"; + output_disp = <0x0>; + output_type = <0x3>; + output_mode = <0xa>; + }; + + cci@0x01cb3000 { + compatible = "allwinner,sunxi-csi_cci"; + reg = <0x0 0x1cb3000 0x0 0x1000>; + interrupts = <0x0 0x55 0x4>; + status = "okay"; + }; + + csi_res@0x01cb0000 { + compatible = "allwinner,sunxi-csi"; + reg = <0x0 0x1cb0000 0x0 0x1000>; + status = "okay"; + }; + + vfe@0 { + device_type = "csi0"; + compatible = "allwinner,sunxi-vfe"; + interrupts = <0x0 0x54 0x4>; + clocks = <0x73 0x74 0x75 0x4 0x6 0x5>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x77>; + csi0_sensor_list = <0x1>; + status = "okay"; + pinctrl-0 = <0xb1>; + csi0_mck = <0x30 0x4 0x1 0x0 0x0 0x1 0x0>; + + dev@0 { + csi0_dev0_mname = "s5k4ec"; + csi0_dev0_twi_addr = <0x5a>; + csi0_dev0_pos = "rear"; + csi0_dev0_isp_used = <0x1>; + csi0_dev0_fmt = <0x0>; + csi0_dev0_stby_mode = <0x1>; + csi0_dev0_vflip = <0x0>; + csi0_dev0_hflip = <0x0>; + csi0_dev0_iovdd = "iovdd-csi"; + csi0_dev0_iovdd_vol = <0x2ab980>; + csi0_dev0_avdd = "avdd-csi"; + csi0_dev0_avdd_vol = <0x2ab980>; + csi0_dev0_dvdd = "dvdd-csi-18"; + csi0_dev0_dvdd_vol = <0x16e360>; + csi0_dev0_flash_used = <0x0>; + csi0_dev0_flash_type = <0x2>; + csi0_dev0_flvdd = "vdd-csi-led"; + csi0_dev0_flvdd_vol = <0x325aa0>; + csi0_dev0_act_used = <0x0>; + csi0_dev0_act_name = "ad5820_act"; + csi0_dev0_act_slave = <0x18>; + status = "disabled"; + device_type = "csi0_dev0"; + csi0_dev0_afvdd; + csi0_dev0_afvdd_vol; + csi0_dev0_power_en; + csi0_dev0_reset = <0x30 0x4 0x10 0x0 0x0 0x1 0x0>; + csi0_dev0_pwdn = <0x30 0x4 0x11 0x0 0x0 0x1 0x0>; + csi0_dev0_flash_en; + csi0_dev0_flash_mode; + csi0_dev0_af_pwdn; + }; + + dev@1 { + csi0_dev1_mname = "gc2145"; + csi0_dev1_twi_addr = <0x78>; + csi0_dev1_pos = "front"; + csi0_dev1_isp_used = <0x1>; + csi0_dev1_fmt = <0x0>; + csi0_dev1_stby_mode = <0x1>; + csi0_dev1_vflip = <0x0>; + csi0_dev1_hflip = <0x0>; + csi0_dev1_iovdd = "iovdd-csi"; + csi0_dev1_iovdd_vol = <0x2ab980>; + csi0_dev1_avdd = "avdd-csi"; + csi0_dev1_avdd_vol = <0x2ab980>; + csi0_dev1_dvdd = "dvdd-csi-18"; + csi0_dev1_dvdd_vol = <0x1b7740>; + csi0_dev1_flash_used = <0x0>; + csi0_dev1_flash_type = <0x2>; + csi0_dev1_flvdd = "vdd-csi-led"; + csi0_dev1_flvdd_vol = <0x325aa0>; + csi0_dev1_act_used = <0x0>; + csi0_dev1_act_name = "ad5820_act"; + csi0_dev1_act_slave = <0x18>; + status = "disabled"; + device_type = "csi0_dev1"; + csi0_dev1_afvdd; + csi0_dev1_afvdd_vol; + csi0_dev1_power_en; + csi0_dev1_reset = <0x30 0x4 0x10 0x0 0x0 0x1 0x0>; + csi0_dev1_pwdn = <0x30 0x4 0x11 0x0 0x0 0x1 0x0>; + csi0_dev1_flash_en; + csi0_dev1_flash_mode; + csi0_dev1_af_pwdn; + }; + }; + + vdevice@0 { + compatible = "allwinner,sun50i-vdevice"; + pinctrl-names = "default"; + test-gpios = <0x79 0xb 0x0 0x1 0x2 0x3 0x4>; + status = "okay"; + device_type = "Vdevice"; + pinctrl-0 = <0xb9>; + }; + + onewire_device@0 { + compatible = "w1-gpio"; + gpios = <0x30 0x2 0x8 0x0 0x0 0x0 0x0>; + pinctrl-names = "default"; + pinctrl-0 = <0xba>; + status = "okay"; + }; + + ce@1c15000 { + compatible = "allwinner,sunxi-ce"; + reg = <0x0 0x1c15000 0x0 0x80 0x0 0x1c15800 0x0 0x80>; + interrupts = <0x0 0x5e 0xff01 0x0 0x50 0xff01>; + clock-frequency = <0x11e1a300 0xbebc200>; + clocks = <0x7a 0x7b>; + }; + + deinterlace@0x01e00000 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sunxi-deinterlace"; + reg = <0x0 0x1e00000 0x0 0x77c>; + interrupts = <0x0 0x5d 0x4>; + clocks = <0x7c 0x4>; + status = "okay"; + device_type = "di"; + }; + + smartcard@0x01c2c400 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sunxi-scr"; + reg = <0x0 0x1c2c400 0x0 0x100>; + interrupts = <0x0 0x53 0x4>; + clocks = <0x7d 0x7e>; + clock-frequency = <0x16e3600>; + pinctrl-names = "default"; + pinctrl-0 = <0x7f>; + status = "okay"; + device_type = "smc"; + smc_used; + smc_rst; + smc_vppen; + smc_vppp; + smc_det; + smc_vccen; + smc_sck; + smc_sda; + }; + + nmi@0x01f00c00 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sunxi-nmi"; + reg = <0x0 0x1f00c00 0x0 0x50>; + nmi_irq_ctrl = <0xc>; + nmi_irq_en = <0x40>; + nmi_irq_status = <0x10>; + nmi_irq_mask = <0x50>; + status = "okay"; + }; + + pmu0@0 { + compatible = "allwinner,pmu0"; + device_type = "pmu0"; + pmu_batdeten = <0x1>; + pmu_init_chgend_rate = <0x14>; + pmu_init_chg_enabled = <0x1>; + pmu_init_adc_freq = <0x320>; + pmu_init_adcts_freq = <0x320>; + pmu_init_chg_pretime = <0x46>; + pmu_init_chg_csttime = <0x2d0>; + pmu_batt_cap_correct = <0x1>; + pmu_chg_end_on_en = <0x0>; + pmu_pwroff_vol = <0xce4>; + pmu_pwron_vol = <0xa28>; + pmu_powkey_off_delay_time = <0x0>; + pmu_pwrok_time = <0x40>; + pmu_reset_shutdown_en = <0x1>; + pmu_restvol_adjust_time = <0x3c>; + pmu_ocv_cou_adjust_time = <0x3c>; + pmu_vbusen_func = <0x1>; + pmu_reset = <0x0>; + pmu_IRQ_wakeup = <0x1>; + pmu_hot_shutdowm = <0x1>; + pmu_inshort = <0x0>; + pmu_bat_shutdown_ltf = <0xc80>; + pmu_bat_shutdown_htf = <0xed>; + status = "okay"; + pmu_id = <0x6>; + pmu_twi_addr = <0x34>; + pmu_twi_id = <0x1>; + pmu_irq_id = <0x40>; + pmu_chg_ic_temp = <0x0>; + pmu_battery_rdc = <0x58>; + pmu_battery_cap = <0x12c0>; + pmu_runtime_chgcur = <0x1c2>; + pmu_suspend_chgcur = <0x5dc>; + pmu_shutdown_chgcur = <0x5dc>; + pmu_init_chgvol = <0x1068>; + pmu_ac_vol = <0xfa0>; + pmu_ac_cur = <0xdac>; + pmu_usbpc_vol = <0x1130>; + pmu_usbpc_cur = <0x1f4>; + pmu_battery_warning_level1 = <0xf>; + pmu_battery_warning_level2 = <0x0>; + pmu_chgled_func = <0x0>; + pmu_chgled_type = <0x0>; + pmu_bat_para1 = <0x0>; + pmu_bat_para2 = <0x0>; + pmu_bat_para3 = <0x0>; + pmu_bat_para4 = <0x0>; + pmu_bat_para5 = <0x0>; + pmu_bat_para6 = <0x0>; + pmu_bat_para7 = <0x1>; + pmu_bat_para8 = <0x1>; + pmu_bat_para9 = <0x2>; + pmu_bat_para10 = <0x3>; + pmu_bat_para11 = <0x4>; + pmu_bat_para12 = <0xa>; + pmu_bat_para13 = <0x11>; + pmu_bat_para14 = <0x1a>; + pmu_bat_para15 = <0x29>; + pmu_bat_para16 = <0x2e>; + pmu_bat_para17 = <0x33>; + pmu_bat_para18 = <0x38>; + pmu_bat_para19 = <0x3b>; + pmu_bat_para20 = <0x41>; + pmu_bat_para21 = <0x45>; + pmu_bat_para22 = <0x4b>; + pmu_bat_para23 = <0x4f>; + pmu_bat_para24 = <0x53>; + pmu_bat_para25 = <0x59>; + pmu_bat_para26 = <0x5f>; + pmu_bat_para27 = <0x62>; + pmu_bat_para28 = <0x64>; + pmu_bat_para29 = <0x64>; + pmu_bat_para30 = <0x64>; + pmu_bat_para31 = <0x64>; + pmu_bat_para32 = <0x64>; + pmu_bat_temp_enable = <0x1>; + pmu_bat_charge_ltf = <0x8d5>; + pmu_bat_charge_htf = <0x184>; + pmu_bat_temp_para1 = <0x1d2a>; + pmu_bat_temp_para2 = <0x1180>; + pmu_bat_temp_para3 = <0xdbe>; + pmu_bat_temp_para4 = <0xae2>; + pmu_bat_temp_para5 = <0x8af>; + pmu_bat_temp_para6 = <0x6fc>; + pmu_bat_temp_para7 = <0x5a8>; + pmu_bat_temp_para8 = <0x3c9>; + pmu_bat_temp_para9 = <0x298>; + pmu_bat_temp_para10 = <0x1d2>; + pmu_bat_temp_para11 = <0x189>; + pmu_bat_temp_para12 = <0x14d>; + pmu_bat_temp_para13 = <0x11b>; + pmu_bat_temp_para14 = <0xf2>; + pmu_bat_temp_para15 = <0xb3>; + pmu_bat_temp_para16 = <0x86>; + pmu_powkey_off_time = <0x1770>; + pmu_powkey_off_func = <0x0>; + pmu_powkey_off_en = <0x1>; + pmu_powkey_long_time = <0x5dc>; + pmu_powkey_on_time = <0x3e8>; + power_start = <0x3>; + }; + + regu@0 { + compatible = "allwinner,pmu0_regu"; + regulator_count = <0x17>; + status = "okay"; + device_type = "pmu0_regu"; + regulator1 = "axp81x_dcdc1 none vcc-nand vcc-emmc vcc-sdc vcc-usb-30 vcc-io vcc-pd"; + regulator2 = "axp81x_dcdc2 none vdd-cpua"; + regulator3 = "axp81x_dcdc3 none"; + regulator4 = "axp81x_dcdc4 none"; + regulator5 = "axp81x_dcdc5 none vcc-dram"; + regulator6 = "axp81x_dcdc6 none vdd-sys"; + regulator7 = "axp81x_dcdc7 none"; + regulator8 = "axp81x_rtc none"; + regulator9 = "axp81x_aldo1 none vdd-csi-led iovdd-csi vcc-pe"; + regulator10 = "axp81x_aldo2 none vcc-pl"; + regulator11 = "axp81x_aldo3 none vcc-avcc vcc-pll"; + regulator12 = "axp81x_dldo1 none vcc-hdmi-33"; + regulator13 = "axp81x_dldo2 none vcc-mipi"; + regulator14 = "axp81x_dldo3 none avdd-csi"; + regulator15 = "axp81x_dldo4 none vcc-deviceio"; + regulator16 = "axp81x_eldo1 none vcc-cpvdd vcc-wifi-io vcc-pc vcc-pg"; + regulator17 = "axp81x_eldo2 none vcc-lcd-0"; + regulator18 = "axp81x_eldo3 none dvdd-csi-18"; + regulator19 = "axp81x_fldo1 none vcc-hsic-12"; + regulator20 = "axp81x_fldo2 none vdd-cpus"; + regulator21 = "axp81x_gpio0ldo none vcc-ctp"; + regulator22 = "axp81x_gpio1ldo none"; + regulator23 = "axp81x_dc1sw none vcc-lvds vcc-dsi-33"; + }; + + nand0@01c03000 { + compatible = "allwinner,sun50i-nand"; + device_type = "nand0"; + reg = <0x0 0x1c03000 0x0 0x1000>; + interrupts = <0x0 0x46 0x4>; + clocks = <0x4 0x80>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x83>; + nand0_regulator1 = "vcc-nand"; + nand0_regulator2 = "none"; + nand0_cache_level = <0x55aaaa55>; + nand0_flush_cache_num = <0x55aaaa55>; + nand0_capacity_level = <0x55aaaa55>; + nand0_id_number_ctl = <0x55aaaa55>; + nand0_print_level = <0x55aaaa55>; + nand0_p0 = <0x55aaaa55>; + nand0_p1 = <0x55aaaa55>; + nand0_p2 = <0x55aaaa55>; + nand0_p3 = <0x55aaaa55>; + status = "disabled"; + nand0_support_2ch = <0x0>; + pinctrl-0 = <0xab 0xac>; + }; + + thermal_sensor { + compatible = "allwinner,thermal_sensor"; + reg = <0x0 0x1c25000 0x0 0x400>; + interrupts = <0x0 0x1f 0x0>; + clocks = <0x6 0x84>; + sensor_num = <0x3>; + shut_temp = <0x78>; + status = "okay"; + + combine0 { + #thermal-sensor-cells = <0x1>; + combine_cnt = <0x3>; + combine_type = "max"; + combine_chn = <0x0 0x1 0x2>; + linux,phandle = <0x85>; + phandle = <0x85>; + }; + }; + + cpu_budget_cool { + compatible = "allwinner,budget_cooling"; + #cooling-cells = <0x2>; + status = "okay"; + state_cnt = <0xa>; + cluster_num = <0x1>; + state0 = <0x119400 0x4>; + state1 = <0x10d880 0x4>; + state2 = <0x101d00 0x4>; + state3 = <0xf6180 0x4>; + state4 = <0xea600 0x4>; + state5 = <0xdea80 0x4>; + state6 = <0xc7380 0x4>; + state7 = <0x9e340 0x4>; + state8 = <0x9e340 0x2>; + state9 = <0x9e340 0x1>; + linux,phandle = <0x87>; + phandle = <0x87>; + }; + + gpu_cooling { + compatible = "allwinner,gpu_cooling"; + reg = <0x0 0x0 0x0 0x0>; + #cooling-cells = <0x2>; + status = "okay"; + state_cnt = <0x3>; + state0 = <0x0>; + state1 = <0x168>; + state2 = <0x90>; + linux,phandle = <0x8c>; + phandle = <0x8c>; + }; + + thermal-zones { + + soc_thermal { + polling-delay-passive = <0x1f4>; + polling-delay = <0x7d0>; + thermal-sensors = <0x85 0x0>; + + trips { + + t0 { + temperature = <0x50>; + type = "passive"; + hysteresis = <0x0>; + linux,phandle = <0x86>; + phandle = <0x86>; + }; + + t1 { + temperature = <0x55>; + type = "passive"; + hysteresis = <0x0>; + linux,phandle = <0x88>; + phandle = <0x88>; + }; + + t2 { + temperature = <0x5a>; + type = "passive"; + hysteresis = <0x0>; + linux,phandle = <0x89>; + phandle = <0x89>; + }; + + t3 { + temperature = <0x5f>; + type = "passive"; + hysteresis = <0x0>; + linux,phandle = <0x8a>; + phandle = <0x8a>; + }; + + t4 { + temperature = <0x55>; + type = "passive"; + hysteresis = <0x0>; + linux,phandle = <0x8b>; + phandle = <0x8b>; + }; + + t5 { + temperature = <0x5a>; + type = "passive"; + hysteresis = <0x0>; + linux,phandle = <0x8d>; + phandle = <0x8d>; + }; + + t6 { + temperature = <0x6c>; + type = "critical"; + hysteresis = <0x0>; + }; + }; + + cooling-maps { + + bind0 { + contribution = <0x0>; + trip = <0x86>; + cooling-device = <0x87 0x1 0x1>; + }; + + bind1 { + contribution = <0x0>; + trip = <0x88>; + cooling-device = <0x87 0x2 0x2>; + }; + + bind2 { + contribution = <0x0>; + trip = <0x89>; + cooling-device = <0x87 0x3 0x6>; + }; + + bind3 { + contribution = <0x0>; + trip = <0x8a>; + cooling-device = <0x87 0x7 0x9>; + }; + + bind4 { + contribution = <0x0>; + trip = <0x8b>; + cooling-device = <0x8c 0x1 0x1>; + }; + + bind5 { + contribution = <0x0>; + trip = <0x8d>; + cooling-device = <0x8c 0x2 0x2>; + }; + }; + }; + }; + + keyboard { + compatible = "allwinner,keyboard_2000mv"; + reg = <0x0 0x1c21800 0x0 0x400>; + interrupts = <0x0 0x1e 0x0>; + status = "okay"; + key_cnt = <0x5>; + key1 = <0xf0 0x73>; + key2 = <0x1f4 0x72>; + key3 = <0x2bc 0x8b>; + key4 = <0x37a 0x1c>; + key5 = <0x7d0 0x66>; + }; + + eth@01c30000 { + compatible = "allwinner,sunxi-gmac"; + reg = <0x0 0x1c30000 0x0 0x40000 0x0 0x1c00000 0x0 0x30>; + pinctrl-names = "default"; + interrupts = <0x0 0x52 0x4>; + interrupt-names = "gmacirq"; + clocks = <0x8f>; + clock-names = "gmac"; + phy-mode = "rgmii"; + tx-delay = <0x3>; + rx-delay = <0x0>; + gmac_power1 = "axp81x_dc1sw:0"; + status = "okay"; + device_type = "gmac0"; + pinctrl-0 = <0x9e>; + gmac_power2; + gmac_power3; + }; + + product { + device_type = "product"; + version = "100"; + machine = "evb"; + }; + + platform { + device_type = "platform"; + eraseflag = <0x1>; + }; + + target { + device_type = "target"; + boot_clock = <0x3f0>; + storage_type = <0xffffffff>; + burn_key = <0x0>; + }; + + power_sply { + device_type = "power_sply"; + dcdc1_vol = <0xf4f24>; + dcdc2_vol = <0xf468c>; + dcdc6_vol = <0xf468c>; + aldo1_vol = <0xaf0>; + aldo2_vol = <0xf4948>; + aldo3_vol = <0xf4df8>; + dldo1_vol = <0xce4>; + dldo2_vol = <0xce4>; + dldo3_vol = <0xaf0>; + dldo4_vol = <0xf4f24>; + eldo1_vol = <0xf4948>; + eldo2_vol = <0x708>; + eldo3_vol = <0x708>; + fldo1_vol = <0x4b0>; + fldo2_vol = <0xf468c>; + gpio0_vol = <0xc1c>; + }; + + card_boot { + device_type = "card_boot"; + logical_start = <0xa000>; + sprite_gpio0; + }; + + pm_para { + device_type = "pm_para"; + standby_mode = <0x1>; + }; + + card0_boot_para { + device_type = "card0_boot_para"; + card_ctrl = <0x0>; + card_high_speed = <0x1>; + card_line = <0x4>; + pinctrl-0 = <0x99>; + }; + + card2_boot_para { + device_type = "card2_boot_para"; + sdc_io_1v8 = <0x1>; + card_ctrl = <0x2>; + card_high_speed = <0x1>; + card_line = <0x8>; + pinctrl-0 = <0x9a>; + sdc_ex_dly_used = <0x2>; + }; + + twi_para { + device_type = "twi_para"; + twi_port = <0x0>; + pinctrl-0 = <0x9b>; + }; + + uart_para { + device_type = "uart_para"; + uart_debug_port = <0x0>; + pinctrl-0 = <0x9c>; + }; + + jtag_para { + device_type = "jtag_para"; + jtag_enable = <0x1>; + pinctrl-0 = <0x9d>; + }; + + clock { + device_type = "clock"; + pll4 = <0x12c>; + pll6 = <0x258>; + pll8 = <0x168>; + pll9 = <0x129>; + pll10 = <0x108>; + }; + + rtp_para { + device_type = "rtp_para"; + rtp_used = <0x0>; + rtp_screen_size = <0x5>; + rtp_regidity_level = <0x5>; + rtp_press_threshold_enable = <0x0>; + rtp_press_threshold = <0x1f40>; + rtp_sensitive_level = <0xf>; + rtp_exchange_x_y_flag = <0x0>; + }; + + ctp { + device_type = "ctp"; + compatible = "allwinner,sun50i-ctp-para"; + status = "disabled"; + ctp_name = "gt911_DB"; + ctp_twi_id = <0x0>; + ctp_twi_addr = <0x40>; + ctp_screen_max_x = <0x400>; + ctp_screen_max_y = <0x258>; + ctp_revert_x_flag = <0x1>; + ctp_revert_y_flag = <0x1>; + ctp_exchange_x_y_flag = <0x0>; + ctp_int_port = <0x30 0x7 0x4 0x6 0xffffffff 0xffffffff 0xffffffff>; + ctp_wakeup = <0x30 0x7 0xb 0x1 0xffffffff 0xffffffff 0x1>; + ctp_power_ldo = "vcc-ctp"; + ctp_power_ldo_vol = <0xce4>; + ctp_power_io; + }; + + ctp_list { + device_type = "ctp_list"; + compatible = "allwinner,sun50i-ctp-list"; + status = "okay"; + gslX680new = <0x1>; + gt9xx_ts = <0x0>; + gt9xxf_ts = <0x1>; + gt9xxnew_ts = <0x0>; + gt82x = <0x1>; + zet622x = <0x1>; + aw5306_ts = <0x1>; + }; + + tkey_para { + device_type = "tkey_para"; + tkey_used = <0x0>; + tkey_twi_id; + tkey_twi_addr; + tkey_int; + }; + + motor_para { + device_type = "motor_para"; + motor_used = <0x0>; + motor_shake = <0x31 0xfffe 0x3 0x1 0xffffffff 0xffffffff 0x1>; + }; + + tvout_para { + device_type = "tvout_para"; + tvout_used; + tvout_channel_num; + tv_en; + }; + + tvin_para { + device_type = "tvin_para"; + tvin_used; + tvin_channel_num; + }; + + serial_feature { + device_type = "serial_feature"; + sn_filename = "sn.txt"; + }; + + gsensor { + device_type = "gsensor"; + compatible = "allwinner,sun50i-gsensor-para"; + status = "disabled"; + gsensor_twi_id = <0x1>; + gsensor_twi_addr = <0x1d>; + gsensor_vcc_io = "vcc-deviceio"; + gsensor_vcc_io_val = <0xce4>; + gsensor_int1 = <0x30 0x7 0x5 0x6 0x1 0xffffffff 0xffffffff>; + gsensor_int2 = <0x30 0x7 0x6 0x6 0x1 0xffffffff 0xffffffff>; + }; + + gsensor_list { + device_type = "gsensor_list"; + compatible = "allwinner,sun50i-gsensor-list-para"; + gsensor_list__used = <0x1>; + lsm9ds0_acc_mag = <0x1>; + bma250 = <0x1>; + mma8452 = <0x1>; + mma7660 = <0x1>; + mma865x = <0x1>; + afa750 = <0x1>; + lis3de_acc = <0x1>; + lis3dh_acc = <0x1>; + kxtik = <0x1>; + dmard10 = <0x0>; + dmard06 = <0x1>; + mxc622x = <0x1>; + fxos8700 = <0x1>; + lsm303d = <0x0>; + sc7a30 = <0x1>; + }; + + 3g_para { + device_type = "3g_para"; + 3g_used = <0x0>; + 3g_usbc_num = <0x2>; + 3g_uart_num = <0x0>; + bb_vbat = <0x79 0xb 0x3 0x1 0xffffffff 0xffffffff 0x0>; + bb_host_wake = <0x79 0xc 0x0 0x1 0xffffffff 0xffffffff 0x0>; + bb_on = <0x79 0xc 0x1 0x1 0xffffffff 0xffffffff 0x0>; + bb_pwr_on = <0x79 0xc 0x3 0x1 0xffffffff 0xffffffff 0x0>; + bb_wake = <0x79 0xc 0x4 0x1 0xffffffff 0xffffffff 0x0>; + bb_rf_dis = <0x79 0xc 0x5 0x1 0xffffffff 0xffffffff 0x0>; + bb_rst = <0x79 0xc 0x6 0x1 0xffffffff 0xffffffff 0x0>; + 3g_int; + }; + + gyroscopesensor { + device_type = "gyroscopesensor"; + compatible = "allwinner,sun50i-gyr_sensors-para"; + status = "disabled"; + gy_twi_id = <0x2>; + gy_twi_addr = <0x6a>; + gy_int1 = <0x30 0x0 0xa 0x6 0x1 0xffffffff 0xffffffff>; + gy_int2; + }; + + gy_list { + device_type = "gy_list"; + compatible = "allwinner,sun50i-gyr_sensors-list-para"; + status = "disabled"; + lsm9ds0_gyr = <0x1>; + l3gd20_gyr = <0x0>; + bmg160_gyr = <0x1>; + }; + + lightsensor { + device_type = "lightsensor"; + compatible = "allwinner,sun50i-lsensors-para"; + status = "disabled"; + ls_twi_id = <0x2>; + ls_twi_addr = <0x23>; + ls_int = <0x30 0x0 0xc 0x6 0x1 0xffffffff 0xffffffff>; + }; + + ls_list { + device_type = "ls_list"; + compatible = "allwinner,sun50i-lsensors-list-para"; + status = "disabled"; + ltr_501als = <0x1>; + jsa1212 = <0x0>; + jsa1127 = <0x1>; + stk3x1x = <0x0>; + }; + + compasssensor { + device_type = "compasssensor"; + compatible = "allwinner,sun50i-compass-para"; + status = "disabled"; + compass_twi_id = <0x2>; + compass_twi_addr = <0xd>; + compass_int = <0x30 0x0 0xb 0x6 0x1 0xffffffff 0xffffffff>; + }; + + compass_list { + device_type = "compass_list"; + compatible = "allwinner,sun50i-compass-list-para"; + status = "disabled"; + lsm9ds0 = <0x1>; + lsm303d = <0x0>; + }; + + recovery_key { + device_type = "recovery_key"; + key_max = <0xc>; + key_min = <0xa>; + }; + + fastboot_key { + device_type = "fastboot_key"; + key_max = <0x6>; + key_min = <0x4>; + }; + }; + + aliases { + serial0 = "/soc@01c00000/uart@01c28000"; + serial1 = "/soc@01c00000/uart@01c28400"; + serial2 = "/soc@01c00000/uart@01c28800"; + serial3 = "/soc@01c00000/uart@01c28c00"; + serial4 = "/soc@01c00000/uart@01c29000"; + twi0 = "/soc@01c00000/twi@0x01c2ac00"; + twi1 = "/soc@01c00000/twi@0x01c2b000"; + twi2 = "/soc@01c00000/twi@0x01c2b400"; + spi0 = "/soc@01c00000/spi@01c68000"; + spi1 = "/soc@01c00000/spi@01c69000"; + global_timer0 = "/soc@01c00000/timer@1c20c00"; + cci0 = "/soc@01c00000/cci@0x01cb3000"; + csi_res0 = "/soc@01c00000/csi_res@0x01cb0000"; + vfe0 = "/soc@01c00000/vfe@0"; + mmc0 = "/soc@01c00000/sdmmc@01c0f000"; + mmc2 = "/soc@01c00000/sdmmc@01C11000"; + nand0 = "/soc@01c00000/nand0@01c03000"; + disp = "/soc@01c00000/disp@01000000"; + lcd0 = "/soc@01c00000/lcd0@01c0c000"; + hdmi = "/soc@01c00000/hdmi@01ee0000"; + pwm = "/soc@01c00000/pwm@01c21400"; + pwm0 = "/soc@01c00000/pwm0@01c21400"; + s_pwm = "/soc@01c00000/s_pwm@1f03800"; + spwm0 = "/soc@01c00000/spwm0@0x01f03800"; + boot_disp = "/soc@01c00000/boot_disp"; + }; + + chosen { + bootargs = "earlyprintk=sunxi-uart,0x01c28000 loglevel=8 initcall_debug=1 console=ttyS0 init=/init"; + linux,initrd-start = <0x0 0x0>; + linux,initrd-end = <0x0 0x0>; + }; + + cpus { + #address-cells = <0x2>; + #size-cells = <0x0>; + + cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x0>; + enable-method = "psci"; + cpufreq_tbl = <0x75300 0x927c0 0xafc80 0xc7380 0xdea80 0xea600 0xf6180 0x101d00 0x10d880 0x119400 0x124f80 0x148200>; + clock-latency = <0x1e8480>; + clock-frequency = <0x3c14dc00>; + cpu-idle-states = <0x90 0x91 0x92>; + }; + + cpu@1 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x1>; + enable-method = "psci"; + clock-frequency = <0x3c14dc00>; + cpu-idle-states = <0x90 0x91 0x92>; + }; + + cpu@2 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x2>; + enable-method = "psci"; + clock-frequency = <0x3c14dc00>; + cpu-idle-states = <0x90 0x91 0x92>; + }; + + cpu@3 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x3>; + enable-method = "psci"; + clock-frequency = <0x3c14dc00>; + cpu-idle-states = <0x90 0x91 0x92>; + }; + + idle-states { + entry-method = "arm,psci"; + + cpu-sleep-0 { + compatible = "arm,idle-state"; + arm,psci-suspend-param = <0x10000>; + entry-latency-us = <0x28>; + exit-latency-us = <0x64>; + min-residency-us = <0x96>; + linux,phandle = <0x90>; + phandle = <0x90>; + }; + + cluster-sleep-0 { + compatible = "arm,idle-state"; + arm,psci-suspend-param = <0x1010000>; + entry-latency-us = <0x1f4>; + exit-latency-us = <0x3e8>; + min-residency-us = <0x9c4>; + linux,phandle = <0x91>; + phandle = <0x91>; + }; + + sys-sleep-0 { + compatible = "arm,idle-state"; + arm,psci-suspend-param = <0x2010000>; + entry-latency-us = <0x3e8>; + exit-latency-us = <0x7d0>; + min-residency-us = <0x1194>; + linux,phandle = <0x92>; + phandle = <0x92>; + }; + }; + }; + + psci { + compatible = "arm,psci-0.2"; + method = "smc"; + psci_version = <0x84000000>; + cpu_suspend = <0xc4000001>; + cpu_off = <0x84000002>; + cpu_on = <0xc4000003>; + affinity_info = <0xc4000004>; + migrate = <0xc4000005>; + migrate_info_type = <0x84000006>; + migrate_info_up_cpu = <0xc4000007>; + system_off = <0x84000008>; + system_reset = <0x84000009>; + }; + + n_brom { + compatible = "allwinner,n-brom"; + reg = <0x0 0x0 0x0 0xc000>; + }; + + s_brom { + compatible = "allwinner,s-brom"; + reg = <0x0 0x0 0x0 0x10000>; + }; + + sram_a1 { + compatible = "allwinner,sram_a1"; + reg = <0x0 0x10000 0x0 0x8000>; + }; + + sram_a2 { + compatible = "allwinner,sram_a2"; + reg = <0x0 0x40000 0x0 0x14000>; + }; + + prcm { + compatible = "allwinner,prcm"; + reg = <0x0 0x1f01400 0x0 0x400>; + }; + + cpuscfg { + compatible = "allwinner,cpuscfg"; + reg = <0x0 0x1f01c00 0x0 0x400>; + }; + + ion { + compatible = "allwinner,sunxi-ion"; + + system_contig { + type = <0x1>; + }; + + cma { + type = <0x4>; + }; + + system { + type = <0x0>; + }; + }; + + dram { + compatible = "allwinner,dram"; + clocks = <0x93 0x94>; + clock-names = "pll_ddr0", "pll_ddr1"; + dram_clk = <0x228>; + dram_type = <0x7>; + dram_zq = <0x3b3bdd>; + dram_odt_en = <0x1>; + dram_para1 = <0x10e410e4>; + dram_para2 = <0x1000>; + dram_mr0 = <0x1840>; + dram_mr1 = <0x40>; + dram_mr2 = <0x18>; + dram_mr3 = <0x2>; + dram_tpr0 = <0x4a2195>; + dram_tpr1 = <0x2424190>; + dram_tpr2 = <0x8b060>; + dram_tpr3 = <0x50005dc>; + dram_tpr4 = <0x0>; + dram_tpr5 = <0x0>; + dram_tpr6 = <0x0>; + dram_tpr7 = <0x2a066198>; + dram_tpr8 = <0x0>; + dram_tpr9 = <0x0>; + dram_tpr10 = <0x8808>; + dram_tpr11 = <0x40a60066>; + dram_tpr12 = <0x55550000>; + dram_tpr13 = <0x4000900>; + device_type = "dram"; + }; + + memory@40000000 { + device_type = "memory"; + reg = <0x0 0x40000000 0x0 0x40000000>; + }; + + interrupt-controller@1c81000 { + compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; + #interrupt-cells = <0x3>; + #address-cells = <0x0>; + device_type = "gic"; + interrupt-controller; + reg = <0x0 0x1c81000 0x0 0x1000 0x0 0x1c82000 0x0 0x2000 0x0 0x1c84000 0x0 0x2000 0x0 0x1c86000 0x0 0x2000>; + interrupts = <0x1 0x9 0xf04>; + linux,phandle = <0x1>; + phandle = <0x1>; + }; + + sunxi-chipid@1c14200 { + compatible = "allwinner,sunxi-chipid"; + device_type = "chipid"; + reg = <0x0 0x1c14200 0x0 0x400>; + }; + + timer { + compatible = "arm,armv8-timer"; + interrupts = <0x1 0xd 0xff01 0x1 0xe 0xff01 0x1 0xb 0xff01 0x1 0xa 0xff01>; + clock-frequency = <0x16e3600>; + }; + + pmu { + compatible = "arm,armv8-pmuv3"; + interrupts = <0x0 0x78 0x4 0x0 0x79 0x4 0x0 0x7a 0x4 0x0 0x7b 0x4>; + }; + + dvfs_table { + compatible = "allwinner,dvfs_table"; + max_freq = <0x44aa2000>; + min_freq = <0x1c9c3800>; + lv_count = <0x8>; + lv1_freq = <0x44aa2000>; + lv1_volt = <0x514>; + lv2_freq = <0x41cdb400>; + lv2_volt = <0x4ec>; + lv3_freq = <0x3ef14800>; + lv3_volt = <0x4d8>; + lv4_freq = <0x3c14dc00>; + lv4_volt = <0x4b0>; + lv5_freq = <0x39387000>; + lv5_volt = <0x488>; + lv6_freq = <0x365c0400>; + lv6_volt = <0x460>; + lv7_freq = <0x30a32c00>; + lv7_volt = <0x438>; + lv8_freq = <0x269fb200>; + lv8_volt = <0x410>; + device_type = "dvfs_table"; + }; + + dramfreq { + compatible = "allwinner,sunxi-dramfreq"; + reg = <0x0 0x1c62000 0x0 0x1000 0x0 0x1c63000 0x0 0x1000 0x0 0x1c20000 0x0 0x800>; + clocks = <0x93 0x94 0x95>; + status = "okay"; + }; + + uboot { + }; + + gpu@0x01c40000 { + compatible = "arm,mali-400", "arm,mali-utgard"; + reg = <0x0 0x1c40000 0x0 0x10000>; + interrupts = <0x0 0x61 0x4 0x0 0x62 0x4 0x0 0x63 0x4 0x0 0x64 0x4 0x0 0x66 0x4 0x0 0x67 0x4>; + interrupt-names = "IRQGP", "IRQGPMMU", "IRQPP0", "IRQPPMMU0", "IRQPP1", "IRQPPMMU1"; + clocks = <0x96 0x97>; + device_type = "gpu_mali400_0"; + normal_freq = <0x198>; + scene_ctrl_status = <0x0>; + temp_ctrl_status = <0x1>; + }; + + wlan { + compatible = "allwinner,sunxi-wlan"; + wlan_io_regulator = "vcc-wifi-io"; + wlan_busnum = <0x1>; + status = "okay"; + device_type = "wlan"; + clocks; + wlan_power; + wlan_regon = <0x79 0xb 0x2 0x1 0xffffffff 0xffffffff 0x0>; + wlan_hostwake = <0x79 0xb 0x3 0x6 0xffffffff 0xffffffff 0x0>; + efuse_map_path = "wifi_efuse_8189e_for_MB1019Q5.map"; + }; + + bt { + compatible = "allwinner,sunxi-bt"; + bt_io_regulator = "vcc-wifi-io"; + status = "okay"; + device_type = "bt"; + clocks; + bt_power; + bt_rst_n = <0x79 0xb 0x4 0x1 0xffffffff 0xffffffff 0x0>; + }; + + btlpm { + compatible = "allwinner,sunxi-btlpm"; + uart_index = <0x1>; + status = "okay"; + device_type = "btlpm"; + bt_wake = <0x79 0xb 0x6 0x1 0xffffffff 0xffffffff 0x1>; + bt_hostwake = <0x79 0xb 0x5 0x6 0xffffffff 0xffffffff 0x0>; + }; +}; diff --git a/packages/blobs/sunxi/a64/pinebook-a64.dts b/packages/blobs/sunxi/a64/pinebook-a64.dts new file mode 100644 index 0000000000..b1983771fc --- /dev/null +++ b/packages/blobs/sunxi/a64/pinebook-a64.dts @@ -0,0 +1,3442 @@ +/dts-v1/; + +/memreserve/ 0x0000000045000000 0x0000000000200000; +/memreserve/ 0x0000000041010000 0x0000000000010000; +/memreserve/ 0x0000000041020000 0x0000000000000800; +/memreserve/ 0x0000000040100000 0x0000000000004000; +/memreserve/ 0x0000000040104000 0x0000000000001000; +/memreserve/ 0x0000000040105000 0x0000000000001000; +/ { + model = "Pinebook"; + dt-name = "sun50iw1p1-pine64-pinebook"; + compatible = "pine64,pine64-plus,pinebook64"; + interrupt-parent = <0x1>; + #address-cells = <0x2>; + #size-cells = <0x2>; + + clocks { + compatible = "allwinner,sunxi-clk-init"; + device_type = "clocks"; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + reg = <0x0 0x1c20000 0x0 0x320 0x0 0x1f01400 0x0 0xb0 0x0 0x1f00060 0x0 0x4>; + + losc { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-clock"; + clock-frequency = <0x8000>; + clock-output-names = "losc"; + linux,phandle = <0xc>; + phandle = <0xc>; + }; + + iosc { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-clock"; + clock-frequency = <0xf42400>; + clock-output-names = "iosc"; + linux,phandle = <0xd>; + phandle = <0xd>; + }; + + hosc { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-clock"; + clock-frequency = <0x16e3600>; + clock-output-names = "hosc"; + linux,phandle = <0x6>; + phandle = <0x6>; + }; + + pll_cpu { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_cpu"; + }; + + pll_audio { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + assigned-clock-rates = <0x1770000>; + clock-output-names = "pll_audio"; + linux,phandle = <0x2>; + phandle = <0x2>; + }; + + pll_video0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + assigned-clock-rates = <0x11b3dc40>; + clock-output-names = "pll_video0"; + linux,phandle = <0x3>; + phandle = <0x3>; + }; + + pll_ve { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_ve"; + linux,phandle = <0x16>; + phandle = <0x16>; + }; + + pll_ddr0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_ddr0"; + linux,phandle = <0x93>; + phandle = <0x93>; + }; + + pll_periph0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_periph0"; + linux,phandle = <0x4>; + phandle = <0x4>; + }; + + pll_periph1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_periph1"; + linux,phandle = <0x5>; + phandle = <0x5>; + }; + + pll_video1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + assigned-clock-rates = <0x11b3dc40>; + clock-output-names = "pll_video1"; + }; + + pll_gpu { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_gpu"; + linux,phandle = <0x96>; + phandle = <0x96>; + }; + + pll_mipi { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_mipi"; + linux,phandle = <0x8>; + phandle = <0x8>; + }; + + pll_hsic { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_hsic"; + linux,phandle = <0x3a>; + phandle = <0x3a>; + }; + + pll_de { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + assigned-clock-rates = <0x11b3dc40>; + clock-output-names = "pll_de"; + linux,phandle = <0x7>; + phandle = <0x7>; + }; + + pll_ddr1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-pll-clock"; + lock-mode = "new"; + clock-output-names = "pll_ddr1"; + linux,phandle = <0x94>; + phandle = <0x94>; + }; + + pll_audiox8 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x2>; + clock-mult = <0x8>; + clock-div = <0x1>; + clock-output-names = "pll_audiox8"; + }; + + pll_audiox4 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x2>; + clock-mult = <0x8>; + clock-div = <0x2>; + clock-output-names = "pll_audiox4"; + linux,phandle = <0x3c>; + phandle = <0x3c>; + }; + + pll_audiox2 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x2>; + clock-mult = <0x8>; + clock-div = <0x4>; + clock-output-names = "pll_audiox2"; + }; + + pll_video0x2 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x3>; + clock-mult = <0x2>; + clock-div = <0x1>; + clock-output-names = "pll_video0x2"; + }; + + pll_periph0x2 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x4>; + clock-mult = <0x2>; + clock-div = <0x1>; + clock-output-names = "pll_periph0x2"; + linux,phandle = <0x7b>; + phandle = <0x7b>; + }; + + pll_periph1x2 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x5>; + clock-mult = <0x2>; + clock-div = <0x1>; + clock-output-names = "pll_periph1x2"; + linux,phandle = <0x5a>; + phandle = <0x5a>; + }; + + pll_periph0d2 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x4>; + clock-mult = <0x1>; + clock-div = <0x2>; + clock-output-names = "pll_periph0d2"; + }; + + hoscd2 { + #clock-cells = <0x0>; + compatible = "allwinner,fixed-factor-clock"; + clocks = <0x6>; + clock-mult = <0x1>; + clock-div = <0x2>; + clock-output-names = "hoscd2"; + }; + + cpu { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "cpu"; + }; + + cpuapb { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "cpuapb"; + }; + + axi { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "axi"; + }; + + pll_periphahb0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "pll_periphahb0"; + }; + + ahb1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "ahb1"; + linux,phandle = <0x95>; + phandle = <0x95>; + }; + + apb1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "apb1"; + }; + + apb2 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "apb2"; + linux,phandle = <0x7e>; + phandle = <0x7e>; + }; + + ahb2 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "ahb2"; + }; + + ths { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "ths"; + linux,phandle = <0x84>; + phandle = <0x84>; + }; + + nand { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "nand"; + linux,phandle = <0x80>; + phandle = <0x80>; + }; + + sdmmc0_mod { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc0_mod"; + linux,phandle = <0x60>; + phandle = <0x60>; + }; + + sdmmc0_bus { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc0_bus"; + linux,phandle = <0x61>; + phandle = <0x61>; + }; + + sdmmc0_rst { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc0_rst"; + linux,phandle = <0x62>; + phandle = <0x62>; + }; + + sdmmc1_mod { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc1_mod"; + linux,phandle = <0x65>; + phandle = <0x65>; + }; + + sdmmc1_bus { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc1_bus"; + linux,phandle = <0x66>; + phandle = <0x66>; + }; + + sdmmc1_rst { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc1_rst"; + linux,phandle = <0x67>; + phandle = <0x67>; + }; + + sdmmc2_mod { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc2_mod"; + linux,phandle = <0x5b>; + phandle = <0x5b>; + }; + + sdmmc2_bus { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc2_bus"; + linux,phandle = <0x5c>; + phandle = <0x5c>; + }; + + sdmmc2_rst { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdmmc2_rst"; + linux,phandle = <0x5d>; + phandle = <0x5d>; + }; + + ts { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "ts"; + }; + + ce { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "ce"; + linux,phandle = <0x7a>; + phandle = <0x7a>; + }; + + spi0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "spi0"; + linux,phandle = <0x52>; + phandle = <0x52>; + }; + + spi1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "spi1"; + linux,phandle = <0x56>; + phandle = <0x56>; + }; + + i2s0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "i2s0"; + linux,phandle = <0x42>; + phandle = <0x42>; + }; + + i2s1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "i2s1"; + linux,phandle = <0x47>; + phandle = <0x47>; + }; + + i2s2 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "i2s2"; + linux,phandle = <0x48>; + phandle = <0x48>; + }; + + spdif { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "spdif"; + linux,phandle = <0x49>; + phandle = <0x49>; + }; + + usbphy0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbphy0"; + linux,phandle = <0x32>; + phandle = <0x32>; + }; + + usbphy1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbphy1"; + linux,phandle = <0x36>; + phandle = <0x36>; + }; + + usbhsic { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbhsic"; + linux,phandle = <0x38>; + phandle = <0x38>; + }; + + usbhsic12m { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbhsic12m"; + linux,phandle = <0x39>; + phandle = <0x39>; + }; + + usbohci1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbohci1"; + linux,phandle = <0x3b>; + phandle = <0x3b>; + }; + + usbohci0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbohci0"; + linux,phandle = <0x35>; + phandle = <0x35>; + }; + + de { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + assigned-clock-parents = <0x7>; + assigned-clock-rates = <0x11b3dc40>; + clock-output-names = "de"; + linux,phandle = <0x6a>; + phandle = <0x6a>; + }; + + tcon0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + assigned-clock-parents = <0x8>; + clock-output-names = "tcon0"; + linux,phandle = <0x6b>; + phandle = <0x6b>; + }; + + tcon1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + assigned-clock-parents = <0x3>; + clock-output-names = "tcon1"; + linux,phandle = <0x6e>; + phandle = <0x6e>; + }; + + deinterlace { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "deinterlace"; + linux,phandle = <0x7c>; + phandle = <0x7c>; + }; + + csi_s { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "csi_s"; + linux,phandle = <0x73>; + phandle = <0x73>; + }; + + csi_m { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "csi_m"; + linux,phandle = <0x74>; + phandle = <0x74>; + }; + + csi_misc { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "csi_misc"; + linux,phandle = <0x75>; + phandle = <0x75>; + }; + + ve { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "ve"; + linux,phandle = <0x17>; + phandle = <0x17>; + }; + + adda { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "adda"; + linux,phandle = <0x41>; + phandle = <0x41>; + }; + + addax4 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "addax4"; + }; + + avs { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "avs"; + }; + + hdmi { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + assigned-clock-parents = <0x3>; + clock-output-names = "hdmi"; + linux,phandle = <0x6f>; + phandle = <0x6f>; + }; + + hdmi_slow { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "hdmi_slow"; + linux,phandle = <0x70>; + phandle = <0x70>; + }; + + mbus { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "mbus"; + }; + + mipidsi { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "mipidsi"; + linux,phandle = <0x6d>; + phandle = <0x6d>; + }; + + gpu { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "gpu"; + linux,phandle = <0x97>; + phandle = <0x97>; + }; + + usbehci_16 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbohci_16"; + }; + + usbehci1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbehci1"; + linux,phandle = <0x37>; + phandle = <0x37>; + }; + + usbehci0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbehci0"; + linux,phandle = <0x34>; + phandle = <0x34>; + }; + + usbotg { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "usbotg"; + linux,phandle = <0x33>; + phandle = <0x33>; + }; + + gmac { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "gmac"; + linux,phandle = <0x8f>; + phandle = <0x8f>; + }; + + sdram { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "sdram"; + }; + + dma { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "dma"; + linux,phandle = <0xb>; + phandle = <0xb>; + }; + + hwspinlock_rst { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "hwspinlock_rst"; + linux,phandle = <0xf>; + phandle = <0xf>; + }; + + hwspinlock_bus { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "hwspinlock_bus"; + linux,phandle = <0x10>; + phandle = <0x10>; + }; + + msgbox { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "msgbox"; + linux,phandle = <0xe>; + phandle = <0xe>; + }; + + lvds { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "lvds"; + linux,phandle = <0x6c>; + phandle = <0x6c>; + }; + + uart0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "uart0"; + linux,phandle = <0x18>; + phandle = <0x18>; + }; + + uart1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "uart1"; + linux,phandle = <0x1b>; + phandle = <0x1b>; + }; + + uart2 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "uart2"; + linux,phandle = <0x1e>; + phandle = <0x1e>; + }; + + uart3 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "uart3"; + linux,phandle = <0x21>; + phandle = <0x21>; + }; + + uart4 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "uart4"; + linux,phandle = <0x24>; + phandle = <0x24>; + }; + + scr { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "scr"; + linux,phandle = <0x7d>; + phandle = <0x7d>; + }; + + twi0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "twi0"; + linux,phandle = <0x27>; + phandle = <0x27>; + }; + + twi1 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "twi1"; + linux,phandle = <0x2a>; + phandle = <0x2a>; + }; + + twi2 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "twi2"; + linux,phandle = <0x2d>; + phandle = <0x2d>; + }; + + twi3 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "twi3"; + }; + + pio { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-clock"; + clock-output-names = "pio"; + linux,phandle = <0xa>; + phandle = <0xa>; + }; + + cpurcir { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "cpurcir"; + linux,phandle = <0x12>; + phandle = <0x12>; + }; + + cpurpio { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "cpurpio"; + linux,phandle = <0x9>; + phandle = <0x9>; + }; + + cpurpll_peri0 { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "cpurpll_peri0"; + }; + + cpurcpus { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "cpurcpus"; + }; + + cpurahbs { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "cpurahbs"; + }; + + cpurapbs { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "cpurapbs"; + }; + + losc_out { + #clock-cells = <0x0>; + compatible = "allwinner,sunxi-periph-cpus-clock"; + clock-output-names = "losc_out"; + linux,phandle = <0x98>; + phandle = <0x98>; + }; + }; + + soc@01c00000 { + compatible = "simple-bus"; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + device_type = "soc"; + + pinctrl@01f02c00 { + compatible = "allwinner,sun50i-r-pinctrl"; + reg = <0x0 0x1f02c00 0x0 0x400>; + interrupts = <0x0 0x2d 0x4>; + clocks = <0x9>; + device_type = "r_pio"; + gpio-controller; + interrupt-controller; + #interrupt-cells = <0x2>; + #size-cells = <0x0>; + #gpio-cells = <0x6>; + linux,phandle = <0x79>; + phandle = <0x79>; + + s_cir0@0 { + allwinner,pins = "PL11"; + allwinner,function = "s_cir0"; + allwinner,muxsel = <0x2>; + allwinner,drive = <0x2>; + allwinner,pull = <0x1>; + linux,phandle = <0x11>; + phandle = <0x11>; + }; + + s_uart0@0 { + linux,phandle = <0xb5>; + phandle = <0xb5>; + allwinner,pins = "PL2", "PL3"; + allwinner,function = "s_uart0"; + allwinner,pname = "s_uart0_tx", "s_uart0_rx"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + s_rsb0@0 { + linux,phandle = <0xb6>; + phandle = <0xb6>; + allwinner,pins = "PL0", "PL1"; + allwinner,function = "s_rsb0"; + allwinner,pname = "s_rsb0_sck", "s_rsb0_sda"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0x2>; + allwinner,data = <0xffffffff>; + }; + + s_jtag0@0 { + linux,phandle = <0xb7>; + phandle = <0xb7>; + allwinner,pins = "PL4", "PL5", "PL6", "PL7"; + allwinner,function = "s_jtag0"; + allwinner,pname = "s_jtag0_tms", "s_jtag0_tck", "s_jtag0_tdo", "s_jtag0_tdi"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0x2>; + allwinner,data = <0xffffffff>; + }; + }; + + pinctrl@01c20800 { + compatible = "allwinner,sun50i-pinctrl"; + reg = <0x0 0x1c20800 0x0 0x400>; + interrupts = <0x0 0xb 0x4 0x0 0x11 0x4 0x0 0x15 0x4>; + device_type = "pio"; + clocks = <0xa>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <0x2>; + #size-cells = <0x0>; + #gpio-cells = <0x6>; + linux,phandle = <0x30>; + phandle = <0x30>; + + uart0@1 { + allwinner,pins = "PB8", "PB9"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x1a>; + phandle = <0x1a>; + }; + + uart1@1 { + allwinner,pins = "PG6", "PG7", "PG8", "PG9"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x1d>; + phandle = <0x1d>; + }; + + uart2@1 { + allwinner,pins = "PB0", "PB1", "PB2", "PB3"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x20>; + phandle = <0x20>; + }; + + uart3@1 { + allwinner,pins = "PH4", "PH5", "PH6", "PH7"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x23>; + phandle = <0x23>; + }; + + uart4@1 { + allwinner,pins = "PD2", "PD3", "PD4", "PD5"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x26>; + phandle = <0x26>; + }; + + twi0@1 { + allwinner,pins = "PH0", "PH1"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x29>; + phandle = <0x29>; + }; + + twi1@1 { + allwinner,pins = "PH2", "PH3"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x2c>; + phandle = <0x2c>; + }; + + twi2@0 { + allwinner,pins = "PE14", "PE15"; + allwinner,pname = "twi2_scl", "twi2_sda"; + allwinner,function = "twi2"; + allwinner,muxsel = <0x3>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x2e>; + phandle = <0x2e>; + }; + + twi2@1 { + allwinner,pins = "PE14", "PE15"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x2f>; + phandle = <0x2f>; + }; + + spi0@2 { + allwinner,pins = "PC3", "PC2", "PC0", "PC1"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x55>; + phandle = <0x55>; + }; + + spi1@2 { + allwinner,pins = "PD0", "PD1", "PD2", "PD3"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x59>; + phandle = <0x59>; + }; + + sdc0@1 { + allwinner,pins = "PF0", "PF1", "PF2", "PF3", "PF4", "PF5"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x64>; + phandle = <0x64>; + }; + + sdc1@1 { + allwinner,pins = "PG0", "PG1", "PG2", "PG3", "PG4", "PG5"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x69>; + phandle = <0x69>; + }; + + sdc2@1 { + allwinner,pins = "PC1", "PC5", "PC6", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x5f>; + phandle = <0x5f>; + }; + + daudio0@0 { + allwinner,pins = "PB6", "PB3", "PB4", "PB5", "PB7"; + allwinner,function = "pcm0"; + allwinner,muxsel = <0x3>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x43>; + phandle = <0x43>; + }; + + daudio0_sleep@0 { + allwinner,pins = "PB6", "PB3", "PB4", "PB5", "PB7"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x44>; + phandle = <0x44>; + }; + + daudio1@0 { + allwinner,pins = "PG10", "PG11", "PG12", "PG13"; + allwinner,function = "pcm1"; + allwinner,muxsel = <0x3>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x45>; + phandle = <0x45>; + }; + + daudio1_sleep@0 { + allwinner,pins = "PG10", "PG11", "PG12", "PG13"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x46>; + phandle = <0x46>; + }; + + aif3@0 { + allwinner,pins = "PG10", "PG11", "PG12", "PG13"; + allwinner,function = "aif3"; + allwinner,muxsel = <0x2>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x3e>; + phandle = <0x3e>; + }; + + aif2_sleep@0 { + allwinner,pins = "PB6", "PB4", "PB5", "PB7"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x3f>; + phandle = <0x3f>; + }; + + aif3_sleep@0 { + allwinner,pins = "PG10", "PG11", "PG12", "PG13"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x40>; + phandle = <0x40>; + }; + + spdif@0 { + allwinner,pins = "PH8"; + allwinner,function = "spdif0"; + allwinner,muxsel = <0x2>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x4a>; + phandle = <0x4a>; + }; + + spdif_sleep@0 { + allwinner,pins = "PH8"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x4b>; + phandle = <0x4b>; + }; + + csi0_sleep@0 { + allwinner,pins = "PE0", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13"; + allwinner,pname = "csi0_pck", "csi0_hsync", "csi0_vsync", "csi0_d0", "csi0_d1", "csi0_d2", "csi0_d3", "csi0_d4", "csi0_d5", "csi0_d6", "csi0_d7", "csi0_sck", "csi0_sda"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + allwinner,data = <0x0>; + linux,phandle = <0x77>; + phandle = <0x77>; + }; + + smartcard@0 { + allwinner,pins = "PB1", "PB4", "PB5", "PB6", "PB7"; + allwinner,function = "sim0"; + allwinner,muxsel = <0x5>; + allwinner,drive = <0x1>; + allwinner,pull = <0x1>; + linux,phandle = <0x7f>; + phandle = <0x7f>; + }; + + nand0@2 { + allwinner,pins = "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PC18"; + allwinner,function = "io_disabled"; + allwinner,muxsel = <0x7>; + allwinner,drive = <0x1>; + allwinner,pull = <0x0>; + linux,phandle = <0x83>; + phandle = <0x83>; + }; + + gmac@0 { + allwinner,pins = "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PD18", "PD19", "PD20", "PD21", "PD22", "PD23"; + allwinner,function = "gmac0"; + allwinner,muxsel = <0x4>; + allwinner,drive = <0x3>; + allwinner,pull = <0x0>; + linux,phandle = <0x8e>; + phandle = <0x8e>; + }; + + card0_boot_para@0 { + linux,phandle = <0x99>; + phandle = <0x99>; + allwinner,pins = "PF0", "PF1", "PF2", "PF3", "PF4", "PF5"; + allwinner,function = "card0_boot_para"; + allwinner,pname = "sdc_d1", "sdc_d0", "sdc_clk", "sdc_cmd", "sdc_d3", "sdc_d2"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0x2>; + allwinner,data = <0xffffffff>; + }; + + card2_boot_para@0 { + linux,phandle = <0x9a>; + phandle = <0x9a>; + allwinner,pins = "PC1", "PC5", "PC6", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16"; + allwinner,function = "card2_boot_para"; + allwinner,pname = "sdc_ds", "sdc_clk", "sdc_cmd", "sdc_d0", "sdc_d1", "sdc_d2", "sdc_d3", "sdc_d4", "sdc_d5", "sdc_d6", "sdc_d7", "sdc_emmc_rst"; + allwinner,muxsel = <0x3>; + allwinner,pull = <0x1>; + allwinner,drive = <0x3>; + allwinner,data = <0xffffffff>; + }; + + twi_para@0 { + linux,phandle = <0x9b>; + phandle = <0x9b>; + allwinner,pins = "PH0", "PH1"; + allwinner,function = "twi_para"; + allwinner,pname = "twi_scl", "twi_sda"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + uart_para@0 { + linux,phandle = <0x9c>; + phandle = <0x9c>; + allwinner,pins = "PB8", "PB9"; + allwinner,function = "uart_para"; + allwinner,pname = "uart_debug_tx", "uart_debug_rx"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + jtag_para@0 { + linux,phandle = <0x9d>; + phandle = <0x9d>; + allwinner,pins = "PB0", "PB1", "PB2", "PB3"; + allwinner,function = "jtag_para"; + allwinner,pname = "jtag_ms", "jtag_ck", "jtag_do", "jtag_di"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + gmac_para@0 { + linux,phandle = <0x9e>; + phandle = <0x9e>; + allwinner,pins = "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PA18", "PA19", "PA20", "PA21", "PA22", "PA23", "PA24", "PA25", "PA26", "PA27"; + allwinner,function = "gmac_para"; + allwinner,pname = "gmac_txd0", "gmac_txd1", "gmac_txd2", "gmac_txd3", "gmac_txd4", "gmac_txd5", "gmac_txd6", "gmac_txd7", "gmac_txclk", "gmac_txen", "gmac_gtxclk", "gmac_rxd0", "gmac_rxd1", "gmac_rxd2", "gmac_rxd3", "gmac_rxd4", "gmac_rxd5", "gmac_rxd6", "gmac_rxd7", "gmac_rxdv", "gmac_rxclk", "gmac_txerr", "gmac_rxerr", "gmac_col", "gmac_crs", "gmac_clkin", "gmac_mdc", "gmac_mdio"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + twi0@0 { + linux,phandle = <0x9f>; + phandle = <0x9f>; + allwinner,pins = "PH0", "PH1"; + allwinner,function = "twi0"; + allwinner,pname = "twi0_scl", "twi0_sda"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + twi1@0 { + linux,phandle = <0xa0>; + phandle = <0xa0>; + allwinner,pins = "PH2", "PH3"; + allwinner,function = "twi1"; + allwinner,pname = "twi1_scl", "twi1_sda"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + uart0@0 { + linux,phandle = <0xa1>; + phandle = <0xa1>; + allwinner,pins = "PB8", "PB9"; + allwinner,function = "uart0"; + allwinner,pname = "uart0_tx", "uart0_rx"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + uart1@0 { + linux,phandle = <0xa2>; + phandle = <0xa2>; + allwinner,pins = "PG6", "PG7", "PG8", "PG9"; + allwinner,function = "uart1"; + allwinner,pname = "uart1_tx", "uart1_rx", "uart1_rts", "uart1_cts"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + uart2@0 { + linux,phandle = <0xa3>; + phandle = <0xa3>; + allwinner,pins = "PB0", "PB1", "PB2", "PB3"; + allwinner,function = "uart2"; + allwinner,pname = "uart2_tx", "uart2_rx", "uart2_rts", "uart2_cts"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + uart3@0 { + linux,phandle = <0xa4>; + phandle = <0xa4>; + allwinner,pins = "PH4", "PH5", "PH6", "PH7"; + allwinner,function = "uart3"; + allwinner,pname = "uart3_tx", "uart3_rx", "uart3_rts", "uart3_cts"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + uart4@0 { + linux,phandle = <0xa5>; + phandle = <0xa5>; + allwinner,pins = "PD2", "PD3", "PD4", "PD5"; + allwinner,function = "uart4"; + allwinner,pname = "uart4_tx", "uart4_rx", "uart4_rts", "uart4_cts"; + allwinner,muxsel = <0x3>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + spi0@0 { + linux,phandle = <0xa6>; + phandle = <0xa6>; + allwinner,pins = "PC3"; + allwinner,function = "spi0"; + allwinner,pname = "spi0_cs0"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + spi0@1 { + linux,phandle = <0xa7>; + phandle = <0xa7>; + allwinner,pins = "PC2", "PC0", "PC1"; + allwinner,function = "spi0"; + allwinner,pname = "spi0_sclk", "spi0_mosi", "spi0_miso"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + spi1@0 { + linux,phandle = <0xa8>; + phandle = <0xa8>; + allwinner,pins = "PD0"; + allwinner,function = "spi1"; + allwinner,pname = "spi1_cs0"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + spi1@1 { + linux,phandle = <0xa9>; + phandle = <0xa9>; + allwinner,pins = "PD1", "PD2", "PD3"; + allwinner,function = "spi1"; + allwinner,pname = "spi1_sclk", "spi1_mosi", "spi1_miso"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + nand0@0 { + linux,phandle = <0xaa>; + phandle = <0xaa>; + allwinner,pins = "PC0", "PC1", "PC2", "PC5", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16"; + allwinner,function = "nand0"; + allwinner,pname = "nand0_we", "nand0_ale", "nand0_cle", "nand0_nre", "nand0_d0", "nand0_d1", "nand0_d2", "nand0_d3", "nand0_d4", "nand0_d5", "nand0_d6", "nand0_d7", "nand0_ndqs"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x0>; + allwinner,drive = <0x1>; + allwinner,data = <0xffffffff>; + }; + + nand0@1 { + linux,phandle = <0xab>; + phandle = <0xab>; + allwinner,pins = "PC3", "PC4", "PC6", "PC7", "PC17", "PC18"; + allwinner,function = "nand0"; + allwinner,pname = "nand0_ce1", "nand0_ce0", "nand0_rb0", "nand0_rb1", "nand0_ce2", "nand0_ce3"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0x1>; + allwinner,data = <0xffffffff>; + }; + + lcd0@0 { + linux,phandle = <0xac>; + phandle = <0xac>; + allwinner,pins = "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PD18", "PD19", "PD20", "PD21"; + allwinner,function = "lcd0"; + allwinner,pname = "lcdd2", "lcdd3", "lcdd4", "lcdd5", "lcdd6", "lcdd7", "lcdd10", "lcdd11", "lcdd12", "lcdd13", "lcdd14", "lcdd15", "lcdd18", "lcdd19", "lcdd20", "lcdd21", "lcdd22", "lcdd23", "lcdclk", "lcdde", "lcdhsync", "lcdvsync"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x0>; + allwinner,drive = <0x3>; + allwinner,data = <0xffffffff>; + }; + + lcd0@1 { + linux,phandle = <0xad>; + phandle = <0xad>; + allwinner,pins = "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PD18", "PD19", "PD20", "PD21"; + allwinner,function = "lcd0"; + allwinner,pname = "lcdd0", "lcdd1", "lcdd2", "lcdd3", "lcdd4", "lcdd5", "lcdd6", "lcdd7", "lcdd8", "lcdd9"; + allwinner,muxsel = <0x7>; + allwinner,pull = <0x0>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + pwm0@0 { + linux,phandle = <0xae>; + phandle = <0xae>; + allwinner,pins = "PD22"; + allwinner,function = "pwm0"; + allwinner,pname = "pwm_positive"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x0>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + pwm0@1 { + linux,phandle = <0xaf>; + phandle = <0xaf>; + allwinner,pins = "PD22"; + allwinner,function = "pwm0"; + allwinner,pname = "pwm_positive"; + allwinner,muxsel = <0x7>; + allwinner,pull = <0x0>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + csi0@0 { + linux,phandle = <0xb0>; + phandle = <0xb0>; + allwinner,pins = "PE0", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13"; + allwinner,function = "csi0"; + allwinner,pname = "csi0_pck", "csi0_hsync", "csi0_vsync", "csi0_d0", "csi0_d1", "csi0_d2", "csi0_d3", "csi0_d4", "csi0_d5", "csi0_d6", "csi0_d7", "csi0_sck", "csi0_sda"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0xffffffff>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + sdc0@0 { + linux,phandle = <0xb1>; + phandle = <0xb1>; + allwinner,pins = "PF0", "PF1", "PF2", "PF3", "PF4", "PF5"; + allwinner,function = "sdc0"; + allwinner,pname = "sdc0_d1", "sdc0_d0", "sdc0_clk", "sdc0_cmd", "sdc0_d3", "sdc0_d2"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0x2>; + allwinner,data = <0xffffffff>; + }; + + sdc1@0 { + linux,phandle = <0xb2>; + phandle = <0xb2>; + allwinner,pins = "PG0", "PG1", "PG2", "PG3", "PG4", "PG5"; + allwinner,function = "sdc1"; + allwinner,pname = "sdc1_clk", "sdc1_cmd", "sdc1_d0", "sdc1_d1", "sdc1_d2", "sdc1_d3"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0x3>; + allwinner,data = <0xffffffff>; + }; + + sdc2@0 { + linux,phandle = <0xb3>; + phandle = <0xb3>; + allwinner,pins = "PC1", "PC5", "PC6", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16"; + allwinner,function = "sdc2"; + allwinner,pname = "sdc2_ds", "sdc2_clk", "sdc2_cmd", "sdc2_d0", "sdc2_d1", "sdc2_d2", "sdc2_d3", "sdc2_d4", "sdc2_d5", "sdc2_d6", "sdc2_d7", "sdc2_emmc_rst"; + allwinner,muxsel = <0x3>; + allwinner,pull = <0x1>; + allwinner,drive = <0x3>; + allwinner,data = <0xffffffff>; + }; + + codec@0 { + linux,phandle = <0xb4>; + phandle = <0xb4>; + allwinner,pins = "PH7"; + allwinner,function = "codec"; + allwinner,pname = "gpio-spk"; + allwinner,muxsel = <0x2>; + allwinner,pull = <0x1>; + allwinner,drive = <0xffffffff>; + allwinner,data = <0xffffffff>; + }; + + Vdevice@0 { + linux,phandle = <0xb8>; + phandle = <0xb8>; + allwinner,pins = "PB1", "PB2"; + allwinner,function = "Vdevice"; + allwinner,pname = "Vdevice_0", "Vdevice_1"; + allwinner,muxsel = <0x4>; + allwinner,pull = <0x1>; + allwinner,drive = <0x2>; + allwinner,data = <0xffffffff>; + }; + }; + + pinctrl@0 { + compatible = "allwinner,axp-pinctrl"; + gpio-controller; + #size-cells = <0x0>; + #gpio-cells = <0x6>; + device_type = "axp_pio"; + linux,phandle = <0x31>; + phandle = <0x31>; + }; + + dma-controller@01c02000 { + compatible = "allwinner,sun50i-dma"; + reg = <0x0 0x1c02000 0x0 0x1000>; + interrupts = <0x0 0x32 0x4>; + clocks = <0xb>; + #dma-cells = <0x1>; + }; + + mbus-controller@01c62000 { + compatible = "allwinner,sun50i-mbus"; + reg = <0x0 0x1c62000 0x0 0x110>; + #mbus-cells = <0x1>; + }; + + arisc { + compatible = "allwinner,sunxi-arisc"; + #address-cells = <0x2>; + #size-cells = <0x2>; + clocks = <0xc 0xd 0x6 0x4>; + clock-names = "losc", "iosc", "hosc", "pll_periph0"; + powchk_used = <0x0>; + power_reg = <0x2309621>; + system_power = <0x32>; + }; + + arisc_space { + compatible = "allwinner,arisc_space"; + space1 = <0x40000 0x0 0x14000>; + space2 = <0x40100000 0x18000 0x4000>; + space3 = <0x40104000 0x0 0x1000>; + space4 = <0x40105000 0x0 0x1000>; + }; + + standby_space { + compatible = "allwinner,standby_space"; + space1 = <0x41020000 0x0 0x800>; + }; + + msgbox@1c17000 { + compatible = "allwinner,msgbox"; + clocks = <0xe>; + clock-names = "clk_msgbox"; + reg = <0x0 0x1c17000 0x0 0x1000>; + interrupts = <0x0 0x31 0x1>; + status = "okay"; + }; + + hwspinlock@1c18000 { + compatible = "allwinner,sunxi-hwspinlock"; + clocks = <0xf 0x10>; + clock-names = "clk_hwspinlock_rst", "clk_hwspinlock_bus"; + reg = <0x0 0x1c18000 0x0 0x1000>; + status = "okay"; + num-locks = <0x8>; + }; + + s_cir@1f02000 { + compatible = "allwinner,s_cir"; + reg = <0x0 0x1f02000 0x0 0x400>; + interrupts = <0x0 0x25 0x4>; + pinctrl-names = "default"; + pinctrl-0 = <0x11>; + clocks = <0x6 0x12>; + supply = "vcc-pl"; + ir_power_key_code = <0x0>; + ir_addr_code = <0x0>; + status = "disabled"; + device_type = "s_cir0"; + }; + + s_uart@1f02800 { + compatible = "allwinner,s_uart"; + reg = <0x0 0x1f02800 0x0 0x400>; + interrupts = <0x0 0x26 0x4>; + pinctrl-names = "default"; + status = "okay"; + device_type = "s_uart0"; + pinctrl-0 = <0xb5>; + }; + + s_rsb@1f03400 { + compatible = "allwinner,s_rsb"; + reg = <0x0 0x1f03400 0x0 0x400>; + interrupts = <0x0 0x27 0x4>; + pinctrl-names = "default"; + status = "okay"; + device_type = "s_rsb0"; + pinctrl-0 = <0xb6>; + }; + + s_jtag0 { + compatible = "allwinner,s_jtag"; + pinctrl-names = "default"; + status = "disabled"; + device_type = "s_jtag0"; + pinctrl-0 = <0xb7>; + }; + + timer@1c20c00 { + compatible = "allwinner,sunxi-timer"; + device_type = "timer"; + reg = <0x0 0x1c20c00 0x0 0x90>; + interrupts = <0x0 0x12 0x1>; + clock-frequency = <0x16e3600>; + timer-prescale = <0x10>; + }; + + rtc@01f00000 { + compatible = "allwinner,sun50i-rtc"; + device_type = "rtc"; + reg = <0x0 0x1f00000 0x0 0x218>; + interrupts = <0x0 0x28 0x4>; + gpr_offset = <0x100>; + gpr_len = <0x4>; + }; + + ve@01c0e000 { + compatible = "allwinner,sunxi-cedar-ve"; + reg = <0x0 0x1c0e000 0x0 0x1000 0x0 0x1c00000 0x0 0x10 0x0 0x1c20000 0x0 0x800>; + interrupts = <0x0 0x3a 0x4>; + clocks = <0x16 0x17>; + }; + + uart@01c28000 { + compatible = "allwinner,sun50i-uart"; + device_type = "uart0"; + reg = <0x0 0x1c28000 0x0 0x400>; + interrupts = <0x0 0x0 0x4>; + clocks = <0x18>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x1a>; + uart0_port = <0x0>; + uart0_type = <0x2>; + status = "okay"; + pinctrl-0 = <0xa1>; + }; + + uart@01c28400 { + compatible = "allwinner,sun50i-uart"; + device_type = "uart1"; + reg = <0x0 0x1c28400 0x0 0x400>; + interrupts = <0x0 0x1 0x4>; + clocks = <0x1b>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x1d>; + uart1_port = <0x1>; + uart1_type = <0x4>; + status = "okay"; + pinctrl-0 = <0xa2>; + }; + + uart@01c28800 { + compatible = "allwinner,sun50i-uart"; + device_type = "uart2"; + reg = <0x0 0x1c28800 0x0 0x400>; + interrupts = <0x0 0x2 0x4>; + clocks = <0x1e>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x20>; + uart2_port = <0x2>; + uart2_type = <0x4>; + status = "disabled"; + pinctrl-0 = <0xa3>; + }; + + uart@01c28c00 { + compatible = "allwinner,sun50i-uart"; + device_type = "uart3"; + reg = <0x0 0x1c28c00 0x0 0x400>; + interrupts = <0x0 0x3 0x4>; + clocks = <0x21>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x23>; + uart3_port = <0x3>; + uart3_type = <0x4>; + status = "disabled"; + pinctrl-0 = <0xa4>; + }; + + uart@01c29000 { + compatible = "allwinner,sun50i-uart"; + device_type = "uart4"; + reg = <0x0 0x1c29000 0x0 0x400>; + interrupts = <0x0 0x4 0x4>; + clocks = <0x24>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x26>; + uart4_port = <0x4>; + uart4_type = <0x4>; + status = "disabled"; + pinctrl-0 = <0xa5>; + }; + + twi@0x01c2ac00 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sun50i-twi"; + device_type = "twi0"; + reg = <0x0 0x1c2ac00 0x0 0x400>; + interrupts = <0x0 0x6 0x4>; + clocks = <0x27>; + clock-frequency = <0x61a80>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x29>; + status = "okay"; + pinctrl-0 = <0x9f>; + }; + + twi@0x01c2b000 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sun50i-twi"; + device_type = "twi1"; + reg = <0x0 0x1c2b000 0x0 0x400>; + interrupts = <0x0 0x7 0x4>; + clocks = <0x2a>; + clock-frequency = <0x30d40>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x2c>; + status = "okay"; + pinctrl-0 = <0xa0>; + }; + + twi@0x01c2b400 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sun50i-twi"; + device_type = "twi2"; + reg = <0x0 0x1c2b400 0x0 0x400>; + interrupts = <0x0 0x8 0x4>; + clocks = <0x2d>; + clock-frequency = <0x30d40>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <0x2e>; + pinctrl-1 = <0x2f>; + status = "disabled"; + }; + + usbc0@0 { + device_type = "usbc0"; + compatible = "allwinner,sunxi-otg-manager"; + usb_port_type = <0x1>; + usb_detect_type = <0x0>; + usb_det_vbus_gpio = "axp_ctrl"; + usb_host_init_state = <0x0>; + usb_regulator_io = "nocare"; + usb_wakeup_suspend = <0x0>; + usb_luns = <0x3>; + usb_serial_unique = <0x1>; + usb_serial_number = "20080411"; + rndis_wceis = <0x1>; + status = "okay"; + usb_id_gpio; + usb_drv_vbus_gpio = <0x31 0xfffe 0x3 0x1 0x0 0xffffffff 0x0>; + }; + + udc-controller@0x01c19000 { + compatible = "allwinner,sunxi-udc"; + reg = <0x0 0x1c19000 0x0 0x1000 0x0 0x1c00000 0x0 0x100>; + interrupts = <0x0 0x47 0x4>; + clocks = <0x32 0x33>; + status = "okay"; + }; + + ehci0-controller@0x01c1a000 { + compatible = "allwinner,sunxi-ehci0"; + reg = <0x0 0x1c1a000 0x0 0xfff 0x0 0x1c00000 0x0 0x100 0x0 0x1c19000 0x0 0x1000>; + interrupts = <0x0 0x48 0x4>; + clocks = <0x32 0x34>; + hci_ctrl_no = <0x0>; + status = "okay"; + }; + + ohci0-controller@0x01c1a400 { + compatible = "allwinner,sunxi-ohci0"; + reg = <0x0 0x1c1a000 0x0 0xfff 0x0 0x1c00000 0x0 0x100 0x0 0x1c19000 0x0 0x1000>; + interrupts = <0x0 0x49 0x4>; + clocks = <0x32 0x35>; + hci_ctrl_no = <0x0>; + status = "okay"; + }; + + usbc1@0 { + device_type = "usbc1"; + usb_host_init_state = <0x1>; + usb_regulator_io = "nocare"; + usb_wakeup_suspend = <0x0>; + usb_hsic_used = <0x0>; + usb_hsic_regulator_io = "vcc-hsic-12"; + usb_hsic_ctrl = <0x0>; + usb_hsic_usb3503_flag = <0x0>; + status = "okay"; + usb_port_type = <0x1>; + usb_detect_type = <0x0>; + usb_drv_vbus_gpio; + usb_hsic_rdy_gpio; + usb_hsic_hub_connect_gpio; + usb_hsic_int_n_gpio; + usb_hsic_reset_n_gpio; + }; + + ehci1-controller@0x01c1b000 { + compatible = "allwinner,sunxi-ehci1"; + reg = <0x0 0x1c1b000 0x0 0xfff 0x0 0x1c00000 0x0 0x100 0x0 0x1c19000 0x0 0x1000>; + interrupts = <0x0 0x4a 0x4>; + clocks = <0x36 0x37 0x38 0x39 0x3a>; + hci_ctrl_no = <0x1>; + status = "okay"; + }; + + ohci1-controller@0x01c1b400 { + compatible = "allwinner,sunxi-ohci1"; + reg = <0x0 0x1c1b000 0x0 0xfff 0x0 0x1c00000 0x0 0x100 0x0 0x1c19000 0x0 0x1000>; + interrupts = <0x0 0x4b 0x4>; + clocks = <0x36 0x3b>; + hci_ctrl_no = <0x1>; + status = "okay"; + }; + + codec@0x01c22c00 { + compatible = "allwinner,sunxi-internal-codec"; + reg = <0x0 0x1c22c00 0x0 0x478 0x0 0x1f015c0 0x0 0x0>; + clocks = <0x3c>; + pinctrl-names = "aif2-default", "aif3-default", "aif2-sleep", "aif3-sleep"; + pinctrl-1 = <0x3e>; + pinctrl-2 = <0x3f>; + pinctrl-3 = <0x40>; + gpio-spk = <0x30 0x7 0x7 0x1 0x1 0x1 0x1>; + headphonevol = <0x3b>; + spkervol = <0x1a>; + earpiecevol = <0x1e>; + maingain = <0x4>; + headsetmicgain = <0x4>; + adcagc_cfg = <0x0>; + adcdrc_cfg = <0x0>; + adchpf_cfg = <0x0>; + dacdrc_cfg = <0x0>; + dachpf_cfg = <0x0>; + aif1_lrlk_div = <0x40>; + aif2_lrlk_div = <0x40>; + aif2config = <0x0>; + aif3config = <0x0>; + pa_sleep_time = <0x15e>; + dac_digital_vol = <0xa0a0>; + status = "okay"; + linux,phandle = <0x4d>; + phandle = <0x4d>; + device_type = "codec"; + pinctrl-0 = <0xb4>; + }; + + i2s0-controller@0x01c22c00 { + compatible = "allwinner,sunxi-internal-i2s"; + reg = <0x0 0x1c22c00 0x0 0x478>; + clocks = <0x2 0x41>; + status = "okay"; + linux,phandle = <0x4c>; + phandle = <0x4c>; + device_type = "i2s"; + }; + + daudio@0x01c22000 { + compatible = "allwinner,sunxi-daudio"; + reg = <0x0 0x1c22000 0x0 0x58>; + clocks = <0x2 0x42>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <0x43>; + pinctrl-1 = <0x44>; + pcm_lrck_period = <0x20>; + pcm_lrckr_period = <0x1>; + slot_width_select = <0x20>; + pcm_lsb_first = <0x0>; + tx_data_mode = <0x0>; + rx_data_mode = <0x0>; + daudio_master = <0x4>; + audio_format = <0x1>; + signal_inversion = <0x1>; + frametype = <0x0>; + tdm_config = <0x1>; + tdm_num = <0x0>; + status = "disabled"; + linux,phandle = <0x4e>; + phandle = <0x4e>; + device_type = "daudio0"; + }; + + daudio@0x01c22400 { + compatible = "allwinner,sunxi-daudio"; + reg = <0x0 0x1c22400 0x0 0x58>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <0x45>; + pinctrl-1 = <0x46>; + clocks = <0x2 0x47>; + pcm_lrck_period = <0x20>; + pcm_lrckr_period = <0x1>; + slot_width_select = <0x20>; + pcm_lsb_first = <0x0>; + tx_data_mode = <0x0>; + rx_data_mode = <0x0>; + daudio_master = <0x4>; + audio_format = <0x1>; + signal_inversion = <0x1>; + frametype = <0x0>; + tdm_config = <0x1>; + tdm_num = <0x1>; + status = "disabled"; + linux,phandle = <0x4f>; + phandle = <0x4f>; + device_type = "daudio1"; + }; + + daudio@0x01c22800 { + compatible = "allwinner,sunxi-tdmhdmi"; + reg = <0x0 0x1c22800 0x0 0x58>; + clocks = <0x2 0x48>; + status = "okay"; + linux,phandle = <0x50>; + phandle = <0x50>; + device_type = "daudio2"; + }; + + spdif-controller@0x01c21000 { + compatible = "allwinner,sunxi-spdif"; + reg = <0x0 0x1c21000 0x0 0x38>; + clocks = <0x2 0x49>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <0x4a>; + pinctrl-1 = <0x4b>; + status = "disabled"; + linux,phandle = <0x51>; + phandle = <0x51>; + device_type = "spdif"; + }; + + sound@0 { + compatible = "allwinner,sunxi-codec-machine"; + interrupts = <0x0 0x1c 0x4>; + sunxi,i2s-controller = <0x4c>; + sunxi,audio-codec = <0x4d>; + aif2fmt = <0x3>; + aif3fmt = <0x3>; + aif2master = <0x1>; + hp_detect_case = <0x1>; + status = "okay"; + device_type = "sndcodec"; + }; + + sound@1 { + compatible = "allwinner,sunxi-daudio0-machine"; + sunxi,daudio0-controller = <0x4e>; + status = "disabled"; + device_type = "snddaudio0"; + }; + + sound@2 { + compatible = "allwinner,sunxi-daudio1-machine"; + sunxi,daudio1-controller = <0x4f>; + status = "disabled"; + device_type = "snddaudio1"; + }; + + sound@3 { + compatible = "allwinner,sunxi-hdmi-machine"; + sunxi,hdmi-controller = <0x50>; + status = "okay"; + device_type = "sndhdmi"; + }; + + sound@4 { + compatible = "allwinner,sunxi-spdif-machine"; + sunxi,spdif-controller = <0x51>; + status = "disabled"; + device_type = "sndspdif"; + }; + + spi@01c68000 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sun50i-spi"; + device_type = "spi0"; + reg = <0x0 0x1c68000 0x0 0x1000>; + interrupts = <0x0 0x41 0x4>; + clocks = <0x4 0x52>; + clock-frequency = <0x5f5e100>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x55>; + spi0_cs_number = <0x1>; + spi0_cs_bitmap = <0x1>; + status = "disabled"; + pinctrl-0 = <0xa6 0xa7>; + }; + + spi@01c69000 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sun50i-spi"; + device_type = "spi1"; + reg = <0x0 0x1c69000 0x0 0x1000>; + interrupts = <0x0 0x42 0x4>; + clocks = <0x4 0x56>; + clock-frequency = <0x5f5e100>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x59>; + spi1_cs_number = <0x1>; + spi1_cs_bitmap = <0x1>; + status = "disabled"; + pinctrl-0 = <0xa8 0xa9>; + }; + + sdmmc@01C11000 { + compatible = "allwinner,sun50i-sdmmc2"; + device_type = "sdc2"; + reg = <0x0 0x1c11000 0x0 0x1000>; + interrupts = <0x0 0x3e 0x104>; + clocks = <0x6 0x5a 0x5b 0x5c 0x5d>; + clock-names = "osc24m", "pll_periph", "mmc", "ahb", "rst"; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x5f>; + bus-width = <0x8>; + max-frequency = <0x5f5e100>; + sdc_tm4_sm0_freq0 = <0x0>; + sdc_tm4_sm0_freq1 = <0x0>; + sdc_tm4_sm1_freq0 = <0x0>; + sdc_tm4_sm1_freq1 = <0x0>; + sdc_tm4_sm2_freq0 = <0x0>; + sdc_tm4_sm2_freq1 = <0x0>; + sdc_tm4_sm3_freq0 = <0x5000000>; + sdc_tm4_sm3_freq1 = <0x405>; + sdc_tm4_sm4_freq0 = <0x50000>; + sdc_tm4_sm4_freq1 = <0x408>; + status = "okay"; + non-removable; + pinctrl-0 = <0xb3>; + cd-gpios; + sunxi-power-save-mode; + sunxi-dis-signal-vol-sw; + mmc-ddr-1_8v; + mmc-hs200-1_8v; + mmc-hs400-1_8v; + vmmc = "vcc-emmc"; + vqmmc = "vcc-lpddr"; + vdmmc = "none"; + }; + + sdmmc@01c0f000 { + compatible = "allwinner,sun50i-sdmmc0"; + device_type = "sdc0"; + reg = <0x0 0x1c0f000 0x0 0x1000>; + interrupts = <0x0 0x3c 0x104>; + clocks = <0x6 0x5a 0x60 0x61 0x62>; + clock-names = "osc24m", "pll_periph", "mmc", "ahb", "rst"; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x64>; + max-frequency = <0x2faf080>; + bus-width = <0x4>; + broken-cd; + status = "okay"; + pinctrl-0 = <0xb1>; + cd-gpios = <0x30 0x5 0x6 0x0 0x1 0x2 0xffffffff>; + sunxi-power-save-mode; + vmmc = "none"; + vqmmc = "none"; + vdmmc = "vcc-sdc"; + }; + + sdmmc@1C10000 { + compatible = "allwinner,sun50i-sdmmc1"; + device_type = "sdc1"; + reg = <0x0 0x1c10000 0x0 0x1000>; + interrupts = <0x0 0x3d 0x104>; + clocks = <0x6 0x5a 0x65 0x66 0x67>; + clock-names = "osc24m", "pll_periph", "mmc", "ahb", "rst"; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x69>; + max-frequency = <0x8f0d180>; + bus-width = <0x4>; + sunxi-dly-52M-ddr4 = <0x1 0x0 0x0 0x0 0x2>; + sunxi-dly-104M = <0x1 0x0 0x0 0x0 0x1>; + sunxi-dly-208M = <0x1 0x0 0x0 0x0 0x1>; + status = "okay"; + pinctrl-0 = <0xb2>; + sd-uhs-sdr50; + sd-uhs-ddr50; + sd-uhs-sdr104; + cap-sdio-irq; + keep-power-in-suspend; + ignore-pm-notify; + }; + + disp@01000000 { + compatible = "allwinner,sun50i-disp"; + reg = <0x0 0x1000000 0x0 0x300000 0x0 0x1c0c000 0x0 0x17fc 0x0 0x1ca0000 0x0 0x10fc>; + interrupts = <0x0 0x56 0x104 0x0 0x57 0x104 0x0 0x59 0x104>; + clocks = <0x6a 0x6b 0x6c 0x6d 0x6e>; + status = "okay"; + device_type = "disp"; + disp_init_enable = <0x1>; + disp_mode = <0x0>; + screen0_output_type = <0x1>; + screen0_output_mode = <0x4>; + screen1_output_type = <0x3>; + screen1_output_mode = <0xa>; + fb0_format = <0x0>; + fb0_width = <0x0>; + fb0_height = <0x0>; + fb1_format = <0x0>; + fb1_width = <0x0>; + fb1_height = <0x0>; + }; + + lcd0@01c0c000 { + compatible = "allwinner,sunxi-lcd0"; + pinctrl-names = "active", "sleep"; + status = "okay"; + device_type = "lcd0"; + lcd_used = <0x1>; + lcd_driver_name = "anx9804_panel"; + lcd_model_name = <0x2>; + lcd_backlight = <0x32>; + lcd_if = <0x0>; + lcd_x = <0x556>; + lcd_y = <0x300>; + lcd_width = <0x100>; + lcd_height = <0x90>; + lcd_dclk_freq = <0x4d>; + lcd_pwm_used = <0x1>; + lcd_pwm_ch = <0x0>; + lcd_pwm_freq = <0x2ee0>; + lcd_pwm_pol = <0x0>; + lcd_pwm_max_limit = <0xfa>; + lcd_hbp = <0x40>; + lcd_ht = <0x640>; + lcd_hspw = <0x36>; + lcd_vbp = <0x14>; + lcd_vt = <0x35c>; + lcd_vspw = <0x5>; + lcd_lvds_if = <0x0>; + lcd_lvds_colordepth = <0x0>; + lcd_lvds_mode = <0x0>; + lcd_frm = <0x1>; + lcd_hv_clk_phase = <0x0>; + lcd_hv_sync_polarity = <0x0>; + lcd_dsi_if = <0x0>; + lcd_dsi_lane = <0x4>; + lcd_dsi_format = <0x0>; + lcd_dsi_te = <0x0>; + lcd_gamma_en = <0x0>; + lcd_bright_curve_en = <0x0>; + lcd_cmap_en = <0x0>; + lcd_edp_tx_rate = <0x2>; + lcd_edp_tx_lane = <0x2>; + lcd_edp_colordepth = <0x1>; + lcdgamma4iep = <0x16>; + lcd_bl_en = <0x30 0x3 0x17 0x1 0x0 0xffffffff 0x1>; + lcd_bl_en_power = "none"; + lcd_power = "vcc-lvds"; + lcd_power1 = "vcc-mipi"; + lcd_power2 = "vcc-hsic-12"; + lcd_gpio_0 = <0x30 0x3 0x18 0x1 0x0 0xffffffff 0x0>; + lcd_gpio_1 = <0x30 0x7 0x6 0x1 0x0 0xffffffff 0x1>; + lcd_gpio_2 = <0x30 0x0 0x8 0x0 0x1 0xffffffff 0x0>; + lcd_gpio_3 = <0x30 0x0 0x9 0x0 0x1 0xffffffff 0x0>; + pinctrl-0 = <0xac>; + lcd_pin_power = "vcc-pd"; + pinctrl-1 = <0xad>; + }; + + hdmi@01ee0000 { + compatible = "allwinner,sunxi-hdmi"; + reg = <0x0 0x1ee0000 0x0 0x20000>; + clocks = <0x6f 0x70>; + device_type = "hdmi"; + status = "okay"; + hdmi_power = "vcc-hdmi-33"; + hdmi_hdcp_enable = <0x0>; + hdmi_cts_compatibility = <0x0>; + }; + + tr@01000000 { + compatible = "allwinner,sun50i-tr"; + reg = <0x0 0x1000000 0x0 0x200bc>; + interrupts = <0x0 0x60 0x104>; + clocks = <0x6a>; + status = "okay"; + }; + + pwm@01c21400 { + compatible = "allwinner,sunxi-pwm"; + reg = <0x0 0x1c21400 0x0 0x3c>; + pwm-number = <0x1>; + pwm-base = <0x0>; + pwms = <0x71>; + }; + + pwm0@01c21400 { + compatible = "allwinner,sunxi-pwm0"; + pinctrl-names = "active", "sleep"; + reg_base = <0x1c21400>; + reg_busy_offset = <0x0>; + reg_busy_shift = <0x1c>; + reg_enable_offset = <0x0>; + reg_enable_shift = <0x4>; + reg_clk_gating_offset = <0x0>; + reg_clk_gating_shift = <0x6>; + reg_bypass_offset = <0x0>; + reg_bypass_shift = <0x9>; + reg_pulse_start_offset = <0x0>; + reg_pulse_start_shift = <0x8>; + reg_mode_offset = <0x0>; + reg_mode_shift = <0x7>; + reg_polarity_offset = <0x0>; + reg_polarity_shift = <0x5>; + reg_period_offset = <0x4>; + reg_period_shift = <0x10>; + reg_period_width = <0x10>; + reg_active_offset = <0x4>; + reg_active_shift = <0x0>; + reg_active_width = <0x10>; + reg_prescal_offset = <0x0>; + reg_prescal_shift = <0x0>; + reg_prescal_width = <0x4>; + linux,phandle = <0x71>; + phandle = <0x71>; + device_type = "pwm0"; + pwm_used = <0x1>; + pinctrl-0 = <0xae>; + pinctrl-1 = <0xaf>; + }; + + s_pwm@1f03800 { + compatible = "allwinner,sunxi-s_pwm"; + reg = <0x0 0x1f03800 0x0 0x3c>; + pwm-number = <0x1>; + pwm-base = <0x10>; + pwms = <0x72>; + }; + + spwm0@0x01f03800 { + compatible = "allwinner,sunxi-pwm16"; + pinctrl-names = "active", "sleep"; + reg_base = <0x1f03800>; + reg_busy_offset = <0x0>; + reg_busy_shift = <0x1c>; + reg_enable_offset = <0x0>; + reg_enable_shift = <0x4>; + reg_clk_gating_offset = <0x0>; + reg_clk_gating_shift = <0x6>; + reg_bypass_offset = <0x0>; + reg_bypass_shift = <0x9>; + reg_pulse_start_offset = <0x0>; + reg_pulse_start_shift = <0x8>; + reg_mode_offset = <0x0>; + reg_mode_shift = <0x7>; + reg_polarity_offset = <0x0>; + reg_polarity_shift = <0x5>; + reg_period_offset = <0x4>; + reg_period_shift = <0x10>; + reg_period_width = <0x10>; + reg_active_offset = <0x4>; + reg_active_shift = <0x0>; + reg_active_width = <0x10>; + reg_prescal_offset = <0x0>; + reg_prescal_shift = <0x0>; + reg_prescal_width = <0x4>; + linux,phandle = <0x72>; + phandle = <0x72>; + }; + + boot_disp { + compatible = "allwinner,boot_disp"; + device_type = "boot_disp"; + output_disp = <0x0>; + output_type = <0x1>; + output_mode = <0x4>; + }; + + cci@0x01cb3000 { + compatible = "allwinner,sunxi-csi_cci"; + reg = <0x0 0x1cb3000 0x0 0x1000>; + interrupts = <0x0 0x55 0x4>; + status = "okay"; + }; + + csi_res@0x01cb0000 { + compatible = "allwinner,sunxi-csi"; + reg = <0x0 0x1cb0000 0x0 0x1000>; + status = "okay"; + }; + + vfe@0 { + device_type = "csi0"; + compatible = "allwinner,sunxi-vfe"; + interrupts = <0x0 0x54 0x4>; + clocks = <0x73 0x74 0x75 0x4 0x6 0x5>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x77>; + csi0_sensor_list = <0x0>; + status = "okay"; + pinctrl-0 = <0xb0>; + csi0_mck = <0x30 0x4 0x1 0x0 0x0 0x1 0x0>; + + dev@0 { + csi0_dev0_mname = "bf3703"; + csi0_dev0_twi_addr = <0x3e>; + csi0_dev0_pos = "rear"; + csi0_dev0_isp_used = <0x1>; + csi0_dev0_fmt = <0x0>; + csi0_dev0_stby_mode = <0x1>; + csi0_dev0_vflip = <0x0>; + csi0_dev0_hflip = <0x0>; + csi0_dev0_iovdd = "iovdd-csi"; + csi0_dev0_iovdd_vol = <0x2ab980>; + csi0_dev0_avdd = "avdd-csi"; + csi0_dev0_avdd_vol = <0x2ab980>; + csi0_dev0_dvdd = "dvdd-csi-18"; + csi0_dev0_dvdd_vol = <0x1b7740>; + csi0_dev0_flash_used = <0x0>; + csi0_dev0_flash_type = <0x2>; + csi0_dev0_flvdd = "vdd-csi-led"; + csi0_dev0_flvdd_vol = <0x325aa0>; + csi0_dev0_act_used = <0x0>; + csi0_dev0_act_name = "ad5820_act"; + csi0_dev0_act_slave = <0x18>; + status = "okay"; + device_type = "csi0_dev0"; + csi0_dev0_afvdd; + csi0_dev0_afvdd_vol; + csi0_dev0_power_en; + csi0_dev0_reset = <0x30 0x4 0xe 0x0 0x0 0x1 0x0>; + csi0_dev0_pwdn = <0x30 0x4 0xf 0x0 0x0 0x1 0x0>; + csi0_dev0_flash_en; + csi0_dev0_flash_mode; + csi0_dev0_af_pwdn; + }; + + dev@1 { + csi0_dev1_mname = "gc2145"; + csi0_dev1_twi_addr = <0x78>; + csi0_dev1_pos = "front"; + csi0_dev1_isp_used = <0x1>; + csi0_dev1_fmt = <0x0>; + csi0_dev1_stby_mode = <0x1>; + csi0_dev1_vflip = <0x0>; + csi0_dev1_hflip = <0x0>; + csi0_dev1_iovdd = "iovdd-csi"; + csi0_dev1_iovdd_vol = <0x2ab980>; + csi0_dev1_avdd = "avdd-csi"; + csi0_dev1_avdd_vol = <0x2ab980>; + csi0_dev1_dvdd = "dvdd-csi-18"; + csi0_dev1_dvdd_vol = <0x1b7740>; + csi0_dev1_flash_used = <0x0>; + csi0_dev1_flash_type = <0x2>; + csi0_dev1_flvdd = "vdd-csi-led"; + csi0_dev1_flvdd_vol = <0x325aa0>; + csi0_dev1_act_used = <0x0>; + csi0_dev1_act_name = "ad5820_act"; + csi0_dev1_act_slave = <0x18>; + status = "disabled"; + device_type = "csi0_dev1"; + csi0_dev1_afvdd; + csi0_dev1_afvdd_vol; + csi0_dev1_power_en; + csi0_dev1_reset = <0x30 0x4 0x10 0x0 0x0 0x1 0x0>; + csi0_dev1_pwdn = <0x30 0x4 0x11 0x0 0x0 0x1 0x0>; + csi0_dev1_flash_en; + csi0_dev1_flash_mode; + csi0_dev1_af_pwdn; + }; + }; + + vdevice@0 { + compatible = "allwinner,sun50i-vdevice"; + pinctrl-names = "default"; + test-gpios = <0x79 0xb 0x0 0x1 0x2 0x3 0x4>; + status = "okay"; + device_type = "Vdevice"; + pinctrl-0 = <0xb8>; + }; + + ce@1c15000 { + compatible = "allwinner,sunxi-ce"; + reg = <0x0 0x1c15000 0x0 0x80 0x0 0x1c15800 0x0 0x80>; + interrupts = <0x0 0x5e 0xff01 0x0 0x50 0xff01>; + clock-frequency = <0x11e1a300 0xbebc200>; + clocks = <0x7a 0x7b>; + }; + + deinterlace@0x01e00000 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sunxi-deinterlace"; + reg = <0x0 0x1e00000 0x0 0x77c>; + interrupts = <0x0 0x5d 0x4>; + clocks = <0x7c 0x4>; + status = "okay"; + device_type = "di"; + }; + + smartcard@0x01c2c400 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sunxi-scr"; + reg = <0x0 0x1c2c400 0x0 0x100>; + interrupts = <0x0 0x53 0x4>; + clocks = <0x7d 0x7e>; + clock-frequency = <0x16e3600>; + pinctrl-names = "default"; + pinctrl-0 = <0x7f>; + status = "okay"; + device_type = "smc"; + smc_used; + smc_rst; + smc_vppen; + smc_vppp; + smc_det; + smc_vccen; + smc_sck; + smc_sda; + }; + + nmi@0x01f00c00 { + #address-cells = <0x1>; + #size-cells = <0x0>; + compatible = "allwinner,sunxi-nmi"; + reg = <0x0 0x1f00c00 0x0 0x50>; + nmi_irq_ctrl = <0xc>; + nmi_irq_en = <0x40>; + nmi_irq_status = <0x10>; + nmi_irq_mask = <0x50>; + status = "okay"; + }; + + pmu0@0 { + compatible = "allwinner,pmu0"; + device_type = "pmu0"; + pmu_batdeten = <0x1>; + pmu_init_chgend_rate = <0x14>; + pmu_init_chg_enabled = <0x1>; + pmu_init_adc_freq = <0x320>; + pmu_init_adcts_freq = <0x320>; + pmu_init_chg_pretime = <0x46>; + pmu_init_chg_csttime = <0x2d0>; + pmu_batt_cap_correct = <0x1>; + pmu_chg_end_on_en = <0x0>; + pmu_pwroff_vol = <0xce4>; + pmu_pwron_vol = <0xa28>; + pmu_powkey_off_delay_time = <0x0>; + pmu_pwrok_time = <0x40>; + pmu_reset_shutdown_en = <0x1>; + pmu_restvol_adjust_time = <0x3c>; + pmu_ocv_cou_adjust_time = <0x3c>; + pmu_vbusen_func = <0x1>; + pmu_reset = <0x0>; + pmu_IRQ_wakeup = <0x1>; + pmu_hot_shutdowm = <0x1>; + pmu_inshort = <0x0>; + pmu_bat_shutdown_ltf = <0xc80>; + pmu_bat_shutdown_htf = <0xed>; + status = "okay"; + pmu_id = <0x6>; + pmu_twi_addr = <0x34>; + pmu_twi_id = <0x1>; + pmu_irq_id = <0x40>; + pmu_chg_ic_temp = <0x0>; + pmu_battery_rdc = <0x79>; + pmu_battery_cap = <0x27dc>; + pmu_runtime_chgcur = <0x708>; + pmu_suspend_chgcur = <0x5dc>; + pmu_shutdown_chgcur = <0x5dc>; + pmu_init_chgvol = <0x1068>; + pmu_ac_vol = <0xfa0>; + pmu_ac_cur = <0xdac>; + pmu_usbpc_vol = <0x1130>; + pmu_usbpc_cur = <0x1f4>; + pmu_battery_warning_level1 = <0xf>; + pmu_battery_warning_level2 = <0x0>; + pmu_chgled_func = <0x1>; + pmu_chgled_type = <0x0>; + pmu_bat_para1 = <0x0>; + pmu_bat_para2 = <0x0>; + pmu_bat_para3 = <0x0>; + pmu_bat_para4 = <0x0>; + pmu_bat_para5 = <0x0>; + pmu_bat_para6 = <0x0>; + pmu_bat_para7 = <0x1>; + pmu_bat_para8 = <0x1>; + pmu_bat_para9 = <0x2>; + pmu_bat_para10 = <0x2>; + pmu_bat_para11 = <0x3>; + pmu_bat_para12 = <0xa>; + pmu_bat_para13 = <0x12>; + pmu_bat_para14 = <0x1e>; + pmu_bat_para15 = <0x2c>; + pmu_bat_para16 = <0x32>; + pmu_bat_para17 = <0x36>; + pmu_bat_para18 = <0x3a>; + pmu_bat_para19 = <0x3d>; + pmu_bat_para20 = <0x42>; + pmu_bat_para21 = <0x48>; + pmu_bat_para22 = <0x4d>; + pmu_bat_para23 = <0x52>; + pmu_bat_para24 = <0x55>; + pmu_bat_para25 = <0x5b>; + pmu_bat_para26 = <0x60>; + pmu_bat_para27 = <0x62>; + pmu_bat_para28 = <0x64>; + pmu_bat_para29 = <0x64>; + pmu_bat_para30 = <0x64>; + pmu_bat_para31 = <0x64>; + pmu_bat_para32 = <0x64>; + pmu_bat_charge_ltf = <0x8d5>; + pmu_bat_charge_htf = <0x184>; + pmu_powkey_off_time = <0x1770>; + pmu_powkey_off_func = <0x0>; + pmu_powkey_off_en = <0x1>; + pmu_powkey_long_time = <0x5dc>; + pmu_powkey_on_time = <0x3e8>; + power_start = <0x0>; + }; + + regu@0 { + compatible = "allwinner,pmu0_regu"; + regulator_count = <0x17>; + status = "okay"; + device_type = "pmu0_regu"; + regulator1 = "axp81x_dcdc1 none vcc-nand vcc-emmc vcc-sdc vcc-usb-30 vcc-io vcc-pd"; + regulator2 = "axp81x_dcdc2 none vdd-cpua"; + regulator3 = "axp81x_dcdc3 none"; + regulator4 = "axp81x_dcdc4 none"; + regulator5 = "axp81x_dcdc5 none vcc-dram"; + regulator6 = "axp81x_dcdc6 none vdd-sys"; + regulator7 = "axp81x_dcdc7 none"; + regulator8 = "axp81x_rtc none"; + regulator9 = "axp81x_aldo1 none vdd-csi-led iovdd-csi vcc-pe"; + regulator10 = "axp81x_aldo2 none vcc-pl"; + regulator11 = "axp81x_aldo3 none vcc-avcc vcc-pll"; + regulator12 = "axp81x_dldo1 none vcc-hdmi-33 vcc-dsi-33 vcc-sensor"; + regulator13 = "axp81x_dldo2 none vcc-mipi"; + regulator14 = "axp81x_dldo3 none avdd-csi"; + regulator15 = "axp81x_dldo4 none vcc-wifi-io"; + regulator16 = "axp81x_eldo1 none vcc-cpvdd vcc-pc vcc-pg"; + regulator17 = "axp81x_eldo2 none vcc-lcd-0 hall-vcc-18"; + regulator18 = "axp81x_eldo3 none dvdd-csi-18"; + regulator19 = "axp81x_fldo1 none vcc-hsic-12"; + regulator20 = "axp81x_fldo2 none vdd-cpus"; + regulator21 = "axp81x_gpio0ldo none vcc-ctp"; + regulator22 = "axp81x_gpio1ldo none"; + regulator23 = "axp81x_dc1sw none vcc-lvds"; + }; + + nand0@01c03000 { + compatible = "allwinner,sun50i-nand"; + device_type = "nand0"; + reg = <0x0 0x1c03000 0x0 0x1000>; + interrupts = <0x0 0x46 0x4>; + clocks = <0x4 0x80>; + pinctrl-names = "default", "sleep"; + pinctrl-1 = <0x83>; + nand0_regulator1 = "vcc-nand"; + nand0_regulator2 = "none"; + nand0_cache_level = <0x55aaaa55>; + nand0_flush_cache_num = <0x55aaaa55>; + nand0_capacity_level = <0x55aaaa55>; + nand0_id_number_ctl = <0x55aaaa55>; + nand0_print_level = <0x55aaaa55>; + nand0_p0 = <0x55aaaa55>; + nand0_p1 = <0x55aaaa55>; + nand0_p2 = <0x55aaaa55>; + nand0_p3 = <0x55aaaa55>; + status = "okay"; + nand0_support_2ch = <0x0>; + pinctrl-0 = <0xaa 0xab>; + }; + + thermal_sensor { + compatible = "allwinner,thermal_sensor"; + reg = <0x0 0x1c25000 0x0 0x400>; + interrupts = <0x0 0x1f 0x0>; + clocks = <0x6 0x84>; + sensor_num = <0x3>; + shut_temp = <0x78>; + status = "okay"; + + combine0 { + #thermal-sensor-cells = <0x1>; + combine_cnt = <0x3>; + combine_type = "max"; + combine_chn = <0x0 0x1 0x2>; + linux,phandle = <0x85>; + phandle = <0x85>; + }; + }; + + cpu_budget_cool { + compatible = "allwinner,budget_cooling"; + #cooling-cells = <0x2>; + status = "okay"; + state_cnt = <0xa>; + cluster_num = <0x1>; + state0 = <0x119400 0x4>; + state1 = <0x10d880 0x4>; + state2 = <0x101d00 0x4>; + state3 = <0xf6180 0x4>; + state4 = <0xea600 0x4>; + state5 = <0xdea80 0x4>; + state6 = <0xc7380 0x4>; + state7 = <0x9e340 0x4>; + state8 = <0x9e340 0x2>; + state9 = <0x9e340 0x1>; + linux,phandle = <0x87>; + phandle = <0x87>; + }; + + gpu_cooling { + compatible = "allwinner,gpu_cooling"; + reg = <0x0 0x0 0x0 0x0>; + #cooling-cells = <0x2>; + status = "okay"; + state_cnt = <0x3>; + state0 = <0x0>; + state1 = <0x168>; + state2 = <0x90>; + linux,phandle = <0x8c>; + phandle = <0x8c>; + }; + + thermal-zones { + + soc_thermal { + polling-delay-passive = <0x1f4>; + polling-delay = <0x7d0>; + thermal-sensors = <0x85 0x0>; + + trips { + + t0 { + temperature = <0x50>; + type = "passive"; + hysteresis = <0x0>; + linux,phandle = <0x86>; + phandle = <0x86>; + }; + + t1 { + temperature = <0x55>; + type = "passive"; + hysteresis = <0x0>; + linux,phandle = <0x88>; + phandle = <0x88>; + }; + + t2 { + temperature = <0x5a>; + type = "passive"; + hysteresis = <0x0>; + linux,phandle = <0x89>; + phandle = <0x89>; + }; + + t3 { + temperature = <0x5f>; + type = "passive"; + hysteresis = <0x0>; + linux,phandle = <0x8a>; + phandle = <0x8a>; + }; + + t4 { + temperature = <0x55>; + type = "passive"; + hysteresis = <0x0>; + linux,phandle = <0x8b>; + phandle = <0x8b>; + }; + + t5 { + temperature = <0x5f>; + type = "passive"; + hysteresis = <0x0>; + linux,phandle = <0x8d>; + phandle = <0x8d>; + }; + + t6 { + temperature = <0x6e>; + type = "critical"; + hysteresis = <0x0>; + }; + }; + + cooling-maps { + + bind0 { + contribution = <0x0>; + trip = <0x86>; + cooling-device = <0x87 0x1 0x1>; + }; + + bind1 { + contribution = <0x0>; + trip = <0x88>; + cooling-device = <0x87 0x2 0x2>; + }; + + bind2 { + contribution = <0x0>; + trip = <0x89>; + cooling-device = <0x87 0x3 0x6>; + }; + + bind3 { + contribution = <0x0>; + trip = <0x8a>; + cooling-device = <0x87 0x7 0x9>; + }; + + bind4 { + contribution = <0x0>; + trip = <0x8b>; + cooling-device = <0x8c 0x1 0x1>; + }; + + bind5 { + contribution = <0x0>; + trip = <0x8d>; + cooling-device = <0x8c 0x2 0x2>; + }; + }; + }; + }; + + keyboard { + compatible = "allwinner,keyboard_2000mv"; + reg = <0x0 0x1c21800 0x0 0x400>; + interrupts = <0x0 0x1e 0x0>; + status = "okay"; + key_cnt = <0x5>; + key1 = <0xf0 0x73>; + key2 = <0x1f4 0x72>; + key3 = <0x2bc 0x8b>; + key4 = <0x37a 0x1c>; + key5 = <0x7d0 0x66>; + }; + + eth@01c30000 { + compatible = "allwinner,sunxi-gmac"; + reg = <0x0 0x1c30000 0x0 0x40000 0x0 0x1c00000 0x0 0x30>; + pinctrl-names = "default"; + pinctrl-0 = <0x8e>; + interrupts = <0x0 0x52 0x4>; + interrupt-names = "gmacirq"; + clocks = <0x8f>; + clock-names = "gmac"; + phy-mode = "rgmii"; + tx-delay = <0x7>; + rx-delay = <0x1f>; + gmac_power1 = "axp81x_dldo2:2500000"; + gmac_power2 = "axp81x_eldo2:1800000"; + gmac_power3 = "axp81x_fldo1:1200000"; + status = "disable"; + }; + + product { + device_type = "product"; + version = "100"; + machine = "evb"; + }; + + platform { + device_type = "platform"; + eraseflag = <0x1>; + }; + + target { + device_type = "target"; + boot_clock = <0x3f0>; + storage_type = <0xffffffff>; + burn_key = <0x0>; + }; + + power_sply { + device_type = "power_sply"; + dcdc1_vol = <0xf4f24>; + dcdc2_vol = <0xf468c>; + dcdc6_vol = <0xf468c>; + aldo1_vol = <0xaf0>; + aldo2_vol = <0xf4948>; + aldo3_vol = <0xf4df8>; + dldo1_vol = <0xce4>; + dldo2_vol = <0x9c4>; + dldo3_vol = <0xaf0>; + dldo4_vol = <0xf4f24>; + eldo1_vol = <0xf4948>; + eldo2_vol = <0x708>; + eldo3_vol = <0x708>; + fldo1_vol = <0x4b0>; + fldo2_vol = <0xf468c>; + gpio0_vol = <0xf4e5c>; + }; + + card_boot { + device_type = "card_boot"; + logical_start = <0xa000>; + sprite_gpio0; + }; + + pm_para { + device_type = "pm_para"; + standby_mode = <0x1>; + }; + + card0_boot_para { + device_type = "card0_boot_para"; + card_ctrl = <0x0>; + card_high_speed = <0x1>; + card_line = <0x4>; + pinctrl-0 = <0x99>; + }; + + card2_boot_para { + device_type = "card2_boot_para"; + sdc_io_1v8 = <0x1>; + card_ctrl = <0x2>; + card_high_speed = <0x1>; + card_line = <0x8>; + pinctrl-0 = <0x9a>; + sdc_ex_dly_used = <0x2>; + tm4_smx_fx_0 = <0x0>; + tm4_smx_fx_1 = <0x0>; + tm4_smx_fx_2 = <0x2fffff>; + tm4_smx_fx_3 = <0x0>; + tm4_smx_fx_4 = <0xdffff>; + tm4_smx_fx_5 = <0x0>; + tm4_smx_fx_6 = <0xd2fffff>; + tm4_smx_fx_7 = <0xb2d>; + tm4_smx_fx_8 = <0x0>; + tm4_smx_fx_9 = <0x0>; + }; + + twi_para { + device_type = "twi_para"; + twi_port = <0x0>; + pinctrl-0 = <0x9b>; + }; + + uart_para { + device_type = "uart_para"; + uart_debug_port = <0x0>; + pinctrl-0 = <0x9c>; + }; + + jtag_para { + device_type = "jtag_para"; + jtag_enable = <0x0>; + pinctrl-0 = <0x9d>; + }; + + clock { + device_type = "clock"; + pll4 = <0x12c>; + pll6 = <0x258>; + pll8 = <0x168>; + pll9 = <0x129>; + pll10 = <0x108>; + }; + + gmac_para { + device_type = "gmac_para"; + gmac_used = <0x0>; + pinctrl-0 = <0x9e>; + }; + + rtp_para { + device_type = "rtp_para"; + rtp_used = <0x0>; + rtp_screen_size = <0x5>; + rtp_regidity_level = <0x5>; + rtp_press_threshold_enable = <0x0>; + rtp_press_threshold = <0x1f40>; + rtp_sensitive_level = <0xf>; + rtp_exchange_x_y_flag = <0x0>; + }; + + ctp { + device_type = "ctp"; + compatible = "allwinner,sun50i-ctp-para"; + status = "disabled"; + ctp_name = "gt9271_D116"; + ctp_twi_id = <0x0>; + ctp_twi_addr = <0x40>; + ctp_screen_max_x = <0x556>; + ctp_screen_max_y = <0x300>; + ctp_revert_x_flag = <0x0>; + ctp_revert_y_flag = <0x0>; + ctp_exchange_x_y_flag = <0x0>; + ctp_int_port = <0x30 0x7 0x4 0x6 0xffffffff 0xffffffff 0xffffffff>; + ctp_wakeup = <0x30 0x7 0x8 0x1 0xffffffff 0xffffffff 0x1>; + ctp_power_ldo_vol = <0xce4>; + ctp_power_io; + }; + + ctp_list { + device_type = "ctp_list"; + compatible = "allwinner,sun50i-ctp-list"; + status = "okay"; + gslX680new = <0x1>; + gt9xx_ts = <0x0>; + gt9xxf_ts = <0x1>; + gt9xxnew_ts = <0x0>; + gt82x = <0x1>; + zet622x = <0x1>; + aw5306_ts = <0x1>; + }; + + tkey_para { + device_type = "tkey_para"; + tkey_used = <0x0>; + tkey_twi_id; + tkey_twi_addr; + tkey_int; + }; + + motor_para { + device_type = "motor_para"; + motor_used = <0x0>; + motor_shake = <0x31 0xfffe 0x3 0x1 0xffffffff 0xffffffff 0x1>; + }; + + tvout_para { + device_type = "tvout_para"; + tvout_used; + tvout_channel_num; + tv_en; + }; + + tvin_para { + device_type = "tvin_para"; + tvin_used; + tvin_channel_num; + }; + + serial_feature { + device_type = "serial_feature"; + sn_filename = "sn.txt"; + }; + + gsensor { + device_type = "gsensor"; + compatible = "allwinner,sun50i-gsensor-para"; + status = "disabled"; + gsensor_twi_id = <0x1>; + gsensor_twi_addr = <0x1d>; + gsensor_vcc_io = "vcc-sensor"; + gsensor_vcc_io_val = <0xce4>; + gsensor_int1 = <0x30 0x7 0x5 0x6 0x1 0xffffffff 0xffffffff>; + gsensor_int2 = <0x30 0x7 0x6 0x6 0x1 0xffffffff 0xffffffff>; + }; + + gsensor_list { + device_type = "gsensor_list"; + compatible = "allwinner,sun50i-gsensor-list-para"; + gsensor_list__used = <0x0>; + lsm9ds0_acc_mag = <0x1>; + bma250 = <0x1>; + mma8452 = <0x1>; + mma7660 = <0x1>; + mma865x = <0x1>; + afa750 = <0x1>; + lis3de_acc = <0x1>; + lis3dh_acc = <0x1>; + kxtik = <0x1>; + dmard10 = <0x0>; + dmard06 = <0x1>; + mxc622x = <0x1>; + fxos8700 = <0x1>; + lsm303d = <0x0>; + sc7a30 = <0x1>; + }; + + 3g_para { + device_type = "3g_para"; + 3g_used = <0x0>; + 3g_usbc_num = <0x2>; + 3g_uart_num = <0x0>; + bb_vbat = <0x79 0xb 0x3 0x1 0xffffffff 0xffffffff 0x0>; + bb_host_wake = <0x79 0xc 0x0 0x1 0xffffffff 0xffffffff 0x0>; + bb_on = <0x79 0xc 0x1 0x1 0xffffffff 0xffffffff 0x0>; + bb_pwr_on = <0x79 0xc 0x3 0x1 0xffffffff 0xffffffff 0x0>; + bb_wake = <0x79 0xc 0x4 0x1 0xffffffff 0xffffffff 0x0>; + bb_rf_dis = <0x79 0xc 0x5 0x1 0xffffffff 0xffffffff 0x0>; + bb_rst = <0x79 0xc 0x6 0x1 0xffffffff 0xffffffff 0x0>; + 3g_int; + }; + + gyroscopesensor { + device_type = "gyroscopesensor"; + compatible = "allwinner,sun50i-gyr_sensors-para"; + status = "disabled"; + gy_twi_id = <0x2>; + gy_twi_addr = <0x6a>; + gy_int1 = <0x30 0x0 0xa 0x6 0x1 0xffffffff 0xffffffff>; + gy_int2; + }; + + gy_list { + device_type = "gy_list"; + compatible = "allwinner,sun50i-gyr_sensors-list-para"; + status = "disabled"; + lsm9ds0_gyr = <0x1>; + l3gd20_gyr = <0x0>; + bmg160_gyr = <0x1>; + }; + + lightsensor { + device_type = "lightsensor"; + compatible = "allwinner,sun50i-lsensors-para"; + status = "disabled"; + ls_twi_id = <0x2>; + ls_twi_addr = <0x23>; + ls_int = <0x30 0x0 0xc 0x6 0x1 0xffffffff 0xffffffff>; + }; + + ls_list { + device_type = "ls_list"; + compatible = "allwinner,sun50i-lsensors-list-para"; + status = "disabled"; + ltr_501als = <0x1>; + jsa1212 = <0x0>; + jsa1127 = <0x1>; + stk3x1x = <0x0>; + }; + + compasssensor { + device_type = "compasssensor"; + compatible = "allwinner,sun50i-compass-para"; + status = "disabled"; + compass_twi_id = <0x2>; + compass_twi_addr = <0xd>; + compass_int = <0x30 0x0 0xb 0x6 0x1 0xffffffff 0xffffffff>; + }; + + compass_list { + device_type = "compass_list"; + compatible = "allwinner,sun50i-compass-list-para"; + status = "disabled"; + lsm9ds0 = <0x1>; + lsm303d = <0x0>; + }; + + recovery_key { + device_type = "recovery_key"; + key_max = <0xa>; + key_min = <0xa>; + }; + + fastboot_key { + device_type = "fastboot_key"; + key_max = <0x4>; + key_min = <0x4>; + }; + }; + + aliases { + serial0 = "/soc@01c00000/uart@01c28000"; + serial1 = "/soc@01c00000/uart@01c28400"; + serial2 = "/soc@01c00000/uart@01c28800"; + serial3 = "/soc@01c00000/uart@01c28c00"; + serial4 = "/soc@01c00000/uart@01c29000"; + twi0 = "/soc@01c00000/twi@0x01c2ac00"; + twi1 = "/soc@01c00000/twi@0x01c2b000"; + twi2 = "/soc@01c00000/twi@0x01c2b400"; + spi0 = "/soc@01c00000/spi@01c68000"; + spi1 = "/soc@01c00000/spi@01c69000"; + global_timer0 = "/soc@01c00000/timer@1c20c00"; + cci0 = "/soc@01c00000/cci@0x01cb3000"; + csi_res0 = "/soc@01c00000/csi_res@0x01cb0000"; + vfe0 = "/soc@01c00000/vfe@0"; + mmc0 = "/soc@01c00000/sdmmc@01c0f000"; + mmc2 = "/soc@01c00000/sdmmc@01C11000"; + nand0 = "/soc@01c00000/nand0@01c03000"; + disp = "/soc@01c00000/disp@01000000"; + lcd0 = "/soc@01c00000/lcd0@01c0c000"; + hdmi = "/soc@01c00000/hdmi@01ee0000"; + pwm = "/soc@01c00000/pwm@01c21400"; + pwm0 = "/soc@01c00000/pwm0@01c21400"; + s_pwm = "/soc@01c00000/s_pwm@1f03800"; + spwm0 = "/soc@01c00000/spwm0@0x01f03800"; + boot_disp = "/soc@01c00000/boot_disp"; + }; + + chosen { + bootargs = "earlyprintk=sunxi-uart,0x01c28000 loglevel=8 initcall_debug=1 console=ttyS0 init=/init"; + linux,initrd-start = <0x0 0x0>; + linux,initrd-end = <0x0 0x0>; + }; + + cpus { + #address-cells = <0x2>; + #size-cells = <0x0>; + + cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x0>; + enable-method = "psci"; + cpufreq_tbl = <0x75300 0x927c0 0xafc80 0xc7380 0xdea80 0xea600 0xf6180 0x101d00 0x10d880 0x119400 0x124f80 0x148200>; + clock-latency = <0x1e8480>; + clock-frequency = <0x3c14dc00>; + cpu-idle-states = <0x90 0x91 0x92>; + }; + + cpu@1 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x1>; + enable-method = "psci"; + clock-frequency = <0x3c14dc00>; + cpu-idle-states = <0x90 0x91 0x92>; + }; + + cpu@2 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x2>; + enable-method = "psci"; + clock-frequency = <0x3c14dc00>; + cpu-idle-states = <0x90 0x91 0x92>; + }; + + cpu@3 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x3>; + enable-method = "psci"; + clock-frequency = <0x3c14dc00>; + cpu-idle-states = <0x90 0x91 0x92>; + }; + + idle-states { + entry-method = "arm,psci"; + + cpu-sleep-0 { + compatible = "arm,idle-state"; + arm,psci-suspend-param = <0x10000>; + entry-latency-us = <0x28>; + exit-latency-us = <0x64>; + min-residency-us = <0x96>; + linux,phandle = <0x90>; + phandle = <0x90>; + }; + + cluster-sleep-0 { + compatible = "arm,idle-state"; + arm,psci-suspend-param = <0x1010000>; + entry-latency-us = <0x1f4>; + exit-latency-us = <0x3e8>; + min-residency-us = <0x9c4>; + linux,phandle = <0x91>; + phandle = <0x91>; + }; + + sys-sleep-0 { + compatible = "arm,idle-state"; + arm,psci-suspend-param = <0x2010000>; + entry-latency-us = <0x3e8>; + exit-latency-us = <0x7d0>; + min-residency-us = <0x1194>; + linux,phandle = <0x92>; + phandle = <0x92>; + }; + }; + }; + + psci { + compatible = "arm,psci-0.2"; + method = "smc"; + psci_version = <0x84000000>; + cpu_suspend = <0xc4000001>; + cpu_off = <0x84000002>; + cpu_on = <0xc4000003>; + affinity_info = <0xc4000004>; + migrate = <0xc4000005>; + migrate_info_type = <0x84000006>; + migrate_info_up_cpu = <0xc4000007>; + system_off = <0x84000008>; + system_reset = <0x84000009>; + }; + + n_brom { + compatible = "allwinner,n-brom"; + reg = <0x0 0x0 0x0 0xc000>; + }; + + s_brom { + compatible = "allwinner,s-brom"; + reg = <0x0 0x0 0x0 0x10000>; + }; + + sram_a1 { + compatible = "allwinner,sram_a1"; + reg = <0x0 0x10000 0x0 0x8000>; + }; + + sram_a2 { + compatible = "allwinner,sram_a2"; + reg = <0x0 0x40000 0x0 0x14000>; + }; + + prcm { + compatible = "allwinner,prcm"; + reg = <0x0 0x1f01400 0x0 0x400>; + }; + + cpuscfg { + compatible = "allwinner,cpuscfg"; + reg = <0x0 0x1f01c00 0x0 0x400>; + }; + + ion { + compatible = "allwinner,sunxi-ion"; + + system_contig { + type = <0x1>; + }; + + cma { + type = <0x4>; + }; + + system { + type = <0x0>; + }; + }; + + dram { + compatible = "allwinner,dram"; + clocks = <0x93 0x94>; + clock-names = "pll_ddr0", "pll_ddr1"; + dram_clk = <0x228>; + dram_type = <0x3>; + dram_zq = <0x3b3bbb>; + dram_odt_en = <0x1>; + dram_para1 = <0x10e410e4>; + dram_para2 = <0x1000>; + dram_mr0 = <0x1840>; + dram_mr1 = <0x40>; + dram_mr2 = <0x18>; + dram_mr3 = <0x2>; + dram_tpr0 = <0x4a2195>; + dram_tpr1 = <0x2424190>; + dram_tpr2 = <0x8b060>; + dram_tpr3 = <0x4b005dc>; + dram_tpr4 = <0x0>; + dram_tpr5 = <0x0>; + dram_tpr6 = <0x0>; + dram_tpr7 = <0x0>; + dram_tpr8 = <0x0>; + dram_tpr9 = <0x0>; + dram_tpr10 = <0x8808>; + dram_tpr11 = <0x20250000>; + dram_tpr12 = <0x0>; + dram_tpr13 = <0x4000800>; + device_type = "dram"; + }; + + memory@40000000 { + device_type = "memory"; + reg = <0x0 0x40000000 0x0 0x40000000>; + }; + + interrupt-controller@1c81000 { + compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; + #interrupt-cells = <0x3>; + #address-cells = <0x0>; + device_type = "gic"; + interrupt-controller; + reg = <0x0 0x1c81000 0x0 0x1000 0x0 0x1c82000 0x0 0x2000 0x0 0x1c84000 0x0 0x2000 0x0 0x1c86000 0x0 0x2000>; + interrupts = <0x1 0x9 0xf04>; + linux,phandle = <0x1>; + phandle = <0x1>; + }; + + sunxi-chipid@1c14200 { + compatible = "allwinner,sunxi-chipid"; + device_type = "chipid"; + reg = <0x0 0x1c14200 0x0 0x200>; + }; + + timer { + compatible = "arm,armv8-timer"; + interrupts = <0x1 0xd 0xff01 0x1 0xe 0xff01 0x1 0xb 0xff01 0x1 0xa 0xff01>; + clock-frequency = <0x16e3600>; + }; + + pmu { + compatible = "arm,armv8-pmuv3"; + interrupts = <0x0 0x78 0x4 0x0 0x79 0x4 0x0 0x7a 0x4 0x0 0x7b 0x4>; + }; + + dvfs_table { + compatible = "allwinner,dvfs_table"; + max_freq = <0x44aa2000>; + min_freq = <0x1c9c3800>; + lv_count = <0x8>; + lv1_freq = <0x44aa2000>; + lv1_volt = <0x514>; + lv2_freq = <0x41cdb400>; + lv2_volt = <0x4ec>; + lv3_freq = <0x3ef14800>; + lv3_volt = <0x4d8>; + lv4_freq = <0x3c14dc00>; + lv4_volt = <0x4b0>; + lv5_freq = <0x39387000>; + lv5_volt = <0x488>; + lv6_freq = <0x365c0400>; + lv6_volt = <0x460>; + lv7_freq = <0x30a32c00>; + lv7_volt = <0x438>; + lv8_freq = <0x269fb200>; + lv8_volt = <0x410>; + device_type = "dvfs_table"; + }; + + dramfreq { + compatible = "allwinner,sunxi-dramfreq"; + reg = <0x0 0x1c62000 0x0 0x1000 0x0 0x1c63000 0x0 0x1000 0x0 0x1c20000 0x0 0x800>; + clocks = <0x93 0x94 0x95>; + status = "okay"; + }; + + uboot { + }; + + gpu@0x01c40000 { + compatible = "arm,mali-400", "arm,mali-utgard"; + reg = <0x0 0x1c40000 0x0 0x10000>; + interrupts = <0x0 0x61 0x4 0x0 0x62 0x4 0x0 0x63 0x4 0x0 0x64 0x4 0x0 0x66 0x4 0x0 0x67 0x4>; + interrupt-names = "IRQGP", "IRQGPMMU", "IRQPP0", "IRQPPMMU0", "IRQPP1", "IRQPPMMU1"; + clocks = <0x96 0x97>; + device_type = "gpu_mali400_0"; + normal_freq = <0x1c8>; + scene_ctrl_status = <0x0>; + temp_ctrl_status = <0x1>; + }; + + wlan { + compatible = "allwinner,sunxi-wlan"; + wlan_io_regulator = "vcc-wifi-io"; + wlan_busnum = <0x1>; + status = "okay"; + device_type = "wlan"; + clocks; + wlan_power; + wlan_regon = <0x79 0xb 0x2 0x1 0xffffffff 0xffffffff 0x0>; + wlan_hostwake = <0x79 0xb 0x3 0x6 0xffffffff 0xffffffff 0x0>; + }; + + bt { + compatible = "allwinner,sunxi-bt"; + bt_io_regulator = "vcc-wifi-io"; + status = "okay"; + device_type = "bt"; + clocks; + bt_power; + bt_rst_n = <0x79 0xb 0x4 0x1 0xffffffff 0xffffffff 0x0>; + }; + + btlpm { + compatible = "allwinner,sunxi-btlpm"; + uart_index = <0x1>; + status = "okay"; + device_type = "btlpm"; + bt_wake = <0x79 0xb 0x6 0x1 0xffffffff 0xffffffff 0x1>; + bt_hostwake = <0x79 0xb 0x5 0x6 0xffffffff 0xffffffff 0x0>; + }; + + hall { + compatible = "allwinner,hall"; + hall_pos = <0x0>; + status = "okay"; + device_type = "hall"; + hall_power = "hall-vcc-18"; + hall_power_vol = <0x708>; + hall_gpio = <0x79 0xb 0xc 0x6 0xffffffff 0xffffffff 0x0>; + }; +}; diff --git a/packages/blobs/sunxi/a64/scp.bin b/packages/blobs/sunxi/a64/scp.bin new file mode 100644 index 0000000000000000000000000000000000000000..dcb803bf7cae7559c0cf1a8f943f75e63150764f GIT binary patch literal 104660 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 a0gfRY ++ * ++ * This programme is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, version 2 of the License. ++ * ++ * This programme is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this programme. If not, see . ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++enum header_offsets { /* in words of 4 bytes */ ++ HEADER_JUMP_INS = 0, ++ HEADER_MAGIC = 1, ++ HEADER_CHECKSUM = 3, ++ HEADER_ALIGN = 4, ++ HEADER_LENGTH = 5, ++ HEADER_PRIMSIZE = 6, ++ HEADER_LOADADDR = 11, ++ HEADER_SECS = 0x500 / 4, ++ HEADER_DTOFFSET = 315, ++}; ++ ++#define MAGIC_SIZE ((HEADER_CHECKSUM - HEADER_MAGIC) * 4) ++#define HEADER_SIZE 0x600 ++ ++#define CHECKSUM_SEED 0x5F0A6C39 ++ ++#define BOOT0_OFFSET 8192 ++#define BOOT0_SIZE 32768 ++#define BOOT0_END_KB ((BOOT0_OFFSET + BOOT0_SIZE) / 1024) ++#define BOOT0_ALIGN 0x4000 ++#define UBOOT_LOAD_ADDR 0x4a000000 ++#define UBOOT_OFFSET_KB 19096 ++ ++#define ALIGN(x, a) ((((x) + (a) - 1) / (a)) * (a)) ++ ++static uint32_t calc_checksum(void *buffer, size_t length) ++{ ++ uint32_t *buf = buffer; ++ uint32_t sum = 0; ++ size_t i; ++ ++ for (i = 0; i < length / 4; i++) ++ sum += buf[i]; ++ ++ return sum; ++} ++ ++#define CHUNK_SIZE 262144 ++ ++static ssize_t read_file(const char *filename, char **buffer_addr) ++{ ++ FILE *fp; ++ char* buffer; ++ size_t len, ret; ++ ++ fp = fopen(filename, "rb"); ++ if (fp == NULL) ++ return -errno; ++ ++ buffer = malloc(CHUNK_SIZE); ++ for (len = 0; !feof(fp); len += ret) { ++ ret = fread(buffer + len, 1, CHUNK_SIZE, fp); ++ if (ferror(fp)) { ++ fclose(fp); ++ free(buffer); ++ return -errno; ++ } ++ ++ if (!feof(fp)) ++ buffer = realloc(buffer, len + 2 * CHUNK_SIZE); ++ } ++ ++ *buffer_addr = realloc(buffer, len); ++ ++ fclose(fp); ++ return len; ++} ++ ++#define ZBUFSIZE 1024 ++static int fill_zeroes(FILE *stream, off_t size) ++{ ++ static const char zeroes[ZBUFSIZE] = {}; ++ int chunk, ret; ++ ++ while (size) { ++ chunk = (size > ZBUFSIZE ? ZBUFSIZE : size); ++ ++ ret = fwrite(zeroes, 1, chunk, stream); ++ if (!ret) ++ return -errno; ++ ++ size -= ret; ++ } ++ ++ return 0; ++} ++ ++static int pseek(FILE *stream, long offset) ++{ ++ int ret; ++ ++ ret = fseek(stream, offset, SEEK_CUR); ++ if (!ret) ++ return ret; ++ ++ if (ret < 0 && errno != ESPIPE) ++ return -errno; ++ ++ return fill_zeroes(stream, offset); ++} ++ ++#define SEC_PER_TRACK 63 ++#define TRACKS_PER_CYL 255 ++static void chs_encode(int lba, uint8_t *chs) ++{ ++ int c, h, s; ++ ++ s = (lba % SEC_PER_TRACK) + 1; ++ h = ((lba / SEC_PER_TRACK) % TRACKS_PER_CYL) & 0xff; ++ c = lba / (SEC_PER_TRACK * TRACKS_PER_CYL) & 0x3ff; ++ ++ chs[0] = h; ++ chs[1] = s | (c >> 8); ++ chs[2] = c & 0xff; ++} ++ ++static void create_part_table(FILE *stream, off_t fat_size, bool efi, ++ bool patch) ++{ ++ union { ++ uint8_t b[16]; ++ uint32_t l[16]; ++ } fatp, fwp, zero = {}; ++ int i; ++ ++ fat_size /= 512; ++ for (i = 0; i < 27; i++) ++ fwrite(zero.b, 16, 1, stream); ++ fwrite(zero.b, 14, 1, stream); ++ ++ fatp.b[0] = 0x80; ++ fatp.l[2] = htole32((patch ? 1 : 20) * 2048); ++ fatp.l[3] = htole32(fat_size); ++ chs_encode(fatp.l[2], &fatp.b[1]); ++ fatp.b[4] = efi ? 0xef : 0x06; ++ chs_encode(fatp.l[2] + fatp.l[3] - 1, &fatp.b[5]); ++ fwrite(fatp.b, 16, 1, stream); ++ ++ if (patch) { ++ fwrite(zero.b, 16, 1, stream); ++ } else { ++ fwp.b[0] = 0; ++ fwp.l[2] = htole32(1); ++ fwp.l[3] = htole32(20 * 2048 - 1); ++ chs_encode(fwp.l[2], &fwp.b[1]); ++ fwp.b[4] = 0xda; ++ chs_encode(fwp.l[2] + fwp.l[3] - 1, &fwp.b[5]); ++ fwrite(fwp.b, 16, 1, stream); ++ } ++ ++ fwrite(zero.b, 16, 1, stream); ++ fwrite(zero.b, 16, 1, stream); ++ ++ zero.b[0] = 0x55; ++ zero.b[1] = 0xaa; ++ fwrite(zero.b, 2, 1, stream); ++} ++ ++/* ++ * Scan the boot0 binary for a Thumb2 instruction which loads a wide ++ * immediate into a register (MOVW , #), which is encoded as: ++ * "1111.0i10.0100.imm4|0imm3.Rd.imm8", where the imm16 is constructed as: ++ * "imm4:i:imm3:imm8". Match for an instruction which loads the "orig" value ++ * into any register and replace it with a load with the "new" value. ++ * Returns the number of patched instructions. ++ */ ++static int patch_boot0(uint16_t *boot0, uint16_t orig, uint16_t new) ++{ ++ int i; ++ uint16_t first = 0, imm; ++ int patched = 0; ++ ++ for (i = 0; i < 16384; i++) { ++ if ((boot0[i] & 0xfbf0) == 0xf240) { ++ first = boot0[i]; ++ continue; ++ } ++ if (!first) ++ continue; ++ if (boot0[i] & 0x8000) { ++ first = 0; ++ continue; ++ } ++ imm = (first & 0xf) << 12; ++ imm |= (first & 0x0400) << 1; ++ imm |= (boot0[i] & 0x7000) >> 4; ++ imm |= boot0[i] & 0x00ff; ++ ++ if (imm == orig) { ++ first &= 0xfbf0; ++ first |= (new & 0xf000) >> 12; ++ first |= (new & 0x0800) >> 1; ++ boot0[i - 1] = first; ++ boot0[i] &= 0x8f00; ++ boot0[i] |= (new & 0x0700) << 4; ++ boot0[i] |= new & 0x00ff; ++ ++ patched++; ++ } ++ ++ first = 0; ++ } ++ ++ return patched; ++} ++ ++static void usage(const char *progname, FILE *stream) ++{ ++ fprintf(stream, "boot0img: assemble an Allwinner boot image for boot0\n" ++ "usage: %s [-h] [-e] [-o output.img] [-b boot0.img]\n" ++ " [-u u-boot-dtb.bin] -d bl31.bin -s scp.bin [-a addr]\n", ++ progname); ++ fprintf(stream, " %s [-c file]\n", progname); ++ fprintf(stream, "\t-h|--help: this help output\n" ++ "\t-q|--quiet: be less verbose\n" ++ "\t-o|--output: output file name, stdout if omitted\n" ++ "\t-D|--device: output device file, -o gets ignored\n" ++ "\t-b|--boot0: boot0 image to embed into the image\n" ++ "\t-B|--boot0-patch: patch boot0 image and embed into image\n" ++ "\t-c|--checksum: calculate checksum of file\n" ++ "\t-u|--uboot: U-Boot image file (without SPL)\n" ++ "\t-F|--fdt: Device Tree file (for legacy u-boot))\n" ++ "\t-s|--sram: image file to write into SRAM\n" ++ "\t-d|--dram: image file to write into DRAM\n" ++ "\t-a|--arisc_entry: reset vector address for arisc\n" ++ "\t-e|--embedded_header: use header from U-Boot binary\n" ++ "\t-p|--partition: add a partition table with an MB FAT partition\n" ++ "\t-P|--EFI-partition: as above, but as an EFI partition\n\n"); ++ fprintf(stream, "Giving a boot0 image name will create an image which " ++ "can be written directly\nto an SD card. Otherwise just the " ++ "blob with the secondary firmware parts will\nbe assembled.\n"); ++ fprintf(stream, "\nInstead of an actual binary for the DRAM, you can " ++ "write ARM or AArch64\ntrampoline code into that location. It " ++ "will jump to the specified address.\n"); ++ fprintf(stream, "\t--dram trampoline64:\n"); ++ fprintf(stream, "\t--dram trampoline32:\n"); ++ fprintf(stream, "\nSpecifying an arisc entry address will populate the " ++ "arisc reset exception vector\nwith an OpenRISC instruction to " ++ "jump to that specified address.\n"); ++ fprintf(stream, "The given SRAM binary will thus be written behind the " ++ "exception vector area.\n"); ++ fprintf(stream, "\t--arisc_entry 0x44008\n"); ++} ++ ++/* Do a realloc(), but clear the new part if the new allocation is bigger. */ ++static void *realloc_zero(void *ptr, ssize_t *sizeptr, ssize_t newsize) ++{ ++ void *ret; ++ ++ ret = realloc(ptr, newsize); ++ ++ if (newsize > *sizeptr) ++ memset((char*)ret + *sizeptr, 0, newsize - *sizeptr); ++ ++ *sizeptr = newsize; ++ ++ return ret; ++} ++ ++static int checksum_file(const char *filename, bool verbose) ++{ ++ ssize_t size; ++ char *buffer; ++ uint32_t checksum, old_checksum; ++ ++ size = read_file(filename, &buffer); ++ if (size < 0) ++ return size; ++ ++ checksum = calc_checksum(buffer, 12); ++ old_checksum = calc_checksum(buffer + 12, 4); ++ checksum += calc_checksum(buffer + 16, size - 16); ++ ++ if (verbose) { ++ fprintf(stdout, "%s: %zd Bytes\n", filename, size); ++ fprintf(stdout, "nominal checksum: 0x%08x\n", ++ checksum + old_checksum); ++ } ++ checksum += CHECKSUM_SEED; ++ fprintf(stdout, "0x%08x\n", checksum); ++ if (verbose) { ++ fprintf(stdout, "00000000 %02x %02x %02x %02x\n", ++ checksum & 0xff, (checksum >> 8) & 0xff, ++ (checksum >> 16) & 0xff, checksum >> 24); ++ fprintf(stdout, "old checksum: 0x%08x, %smatching\n", ++ old_checksum, old_checksum == checksum ? "" : "NOT "); ++ } ++ ++ return old_checksum != checksum; ++} ++ ++static int copy_boot0(FILE *outf, const char *boot0fname, bool patch) ++{ ++ char *buffer; ++ ssize_t size; ++ int nr_patches; ++ uint32_t checksum = 0; ++ ++ while (true) { /* loop to potentially undo patching */ ++ size = read_file(boot0fname, &buffer); ++ if (size < 0) ++ return size; ++ ++ if (size > BOOT0_SIZE) { ++ fprintf(stderr, ++ "boot0 is bigger than 32K (%zd Bytes)\n", size); ++ return -1; ++ } ++ ++ if (patch) { ++ nr_patches = patch_boot0((void *)buffer, ++ BOOT0_END_KB * 2, ++ BOOT0_END_KB * 2); ++ if (nr_patches == 2) /* already patched */ ++ break; ++ ++ nr_patches = patch_boot0((void *)buffer, ++ UBOOT_OFFSET_KB * 2, ++ BOOT0_END_KB * 2); ++ if (nr_patches != 2) { /* something's wrong */ ++ patch = false; ++ continue; /* reload file */ ++ } ++ checksum = 1; ++ } else { ++ nr_patches = patch_boot0((void *)buffer, ++ UBOOT_OFFSET_KB * 2, ++ UBOOT_OFFSET_KB * 2); ++ if (nr_patches == 2) /* all fine */ ++ break; ++ ++ nr_patches = patch_boot0((void *)buffer, ++ BOOT0_END_KB * 2, ++ BOOT0_END_KB * 2); ++ if (nr_patches != 2) /* unknown boot0 */ ++ break; /* proceed unaltered */ ++ ++ /* patched boot0, revert to old U-Boot position */ ++ nr_patches = patch_boot0((void *)buffer, ++ BOOT0_END_KB * 2, ++ UBOOT_OFFSET_KB * 2); ++ checksum = 1; ++ patch = false; ++ } ++ break; ++ } ++ if (checksum) { ++ checksum = calc_checksum(buffer, 12); ++ checksum += CHECKSUM_SEED; ++ checksum += calc_checksum(buffer + 16, size - 16); ++ ((uint32_t *)buffer)[3] = htole32(checksum); ++ } ++ ++ fwrite(buffer, size, 1, outf); ++ ++ free(buffer); ++ return (int)patch; ++} ++ ++int main(int argc, char **argv) ++{ ++ static const struct option lopts[] = { ++ { "help", 0, 0, 'h' }, ++ { "uboot", 1, 0, 'u' }, ++ { "fdt", 1, 0, 'F' }, ++ { "sram", 1, 0, 's' }, ++ { "dram", 1, 0, 'd' }, ++ { "checksum", 1, 0, 'c' }, ++ { "output", 1, 0, 'o' }, ++ { "boot0", 1, 0, 'b' }, ++ { "boot0-patch", 1, 0, 'B' }, ++ { "embedded_header", 0, 0, 'e' }, ++ { "arisc_entry",1, 0, 'a' }, ++ { "quiet", 0, 0, 'q' }, ++ { "partition", 1, 0, 'p' }, ++ { "efi-partition", 1, 0, 'P' }, ++ { "device", 1, 0, 'D' }, ++ { NULL, 0, 0, 0 }, ++ }; ++ uint32_t *header; ++ uint32_t checksum = 0; ++ off_t offset, part_size = -1; ++ const char *uboot_fname = NULL, *boot0_fname = NULL, *dram_fname = NULL; ++ const char *sram_fname = NULL, *chksum_fname = NULL, *out_fname = NULL; ++ const char *arisc_addr = NULL, *device_fname = NULL, *dtb_fname = NULL; ++ char *uboot_buf = NULL, *dtb_buf = NULL; ++ uint32_t *dram_buf = NULL, *sram_buf = NULL; ++ ssize_t uboot_size, sram_size, dram_size, dtb_size, old_uboot_size; ++ FILE *outf; ++ int ch; ++ bool quiet = false, embedded_header = false, patched_boot0 = false; ++ bool efi_part = false; ++ ++ if (argc <= 1) { ++ /* with no arguments at all: default to showing usage help */ ++ usage(argv[0], stdout); ++ return 0; ++ } ++ ++ while ((ch = getopt_long(argc, argv, "heqo:u:F:c:b:B:s:d:a:p:P:D:", ++ lopts, NULL)) != -1) { ++ switch(ch) { ++ case '?': ++ usage(argv[0], stderr); ++ return 1; ++ case 'h': ++ usage(argv[0], stdout); ++ return 0; ++ case 'o': ++ out_fname = optarg; ++ break; ++ case 'B': ++ patched_boot0 = true; ++ /* fall through */ ++ case 'b': ++ boot0_fname = optarg; ++ break; ++ case 'u': ++ uboot_fname = optarg; ++ break; ++ case 'F': ++ dtb_fname = optarg; ++ break; ++ case 'd': ++ dram_fname = optarg; ++ break; ++ case 's': ++ sram_fname = optarg; ++ break; ++ case 'c': ++ chksum_fname = optarg; ++ break; ++ case 'q': ++ quiet = true; ++ break; ++ case 'e': ++ embedded_header = true; ++ break; ++ case 'a': ++ arisc_addr = optarg; ++ break; ++ case 'P': ++ efi_part = true; ++ /* fall through */ ++ case 'p': ++ part_size = atoi(optarg); ++ break; ++ case 'D': ++ device_fname = optarg; ++ break; ++ } ++ } ++ ++ if (embedded_header && !uboot_fname) { ++ fprintf(stderr, "must provide U-Boot file (-u) with embedded header (-e)\n"); ++ usage(argv[0], stderr); ++ return 2; ++ } ++ ++ if (chksum_fname) ++ return checksum_file(chksum_fname, !quiet); ++ ++ if (!sram_fname) { ++ fprintf(stderr, "boot0 requires an \"SCP\" binary.\n"); ++ usage(argv[0], stderr); ++ return 2; ++ } ++ ++ if (uboot_fname) { ++ if (!quiet) ++ fprintf(stderr, "U-Boot: %s: ", uboot_fname); ++ ++ uboot_size = read_file(uboot_fname, &uboot_buf); ++ if (uboot_size < 0) { ++ perror(quiet ? uboot_fname : ""); ++ return 3; ++ } ++ ++ if (!quiet) ++ fprintf(stderr, "%zd Bytes\n", uboot_size); ++ ++ uboot_buf = realloc_zero(uboot_buf, &uboot_size, ++ ALIGN(uboot_size, 512)); ++ ++ if (dtb_fname) { ++ if (!quiet) ++ fprintf(stderr, "FDT : %s: ", dtb_fname); ++ dtb_size = read_file(dtb_fname, &dtb_buf); ++ if (dtb_size < 0) { ++ perror(quiet ? dtb_fname : ""); ++ return 3; ++ } ++ if (!quiet) ++ fprintf(stderr, "%zd Bytes\n", dtb_size); ++ ++ dtb_buf = realloc_zero(dtb_buf, &dtb_size, ++ ALIGN(dtb_size, 1024)); ++ ++ old_uboot_size = uboot_size; ++ uboot_buf = realloc_zero(uboot_buf, &uboot_size, ++ old_uboot_size + dtb_size); ++ memcpy(uboot_buf + old_uboot_size, dtb_buf, dtb_size); ++ } ++ ++ /* Use the buffer within uboot_buf for holding the header */ ++ if (embedded_header) { ++ header = (uint32_t *)uboot_buf; ++ checksum += calc_checksum(uboot_buf + HEADER_SIZE, ++ uboot_size - HEADER_SIZE); ++ offset = uboot_size; ++ } else { ++ header = calloc(HEADER_SIZE, 1); ++ checksum += calc_checksum(uboot_buf, uboot_size); ++ offset = uboot_size + HEADER_SIZE; ++ } ++ } else { ++ offset = HEADER_SIZE; ++ header = calloc(HEADER_SIZE, 1); ++ } ++ ++ /* Assuming an embedded header already has a branch instruction. */ ++ if (!embedded_header) { ++ uint32_t br_ins; ++ bool jump32 = false; ++ ++ br_ins = jump32 ? 0xea000000 : 0x14000000; ++ br_ins |= (jump32 ? HEADER_SIZE - 8 : HEADER_SIZE) / 4; ++ header[HEADER_JUMP_INS] = htole32(br_ins); ++ } ++ ++ if (dram_fname) { ++ if (!quiet) ++ fprintf(stderr, "DRAM : %s: ", dram_fname); ++ ++ if (!strncmp(dram_fname, "trampoline64:", 13) || ++ !strncmp(dram_fname, "trampoline32:", 13)) { ++ bool aarch64 = dram_fname[10] == '6'; ++ uint32_t address; ++ char *endptr; ++ ++ address = strtoul(dram_fname + 13, &endptr, 0); ++ ++ dram_buf = calloc(512, 1); ++ dram_size = 512; ++ if (aarch64) { ++ /* ldr x16, 0x8 */ ++ dram_buf[0] = htole32(0x58000050); ++ /* br x16 */ ++ dram_buf[1] = htole32(0xd61f0200); ++ dram_buf[2] = htole32(address); ++ /* high word is always 0 */ ++ dram_buf[3] = 0; ++ } else { ++ /* ldr r12, [pc, #-0] */ ++ dram_buf[0] = htole32(0xe51fc000); ++ /* bx r12 */ ++ dram_buf[1] = htole32(0xe12fff1c); ++ dram_buf[2] = htole32(address); ++ } ++ if (!quiet) ++ fprintf(stderr, "\n"); ++ } else { ++ dram_size = read_file(dram_fname, (char**)&dram_buf); ++ if (dram_size < 0) { ++ perror(quiet ? dram_fname : ""); ++ return 3; ++ } ++ ++ if (!quiet) ++ fprintf(stderr, "%zd Bytes\n", dram_size); ++ } ++ ++ dram_buf = realloc_zero(dram_buf, &dram_size, ++ ALIGN(dram_size, 512)); ++ checksum += calc_checksum(dram_buf, dram_size); ++ ++ header[HEADER_SECS + 0] = htole32(offset); ++ header[HEADER_SECS + 1] = htole32(dram_size); ++ ++ offset += dram_size; ++ } ++ ++ if (!quiet) ++ fprintf(stderr, "SRAM : %s: ", sram_fname); ++ ++ sram_size = read_file(sram_fname, (char **)&sram_buf); ++ if (sram_size < 0) { ++ perror(quiet ? sram_fname : ""); ++ return 3; ++ } ++ ++ if (!quiet) ++ fprintf(stderr, "%zd Bytes\n", sram_size); ++ ++ if (arisc_addr) ++ sram_size += 0x4000; ++ ++ sram_buf = realloc_zero(sram_buf, &sram_size, ++ ALIGN(sram_size, 512)); ++ ++ /* ++ * Move the loaded code to the SRAM part behind the OpenRISC ++ * exception vector part, which is in fact only sparsely ++ * implemented on the Allwinner SoCs. ++ * Add an OpenRISC jump instruction into the arisc entry point. ++ */ ++ if (arisc_addr) { ++ uint32_t address; ++ char *endptr; ++ ++ address = strtoul(arisc_addr, &endptr, 0); ++ memmove(sram_buf + 0x1000, sram_buf, sram_size - 0x4000); ++ memset(sram_buf, 0, 0x4000); ++ /* OpenRISC: l.j */ ++ sram_buf[64] = htole32((address - 0x40100) / 4); ++ /* OpenRISC: l.nop (delay slot) */ ++ sram_buf[65] = htole32(0x15000000); ++ } ++ checksum += calc_checksum(sram_buf, sram_size); ++ ++ header[HEADER_SECS + 8] = htole32(offset); ++ header[HEADER_SECS + 9] = htole32(sram_size); ++ ++ offset += sram_size; ++ ++ /* fill the static part of the header */ ++ strncpy((char*)&header[HEADER_MAGIC], "uboot", MAGIC_SIZE); ++ header[HEADER_CHECKSUM] = CHECKSUM_SEED; ++ header[HEADER_ALIGN] = htole32(BOOT0_ALIGN); ++ header[HEADER_LOADADDR] = htole32(UBOOT_LOAD_ADDR); ++ header[HEADER_PRIMSIZE] = htole32(offset); ++ ++ if (dtb_fname) ++ header[HEADER_DTOFFSET] = htole32(old_uboot_size); ++ ++ offset = ALIGN(offset, BOOT0_ALIGN); ++ header[HEADER_LENGTH] = htole32(offset); ++ offset -= le32toh(header[HEADER_PRIMSIZE]); ++ ++ checksum += calc_checksum(header, HEADER_SIZE); ++ header[HEADER_CHECKSUM] = htole32(checksum); ++ ++ if (device_fname) { ++ outf = fopen(device_fname, "r+b"); ++ if (!outf) { ++ perror(device_fname); ++ return 2; ++ } ++ out_fname = NULL; ++ } else { ++ if (out_fname) ++ outf = fopen(out_fname, "wb"); ++ else ++ outf = stdout; ++ } ++ ++ if (outf == NULL) { ++ perror(out_fname); ++ return 5; ++ } ++ ++ if (part_size != -1) ++ create_part_table(outf, part_size * 1024 * 1024, efi_part, ++ patched_boot0); ++ else if (device_fname) ++ pseek(outf, 512); ++ ++ if (boot0_fname) { ++ int ret; ++ ++ if (device_fname || part_size != -1) ++ pseek(outf, BOOT0_OFFSET - 512); ++ ++ ret = copy_boot0(outf, boot0_fname, patched_boot0); ++ if (ret < 0) ++ perror(boot0_fname); ++ else ++ patched_boot0 = ret; ++ ++ if (!patched_boot0) ++ pseek(outf, (UBOOT_OFFSET_KB - BOOT0_END_KB) * 1024); ++ } else { ++ if (device_fname || part_size != -1) ++ pseek(outf, UBOOT_OFFSET_KB * 1024 - 512); ++ } ++ ++ if (!embedded_header) ++ fwrite(header, HEADER_SIZE, 1, outf); ++ ++ if (uboot_fname) ++ fwrite(uboot_buf, uboot_size, 1, outf); ++ if (dram_fname) ++ fwrite(dram_buf, dram_size, 1, outf); ++ fwrite(sram_buf, sram_size, 1, outf); ++ ++ if (device_fname) { ++ fill_zeroes(outf, offset); ++ } else { ++ long fpos; ++ ++ pseek(outf, offset); ++ ++ fpos = ftell(outf); ++ if (fpos >= 0 && ftruncate(fileno(outf), fpos)) ++ perror("error truncating output file"); ++ } ++ ++ fclose(outf); ++ ++ free(uboot_buf); ++ free(dtb_buf); ++ free(sram_buf); ++ free(dram_buf); ++ ++ if (!embedded_header) ++ free(header); ++ ++ return 0; ++} diff --git a/patch/u-boot/u-boot-pine64-default/change-bmp-display-functions.patch b/patch/u-boot/u-boot-pine64-default/change-bmp-display-functions.patch index 16c2095049..26523b9813 100644 --- a/patch/u-boot/u-boot-pine64-default/change-bmp-display-functions.patch +++ b/patch/u-boot/u-boot-pine64-default/change-bmp-display-functions.patch @@ -1,7 +1,7 @@ -diff --git a/u-boot-pine64/board/sunxi/common/power_check.c b/u-boot-pine64/board/sunxi/common/power_check.c +diff --git a/board/sunxi/common/power_check.c b/board/sunxi/common/power_check.c index d427081ad2..12aa7d94ba 100644 ---- a/u-boot-pine64/board/sunxi/common/power_check.c -+++ b/u-boot-pine64/board/sunxi/common/power_check.c +--- a/board/sunxi/common/power_check.c ++++ b/board/sunxi/common/power_check.c @@ -57,8 +59,8 @@ static void EnterNormalShutDownMode(void) static void EnterLowPowerShutDownMode(void) @@ -49,10 +49,10 @@ index d427081ad2..12aa7d94ba 100644 int ProbePreSystemMode(void) { int PreSysMode = 0; -diff --git a/u-boot-pine64/common/cmd_sunxi_bmp.c b/u-boot-pine64/common/cmd_sunxi_bmp.c +diff --git a/common/cmd_sunxi_bmp.c b/common/cmd_sunxi_bmp.c index 59f1210dc1..bfcefca44e 100644 ---- a/u-boot-pine64/common/cmd_sunxi_bmp.c -+++ b/u-boot-pine64/common/cmd_sunxi_bmp.c +--- a/common/cmd_sunxi_bmp.c ++++ b/common/cmd_sunxi_bmp.c @@ -31,6 +31,8 @@ #include #include @@ -125,8 +125,8 @@ index 59f1210dc1..bfcefca44e 100644 debug("decode bmp ok\n"); diff --git a/include/configs/sun50iw1p1.h b/include/configs/sun50iw1p1.h index 62eeeb1b29..80ab660011 100644 ---- a/u-boot-pine64/include/configs/sun50iw1p1.h -+++ b/u-boot-pine64/include/configs/sun50iw1p1.h +--- a/include/configs/sun50iw1p1.h ++++ b/include/configs/sun50iw1p1.h @@ -444,6 +444,7 @@ #define CONFIG_CMD_ECHO #define CONFIG_CMD_SOURCE diff --git a/patch/u-boot/u-boot-pine64-default/stop-autoboot-double-esc.patch b/patch/u-boot/u-boot-pine64-default/stop-autoboot-double-esc.patch index 49b5ceacea..e8e8a64df6 100644 --- a/patch/u-boot/u-boot-pine64-default/stop-autoboot-double-esc.patch +++ b/patch/u-boot/u-boot-pine64-default/stop-autoboot-double-esc.patch @@ -1,7 +1,7 @@ -diff --git a/u-boot-pine64/include/configs/sun50iw1p1.h b/u-boot-pine64/include/configs/sun50iw1p1.h +diff --git a/include/configs/sun50iw1p1.h b/include/configs/sun50iw1p1.h index f2eebc0..cd8b0fd 100644 ---- a/u-boot-pine64/include/configs/sun50iw1p1.h -+++ b/u-boot-pine64/include/configs/sun50iw1p1.h +--- a/include/configs/sun50iw1p1.h ++++ b/include/configs/sun50iw1p1.h @@ -419,7 +419,8 @@ #define CONFIG_AUTOBOOT_KEYED