meson-g12a-sei510.dts 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566
  1. // SPDX-License-Identifier: (GPL-2.0+ OR MIT)
  2. /*
  3. * Copyright (c) 2019 BayLibre SAS. All rights reserved.
  4. */
  5. /dts-v1/;
  6. #include "meson-g12a.dtsi"
  7. #include <dt-bindings/gpio/gpio.h>
  8. #include <dt-bindings/input/input.h>
  9. #include <dt-bindings/gpio/meson-g12a-gpio.h>
  10. #include <dt-bindings/sound/meson-g12a-tohdmitx.h>
  11. / {
  12. compatible = "seirobotics,sei510", "amlogic,g12a";
  13. model = "SEI Robotics SEI510";
  14. adc_keys {
  15. compatible = "adc-keys";
  16. io-channels = <&saradc 0>;
  17. io-channel-names = "buttons";
  18. keyup-threshold-microvolt = <1800000>;
  19. button-onoff {
  20. label = "On/Off";
  21. linux,code = <KEY_POWER>;
  22. press-threshold-microvolt = <1700000>;
  23. };
  24. };
  25. aliases {
  26. serial0 = &uart_AO;
  27. ethernet0 = &ethmac;
  28. };
  29. mono_dac: audio-codec-0 {
  30. compatible = "maxim,max98357a";
  31. #sound-dai-cells = <0>;
  32. sound-name-prefix = "U16";
  33. sdmode-gpios = <&gpio GPIOX_8 GPIO_ACTIVE_HIGH>;
  34. };
  35. dmics: audio-codec-1 {
  36. #sound-dai-cells = <0>;
  37. compatible = "dmic-codec";
  38. num-channels = <2>;
  39. wakeup-delay-ms = <50>;
  40. status = "okay";
  41. sound-name-prefix = "MIC";
  42. };
  43. chosen {
  44. stdout-path = "serial0:115200n8";
  45. };
  46. cvbs-connector {
  47. compatible = "composite-video-connector";
  48. port {
  49. cvbs_connector_in: endpoint {
  50. remote-endpoint = <&cvbs_vdac_out>;
  51. };
  52. };
  53. };
  54. emmc_pwrseq: emmc-pwrseq {
  55. compatible = "mmc-pwrseq-emmc";
  56. reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>;
  57. };
  58. hdmi-connector {
  59. compatible = "hdmi-connector";
  60. type = "a";
  61. port {
  62. hdmi_connector_in: endpoint {
  63. remote-endpoint = <&hdmi_tx_tmds_out>;
  64. };
  65. };
  66. };
  67. memory@0 {
  68. device_type = "memory";
  69. reg = <0x0 0x0 0x0 0x40000000>;
  70. };
  71. ao_5v: regulator-ao_5v {
  72. compatible = "regulator-fixed";
  73. regulator-name = "AO_5V";
  74. regulator-min-microvolt = <5000000>;
  75. regulator-max-microvolt = <5000000>;
  76. vin-supply = <&dc_in>;
  77. regulator-always-on;
  78. };
  79. dc_in: regulator-dc_in {
  80. compatible = "regulator-fixed";
  81. regulator-name = "DC_IN";
  82. regulator-min-microvolt = <5000000>;
  83. regulator-max-microvolt = <5000000>;
  84. regulator-always-on;
  85. };
  86. emmc_1v8: regulator-emmc_1v8 {
  87. compatible = "regulator-fixed";
  88. regulator-name = "EMMC_1V8";
  89. regulator-min-microvolt = <1800000>;
  90. regulator-max-microvolt = <1800000>;
  91. vin-supply = <&vddao_3v3>;
  92. regulator-always-on;
  93. };
  94. vddao_3v3: regulator-vddao_3v3 {
  95. compatible = "regulator-fixed";
  96. regulator-name = "VDDAO_3V3";
  97. regulator-min-microvolt = <3300000>;
  98. regulator-max-microvolt = <3300000>;
  99. vin-supply = <&dc_in>;
  100. regulator-always-on;
  101. };
  102. vddao_3v3_t: regultor-vddao_3v3_t {
  103. compatible = "regulator-fixed";
  104. regulator-name = "VDDAO_3V3_T";
  105. regulator-min-microvolt = <3300000>;
  106. regulator-max-microvolt = <3300000>;
  107. vin-supply = <&vddao_3v3>;
  108. gpio = <&gpio GPIOH_8 GPIO_OPEN_DRAIN>;
  109. enable-active-high;
  110. };
  111. vddcpu: regulator-vddcpu {
  112. /*
  113. * SY8120B1ABC DC/DC Regulator.
  114. */
  115. compatible = "pwm-regulator";
  116. regulator-name = "VDDCPU";
  117. regulator-min-microvolt = <721000>;
  118. regulator-max-microvolt = <1022000>;
  119. vin-supply = <&dc_in>;
  120. pwms = <&pwm_AO_cd 1 1250 0>;
  121. pwm-dutycycle-range = <100 0>;
  122. regulator-boot-on;
  123. regulator-always-on;
  124. };
  125. vddio_ao1v8: regulator-vddio_ao1v8 {
  126. compatible = "regulator-fixed";
  127. regulator-name = "VDDIO_AO1V8";
  128. regulator-min-microvolt = <1800000>;
  129. regulator-max-microvolt = <1800000>;
  130. vin-supply = <&vddao_3v3>;
  131. regulator-always-on;
  132. };
  133. reserved-memory {
  134. /* TEE Reserved Memory */
  135. bl32_reserved: bl32@5000000 {
  136. reg = <0x0 0x05300000 0x0 0x2000000>;
  137. no-map;
  138. };
  139. };
  140. sdio_pwrseq: sdio-pwrseq {
  141. compatible = "mmc-pwrseq-simple";
  142. reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
  143. clocks = <&wifi32k>;
  144. clock-names = "ext_clock";
  145. };
  146. wifi32k: wifi32k {
  147. compatible = "pwm-clock";
  148. #clock-cells = <0>;
  149. clock-frequency = <32768>;
  150. pwms = <&pwm_ef 0 30518 0>; /* PWM_E at 32.768KHz */
  151. };
  152. sound {
  153. compatible = "amlogic,axg-sound-card";
  154. model = "G12A-SEI510";
  155. audio-aux-devs = <&tdmout_a>, <&tdmout_b>,
  156. <&tdmin_a>, <&tdmin_b>;
  157. audio-routing = "TDMOUT_A IN 0", "FRDDR_A OUT 0",
  158. "TDMOUT_A IN 1", "FRDDR_B OUT 0",
  159. "TDMOUT_A IN 2", "FRDDR_C OUT 0",
  160. "TDM_A Playback", "TDMOUT_A OUT",
  161. "TDMOUT_B IN 0", "FRDDR_A OUT 1",
  162. "TDMOUT_B IN 1", "FRDDR_B OUT 1",
  163. "TDMOUT_B IN 2", "FRDDR_C OUT 1",
  164. "TDM_B Playback", "TDMOUT_B OUT",
  165. "TODDR_A IN 4", "PDM Capture",
  166. "TODDR_B IN 4", "PDM Capture",
  167. "TODDR_C IN 4", "PDM Capture",
  168. "TDMIN_A IN 0", "TDM_A Capture",
  169. "TDMIN_A IN 3", "TDM_A Loopback",
  170. "TDMIN_B IN 0", "TDM_A Capture",
  171. "TDMIN_B IN 3", "TDM_A Loopback",
  172. "TDMIN_A IN 1", "TDM_B Capture",
  173. "TDMIN_A IN 4", "TDM_B Loopback",
  174. "TDMIN_B IN 1", "TDM_B Capture",
  175. "TDMIN_B IN 4", "TDM_B Loopback",
  176. "TODDR_A IN 0", "TDMIN_A OUT",
  177. "TODDR_B IN 0", "TDMIN_A OUT",
  178. "TODDR_C IN 0", "TDMIN_A OUT",
  179. "TODDR_A IN 1", "TDMIN_B OUT",
  180. "TODDR_B IN 1", "TDMIN_B OUT",
  181. "TODDR_C IN 1", "TDMIN_B OUT";
  182. assigned-clocks = <&clkc CLKID_MPLL2>,
  183. <&clkc CLKID_MPLL0>,
  184. <&clkc CLKID_MPLL1>;
  185. assigned-clock-parents = <0>, <0>, <0>;
  186. assigned-clock-rates = <294912000>,
  187. <270950400>,
  188. <393216000>;
  189. status = "okay";
  190. dai-link-0 {
  191. sound-dai = <&frddr_a>;
  192. };
  193. dai-link-1 {
  194. sound-dai = <&frddr_b>;
  195. };
  196. dai-link-2 {
  197. sound-dai = <&frddr_c>;
  198. };
  199. dai-link-3 {
  200. sound-dai = <&toddr_a>;
  201. };
  202. dai-link-4 {
  203. sound-dai = <&toddr_b>;
  204. };
  205. dai-link-5 {
  206. sound-dai = <&toddr_c>;
  207. };
  208. /* internal speaker interface */
  209. dai-link-6 {
  210. sound-dai = <&tdmif_a>;
  211. dai-format = "i2s";
  212. dai-tdm-slot-tx-mask-0 = <1 1>;
  213. mclk-fs = <256>;
  214. codec-0 {
  215. sound-dai = <&mono_dac>;
  216. };
  217. codec-1 {
  218. sound-dai = <&tohdmitx TOHDMITX_I2S_IN_A>;
  219. };
  220. };
  221. /* 8ch hdmi interface */
  222. dai-link-7 {
  223. sound-dai = <&tdmif_b>;
  224. dai-format = "i2s";
  225. dai-tdm-slot-tx-mask-0 = <1 1>;
  226. dai-tdm-slot-tx-mask-1 = <1 1>;
  227. dai-tdm-slot-tx-mask-2 = <1 1>;
  228. dai-tdm-slot-tx-mask-3 = <1 1>;
  229. mclk-fs = <256>;
  230. codec {
  231. sound-dai = <&tohdmitx TOHDMITX_I2S_IN_B>;
  232. };
  233. };
  234. /* internal digital mics */
  235. dai-link-8 {
  236. sound-dai = <&pdm>;
  237. codec {
  238. sound-dai = <&dmics>;
  239. };
  240. };
  241. /* hdmi glue */
  242. dai-link-9 {
  243. sound-dai = <&tohdmitx TOHDMITX_I2S_OUT>;
  244. codec {
  245. sound-dai = <&hdmi_tx>;
  246. };
  247. };
  248. };
  249. };
  250. &arb {
  251. status = "okay";
  252. };
  253. &cec_AO {
  254. pinctrl-0 = <&cec_ao_a_h_pins>;
  255. pinctrl-names = "default";
  256. status = "disabled";
  257. hdmi-phandle = <&hdmi_tx>;
  258. };
  259. &cecb_AO {
  260. pinctrl-0 = <&cec_ao_b_h_pins>;
  261. pinctrl-names = "default";
  262. status = "okay";
  263. hdmi-phandle = <&hdmi_tx>;
  264. };
  265. &clkc_audio {
  266. status = "okay";
  267. };
  268. &cpu0 {
  269. cpu-supply = <&vddcpu>;
  270. operating-points-v2 = <&cpu_opp_table>;
  271. clocks = <&clkc CLKID_CPU_CLK>;
  272. clock-latency = <50000>;
  273. };
  274. &cpu1 {
  275. cpu-supply = <&vddcpu>;
  276. operating-points-v2 = <&cpu_opp_table>;
  277. clocks = <&clkc CLKID_CPU_CLK>;
  278. clock-latency = <50000>;
  279. };
  280. &cpu2 {
  281. cpu-supply = <&vddcpu>;
  282. operating-points-v2 = <&cpu_opp_table>;
  283. clocks = <&clkc CLKID_CPU_CLK>;
  284. clock-latency = <50000>;
  285. };
  286. &cpu3 {
  287. cpu-supply = <&vddcpu>;
  288. operating-points-v2 = <&cpu_opp_table>;
  289. clocks = <&clkc CLKID_CPU_CLK>;
  290. clock-latency = <50000>;
  291. };
  292. &cvbs_vdac_port {
  293. cvbs_vdac_out: endpoint {
  294. remote-endpoint = <&cvbs_connector_in>;
  295. };
  296. };
  297. &ethmac {
  298. status = "okay";
  299. phy-handle = <&internal_ephy>;
  300. phy-mode = "rmii";
  301. };
  302. &frddr_a {
  303. status = "okay";
  304. };
  305. &frddr_b {
  306. status = "okay";
  307. };
  308. &frddr_c {
  309. status = "okay";
  310. };
  311. &hdmi_tx {
  312. status = "okay";
  313. pinctrl-0 = <&hdmitx_hpd_pins>, <&hdmitx_ddc_pins>;
  314. pinctrl-names = "default";
  315. };
  316. &hdmi_tx_tmds_port {
  317. hdmi_tx_tmds_out: endpoint {
  318. remote-endpoint = <&hdmi_connector_in>;
  319. };
  320. };
  321. &i2c3 {
  322. status = "okay";
  323. pinctrl-0 = <&i2c3_sda_a_pins>, <&i2c3_sck_a_pins>;
  324. pinctrl-names = "default";
  325. };
  326. &ir {
  327. status = "okay";
  328. pinctrl-0 = <&remote_input_ao_pins>;
  329. pinctrl-names = "default";
  330. };
  331. &pwm_AO_cd {
  332. pinctrl-0 = <&pwm_ao_d_e_pins>;
  333. pinctrl-names = "default";
  334. clocks = <&xtal>;
  335. clock-names = "clkin1";
  336. status = "okay";
  337. };
  338. &pwm_ef {
  339. status = "okay";
  340. pinctrl-0 = <&pwm_e_pins>;
  341. pinctrl-names = "default";
  342. clocks = <&xtal>;
  343. clock-names = "clkin0";
  344. };
  345. &pdm {
  346. pinctrl-0 = <&pdm_din0_z_pins>, <&pdm_din1_z_pins>,
  347. <&pdm_din2_z_pins>, <&pdm_din3_z_pins>,
  348. <&pdm_dclk_z_pins>;
  349. pinctrl-names = "default";
  350. status = "okay";
  351. };
  352. &saradc {
  353. status = "okay";
  354. vref-supply = <&vddio_ao1v8>;
  355. };
  356. /* SDIO */
  357. &sd_emmc_a {
  358. status = "okay";
  359. pinctrl-0 = <&sdio_pins>;
  360. pinctrl-1 = <&sdio_clk_gate_pins>;
  361. pinctrl-names = "default", "clk-gate";
  362. #address-cells = <1>;
  363. #size-cells = <0>;
  364. bus-width = <4>;
  365. cap-sd-highspeed;
  366. sd-uhs-sdr50;
  367. max-frequency = <100000000>;
  368. non-removable;
  369. disable-wp;
  370. /* WiFi firmware requires power to be kept while in suspend */
  371. keep-power-in-suspend;
  372. mmc-pwrseq = <&sdio_pwrseq>;
  373. vmmc-supply = <&vddao_3v3>;
  374. vqmmc-supply = <&vddio_ao1v8>;
  375. brcmf: wifi@1 {
  376. reg = <1>;
  377. compatible = "brcm,bcm4329-fmac";
  378. };
  379. };
  380. /* SD card */
  381. &sd_emmc_b {
  382. status = "okay";
  383. pinctrl-0 = <&sdcard_c_pins>;
  384. pinctrl-1 = <&sdcard_clk_gate_c_pins>;
  385. pinctrl-names = "default", "clk-gate";
  386. bus-width = <4>;
  387. cap-sd-highspeed;
  388. max-frequency = <50000000>;
  389. disable-wp;
  390. cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>;
  391. vmmc-supply = <&vddao_3v3>;
  392. vqmmc-supply = <&vddao_3v3>;
  393. };
  394. /* eMMC */
  395. &sd_emmc_c {
  396. status = "okay";
  397. pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_8b_pins>, <&emmc_ds_pins>;
  398. pinctrl-1 = <&emmc_clk_gate_pins>;
  399. pinctrl-names = "default", "clk-gate";
  400. bus-width = <8>;
  401. cap-mmc-highspeed;
  402. mmc-ddr-1_8v;
  403. mmc-hs200-1_8v;
  404. max-frequency = <200000000>;
  405. non-removable;
  406. disable-wp;
  407. mmc-pwrseq = <&emmc_pwrseq>;
  408. vmmc-supply = <&vddao_3v3>;
  409. vqmmc-supply = <&emmc_1v8>;
  410. };
  411. &tdmif_a {
  412. pinctrl-0 = <&tdm_a_dout0_pins>, <&tdm_a_fs_pins>, <&tdm_a_sclk_pins>;
  413. pinctrl-names = "default";
  414. status = "okay";
  415. assigned-clocks = <&clkc_audio AUD_CLKID_TDM_SCLK_PAD0>,
  416. <&clkc_audio AUD_CLKID_TDM_LRCLK_PAD0>;
  417. assigned-clock-parents = <&clkc_audio AUD_CLKID_MST_A_SCLK>,
  418. <&clkc_audio AUD_CLKID_MST_A_LRCLK>;
  419. assigned-clock-rates = <0>, <0>;
  420. };
  421. &tdmif_b {
  422. status = "okay";
  423. };
  424. &tdmin_a {
  425. status = "okay";
  426. };
  427. &tdmin_b {
  428. status = "okay";
  429. };
  430. &tdmout_a {
  431. status = "okay";
  432. };
  433. &tdmout_b {
  434. status = "okay";
  435. };
  436. &toddr_a {
  437. status = "okay";
  438. };
  439. &toddr_b {
  440. status = "okay";
  441. };
  442. &toddr_c {
  443. status = "okay";
  444. };
  445. &tohdmitx {
  446. status = "okay";
  447. };
  448. &uart_A {
  449. status = "okay";
  450. pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>;
  451. pinctrl-names = "default";
  452. uart-has-rtscts;
  453. bluetooth {
  454. compatible = "brcm,bcm43438-bt";
  455. shutdown-gpios = <&gpio GPIOX_17 GPIO_ACTIVE_HIGH>;
  456. max-speed = <2000000>;
  457. clocks = <&wifi32k>;
  458. clock-names = "lpo";
  459. vbat-supply = <&vddao_3v3>;
  460. vddio-supply = <&vddio_ao1v8>;
  461. };
  462. };
  463. &uart_AO {
  464. status = "okay";
  465. pinctrl-0 = <&uart_ao_a_pins>;
  466. pinctrl-names = "default";
  467. };
  468. &usb {
  469. status = "okay";
  470. dr_mode = "host";
  471. };