MT6757_DSI0_B60384.cmm 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711
  1. ;------------------------------------------------------------------------
  2. ; PHY Timing Control
  3. ;------------------------------------------------------------------------
  4. ;PLL freq = 26x(fbkdiv)x(prediv)/(posdiv)
  5. ; prediv = 0:/1, 1:/2, 2,3:/4
  6. ; posdiv = 0:/1, 1:/2, 2:/4, 3:/8, 4:/16
  7. ; txdiv0,txdiv1 is removed from B60384
  8. &fbkdiv=0x09
  9. &prediv=0x00
  10. &posdiv=0x03
  11. ;------------------------------------------------------------------------
  12. ; Address define (Project dependant)
  13. ;------------------------------------------------------------------------
  14. ;;do K2_DSI0_address_def.cmm
  15. ;------------------------------------------------------------------------
  16. ; MMSYS register map
  17. ;------------------------------------------------------------------------
  18. &mmsys_base=0x14000000
  19. &CLK_CFG_0_CLR=0x10210108
  20. &MMSYS_CG_CLR0=&mmsys_base+0x00108
  21. &MMSYS_CG_CLR1=&mmsys_base+0x00118
  22. &LCM_RST_B=&mmsys_base+0x00150
  23. ; for DPI only
  24. ;&MMSYS_FPGA_CON2=&mmsys_base+0x00150
  25. ;------------------------------------------------------------------------
  26. ; I2C register map : DSI_related
  27. ;------------------------------------------------------------------------
  28. &i2c_base=&mmsys_base+0x0002c000
  29. ;------------------------------------------------------------------------
  30. ; MIPI TX config register map ; MIPI_TX0_BASE : DSI_related
  31. ;------------------------------------------------------------------------
  32. &mipi_tx_config_base=0x10215000
  33. &DSI_CON=&mipi_tx_config_base+0x000
  34. &DSI_CLOCK_LANE=&mipi_tx_config_base+0x004
  35. &DSI_DATA_LANE_0=&mipi_tx_config_base+0x008
  36. &DSI_DATA_LANE_1=&mipi_tx_config_base+0x00c
  37. &DSI_DATA_LANE_2=&mipi_tx_config_base+0x010
  38. &DSI_DATA_LANE_3=&mipi_tx_config_base+0x014
  39. &DSI_TOP_CON=&mipi_tx_config_base+0x040
  40. &DSI_BG_CON=&mipi_tx_config_base+0x044
  41. &DSI_PLL_CON0=&mipi_tx_config_base+0x050
  42. &DSI_PLL_CON1=&mipi_tx_config_base+0x054
  43. &DSI_PLL_CON2=&mipi_tx_config_base+0x058
  44. &DSI_PLL_CON3=&mipi_tx_config_base+0x05c
  45. &DSI_PLL_CHG=&mipi_tx_config_base+0x060
  46. &DSI_PLL_TOP=&mipi_tx_config_base+0x064
  47. &DSI_PLL_PWR=&mipi_tx_config_base+0x068
  48. &DSI_GPI_EN=&mipi_tx_config_base+0x074
  49. &DSI_GPI_PULL=&mipi_tx_config_base+0x078
  50. &DSI_PHY_SEL=&mipi_tx_config_base+0x07c
  51. &DSI_SW_CTRL_EN=&mipi_tx_config_base+0x080
  52. &DSI_SW_CTRL_CON0=&mipi_tx_config_base+0x084
  53. &DSI_SW_CTRL_CON1=&mipi_tx_config_base+0x088
  54. &DSI_SW_CTRL_CON2=&mipi_tx_config_base+0x08c
  55. &DSI_DBG_CON=&mipi_tx_config_base+0x090
  56. &DSI_DBG_OUT=&mipi_tx_config_base+0x094
  57. &DSI_APB_ASYNC_STA=&mipi_tx_config_base+0x098
  58. ;------------------------------------------------------------------------
  59. ; MIPI RX config register map : MIPI_RX_ANA_CSI0_BASE, MIPI_RX_CONFIG_CSI0_BASE : DSI_related
  60. ;------------------------------------------------------------------------
  61. &mipi_rx_ana_base=0x10217000
  62. &mipi_rx_config_base=0x15008000
  63. ;------------------------------------------------------------------------
  64. ; DSI register map : DSI0_BASE : DSI_related
  65. ;------------------------------------------------------------------------
  66. &DSI_BASE=&mmsys_base+0x00022000
  67. &DSI_START=&DSI_BASE+0x00
  68. &DSI_INTSTA=&DSI_BASE+0x0c
  69. &DSI_COM_CON=&DSI_BASE+0x10
  70. &DSI_MODE_CON=&DSI_BASE+0x14
  71. &DSI_TXRX_CON=&DSI_BASE+0x18
  72. &DSI_PSCON=&DSI_BASE+0x1C
  73. &DSI_VSA_NL=&DSI_BASE+0x20
  74. &DSI_VBP_NL=&DSI_BASE+0x24
  75. &DSI_VFP_NL=&DSI_BASE+0x28
  76. &DSI_VACT_NL=&DSI_BASE+0x2c
  77. &DSI_HSA_WC=&DSI_BASE+0x50
  78. &DSI_HBP_WC=&DSI_BASE+0x54
  79. &DSI_HFP_WC=&DSI_BASE+0x58
  80. &DSI_BLLP_WC=&DSI_BASE+0x5c
  81. &DSI_CMDQ_CON=&DSI_BASE+0x60
  82. &DSI_HSTX_CKLP_WC=&DSI_BASE+0x64
  83. &DSI_RACK=&DSI_BASE+0x84
  84. &DSI_MEM_CONTI=&DSI_BASE+0x90
  85. &DSI_PHY_CON=&DSI_BASE+0x100
  86. &DSI_PHY_LCCON=&DSI_BASE+0x104
  87. &DSI_PHY_LD0CON=&DSI_BASE+0x108
  88. &DSI_PHY_TIMCON0=&DSI_BASE+0x110
  89. &DSI_PHY_TIMCON1=&DSI_BASE+0x114
  90. &DSI_PHY_TIMCON2=&DSI_BASE+0x118
  91. &DSI_PHY_TIMCON3=&DSI_BASE+0x11C
  92. &DSI_PHY_TIMCON4=&DSI_BASE+0x120
  93. &DSI_VM_CMD_CON=&DSI_BASE+0x130
  94. &DSI_VM_CMD_DATA0=&DSI_BASE+0x134
  95. &DSI_VM_CMD_DATA4=&DSI_BASE+0x138
  96. &DSI_VM_CMD_DATA8=&DSI_BASE+0x13c
  97. &DSI_VM_CMD_DATAC=&DSI_BASE+0x140
  98. &DSI_VM_CMD_DATA10=&DSI_BASE+0x180
  99. &DSI_VM_CMD_DATA14=&DSI_BASE+0x184
  100. &DSI_VM_CMD_DATA18=&DSI_BASE+0x188
  101. &DSI_VM_CMD_DATA1C=&DSI_BASE+0x18C
  102. &DSI_DEBUG_SEL=&DSI_BASE+0x170
  103. &DSI_BIST_PATTERN=&DSI_BASE+0x178
  104. &DSI_BIST_CON=&DSI_BASE+0x17c
  105. &DSI_SHADOW_DEBUG=&DSI_BASE+0x198
  106. &DSI_SHADOW_STA=&DSI_BASE+0x19C
  107. &DSI_CMDQ_BASE=&DSI_BASE+0x200
  108. &DSI_CMDQ_0=&DSI_CMDQ_BASE+0x00
  109. &DSI_CMDQ_1=&DSI_CMDQ_BASE+0x04
  110. &DSI_CMDQ_2=&DSI_CMDQ_BASE+0x08
  111. &DSI_CMDQ_3=&DSI_CMDQ_BASE+0x0c
  112. &DSI_CMDQ_4=&DSI_CMDQ_BASE+0x10
  113. &DSI_CMDQ_5=&DSI_CMDQ_BASE+0x14
  114. &DSI_CMDQ_6=&DSI_CMDQ_BASE+0x18
  115. &DSI_CMDQ_7=&DSI_CMDQ_BASE+0x1c
  116. &DSI_CMDQ_8=&DSI_CMDQ_BASE+0x20
  117. &DSI_CMDQ_9=&DSI_CMDQ_BASE+0x24
  118. ;------------------------------------------------------------------------
  119. ; RDMA register map : DISP_RDMA0_BASE
  120. ;------------------------------------------------------------------------
  121. &disp_rdma_base=&mmsys_base+0x0000f000
  122. &DISP_RDMA_INT_ENABLE=&disp_rdma_base+0x000
  123. &DISP_RDMA_INT_STATUS=&disp_rdma_base+0x004
  124. &DISP_RDMA_GLOBAL_CON=&disp_rdma_base+0x010
  125. &DISP_RDMA_SIZE_CON_0=&disp_rdma_base+0x014
  126. &DISP_RDMA_SIZE_CON_1=&disp_rdma_base+0x018
  127. &DISP_RDMA_TARGET_LINE=&disp_rdma_base+0x01c
  128. &DISP_RDMA_MEM_CON=&disp_rdma_base+0x024
  129. &DISP_RDMA_MEM_SRC_PITCH=&disp_rdma_base+0x02c
  130. &DISP_RDMA_GMC_SETTING_0=&disp_rdma_base+0x030
  131. &DISP_RDMA_SLOW_CON=&disp_rdma_base+0x034
  132. &DISP_RDMA_GMC_SETTING_1=&disp_rdma_base+0x038
  133. &DISP_RDMA_FIFO_CON=&disp_rdma_base+0x040
  134. &DISP_RDMA_MEM_START_ADDR=&disp_rdma_base+0xf00
  135. ;------------------------------------------------------------------------
  136. ; UFOE register map
  137. ;------------------------------------------------------------------------
  138. &disp_ufoe_base=&mmsys_base+0x0001f000
  139. &DISP_UFO_START=&mmsys_base+0x00
  140. ;------------------------------------------------------------------------
  141. ; DISP Split
  142. ;------------------------------------------------------------------------
  143. &disp_split0_base=&mmsys_base+0x00021000
  144. ;&disp_split1_base=&mmsys_base+0x00022000
  145. ;&DISP_SPLIT0_SPLIT_ENABLE=&disp_split0_base+0x00
  146. ;&DISP_SPLIT0_SPLIT_SW_RESET=&disp_split0_base+0x04
  147. ;&DISP_SPLIT1_SPLIT_ENABLE=&disp_split1_base+0x00
  148. ;&DISP_SPLIT1_SPLIT_SW_RESET=&disp_split1_base+0x04
  149. ;------------------------------------------------------------------------
  150. ; Mutex register map
  151. ;------------------------------------------------------------------------
  152. &disp_mutex_base=&mmsys_base+0x00025000
  153. &DISP_MUTEX_INTEN=&disp_mutex_base+0x00
  154. &DISP_MUTEX_INTSTA=&disp_mutex_base+0x04
  155. ; for mutex thread 0
  156. ; for mutex w/ shadow control
  157. &DISP_MUTEX0_EN =&disp_mutex_base+0x20
  158. &DISP_MUTEX0_GET =&disp_mutex_base+0x24
  159. &DISP_MUTEX0_RST =&disp_mutex_base+0x28
  160. &DISP_MUTEX0_CTL =&disp_mutex_base+0x2c
  161. &DISP_MUTEX0_MOD0=&disp_mutex_base+0x30
  162. &DISP_MUTEX0_MOD1=&disp_mutex_base+0x34
  163. ; for mutex w/o shadow control (Jade/Everest)
  164. ;&DISP_MUTEX0_SOF=&disp_mutex_base+0x30
  165. ;&DISP_MUTEX0_MOD=&disp_mutex_base+0x2c
  166. ;&DISP_MUTEX0_EN=&disp_mutex_base+0x20
  167. ;&DISP_MUTEX0_RST=&disp_mutex_base+0x28
  168. ;&DISP_MUTEX1_SOF=&disp_mutex_base+0x50
  169. ;&DISP_MUTEX1_MOD=&disp_mutex_base+0x4c
  170. ;&DISP_MUTEX1_EN=&disp_mutex_base+0x40
  171. ;&DISP_MUTEX1_RST=&disp_mutex_base+0x48
  172. ;------------------------------------------------------------------------
  173. ; Mux sel
  174. ;------------------------------------------------------------------------
  175. &DISP_RDMA0_SOUT_SEL_IN =&mmsys_base+0xf5c
  176. &DISP_PATH0_SEL_IN =&mmsys_base+0xf44
  177. &DISP_PATH0_SOUT_SEL_IN =&mmsys_base+0xf54
  178. &DISP_UFOE_SEL_IN =&mmsys_base+0xf30
  179. &DISP_UFOE_MOUT_EN =&mmsys_base+0xf18
  180. ;&DISP_PATH0_SEL_IN=&mmsys_base+0x090
  181. ;&DISP_PATH1_SEL_IN=&mmsys_base+0x094
  182. ;&DISP_UFOE_SEL_IN=&mmsys_base+0x060
  183. ;&DISP_DSI0_SEL_IN=&mmsys_base+0x064
  184. ;&DISP_DSI1_SEL_IN=&mmsys_base+0x0a8
  185. ;&DISP_RDMA0_SOUT_SEL_IN=&mmsys_base+0x06c
  186. ;&DISP_RDMA1_SOUT_SEL_IN=&mmsys_base+0x070
  187. ;&DISP_RDMA2_SOUT_SEL_IN=&mmsys_base+0x0b8
  188. ;&DISP_PATH0_SOUT_SEL_IN=&mmsys_base+0x0c4
  189. ;&DISP_PATH1_SOUT_SEL_IN=&mmsys_base+0x0c8
  190. ;------------------------------------------------------------------------
  191. ; Clock source and debug settings
  192. ;------------------------------------------------------------------------
  193. D.S SD:&CLK_CFG_0_CLR %LE %LONG 0xffffffff ; clear cg0 ;0x80000000 for hf_fmm_ck
  194. D.S SD:&MMSYS_CG_CLR0 %LE %LONG 0xffffffff ; clear cg0
  195. D.S SD:&MMSYS_CG_CLR1 %LE %LONG 0xffffffff ; clear cg1
  196. ;;&FPGA_CON0=&mmsys_base+0x00c00
  197. ;;D.S SD:&FPGA_CON0 %LE %LONG 0x80000000 ; DTB reset
  198. ;;D.S SD:&FPGA_CON0 %LE %LONG 0x00000000
  199. ;;D.S SD:&mmsys_base+0x00c08 %LE %LONG 0x00000201 ; fpga con
  200. ;;D.S SD:&mmsys_base+0x0004c %LE %LONG 0x00000000 ; dsi out
  201. ;------------------------------------------------------------------------
  202. ;; I2c write function
  203. ;------------------------------------------------------------------------
  204. &i2c_write_loop=0;
  205. &i2c_slave_addr=0;
  206. &i2c_write_addr=0;
  207. &i2c_write_data=0;
  208. &i2c_read_data=0;
  209. ;while (&i2c_write_loop<0x19)
  210. while (&i2c_write_loop<0x1A)
  211. (
  212. ; DSI GPIO mux select
  213. ;----------------------------
  214. if (&i2c_write_loop==0x00)
  215. (
  216. &i2c_slave_addr=0x18;
  217. &i2c_write_addr=0x00;
  218. &i2c_write_data=0x10;
  219. )
  220. ; ABB reference clock LPF
  221. ;----------------------------
  222. if (&i2c_write_loop==0x01)
  223. (
  224. &i2c_slave_addr=0x20;
  225. &i2c_write_addr=0x42;
  226. &i2c_write_data=0x01;
  227. )
  228. ; Reference clock from ARMPLL
  229. ;----------------------------
  230. if (&i2c_write_loop==0x02)
  231. (
  232. &i2c_slave_addr=0x20;
  233. &i2c_write_addr=0x43;
  234. &i2c_write_data=0x01;
  235. )
  236. if (&i2c_write_loop==0x03)
  237. (
  238. &i2c_slave_addr=0x20;
  239. &i2c_write_addr=0x05;
  240. &i2c_write_data=0x01;
  241. )
  242. if (&i2c_write_loop==0x04)
  243. (
  244. &i2c_slave_addr=0x20;
  245. &i2c_write_addr=0x22;
  246. &i2c_write_data=0x01;
  247. )
  248. ; MIPI TX Config
  249. ;----------------------------
  250. ; DSI_BG_CON (fast_charge=0)
  251. if (&i2c_write_loop==0x05)
  252. (
  253. &i2c_slave_addr=0x30;
  254. &i2c_write_addr=0x44;
  255. &i2c_write_data=0x83;
  256. )
  257. ; DSI_TOP_CON
  258. if (&i2c_write_loop==0x06)
  259. (
  260. &i2c_slave_addr=0x30;
  261. &i2c_write_addr=0x40;
  262. &i2c_write_data=0x82;
  263. )
  264. ; DSI0_CON
  265. if (&i2c_write_loop==0x07)
  266. (
  267. &i2c_slave_addr=0x30;
  268. &i2c_write_addr=0x00;
  269. &i2c_write_data=0x03;
  270. )
  271. ; DSI_PLL_PWR (pwr_on=1)
  272. if (&i2c_write_loop==0x08)
  273. (
  274. &i2c_slave_addr=0x30;
  275. &i2c_write_addr=0x68;
  276. &i2c_write_data=0x03;
  277. )
  278. ; DSI_PLL_PWR (iso_en=0)
  279. if (&i2c_write_loop==0x09)
  280. (
  281. &i2c_slave_addr=0x30;
  282. &i2c_write_addr=0x68;
  283. &i2c_write_data=0x01;
  284. )
  285. ; DSI_PLL0_CON0
  286. ; [2:1] prediv
  287. ; [4:3] txdiv0 (not used)
  288. ; [6:5] txdiv1 (not used)
  289. ; [9:7] posdiv
  290. if (&i2c_write_loop==0x0a)
  291. (
  292. &i2c_slave_addr=0x30;
  293. &i2c_write_addr=0x50;
  294. &i2c_write_data=((&posdiv&0x1)<<0x7)|(&prediv<<0x1);
  295. )
  296. if (&i2c_write_loop==0x0b)
  297. (
  298. &i2c_slave_addr=0x30;
  299. &i2c_write_addr=0x51;
  300. &i2c_write_data=(&posdiv>>0x1)&0x3;
  301. )
  302. ; DSI_PLL0_CON1
  303. ; [0] fra_en
  304. ; [2] ssc_en
  305. if (&i2c_write_loop==0x0c)
  306. (
  307. &i2c_slave_addr=0x30;
  308. &i2c_write_addr=0x54;
  309. &i2c_write_data=0x01;
  310. )
  311. ; DSI_PLL0_CON2
  312. ; [23:0] pcw (fractional)
  313. ; [30:24] pcw (integer)
  314. if (&i2c_write_loop==0x0d)
  315. (
  316. &i2c_slave_addr=0x30;
  317. &i2c_write_addr=0x58;
  318. &i2c_write_data=0x00;
  319. )
  320. if (&i2c_write_loop==0x0e)
  321. (
  322. &i2c_slave_addr=0x30;
  323. &i2c_write_addr=0x59;
  324. &i2c_write_data=0x00;
  325. )
  326. if (&i2c_write_loop==0x0f)
  327. (
  328. &i2c_slave_addr=0x30;
  329. &i2c_write_addr=0x5a;
  330. &i2c_write_data=0x00;
  331. )
  332. if (&i2c_write_loop==0x10)
  333. (
  334. &i2c_slave_addr=0x30;
  335. &i2c_write_addr=0x5b;
  336. &i2c_write_data=(&fbkdiv<<2)
  337. )
  338. ; DSI_CLOCK_LANE, [4]:CKLANE_EN=1
  339. if (&i2c_write_loop==0x11)
  340. (
  341. &i2c_slave_addr=0x30;
  342. &i2c_write_addr=0x04;
  343. &i2c_write_data=0x11;
  344. )
  345. ; DSI_DATA_LANE_0
  346. if (&i2c_write_loop==0x12)
  347. (
  348. &i2c_slave_addr=0x30;
  349. &i2c_write_addr=0x08;
  350. &i2c_write_data=0x01;
  351. )
  352. ; DSI_DATA_LANE_1
  353. if (&i2c_write_loop==0x13)
  354. (
  355. &i2c_slave_addr=0x30;
  356. &i2c_write_addr=0x0c;
  357. &i2c_write_data=0x01;
  358. )
  359. ; DSI_DATA_LANE_2
  360. if (&i2c_write_loop==0x14)
  361. (
  362. &i2c_slave_addr=0x30;
  363. &i2c_write_addr=0x10;
  364. &i2c_write_data=0x01;
  365. )
  366. ; DSI_DATA_LANE_3
  367. if (&i2c_write_loop==0x15)
  368. (
  369. &i2c_slave_addr=0x30;
  370. &i2c_write_addr=0x14;
  371. &i2c_write_data=0x01;
  372. )
  373. ; DSI_PLL_TOP
  374. ; [9:8] mppll_preserve (s2q_div)
  375. if (&i2c_write_loop==0x16)
  376. (
  377. &i2c_slave_addr=0x30;
  378. &i2c_write_addr=0x64;
  379. &i2c_write_data=0x20;
  380. )
  381. ; MPPLL starts
  382. ;----------------------------
  383. ; DSI_PLL0_CON0
  384. ; [0] pll_en
  385. if (&i2c_write_loop==0x17)
  386. (
  387. &i2c_slave_addr=0x30;
  388. &i2c_write_addr=0x50;
  389. &i2c_write_data=((&posdiv&0x1)<<0x7)|(&prediv<<0x1)|0x1;
  390. )
  391. ; MIPI TX source control
  392. ;----------------------------
  393. if (&i2c_write_loop==0x18)
  394. (
  395. &i2c_slave_addr=0x30;
  396. &i2c_write_addr=0x28;
  397. &i2c_write_data=0x00;
  398. )
  399. ; GPIO12 DSI_BCLK driving
  400. ;----------------------------
  401. if (&i2c_write_loop==0x19)
  402. (
  403. &i2c_slave_addr=0x18;
  404. &i2c_write_addr=0x27;
  405. &i2c_write_data=0x70;
  406. )
  407. ;;------------------------------------------
  408. ;; I2C write
  409. ;;------------------------------------------
  410. ;set inten=0
  411. ;D.S SD:&i2c_base+0x008 %LE %LONG 0x000;
  412. ;set 2 byte transfer (address + data)
  413. D.S SD:&i2c_base+0x014 %LE %LONG 0x002;
  414. ;1 transac
  415. D.S SD:&i2c_base+0x018 %LE %LONG 0x01;
  416. ;set slave address
  417. D.S SD:&i2c_base+0x004 %LE %LONG (&i2c_slave_addr<<0x1);
  418. ;prepare data to fifo
  419. D.S SD:&i2c_base+0x000 %LE %LONG &i2c_write_addr;
  420. D.S SD:&i2c_base+0x000 %LE %LONG &i2c_write_data;
  421. ;trigger
  422. D.S SD:&i2c_base+0x024 %LE %LONG 0x01;
  423. ;wait i2c done
  424. while ((data.long(SD:&i2c_base+0x00C)&0x1)!=0x1)
  425. (
  426. wait 10.ms
  427. )
  428. ;write 1 clear
  429. D.S SD:&i2c_base+0x00C %LE %LONG 0xff;
  430. ;;------------------------------------------
  431. ;; I2C read (write address + read data)
  432. ;;------------------------------------------
  433. ;set 1 byte transfer (address)
  434. D.S SD:&i2c_base+0x014 %LE %LONG 0x001;
  435. ;1 transac
  436. D.S SD:&i2c_base+0x018 %LE %LONG 0x01;
  437. ;set slave address
  438. D.S SD:&i2c_base+0x004 %LE %LONG (&i2c_slave_addr<<0x1);
  439. ;prepare data to fifo
  440. D.S SD:&i2c_base+0x000 %LE %LONG &i2c_write_addr;
  441. ;trigger
  442. D.S SD:&i2c_base+0x024 %LE %LONG 0x01;
  443. ;wait i2c done
  444. while ((data.long(SD:&i2c_base+0x00C)&0x1)!=0x1)
  445. (
  446. wait 10.ms
  447. )
  448. ;write 1 clear
  449. D.S SD:&i2c_base+0x00C %LE %LONG 0xff;
  450. ;set 1 byte transfer (data)
  451. D.S SD:&i2c_base+0x014 %LE %LONG 0x001;
  452. ;1 transac
  453. D.S SD:&i2c_base+0x018 %LE %LONG 0x01;
  454. ;set slave address
  455. D.S SD:&i2c_base+0x004 %LE %LONG ((&i2c_slave_addr<<0x1)+0x1) ;[0]:write or read
  456. ;trigger
  457. D.S SD:&i2c_base+0x024 %LE %LONG 0x01;
  458. ;wait i2c done
  459. while ((data.long(SD:&i2c_base+0x00C)&0x1)!=0x1)
  460. (
  461. wait 10.ms
  462. )
  463. ;write 1 clear
  464. D.S SD:&i2c_base+0x00C %LE %LONG 0xff;
  465. &i2c_read_data=data.long(SD:&i2c_base+0x000);
  466. if (&i2c_read_data==&i2c_write_data)
  467. (
  468. PRINT "I2C Success, write addr = " &i2c_write_addr ", read_data=" &i2c_read_data
  469. wait 800.ms
  470. )
  471. else
  472. (
  473. PRINT "I2C Fail, write addr = " &i2c_write_addr ", write data = " &i2c_write_data ", read_data=" &i2c_read_data
  474. wait 5000.ms
  475. )
  476. &i2c_write_loop=&i2c_write_loop+0x01;
  477. )
  478. wait 500.ms ;wait pll stable
  479. PRINT "PLL setting finish!!"
  480. ;------------------------------------------------------------------------
  481. ; DSI / LCM Reset
  482. ;------------------------------------------------------------------------
  483. D.S SD:&LCM_RST_B %LE %LONG 0x00000000
  484. D.S SD:&LCM_RST_B %LE %LONG 0x00000001
  485. ;dsi reset - must reset after DSI clock is on
  486. ;dig_mipi_tx reset
  487. D.S SD:&DSI_COM_CON %LE %LONG 0x00000005
  488. D.S SD:&DSI_COM_CON %LE %LONG 0x00000000
  489. ;------------------------------------------------------------------------
  490. ; DSI Timing Parameters
  491. ;------------------------------------------------------------------------
  492. &posdiv_real=0
  493. &prediv_real=0
  494. if (&posdiv==0x0)
  495. (
  496. &posdiv_real=0x01
  497. )
  498. else if (&posdiv==0x1)
  499. (
  500. &posdiv_real=0x02
  501. )
  502. else if (&posdiv==0x2)
  503. (
  504. &posdiv_real=0x04
  505. )
  506. else if (&posdiv==0x3)
  507. (
  508. &posdiv_real=0x08
  509. )
  510. else
  511. (
  512. &posdiv_real=0x10
  513. )
  514. if (&prediv==0x0)
  515. (
  516. &prediv_real=0x01
  517. )
  518. else if (&prediv==0x1)
  519. (
  520. &prediv_real=0x02
  521. )
  522. else if (&prediv==0x2)
  523. (
  524. &prediv_real=0x04
  525. )
  526. print "posdiv=" &posdiv
  527. print "posdiv_real=" &posdiv_real
  528. print "prediv=" &prediv
  529. print "prediv_real=" &prediv_real
  530. ; cycle time = 1000/(PLL freq/4)
  531. ;--------------------------------------------------------------------
  532. &cycle_time=0
  533. &cycle_time=(0x3E8*0x4*&posdiv_real)/(&fbkdiv*&prediv_real*0x1a)+1
  534. print "CYCLE TIME = " &cycle_time
  535. ; ui = cycle_time/8
  536. ;--------------------------------------------------------------------
  537. &ui=0
  538. &ui=(0x3E8*&posdiv_real)/(&fbkdiv*&prediv_real*0x1a*0x2)+1
  539. print "UI = " &ui
  540. ; lpx = 100ns (HW limit: not less than 2)
  541. ;--------------------------------------------------------------------
  542. &lpx=0;
  543. &lpx=(0x64/&cycle_time)+0x1
  544. if (&lpx<0x02)
  545. (
  546. &lpx=0x02
  547. )
  548. print "LPX = " &lpx
  549. ; hs_prep : 40ns+4*UI ~ 85ns+6*UI
  550. ; hs_prep = 64ns+5*UI
  551. ;--------------------------------------------------------------------
  552. &hs_prep=((0x40+0x05*&ui)/&cycle_time);
  553. if (&hs_prep<0x1)
  554. (
  555. &hs_prep=0x1
  556. )
  557. print "hs_prep = " &hs_prep
  558. ; hs_prep+hs_zero : > 145ns+10*UI
  559. ; hs_zero = (200+10*UI) - hs_prep
  560. ;--------------------------------------------------------------------
  561. &hs_zero=((0xc8+0x0a*&ui)/&cycle_time)-&hs_prep;
  562. print "hs_zero = " &hs_zero
  563. ; hs_trail : max(8*UI, 60ns+4*UI) ~ 105ns+12*UI (T_eot)
  564. ; hs_trail = 96ns+4*UI
  565. ;--------------------------------------------------------------------
  566. &hs_trail=0
  567. &hs_trail_pre=0x60+0x04*&ui
  568. if (&hs_trail_pre>&cycle_time)
  569. (
  570. &hs_trail=(&hs_trail_pre/&cycle_time)+1
  571. )
  572. else
  573. (
  574. &hs_trail=0x2
  575. )
  576. print "hs_trail = " &hs_trail
  577. ; hs_exit : > 100ns
  578. ; hs_exit = 200ns
  579. ;--------------------------------------------------------------------
  580. &hs_exit=(0xc8/&cycle_time)+0x1
  581. print "hs_exit = " &hs_exit
  582. ; ta_go = 4*lpx
  583. ; ta_get = 5*lpx
  584. ; ta_sure : lpx ~ 2*lpx
  585. ;--------------------------------------------------------------------
  586. &ta_go=4*&lpx
  587. &ta_get=5*&lpx
  588. &ta_sure=&lpx+(&lpx/0x02)
  589. print "ta_go = " &ta_go
  590. print "ta_get = " &ta_get
  591. print "ta_sure = " &ta_sure
  592. ; clk_hs_prep : 38ns ~ 95ns
  593. ; clk_hs_prep = 64ns
  594. ;--------------------------------------------------------------------
  595. &clk_hs_prep=(0x40/&cycle_time)
  596. if (&clk_hs_prep<0x1)
  597. (
  598. &clk_hs_prep=0x1
  599. )
  600. print "clk_prep=" &clk_hs_prep
  601. ; clk_hs_prep+clk_zero : > 300ns
  602. ; clk_zero = 400ns - clk_hs_perp
  603. ;--------------------------------------------------------------------
  604. &clk_zero=(0x190/&cycle_time)-&clk_hs_prep
  605. print "clk_zero = " &clk_zero
  606. ; clk_trail : 60ns ~ 105ns+12*UI (T_eot)
  607. ; clk_trail = 64ns
  608. ;--------------------------------------------------------------------
  609. &clk_trail=(0x60/&cycle_time)+1
  610. if (&clk_trail<0x2)
  611. (
  612. &clk_trail=0x2
  613. )
  614. print "clk_trail = " &clk_trail
  615. ; clk_exit : > 100ns
  616. ; clk_exit = 200ns
  617. ;--------------------------------------------------------------------
  618. &clk_exit=(0xc8/&cycle_time)+0x1
  619. print "clk_exit = " &clk_exit
  620. ; clk_post : > 60ns+52*UI
  621. ; clk_post = 64ns+52*UI
  622. ;--------------------------------------------------------------------
  623. &clk_post=((0x40+0x34*&ui)/&cycle_time)+0x1
  624. print "clk_post=" &clk_post
  625. &timcon0=(&hs_trail<<0x018)|(&hs_zero<<0x10)|(&hs_prep<<0x08)|&lpx;
  626. &timcon1=(&hs_exit<<0x18)|(&ta_get<<0x10)|(&ta_sure<<0x08)|&ta_go;
  627. &timcon2=(&clk_trail<<0x018)|(&clk_zero<<0x10)|(0x1<<0x08);
  628. &timcon3=(&clk_exit<<0x10)|(&clk_post<<0x08)|&clk_hs_prep;
  629. D.S SD:&DSI_PHY_TIMCON0 %LE %LONG &timcon0 ; DSI_PHY_TIMCON0
  630. D.S SD:&DSI_PHY_TIMCON1 %LE %LONG &timcon1 ; DSI_PHY_TIMCON1
  631. D.S SD:&DSI_PHY_TIMCON2 %LE %LONG &timcon2 ; DSI_PHY_TIMCON2
  632. D.S SD:&DSI_PHY_TIMCON3 %LE %LONG &timcon3 ; DSI_PHY_TIMCON3
  633. ;------------------------------------------------------------------------
  634. ; DSI Global Settings
  635. ;------------------------------------------------------------------------
  636. ;D.S SD:&DSI_COM_CON %LE %LONG 0x00000002 ;; dsi_en