2 * arch/arm64/boot/dts/amlogic/meson64_odroidc4.dts
4 * Copyright (C) 2019 Hardkernel Co., Ltd. All rights reserved.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
20 #include "mesonsm1.dtsi"
21 #include "mesong12_odroid_common.dtsi"
22 #include "mesong12a_drm.dtsi"
25 model = "Hardkernel ODROID-C4";
26 compatible = "amlogic, g12a";
27 interrupt-parent = <&gic>;
34 compatible = "amlogic, gpiomem";
35 reg = <0x0 0xff634000 0x0 0x1000>; /* GPIO banks */
41 compatible = "amlogic, gpiomem";
42 reg = <0x0 0xff800000 0x0 0x1000>; /* GPIO_AO bank */
43 dev_name = "gpiomem-ao";
51 /* global autoconfigured region for contiguous allocations */
53 compatible = "ramoops";
54 reg = <0x0 0x07400000 0x0 0x00100000>;
55 record-size = <0x8000>;
56 console-size = <0x8000>;
57 ftrace-size = <0x20000>;
60 secmon_reserved:linux,secmon {
61 compatible = "shared-dma-pool";
63 size = <0x0 0x400000>;
64 alignment = <0x0 0x400000>;
65 alloc-ranges = <0x0 0x05000000 0x0 0x400000>;
69 secos_reserved:linux,secos {
71 compatible = "amlogic, aml_secos_memory";
72 reg = <0x0 0x05300000 0x0 0x2000000>;
76 /* POST PROCESS MANAGER */
77 ppmgr_reserved:linux,ppmgr {
79 compatible = "shared-dma-pool";
83 logo_reserved:linux,meson-fb {
84 compatible = "shared-dma-pool";
86 size = <0x0 0x800000>;
87 alignment = <0x0 0x400000>;
88 alloc-ranges = <0x0 0x7f800000 0x0 0x800000>;
90 ion_cma_reserved:linux,ion-dev {
91 compatible = "shared-dma-pool";
93 size = <0x0 0x10000000>;
94 alignment = <0x0 0x400000>;
97 //di_reserved:linux,di {
98 //compatible = "amlogic, di-mem";
99 /* buffer_size = 3621952(yuv422 8bit) */
100 /* 4179008(yuv422 10bit full pack mode) */
101 /** 10x3621952=34.6M(0x23) support 8bit **/
102 /** 10x4736064=45.2M(0x2e) support 12bit **/
103 /** 10x4179008=40M(0x28) support 10bit **/
104 //size = <0x0 0x2800000>;
108 di_cma_reserved:linux,di_cma {
109 compatible = "shared-dma-pool";
111 /* buffer_size = 3621952(yuv422 8bit)
112 * | 4736064(yuv422 10bit)
113 * | 4074560(yuv422 10bit full pack mode)
114 * 10x3621952=34.6M(0x23) support 8bit
115 * 10x4736064=45.2M(0x2e) support 12bit
116 * 10x4074560=40M(0x28) support 10bit
118 size = <0x0 0x02800000>;
119 alignment = <0x0 0x400000>;
121 codec_mm_cma:linux,codec_mm_cma {
122 compatible = "shared-dma-pool";
124 /* ion_codec_mm max can alloc size 80M*/
125 size = <0x0 0x13400000>;
126 alignment = <0x0 0x400000>;
127 linux,contiguous-region;
130 /* codec shared reserved */
131 codec_mm_reserved:linux,codec_mm_reserved {
133 compatible = "amlogic, codec-mm-reserved";
135 alignment = <0x0 0x100000>;
139 vdin0_cma_reserved:linux,vdin0_cma {
141 compatible = "shared-dma-pool";
143 /* 1920x1080x2x4 =16+4 M */
144 size = <0x0 0x04000000>;
145 alignment = <0x0 0x400000>;
148 vdin1_cma_reserved:linux,vdin1_cma {
150 compatible = "shared-dma-pool";
152 /* 1920x1080x2x4 =16 M */
153 size = <0x0 0x04000000>;
154 alignment = <0x0 0x400000>;
159 compatible = "amlogic, cvbsout-sm1";
160 dev_name = "cvbsout";
162 clocks = <&clkc CLKID_VCLK2_ENCI
163 &clkc CLKID_VCLK2_VENCI0
164 &clkc CLKID_VCLK2_VENCI1
165 &clkc CLKID_DAC_CLK>;
166 clock-names = "venci_top_gate",
171 /* 0:vid_pll vid2_clk */
172 /* 1:gp0_pll vid2_clk */
173 /* 2:vid_pll vid1_clk */
174 /* 3:gp0_pll vid1_clk */
177 /* performance: reg_address, reg_value */
179 performance = <0x1bf0 0x9
184 0xffff 0x0>; /* ending flag */
185 performance_sarft = <0x1bf0 0x9
190 0xffff 0x0>; /* ending flag */
191 performance_revB_telecom = <0x1bf0 0x9
196 0xffff 0x0>; /* ending flag */
200 compatible = "amlogic, deinterlace";
202 /* 0:use reserved; 1:use cma; 2:use cma as reserved */
204 //memory-region = <&di_reserved>;
205 memory-region = <&di_cma_reserved>;
208 interrupt-names = "pre_irq", "post_irq";
209 clocks = <&clkc CLKID_VPU_CLKB_TMP_COMP>,
210 <&clkc CLKID_VPU_CLKB_COMP>;
211 clock-names = "vpu_clkb_tmp_composite",
212 "vpu_clkb_composite";
213 clock-range = <334 667>;
214 /* buffer-size = <3621952>;(yuv422 8bit) */
215 buffer-size = <4074560>;/*yuv422 fullpack*/
216 /* reserve-iomap = "true"; */
217 /* if enable nr10bit, set nr10bit-support to 1 */
218 post-wr-support = <1>;
219 nr10bit-support = <1>;
225 compatible = "amlogic, unifykey";
228 unifykey-index-0 = <&keysn_0>;
229 unifykey-index-1 = <&keysn_1>;
230 unifykey-index-2 = <&keysn_2>;
231 unifykey-index-3 = <&keysn_3>;
232 unifykey-index-4 = <&keysn_4>;
233 unifykey-index-5 = <&keysn_5>;
234 unifykey-index-6 = <&keysn_6>;
235 unifykey-index-7 = <&keysn_7>;
236 unifykey-index-8 = <&keysn_8>;
237 unifykey-index-9 = <&keysn_9>;
238 unifykey-index-10= <&keysn_10>;
239 unifykey-index-11= <&keysn_11>;
240 unifykey-index-12= <&keysn_12>;
241 unifykey-index-13= <&keysn_13>;
242 unifykey-index-14= <&keysn_14>;
243 unifykey-index-15= <&keysn_15>;
244 unifykey-index-16= <&keysn_16>;
248 key-device = "normal";
249 key-permit = "read","write","del";
253 key-device = "normal";
254 key-permit = "read","write","del";
258 key-device = "secure";
260 key-permit = "read","write","del";
263 key-name = "secure_boot_set";
264 key-device = "efuse";
265 key-permit = "write";
269 key-device = "normal";
270 key-permit = "read","write","del";
274 key-name = "mac_wifi";
275 key-device = "normal";
276 key-permit = "read","write","del";
280 key-name = "hdcp2_tx";
281 key-device = "normal";
282 key-permit = "read","write","del";
285 key-name = "hdcp2_rx";
286 key-device = "normal";
287 key-permit = "read","write","del";
290 key-name = "widevinekeybox";
291 key-device = "secure";
292 key-permit = "read","write","del";
295 key-name = "deviceid";
296 key-device = "normal";
297 key-permit = "read","write","del";
300 key-name = "hdcp22_fw_private";
301 key-device = "secure";
302 key-permit = "read","write","del";
305 key-name = "PlayReadykeybox25";
306 key-device = "secure";
307 key-permit = "read","write","del";
310 key-name = "prpubkeybox";// PlayReady
311 key-device = "secure";
312 key-permit = "read","write","del";
315 key-name = "prprivkeybox";// PlayReady
316 key-device = "secure";
317 key-permit = "read","write","del";
320 key-name = "attestationkeybox";// attestation key
321 key-device = "secure";
322 key-permit = "read","write","del";
325 key-name = "region_code";
326 key-device = "normal";
327 key-permit = "read","write","del";
330 key-name = "netflix_mgkid";
331 key-device = "secure";
332 key-permit = "read","write","del";
337 compatible = "amlogic, vecm";
338 dev_name = "aml_vecm";
340 gamma_en = <0>;/*1:enabel ;0:disable*/
341 wb_en = <0>;/*1:enabel ;0:disable*/
342 cm_en = <0>;/*1:enabel ;0:disable*/
343 /*0: 709/601 1: bt2020*/
344 tx_op_color_primary = <0>;
348 compatible = "amlogic, dolby_vision_sm1";
349 dev_name = "aml_amdolby_vision_driver";
351 tv_mode = <0>;/*1:enabel ;0:disable*/
355 compatible = "amlogic, meson-g12a";
356 /*memory-region = <&logo_reserved>;*/
357 dev_name = "meson-fb";
362 interrupt-names = "viu-vsync", "viu2-vsync", "rdma";
363 mem_size = <0x00800000 0x4b80000 0x100000 0x100000 0x800000>;
364 /* uboot logo,fb0/fb1 memory size,if afbcd fb0=0x01851000*/
365 display_mode_default = "1080p60hz";
367 /** 0:VPU free scale 1:OSD free scale 2:OSD super scale */
368 display_size_default = <1920 1080 1920 2160 32>;
369 /*1920*1080*4*3 = 0x17BB000*/
370 pxp_mode = <0>; /** 0:normal mode 1:pxp mode */
373 logo_addr = "0x3f800000";
374 clocks = <&clkc CLKID_VPU_CLKC_MUX>;
375 clock-names = "vpu_clkc";
378 p_tsensor: p_tsensor@ff634594 {
379 compatible = "amlogic, r1p1-tsensor";
380 device_name = "meson-pthermal";
382 reg = <0x0 0xff634800 0x0 0x50>,
383 <0x0 0xff800268 0x0 0x4>;
390 interrupts = <0 35 0>;
391 clocks = <&clkc CLKID_TS_COMP>; /* CLKID_TS_COMP>;*/
392 clock-names = "ts_comp";
393 #thermal-sensor-cells = <1>;
396 d_tsensor: d_tsensor@ff800228 {
397 compatible = "amlogic, r1p1-tsensor";
398 device_name = "meson-dthermal";
400 reg = <0x0 0xff634c00 0x0 0x50>,
401 <0x0 0xff800230 0x0 0x4>;
408 interrupts = <0 36 0>;
409 clocks = <&clkc CLKID_TS_COMP>; /* CLKID_TS_COMP>;*/
410 clock-names = "ts_comp";
411 #thermal-sensor-cells = <1>;
414 meson_cooldev: meson-cooldev@0 {
416 compatible = "amlogic, meson-cooldev";
417 device_name = "mcooldev";
419 cpufreq_cool_cluster0 {
420 min_state = <1000000>;
423 node_name = "cpufreq_cool0";
424 device_type = "cpufreq";
426 cpucore_cool_cluster0 {
430 node_name = "cpucore_cool0";
431 device_type = "cpucore";
438 node_name = "gpufreq_cool0";
439 device_type = "gpufreq";
445 node_name = "gpucore_cool0";
446 device_type = "gpucore";
449 cpufreq_cool0:cpufreq_cool0 {
450 #cooling-cells = <2>; /* min followed by max */
452 cpucore_cool0:cpucore_cool0 {
453 #cooling-cells = <2>; /* min followed by max */
455 gpufreq_cool0:gpufreq_cool0 {
456 #cooling-cells = <2>; /* min followed by max */
458 gpucore_cool0:gpucore_cool0 {
459 #cooling-cells = <2>; /* min followed by max */
462 /*meson cooling devices end*/
465 soc_thermal: soc_thermal {
466 polling-delay = <1000>;
467 polling-delay-passive = <100>;
468 sustainable-power = <1410>;
469 thermal-sensors = <&p_tsensor 0>;
471 pswitch_on: trip-point@0 {
472 temperature = <60000>;
476 pcontrol: trip-point@1 {
477 temperature = <75000>;
482 temperature = <85000>;
486 pcritical: trip-point@3 {
487 temperature = <110000>;
494 cpufreq_cooling_map {
496 cooling-device = <&cpufreq_cool0 0 4>;
497 contribution = <1024>;
499 cpucore_cooling_map {
501 cooling-device = <&cpucore_cool0 0 3>;
502 contribution = <1024>;
504 gpufreq_cooling_map {
506 cooling-device = <&gpufreq_cool0 0 4>;
507 contribution = <1024>;
509 gpucore_cooling_map {
511 cooling-device = <&gpucore_cool0 0 2>;
512 contribution = <1024>;
516 ddr_thermal: ddr_thermal {
517 polling-delay = <2000>;
518 polling-delay-passive = <1000>;
519 sustainable-power = <1410>;
520 thermal-sensors = <&d_tsensor 1>;
522 dswitch_on: trip-point@0 {
523 temperature = <60000>;
527 dcontrol: trip-point@1 {
528 temperature = <75000>;
533 temperature = <85000>;
537 dcritical: trip-point@3 {
538 temperature = <110000>;
548 cpu_opp_table0: cpu_opp_table0 {
549 compatible = "operating-points-v2";
553 opp-hz = /bits/ 64 <100000000>;
554 opp-microvolt = <760000>;
557 opp-hz = /bits/ 64 <250000000>;
558 opp-microvolt = <760000>;
561 opp-hz = /bits/ 64 <500000000>;
562 opp-microvolt = <760000>;
565 opp-hz = /bits/ 64 <667000000>;
566 opp-microvolt = <780000>;
569 opp-hz = /bits/ 64 <1000000000>;
570 opp-microvolt = <800000>;
573 opp-hz = /bits/ 64 <1200000000>;
574 opp-microvolt = <810000>;
577 opp-hz = /bits/ 64 <1404000000>;
578 opp-microvolt = <820000>;
581 opp-hz = /bits/ 64 <1500000000>;
582 opp-microvolt = <830000>;
585 opp-hz = /bits/ 64 <1608000000>;
586 opp-microvolt = <860000>;
589 opp-hz = /bits/ 64 <1704000000>;
590 opp-microvolt = <900000>;
593 opp-hz = /bits/ 64 <1800000000>;
594 opp-microvolt = <940000>;
597 opp-hz = /bits/ 64 <1908000000>;
598 opp-microvolt = <1000000>;
601 opp-hz = /bits/ 64 <2016000000>;
602 opp-microvolt = <1010000>;
605 opp-hz = /bits/ 64 <2100000000>;
606 opp-microvolt = <1030000>;
611 compatible = "amlogic, cpufreq-meson";
612 pinctrl-names = "default";
613 pinctrl-0 = <&pwm_ao_d_pins3>;
622 compatible = "amlogic,meson6-ir";
623 /* Multi-format IR controller */
624 reg = <0x0 0xff808040 0x0 0x44>;
625 interrupts = <0 196 1>;
626 pinctrl-names = "default";
627 pinctrl-0 = <&remote_pins>;
632 /* Audio Related start */
634 #sound-dai-cells = <0>;
635 compatible = "amlogic, aml_dummy_codec";
639 #sound-dai-cells = <0>;
640 compatible = "linux,spdif-dit";
644 compatible = "ti,pcm5102a";
645 #sound-dai-cells = <0>;
649 #sound-dai-cells = <0>;
650 compatible = "amlogic, aml_codec_T9015";
651 reg = <0x0 0xFF632000 0x0 0x2000>;
652 is_auge_used = <1>; /* meson or auge chipset used */
661 /*drc_enable = <1>;*/
670 /* max 0xf, each bit for one lane, usually one lane */
672 /* max 0xff, each bit for one channel */
673 channel_mask = <0x3>;
676 compatible = "amlogic, g12a-sound-card";
677 aml-audio-card,name = "ODROID-HDMI";
679 /* ODROID-C4: spdif_out GPIOAO_10(J7.2), HDMI out*/
680 aml-audio-card,dai-link@0 {
684 sound-dai = <&spdifa>;
685 system-clock-frequency = <6144000>;
688 sound-dai = <&spdif_dit>;
692 odroid_lineout: odroid_lineout {
693 compatible = "amlogic, g12a-sound-card";
694 aml-audio-card,name = "ODROID-LINEOUT";
697 odroid_hifi: odroid_hifi {
698 compatible = "amlogic, g12a-sound-card";
699 aml-audio-card,name = "ODROID-HIFI";
702 odroid_hifi2: odroid_hifi2 {
703 compatible = "amlogic, g12a-sound-card";
704 aml-audio-card,name = "ODROID-HIFI2";
708 audiolocker: locker {
709 compatible = "amlogic, audiolocker";
710 clocks = <&clkaudio CLKID_AUDIO_LOCKER_OUT
711 &clkaudio CLKID_AUDIO_LOCKER_IN
712 &clkaudio CLKID_AUDIO_MCLK_D
713 &clkaudio CLKID_AUDIO_MCLK_E
716 clock-names = "lock_out", "lock_in", "out_src",
717 "in_src", "out_calc", "in_ref";
718 interrupts = <GIC_SPI 1 IRQ_TYPE_EDGE_RISING>;
719 interrupt-names = "irq";
720 frequency = <49000000>; /* pll */
721 dividor = <49>; /* locker's parent */
724 /* Audio Related end */
727 compatible = "amlogic, gpio_keypad";
733 reg = <0x0 0xFF800000 0x0 0x400>;
737 compatible = "hk-lirc-helper";
738 /* Multi-format IR controller */
739 reg = <0x0 0xff808040 0x0 0x44>;
744 /delete-node/ usb_hub_en;
750 compatible = "amlogic, sm1-snd-tdmb";
751 #sound-dai-cells = <0>;
752 dai-tdm-lane-slot-mask-in = <0 1 0 0>;
753 dai-tdm-lane-slot-mask-out = <1 0 0 0>;
754 dai-tdm-clk-sel = <1>;
755 clocks = <&clkaudio CLKID_AUDIO_MCLK_B
756 &clkaudio CLKID_AUDIO_MCLK_PAD0
758 clock-names = "mclk", "mclk_pad", "clk_srcpll";
759 pinctrl-names = "tdm_pins";
760 pinctrl-0 = <&tdmb_mclk_ao &tdmout_b_ao>;
762 /*enable default mclk(12.288M), before extern codec start*/
763 start_clk_enable = <1>;
764 /*tdm clk tuning enable*/
765 clk_tuning_enable = <1>;
770 compatible = "amlogic, sm1-snd-tdmc";
771 #sound-dai-cells = <0>;
772 dai-tdm-lane-slot-mask-in = <0 1 0 0>;
773 dai-tdm-lane-slot-mask-out = <1 0 0 0>;
774 dai-tdm-clk-sel = <2>;
775 clocks = <&clkaudio CLKID_AUDIO_MCLK_C
777 clock-names = "mclk", "clk_srcpll";
783 compatible = "amlogic, sm1-snd-spdif-a";
784 #sound-dai-cells = <0>;
785 clocks = <&clkc CLKID_MPLL0
786 &clkc CLKID_FCLK_DIV4
787 &clkaudio CLKID_AUDIO_GATE_SPDIFIN
788 &clkaudio CLKID_AUDIO_GATE_SPDIFOUT_A
789 &clkaudio CLKID_AUDIO_SPDIFIN
790 &clkaudio CLKID_AUDIO_SPDIFOUT_A>;
791 clock-names = "sysclk", "fixed_clk", "gate_spdifin",
792 "gate_spdifout", "clk_spdifin", "clk_spdifout";
794 <GIC_SPI 151 IRQ_TYPE_EDGE_RISING>;
796 interrupt-names = "irq_spdifin";
797 pinctrl-names = "spdif_pins";
798 pinctrl-0 = <&spdifout>;
802 }; /* end of audiobus */
809 "", "", "", "", "", "", "", "",
810 "", "", "", "", "", "", "", "",
813 "PIN_36", /* GPIOH_5 */
814 "PIN_26", /* GPIOH_6 */
815 "PIN_32", /* GPIOH_7 */
818 "", "", "", "", "", "", "", "",
819 "", "", "", "", "", "", "", "",
821 "", "", "", "", "", "", "", "",
823 "", "", "", "", "", "", "", "",
824 "", "", "", "", "", "",
825 "PIN_27", /* GPIOA_14 */
826 "PIN_28", /* GPIOA_15 */
828 "PIN_16", /* GPIOX_0 */
829 "PIN_18", /* GPIOX_1 */
830 "PIN_22", /* GPIOX_2 */
831 "PIN_11", /* GPIOX_3 */
832 "PIN_13", /* GPIOX_4 */
833 "PIN_7", /* GPIOX_5 */
834 "PIN_33", /* GPIOX_6 */
835 "PIN_15", /* GPIOX_7 */
836 "PIN_19", /* GPIOX_8 */
837 "PIN_21", /* GPIOX_9 */
838 "PIN_24", /* GPIOX_10 */
839 "PIN_23", /* GPIOX_11 */
840 "PIN_8", /* GPIOX_12 */
841 "PIN_10", /* GPIOX_13 */
842 "PIN_29", /* GPIOX_14 */
843 "PIN_31", /* GPIOX_15 */
844 "PIN_12", /* GPIOX_16 */
845 "PIN_3", /* GPIOX_17 */
846 "PIN_5", /* GPIOX_18 */
847 "PIN_35"; /* GPIOX_19 */
854 "PIN_47", /* GPIOAO_4 */
856 "PIN_45", /* GPIOAO_7 */
857 "PIN_46", /* GPIOAO_8 */
858 "PIN_44", /* GPIOAO_9 */
859 "PIN_42", /* GPIOAO_10 */
875 gpio-vbus-power = "GPIOAO_2";
876 gpios = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_HIGH>;
880 sd_volsw_gpio = <&gpio_ao GPIOAO_6 GPIO_ACTIVE_HIGH>;
881 sd_power_gpio = <&gpio_ao GPIOAO_3 GPIO_ACTIVE_HIGH>;
882 sd_vddio_gpio = <&gpio_ao GPIOE_2 GPIO_ACTIVE_HIGH>;
890 max-frequency = <200000000>;
892 caps = "MMC_CAP_4_BIT_DATA",
895 "MMC_CAP_UHS_SDR104",
896 "MMC_CAP_MMC_HIGHSPEED",
897 "MMC_CAP_SD_HIGHSPEED",
900 vol_switch = <&gpio_ao GPIOAO_6 GPIO_ACTIVE_HIGH>;
910 caps = "MMC_CAP_4_BIT_DATA",
911 "MMC_CAP_MMC_HIGHSPEED",
912 "MMC_CAP_SD_HIGHSPEED",
913 "MMC_CAP_NONREMOVABLE",
917 "MMC_CAP_UHS_SDR104",
931 groups = "spdif_out_ao";
932 function = "spdif_out_ao";
935 tdmb_mclk_ao: mclk0_ao {
938 function = "mclk0_ao";
939 drive-strength = <2>;
942 tdmout_b_ao: tdmout_b {
943 mux { /* GPIOAO_8, GPIOAO_7, GPIOAO_4 */
944 groups = "tdmb_sclk_ao",
947 function = "tdmb_out_ao";
948 drive-strength = <2>;
951 }; /* end of pinctrl_aobus */
957 40 Pin Header : MOSI(GPIOX.8->19 Pin), MISO(GPIOX.9->21 Pin),
958 SPI0_CLK(GPIOX.11->23 Pin)
959 SPI_CE0(GPIOX.2->22 Pin), SPI_CE1(GPIOX.10->24 Pin)
961 pinctrl-names = "default","gpio_periphs";
962 pinctrl-0 = <&spicc0_pins_x>;
963 pinctrl-1 = <&spicc0_to_gpiox>;
964 num_chipselect = <2>;
966 cs-gpios = <&gpio GPIOX_10 GPIO_ACTIVE_LOW>,
967 <&gpio GPIOH_6 GPIO_ACTIVE_LOW>;
980 logo_addr = "0x3f800000";