MT6765_DSI0_B60384.cmm 20 KB

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