meson-g12a-sei510.dts 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558
  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. pwm-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. sdio_pwrseq: sdio-pwrseq {
  134. compatible = "mmc-pwrseq-simple";
  135. reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
  136. clocks = <&wifi32k>;
  137. clock-names = "ext_clock";
  138. };
  139. wifi32k: wifi32k {
  140. compatible = "pwm-clock";
  141. #clock-cells = <0>;
  142. clock-frequency = <32768>;
  143. pwms = <&pwm_ef 0 30518 0>; /* PWM_E at 32.768KHz */
  144. };
  145. sound {
  146. compatible = "amlogic,axg-sound-card";
  147. model = "SEI510";
  148. audio-aux-devs = <&tdmout_a>, <&tdmout_b>,
  149. <&tdmin_a>, <&tdmin_b>;
  150. audio-routing = "TDMOUT_A IN 0", "FRDDR_A OUT 0",
  151. "TDMOUT_A IN 1", "FRDDR_B OUT 0",
  152. "TDMOUT_A IN 2", "FRDDR_C OUT 0",
  153. "TDM_A Playback", "TDMOUT_A OUT",
  154. "TDMOUT_B IN 0", "FRDDR_A OUT 1",
  155. "TDMOUT_B IN 1", "FRDDR_B OUT 1",
  156. "TDMOUT_B IN 2", "FRDDR_C OUT 1",
  157. "TDM_B Playback", "TDMOUT_B OUT",
  158. "TODDR_A IN 4", "PDM Capture",
  159. "TODDR_B IN 4", "PDM Capture",
  160. "TODDR_C IN 4", "PDM Capture",
  161. "TDMIN_A IN 0", "TDM_A Capture",
  162. "TDMIN_A IN 3", "TDM_A Loopback",
  163. "TDMIN_B IN 0", "TDM_A Capture",
  164. "TDMIN_B IN 3", "TDM_A Loopback",
  165. "TDMIN_A IN 1", "TDM_B Capture",
  166. "TDMIN_A IN 4", "TDM_B Loopback",
  167. "TDMIN_B IN 1", "TDM_B Capture",
  168. "TDMIN_B IN 4", "TDM_B Loopback",
  169. "TODDR_A IN 0", "TDMIN_A OUT",
  170. "TODDR_B IN 0", "TDMIN_A OUT",
  171. "TODDR_C IN 0", "TDMIN_A OUT",
  172. "TODDR_A IN 1", "TDMIN_B OUT",
  173. "TODDR_B IN 1", "TDMIN_B OUT",
  174. "TODDR_C IN 1", "TDMIN_B OUT";
  175. assigned-clocks = <&clkc CLKID_MPLL2>,
  176. <&clkc CLKID_MPLL0>,
  177. <&clkc CLKID_MPLL1>;
  178. assigned-clock-parents = <0>, <0>, <0>;
  179. assigned-clock-rates = <294912000>,
  180. <270950400>,
  181. <393216000>;
  182. status = "okay";
  183. dai-link-0 {
  184. sound-dai = <&frddr_a>;
  185. };
  186. dai-link-1 {
  187. sound-dai = <&frddr_b>;
  188. };
  189. dai-link-2 {
  190. sound-dai = <&frddr_c>;
  191. };
  192. dai-link-3 {
  193. sound-dai = <&toddr_a>;
  194. };
  195. dai-link-4 {
  196. sound-dai = <&toddr_b>;
  197. };
  198. dai-link-5 {
  199. sound-dai = <&toddr_c>;
  200. };
  201. /* internal speaker interface */
  202. dai-link-6 {
  203. sound-dai = <&tdmif_a>;
  204. dai-format = "i2s";
  205. dai-tdm-slot-tx-mask-0 = <1 1>;
  206. mclk-fs = <256>;
  207. codec-0 {
  208. sound-dai = <&mono_dac>;
  209. };
  210. codec-1 {
  211. sound-dai = <&tohdmitx TOHDMITX_I2S_IN_A>;
  212. };
  213. };
  214. /* 8ch hdmi interface */
  215. dai-link-7 {
  216. sound-dai = <&tdmif_b>;
  217. dai-format = "i2s";
  218. dai-tdm-slot-tx-mask-0 = <1 1>;
  219. dai-tdm-slot-tx-mask-1 = <1 1>;
  220. dai-tdm-slot-tx-mask-2 = <1 1>;
  221. dai-tdm-slot-tx-mask-3 = <1 1>;
  222. mclk-fs = <256>;
  223. codec {
  224. sound-dai = <&tohdmitx TOHDMITX_I2S_IN_B>;
  225. };
  226. };
  227. /* internal digital mics */
  228. dai-link-8 {
  229. sound-dai = <&pdm>;
  230. codec {
  231. sound-dai = <&dmics>;
  232. };
  233. };
  234. /* hdmi glue */
  235. dai-link-9 {
  236. sound-dai = <&tohdmitx TOHDMITX_I2S_OUT>;
  237. codec {
  238. sound-dai = <&hdmi_tx>;
  239. };
  240. };
  241. };
  242. };
  243. &arb {
  244. status = "okay";
  245. };
  246. &cec_AO {
  247. pinctrl-0 = <&cec_ao_a_h_pins>;
  248. pinctrl-names = "default";
  249. status = "disabled";
  250. hdmi-phandle = <&hdmi_tx>;
  251. };
  252. &cecb_AO {
  253. pinctrl-0 = <&cec_ao_b_h_pins>;
  254. pinctrl-names = "default";
  255. status = "okay";
  256. hdmi-phandle = <&hdmi_tx>;
  257. };
  258. &clkc_audio {
  259. status = "okay";
  260. };
  261. &cpu0 {
  262. cpu-supply = <&vddcpu>;
  263. operating-points-v2 = <&cpu_opp_table>;
  264. clocks = <&clkc CLKID_CPU_CLK>;
  265. clock-latency = <50000>;
  266. };
  267. &cpu1 {
  268. cpu-supply = <&vddcpu>;
  269. operating-points-v2 = <&cpu_opp_table>;
  270. clocks = <&clkc CLKID_CPU_CLK>;
  271. clock-latency = <50000>;
  272. };
  273. &cpu2 {
  274. cpu-supply = <&vddcpu>;
  275. operating-points-v2 = <&cpu_opp_table>;
  276. clocks = <&clkc CLKID_CPU_CLK>;
  277. clock-latency = <50000>;
  278. };
  279. &cpu3 {
  280. cpu-supply = <&vddcpu>;
  281. operating-points-v2 = <&cpu_opp_table>;
  282. clocks = <&clkc CLKID_CPU_CLK>;
  283. clock-latency = <50000>;
  284. };
  285. &cvbs_vdac_port {
  286. cvbs_vdac_out: endpoint {
  287. remote-endpoint = <&cvbs_connector_in>;
  288. };
  289. };
  290. &ethmac {
  291. status = "okay";
  292. phy-handle = <&internal_ephy>;
  293. phy-mode = "rmii";
  294. };
  295. &frddr_a {
  296. status = "okay";
  297. };
  298. &frddr_b {
  299. status = "okay";
  300. };
  301. &frddr_c {
  302. status = "okay";
  303. };
  304. &hdmi_tx {
  305. status = "okay";
  306. pinctrl-0 = <&hdmitx_hpd_pins>, <&hdmitx_ddc_pins>;
  307. pinctrl-names = "default";
  308. };
  309. &hdmi_tx_tmds_port {
  310. hdmi_tx_tmds_out: endpoint {
  311. remote-endpoint = <&hdmi_connector_in>;
  312. };
  313. };
  314. &i2c3 {
  315. status = "okay";
  316. pinctrl-0 = <&i2c3_sda_a_pins>, <&i2c3_sck_a_pins>;
  317. pinctrl-names = "default";
  318. };
  319. &ir {
  320. status = "okay";
  321. pinctrl-0 = <&remote_input_ao_pins>;
  322. pinctrl-names = "default";
  323. };
  324. &pwm_AO_cd {
  325. pinctrl-0 = <&pwm_ao_d_e_pins>;
  326. pinctrl-names = "default";
  327. clocks = <&xtal>;
  328. clock-names = "clkin1";
  329. status = "okay";
  330. };
  331. &pwm_ef {
  332. status = "okay";
  333. pinctrl-0 = <&pwm_e_pins>;
  334. pinctrl-names = "default";
  335. clocks = <&xtal>;
  336. clock-names = "clkin0";
  337. };
  338. &pdm {
  339. pinctrl-0 = <&pdm_din0_z_pins>, <&pdm_din1_z_pins>,
  340. <&pdm_din2_z_pins>, <&pdm_din3_z_pins>,
  341. <&pdm_dclk_z_pins>;
  342. pinctrl-names = "default";
  343. status = "okay";
  344. };
  345. &saradc {
  346. status = "okay";
  347. vref-supply = <&vddio_ao1v8>;
  348. };
  349. /* SDIO */
  350. &sd_emmc_a {
  351. status = "okay";
  352. pinctrl-0 = <&sdio_pins>;
  353. pinctrl-1 = <&sdio_clk_gate_pins>;
  354. pinctrl-names = "default", "clk-gate";
  355. #address-cells = <1>;
  356. #size-cells = <0>;
  357. bus-width = <4>;
  358. cap-sd-highspeed;
  359. sd-uhs-sdr50;
  360. max-frequency = <100000000>;
  361. non-removable;
  362. disable-wp;
  363. /* WiFi firmware requires power to be kept while in suspend */
  364. keep-power-in-suspend;
  365. mmc-pwrseq = <&sdio_pwrseq>;
  366. vmmc-supply = <&vddao_3v3>;
  367. vqmmc-supply = <&vddio_ao1v8>;
  368. brcmf: wifi@1 {
  369. reg = <1>;
  370. compatible = "brcm,bcm4329-fmac";
  371. };
  372. };
  373. /* SD card */
  374. &sd_emmc_b {
  375. status = "okay";
  376. pinctrl-0 = <&sdcard_c_pins>;
  377. pinctrl-1 = <&sdcard_clk_gate_c_pins>;
  378. pinctrl-names = "default", "clk-gate";
  379. bus-width = <4>;
  380. cap-sd-highspeed;
  381. max-frequency = <50000000>;
  382. disable-wp;
  383. cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>;
  384. vmmc-supply = <&vddao_3v3>;
  385. vqmmc-supply = <&vddao_3v3>;
  386. };
  387. /* eMMC */
  388. &sd_emmc_c {
  389. status = "okay";
  390. pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_8b_pins>, <&emmc_ds_pins>;
  391. pinctrl-1 = <&emmc_clk_gate_pins>;
  392. pinctrl-names = "default", "clk-gate";
  393. bus-width = <8>;
  394. cap-mmc-highspeed;
  395. mmc-ddr-1_8v;
  396. mmc-hs200-1_8v;
  397. max-frequency = <200000000>;
  398. non-removable;
  399. disable-wp;
  400. mmc-pwrseq = <&emmc_pwrseq>;
  401. vmmc-supply = <&vddao_3v3>;
  402. vqmmc-supply = <&emmc_1v8>;
  403. };
  404. &tdmif_a {
  405. pinctrl-0 = <&tdm_a_dout0_pins>, <&tdm_a_fs_pins>, <&tdm_a_sclk_pins>;
  406. pinctrl-names = "default";
  407. status = "okay";
  408. assigned-clocks = <&clkc_audio AUD_CLKID_TDM_SCLK_PAD0>,
  409. <&clkc_audio AUD_CLKID_TDM_LRCLK_PAD0>;
  410. assigned-clock-parents = <&clkc_audio AUD_CLKID_MST_A_SCLK>,
  411. <&clkc_audio AUD_CLKID_MST_A_LRCLK>;
  412. assigned-clock-rates = <0>, <0>;
  413. };
  414. &tdmif_b {
  415. status = "okay";
  416. };
  417. &tdmin_a {
  418. status = "okay";
  419. };
  420. &tdmin_b {
  421. status = "okay";
  422. };
  423. &tdmout_a {
  424. status = "okay";
  425. };
  426. &tdmout_b {
  427. status = "okay";
  428. };
  429. &toddr_a {
  430. status = "okay";
  431. };
  432. &toddr_b {
  433. status = "okay";
  434. };
  435. &toddr_c {
  436. status = "okay";
  437. };
  438. &tohdmitx {
  439. status = "okay";
  440. };
  441. &uart_A {
  442. status = "okay";
  443. pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>;
  444. pinctrl-names = "default";
  445. uart-has-rtscts;
  446. bluetooth {
  447. compatible = "brcm,bcm43438-bt";
  448. shutdown-gpios = <&gpio GPIOX_17 GPIO_ACTIVE_HIGH>;
  449. max-speed = <2000000>;
  450. clocks = <&wifi32k>;
  451. clock-names = "lpo";
  452. vbat-supply = <&vddao_3v3>;
  453. vddio-supply = <&vddio_ao1v8>;
  454. };
  455. };
  456. &uart_AO {
  457. status = "okay";
  458. pinctrl-0 = <&uart_ao_a_pins>;
  459. pinctrl-names = "default";
  460. };
  461. &usb {
  462. status = "okay";
  463. dr_mode = "host";
  464. };