MT6771_DSI0_B60384.cmm 20 KB

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