blob: 7613b14ac7519a2794ba330139ad27ab52b03b68 [file] [log] [blame]
/*
* arch/arm64/boot/dts/amlogic/g12a_pxp.dts
*
* Copyright (C) 2017 Amlogic, Inc. All rights reserved.
*
* This program 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; either version 2 of the License, or
* (at your option) any later version.
*
* This program 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.
*
*/
/dts-v1/;
#include "mesong12a.dtsi"
/ {
model = "Amlogic";
compatible = "amlogic, g12a";
interrupt-parent = <&gic>;
#address-cells = <2>;
#size-cells = <2>;
aliases {
serial0 = &uart_AO;
i2c0 = &i2c0;
i2c1 = &i2c1;
i2c2 = &i2c2;
i2c3 = &i2c3;
i2c4 = &i2c_AO;
};
memory@00000000 {
device_type = "memory";
linux,usable-memory = <0x0 0x0 0x0 0x40000000>;
};
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
/* global autoconfigured region for contiguous allocations */
secmon_reserved:linux,secmon {
compatible = "shared-dma-pool";
reusable;
size = <0x0 0x400000>;
alignment = <0x0 0x400000>;
alloc-ranges = <0x0 0x05000000 0x0 0x400000>;
};
secos_reserved:linux,secos {
status = "disable";
compatible = "amlogic, aml_secos_memory";
reg = <0x0 0x05300000 0x0 0x2000000>;
no-map;
};
logo_reserved:linux,meson-fb {
compatible = "shared-dma-pool";
reusable;
size = <0x0 0x800000>;
alignment = <0x0 0x400000>;
alloc-ranges = <0x0 0x3f800000 0x0 0x800000>;
};
ion_cma_reserved:linux,ion-dev {
compatible = "shared-dma-pool";
reusable;
size = <0x0 0x8000000>;
alignment = <0x0 0x400000>;
};
//di_reserved:linux,di {
//compatible = "amlogic, di-mem";
/* buffer_size = 3621952(yuv422 8bit) */
/* 4179008(yuv422 10bit full pack mode) */
/** 10x3621952=34.6M(0x23) support 8bit **/
/** 10x4736064=45.2M(0x2e) support 12bit **/
/** 10x4179008=40M(0x28) support 10bit **/
//size = <0x0 0x2800000>;
//no-map;
//};
/*di CMA pool */
di_cma_reserved:linux,di_cma {
compatible = "shared-dma-pool";
reusable;
/* buffer_size = 3621952(yuv422 8bit)
* | 4736064(yuv422 10bit)
* | 4074560(yuv422 10bit full pack mode)
* 10x3621952=34.6M(0x23) support 8bit
* 10x4736064=45.2M(0x2e) support 12bit
* 10x4074560=40M(0x28) support 10bit
*/
size = <0x0 0x02800000>;
alignment = <0x0 0x400000>;
};
codec_mm_cma:linux,codec_mm_cma {
compatible = "shared-dma-pool";
reusable;
/* ion_codec_mm max can alloc size 80M*/
size = <0x0 0x13400000>;
alignment = <0x0 0x400000>;
linux,contiguous-region;
};
/* codec shared reserved */
codec_mm_reserved:linux,codec_mm_reserved {
compatible = "amlogic, codec-mm-reserved";
size = <0x0 0x0>;
alignment = <0x0 0x100000>;
//no-map;
};
/* vdin0 CMA pool */
vdin0_cma_reserved:linux,vdin0_cma {
compatible = "shared-dma-pool";
reusable;
/* 1920x1080x2x4 =16+4 M */
size = <0x0 0x04000000>;
alignment = <0x0 0x400000>;
};
/* vdin1 CMA pool */
vdin1_cma_reserved:linux,vdin1_cma {
compatible = "shared-dma-pool";
reusable;
/* 1920x1080x2x4 =16 M */
size = <0x0 0x04000000>;
alignment = <0x0 0x400000>;
};
};
cvbsout {
compatible = "amlogic, cvbsout-g12a";
dev_name = "cvbsout";
status = "okay";
clocks = <&clkc CLKID_VCLK2_ENCI
&clkc CLKID_VCLK2_VENCI0
&clkc CLKID_VCLK2_VENCI1
&clkc CLKID_DAC_CLK>;
clock-names = "venci_top_gate",
"venci_0_gate",
"venci_1_gate",
"vdac_clk_gate";
clk_path = <0>;
/* performance: reg_address, reg_value */
/* g12a */
performance = <0x1bf0 0x9
0x1b56 0x333
0x1b12 0x8080
0x1b05 0xfd
0x1c59 0xf850
0xffff 0x0>; /* ending flag */
performance_sarft = <0x1bf0 0x9
0x1b56 0x333
0x1b12 0x0
0x1b05 0x9
0x1c59 0xfc48
0xffff 0x0>; /* ending flag */
performance_revB_telecom = <0x1bf0 0x9
0x1b56 0x546
0x1b12 0x8080
0x1b05 0x9
0x1c59 0xf850
0xffff 0x0>; /* ending flag */
};
codec_mm {
compatible = "amlogic, codec, mm";
memory-region = <&codec_mm_cma &codec_mm_reserved>;
dev_name = "codec_mm";
status = "okay";
};
deinterlace {
compatible = "amlogic, deinterlace";
status = "okay";
/* 0:use reserved; 1:use cma; 2:use cma as reserved */
flag_cma = <1>;
//memory-region = <&di_reserved>;
memory-region = <&di_cma_reserved>;
interrupts = <0 46 1
0 40 1>;
interrupt-names = "pre_irq", "post_irq";
clocks = <&clkc CLKID_VPU_CLKB_TMP_COMP>,
<&clkc CLKID_VPU_CLKB_COMP>;
clock-names = "vpu_clkb_tmp_composite",
"vpu_clkb_composite";
clock-range = <334 667>;
/* buffer-size = <3621952>;(yuv422 8bit) */
buffer-size = <4074560>;/*yuv422 fullpack*/
/* reserve-iomap = "true"; */
/* if enable nr10bit, set nr10bit-support to 1 */
post-wr-support = <1>;
nr10bit-support = <1>;
nrds-enable = <1>;
pps-enable = <1>;
};
efusekey:efusekey{
keynum = <4>;
key0 = <&key_0>;
key1 = <&key_1>;
key2 = <&key_2>;
key3 = <&key_3>;
key_0:key_0{
keyname = "mac";
offset = <0>;
size = <6>;
};
key_1:key_1{
keyname = "mac_bt";
offset = <6>;
size = <6>;
};
key_2:key_2{
keyname = "mac_wifi";
offset = <12>;
size = <6>;
};
key_3:key_3{
keyname = "usid";
offset = <18>;
size = <16>;
};
};//End efusekey
amlvecm {
compatible = "amlogic, vecm";
dev_name = "aml_vecm";
status = "okay";
gamma_en = <0>;/*1:enabel ;0:disable*/
wb_en = <0>;/*1:enabel ;0:disable*/
cm_en = <0>;/*1:enabel ;0:disable*/
/*0: 709/601 1: bt2020*/
tx_op_color_primary = <0>;
};
amdolby_vision {
compatible = "amlogic, dolby_vision_g12a";
dev_name = "aml_amdolby_vision_driver";
status = "okay";
tv_mode = <0>;/*1:enabel ;0:disable*/
};
/* Audio Related start */
pdm_codec:dummy{
#sound-dai-cells = <0>;
compatible = "amlogic, pdm_dummy_codec";
status = "okay";
};
dummy_codec:dummy{
#sound-dai-cells = <0>;
compatible = "amlogic, aml_dummy_codec";
status = "okay";
};
amlogic_codec:t9015{
#sound-dai-cells = <0>;
compatible = "amlogic, aml_codec_T9015";
reg = <0x0 0xFF632000 0x0 0x2000>;
is_auge_used = <1>; /* meson or auge chipset used */
tdmout_index = <0>;
status = "disabled";
};
auge_sound {
compatible = "amlogic, g12a-sound-card";
aml-audio-card,name = "AML-AUGESOUND";
aml-audio-card,dai-link@0 {
format = "dsp_a";
mclk-fs = <512>;
//continuous-clock;
//bitclock-inversion;
//frame-inversion;
//bitclock-master = <&tdmacodec>;
//frame-master = <&tdmacodec>;
tdmacpu: cpu {
sound-dai = <&aml_tdma>;
dai-tdm-slot-tx-mask =
<1 1 1 1 1 1 1 1>;
dai-tdm-slot-rx-mask =
<1 1 1 1 1 1 1 1>;
dai-tdm-slot-num = <8>;
dai-tdm-slot-width = <32>;
system-clock-frequency = <24576000>;
};
tdmacodec: codec {
sound-dai = <&dummy_codec &dummy_codec>;
};
};
aml-audio-card,dai-link@1 {
format = "i2s";
mclk-fs = <256>;
//continuous-clock;
//bitclock-inversion;
//frame-inversion;
bitclock-master = <&aml_tdmb>;
frame-master = <&aml_tdmb>;
cpu {
sound-dai = <&aml_tdmb>;
dai-tdm-slot-tx-mask = <1 1>;
dai-tdm-slot-rx-mask = <1 1>;
dai-tdm-slot-num = <2>;
dai-tdm-slot-width = <32>;
system-clock-frequency = <12288000>;
};
codec {
sound-dai = <&dummy_codec &dummy_codec>;
};
};
aml-audio-card,dai-link@2 {
format = "i2s";
mclk-fs = <256>;
continuous-clock;
//bitclock-inversion;
//frame-inversion;
bitclock-master = <&aml_tdmc>;
frame-master = <&aml_tdmc>;
cpu {
sound-dai = <&aml_tdmc>;
dai-tdm-slot-tx-mask = <1 1>;
dai-tdm-slot-rx-mask = <1 1>;
dai-tdm-slot-num = <2>;
dai-tdm-slot-width = <32>;
system-clock-frequency = <12288000>;
};
codec {
sound-dai = <&dummy_codec &dummy_codec>;
};
};
aml-audio-card,dai-link@3 {
mclk-fs = <64>;
cpu {
sound-dai = <&aml_pdm>;
};
codec {
sound-dai = <&pdm_codec>;
};
};
aml-audio-card,dai-link@4 {
mclk-fs = <128>;
cpu {
sound-dai = <&aml_spdif>;
system-clock-frequency = <6144000>;
};
codec {
sound-dai = <&dummy_codec>;
};
};
aml-audio-card,dai-link@5 {
mclk-fs = <128>;
cpu {
sound-dai = <&aml_spdif_b>;
system-clock-frequency = <6144000>;
};
codec {
sound-dai = <&dummy_codec>;
};
};
};
audiolocker: locker {
compatible = "amlogic, audiolocker";
clocks = <&clkaudio CLKID_AUDIO_LOCKER_OUT
&clkaudio CLKID_AUDIO_LOCKER_IN
&clkaudio CLKID_AUDIO_MCLK_D
&clkaudio CLKID_AUDIO_MCLK_E
&clkc CLKID_MPLL1
&clkc CLKID_MPLL2>;
clock-names = "lock_out", "lock_in", "out_src",
"in_src", "out_calc", "in_ref";
interrupts = <GIC_SPI 1 IRQ_TYPE_EDGE_RISING>;
interrupt-names = "irq";
frequency = <49000000>; /* pll */
dividor = <49>; /* locker's parent */
status = "disabled";
};
/* Audio Related end */
/*DCDC for MP8756GD*/
cpu_opp_table0: cpu_opp_table0 {
compatible = "operating-points-v2";
opp-shared;
opp00 {
opp-hz = /bits/ 64 <100000000>;
opp-microvolt = <731000>;
};
opp01 {
opp-hz = /bits/ 64 <250000000>;
opp-microvolt = <731000>;
};
opp02 {
opp-hz = /bits/ 64 <500000000>;
opp-microvolt = <731000>;
};
opp03 {
opp-hz = /bits/ 64 <667000000>;
opp-microvolt = <731000>;
};
opp04 {
opp-hz = /bits/ 64 <1000000000>;
opp-microvolt = <731000>;
};
opp05 {
opp-hz = /bits/ 64 <1200000000>;
opp-microvolt = <731000>;
};
opp06 {
opp-hz = /bits/ 64 <1398000000>;
opp-microvolt = <761000>;
};
opp07 {
opp-hz = /bits/ 64 <1512000000>;
opp-microvolt = <791000>;
};
opp08 {
opp-hz = /bits/ 64 <1608000000>;
opp-microvolt = <831000>;
};
opp09 {
opp-hz = /bits/ 64 <1704000000>;
opp-microvolt = <861000>;
};
opp10 {
opp-hz = /bits/ 64 <1908000000>;
opp-microvolt = <981000>;
};
};
cpufreq-meson {
compatible = "amlogic, cpufreq-meson";
pinctrl-names = "default";
pinctrl-0 = <&pwm_ao_d_pins3>;
status = "okay";
};
}; /* end of / */
&meson_fb {
status = "okay";
display_size_default = <1920 1080 1920 2160 32>;
mem_size = <0x00800000 0x1980000 0x100000 0x100000 0x800000>;
logo_addr = "0x7f800000";
mem_alloc = <1>;
pxp_mode = <1>; /** 0:normal mode 1:pxp mode */
};
&pwm_AO_cd {
status = "okay";
};
&audiobus {
aml_tdma: tdma {
compatible = "amlogic, g12a-snd-tdma";
#sound-dai-cells = <0>;
dai-tdm-lane-slot-mask-in = <1 0>;
dai-tdm-lane-slot-mask-out = <0 1>;
dai-tdm-clk-sel = <0>;
clocks = <&clkaudio CLKID_AUDIO_MCLK_A
&clkc CLKID_MPLL0>;
clock-names = "mclk", "clk_srcpll";
pinctrl-names = "tdm_pins";
pinctrl-0 = <&tdmout_a &tdmin_a>;
};
aml_tdmb: tdmb {
compatible = "amlogic, g12a-snd-tdmb";
#sound-dai-cells = <0>;
dai-tdm-lane-slot-mask-in = <1 1 1 1>;
dai-tdm-clk-sel = <1>;
clocks = <&clkaudio CLKID_AUDIO_MCLK_B
&clkc CLKID_MPLL1>;
clock-names = "mclk", "clk_srcpll";
pinctrl-names = "tdm_pins";
pinctrl-0 = <&tdmb_mclk /*&tdmout_b &tdmin_b*/>;
};
aml_tdmc: tdmc {
compatible = "amlogic, g12a-snd-tdmc";
#sound-dai-cells = <0>;
dai-tdm-lane-slot-mask-in = <0 1 0 0>;
#dai-tdm-lane-slot-mask-out = <1 0 1 1>;
#dai-tdm-lane-oe-slot-mask-in = <0 0 0 0>;
dai-tdm-lane-oe-slot-mask-out = <1 0 0 0>;
dai-tdm-clk-sel = <2>;
clocks = <&clkaudio CLKID_AUDIO_MCLK_C
&clkc CLKID_MPLL2>;
clock-names = "mclk", "clk_srcpll";
pinctrl-names = "tdm_pins";
pinctrl-0 = <&tdmc_mclk &tdmout_c &tdmin_c>;
};
aml_spdif: spdif {
compatible = "amlogic, g12a-snd-spdif-a";
#sound-dai-cells = <0>;
clocks = <&clkc CLKID_MPLL0
&clkc CLKID_FCLK_DIV4
&clkaudio CLKID_AUDIO_SPDIFIN
&clkaudio CLKID_AUDIO_SPDIFOUT
&clkaudio CLKID_AUDIO_SPDIFIN_CTRL
&clkaudio CLKID_AUDIO_SPDIFOUT_CTRL>;
clock-names = "sysclk", "fixed_clk", "gate_spdifin",
"gate_spdifout", "clk_spdifin", "clk_spdifout";
interrupts =
<GIC_SPI 87 IRQ_TYPE_EDGE_RISING>;
interrupt-names = "irq_spdifin";
pinctrl-names = "spdif_pins";
pinctrl-0 = <&spdifout &spdifin>;
status = "okay";
};
aml_spdif_b: spdif_b {
compatible = "amlogic, g12a-snd-spdif-b";
#sound-dai-cells = <0>;
clocks = <&clkc CLKID_MPLL0 /*CLKID_HIFI_PLL*/
&clkaudio CLKID_AUDIO_SPDIFOUTB
&clkaudio CLKID_AUDIO_SPDIFOUTB_CTRL>;
clock-names = "sysclk",
"gate_spdifout", "clk_spdifout";
pinctrl-names = "spdif_pins";
pinctrl-0 = <&spdifout_b>;
status = "okay";
};
aml_pdm: pdm {
compatible = "amlogic, g12a-snd-pdm";
#sound-dai-cells = <0>;
clocks = <&clkaudio CLKID_AUDIO_PDM
&clkc CLKID_FCLK_DIV3
&clkc CLKID_MPLL3
&clkaudio CLKID_AUDIO_PDMIN0
&clkaudio CLKID_AUDIO_PDMIN1>;
clock-names = "gate",
"sysclk_srcpll",
"dclk_srcpll",
"pdm_dclk",
"pdm_sysclk";
pinctrl-names = "pdm_pins";
pinctrl-0 = <&pdmin>;
filter_mode = <1>; /* mode 0~4, defalut:1 */
status = "okay";
};
aml_pwrdet: pwrdet {
compatible = "amlogic, g12a-power-detect";
interrupts = <GIC_SPI 155 IRQ_TYPE_EDGE_RISING>;
interrupt-names = "pwrdet_irq";
/* pwrdet source sel
* 7: loopback;
* 6: tdmin_lb;
* 5: reserved;
* 4: pdmin;
* 3: spdifin;
* 2: tdmin_c;
* 1: tdmin_b;
* 0: tdmin_a;
*/
pwrdet_src = <4>;
hi_th = <0x70000>;
lo_th = <0x16000>;
status = "disabled";
};
}; /* end of audiobus */
&pinctrl_periphs {
tdmout_a: tdmout_a {
mux { /* GPIOX_11, GPIOX_10, GPIOX_8 */
groups = "tdma_sclk",
"tdma_fs",
"tdma_dout1";
function = "tdma_out";
};
};
tdmin_a: tdmin_a {
mux { /* GPIOX_9 */
groups = "tdma_din0";
function = "tdma_in";
};
};
tdmb_mclk: tdmb_mclk {
mux {
groups = "mclk0_a";
function = "mclk0";
};
};
tdmc_mclk: tdmc_mclk {
mux { /* GPIOZ_8 */
groups = "mclk1_z";
function = "mclk1";
};
};
tdmout_c:tdmout_c {
mux { /* gpioz_7, gpioz_6, GPIOZ_2, GPIOZ_4, GPIOZ_5*/
groups = "tdmc_sclk_z",
"tdmc_fs_z",
"tdmc_dout0_z"
/*,"tdmc_dout2_z",
*"tdmc_dout3_z"
*/;
function = "tdmc_out";
};
};
tdmin_c:tdmin_c {
mux { /* GPIOZ_3 */
groups = "tdmc_din1_z";
function = "tdmc_in";
};
};
spdifin: spdifin {
mux {/* gpioa_10 */
groups = "spdif_in_a10";
function = "spdif_in";
};
};
spdifout: spdifout {
mux {/* gpioa_11 */
groups = "spdif_out_a11";
function = "spdif_out";
};
};
spdifout_b: spdifout_b {
mux { /* gpioa_13 */
groups = "spdif_out_a13";
function = "spdif_out";
};
};
pdmin: pdmin {
mux { /* gpioa_5, gpioa_6, gpioa_7, gpioa_8, gpioa_9*/
groups = "pdm_din0_a",
"pdm_din1_a",
"pdm_din2_a",
"pdm_din3_a",
"pdm_dclk_a";
function = "pdm";
};
};
}; /* end of pinctrl_periphs */
&pinctrl_aobus {
tdmout_b: tdmout_b {
mux { /* GPIOAO_7, GPIOAO_8, GPIOAO_4 */
groups = "tdmb_fs_ao",
"tdmb_fs_ao",
"tdmb_dout0_ao";
function = "tdmb_out_ao";
};
};
tdmin_b:tdmin_b {
mux {
groups = "tdmb_din2_ao";
function = "tdmb_in_ao";
};
};
}; /* end of pinctrl_aobus */
/* Audio Related End */
&aobus{
};
&irblaster {
status = "disabled";
};
/*if you want to use vdin just modify status to "ok"*/
&vdin0 {
memory-region = <&vdin0_cma_reserved>;
status = "okay";
/*vdin write mem color depth support:
*bit0:support 8bit
*bit1:support 9bit
*bit2:support 10bit
*bit3:support 12bit
*bit4:support yuv422 10bit full pack mode (from txl new add)
*/
tv_bit_mode = <0x15>;
};
&vdin1 {
memory-region = <&vdin1_cma_reserved>;
status = "okay";
/*vdin write mem color depth support:
*bit0:support 8bit
*bit1:support 9bit
*bit2:support 10bit
*bit3:support 12bit
*/
tv_bit_mode = <1>;
};
&sd_emmc_b1 {
status = "okay";
sd {
caps = "MMC_CAP_4_BIT_DATA",
"MMC_CAP_MMC_HIGHSPEED",
"MMC_CAP_SD_HIGHSPEED",
"MMC_CAP_NONREMOVABLE",
"MMC_CAP_UHS_SDR12",
"MMC_CAP_UHS_SDR25",
"MMC_CAP_UHS_SDR50",
"MMC_PM_KEEP_POWER",
"MMC_CAP_NONREMOVABLE"; /**ptm debug */
f_min = <400000>;
f_max = <200000000>;
};
};
&defendkey {
status = "okay";
};