ddp_dpi_ext.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672
  1. #if defined(RDMA_DPI_PATH_SUPPORT) || defined(DPI_DVT_TEST_SUPPORT)
  2. #ifdef BUILD_UBOOT
  3. #include <asm/arch/disp_drv_platform.h>
  4. #else
  5. #include <linux/delay.h>
  6. #include <linux/time.h>
  7. #include <linux/string.h>
  8. #include <linux/mutex.h>
  9. #include "cmdq_record.h"
  10. #include <disp_drv_log.h>
  11. #endif
  12. #include <debug.h>
  13. #include <mt-plat/sync_write.h>
  14. #include <linux/types.h>
  15. #ifdef CONFIG_MTK_CLKMGR
  16. #include <mach/mt_clkmgr.h>
  17. #endif
  18. #include <mach/irqs.h>
  19. #include <linux/xlog.h>
  20. #include <linux/sched.h>
  21. #include <linux/interrupt.h>
  22. #include <linux/wait.h>
  23. #include "mtkfb.h"
  24. #include "ddp_drv.h"
  25. #include "ddp_hal.h"
  26. #include "ddp_manager.h"
  27. #include "ddp_dpi_reg.h"
  28. #include "ddp_dpi.h"
  29. #include "ddp_reg.h"
  30. #include "ddp_log.h"
  31. #include <linux/of.h>
  32. #include <linux/of_irq.h>
  33. #include <mach/eint.h>
  34. #ifdef DPI_EXT_INREG32
  35. #undef DPI_EXT_INREG32
  36. #define DPI_EXT_INREG32(x) (__raw_readl((unsigned long *)(x)))
  37. #endif
  38. #if 0
  39. static int dpi_reg_op_debug;
  40. #define DPI_EXT_OUTREG32(cmdq, addr, val) \
  41. {\
  42. if (dpi_reg_op_debug) \
  43. pr_warn("[dsi/reg]0x%08x=0x%08x, cmdq:0x%08x\n", addr, val, cmdq);\
  44. if (cmdq) \
  45. cmdqRecWrite(cmdq, (unsigned int)(addr)&0x1fffffff, val, ~0); \
  46. else \
  47. mt65xx_reg_sync_writel(val, addr); }
  48. #else
  49. #define DPI_EXT_OUTREG32(cmdq, addr, val) \
  50. {\
  51. mt_reg_sync_writel(val, addr); \
  52. }
  53. #endif
  54. #define DPI_EXT_LOG_PRINT(level, sub_module, fmt, arg...) \
  55. {\
  56. pr_warn(fmt, ##arg); \
  57. }
  58. /*****************************DPI DVT Case Start********************************/
  59. int configInterlaceMode(unsigned int resolution)
  60. {
  61. DPI_EXT_LOG_PRINT("enableInterlaceMode, resolution: %d\n", resolution);
  62. if (resolution == 0x0D || resolution == 0x0E) { /*HDMI_VIDEO_720x480i_60Hz */
  63. /*Enable Interlace mode */
  64. DPI_REG_CNTL ctr = DPI_REG->CNTL;
  65. ctr.INTL_EN = 1;
  66. ctr.VS_LODD_EN = 1;
  67. ctr.VS_LEVEN_EN = 1;
  68. DPI_EXT_OUTREG32(NULL, &DPI_REG->CNTL, AS_UINT32(&ctr));
  69. /*Set LODD,LEVEN Vsize */
  70. DPI_REG_SIZE size = DPI_REG->SIZE;
  71. size.HEIGHT = 240;
  72. DPI_EXT_OUTREG32(NULL, &DPI_REG->SIZE, AS_UINT32(&size));
  73. /*Set LODD,VFP/VPW/VBP */
  74. DPI_REG_TGEN_VWIDTH_LODD vwidth_lodd = DPI_REG->TGEN_VWIDTH_LODD;
  75. vwidth_lodd.VPW_LODD = 3;
  76. DPI_EXT_OUTREG32(NULL, &DPI_REG->TGEN_VWIDTH_LODD, AS_UINT32(&vwidth_lodd));
  77. DPI_EXT_LOG_PRINT("TGEN_VWIDTH_LODD: 0x%x\n",
  78. DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x28));
  79. DPI_REG_TGEN_VPORCH_LODD vporch_lodd = DPI_REG->TGEN_VPORCH_LODD;
  80. vporch_lodd.VFP_LODD = 4;
  81. vporch_lodd.VBP_LODD = 15;
  82. DPI_EXT_OUTREG32(NULL, &DPI_REG->TGEN_VPORCH_LODD, AS_UINT32(&vporch_lodd));
  83. DPI_EXT_LOG_PRINT("TGEN_VPORCH_LODD: 0x%x\n",
  84. DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x2C));
  85. /*Set LEVEN,VFP/VPW/VBP */
  86. DPI_REG_TGEN_VWIDTH_LEVEN vwidth_leven = DPI_REG->TGEN_VWIDTH_LEVEN;
  87. vwidth_leven.VPW_LEVEN = 3;
  88. vwidth_leven.VPW_HALF_LEVEN = 1;
  89. DPI_EXT_OUTREG32(NULL, &DPI_REG->TGEN_VWIDTH_LEVEN, AS_UINT32(&vwidth_leven));
  90. DPI_EXT_LOG_PRINT("TGEN_VWIDTH_LEVEN: 0x%x\n",
  91. DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x68));
  92. DPI_REG_TGEN_VPORCH_LEVEN vporch_leven = DPI_REG->TGEN_VPORCH_LEVEN;
  93. vporch_leven.VFP_LEVEN = 4;
  94. vporch_leven.VBP_LEVEN = 16;
  95. DPI_EXT_OUTREG32(NULL, &DPI_REG->TGEN_VPORCH_LEVEN, AS_UINT32(&vporch_leven));
  96. DPI_EXT_LOG_PRINT("TGEN_VPORCH_LEVEN: 0x%x\n",
  97. DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x6C));
  98. } else if (resolution == 0x0C) { /*HDMI_VIDEO_1920x1080i_60Hz */
  99. /*Enable Interlace mode */
  100. DPI_REG_CNTL ctr = DPI_REG->CNTL;
  101. ctr.INTL_EN = 1;
  102. ctr.VS_LODD_EN = 1;
  103. ctr.VS_LEVEN_EN = 1;
  104. DPI_EXT_OUTREG32(NULL, &DPI_REG->CNTL, AS_UINT32(&ctr));
  105. /*Set LODD,LEVEN Vsize */
  106. DPI_REG_SIZE size = DPI_REG->SIZE;
  107. size.HEIGHT = 540;
  108. DPI_EXT_OUTREG32(NULL, &DPI_REG->SIZE, AS_UINT32(&size));
  109. /*Set LODD,VFP/VPW/VBP */
  110. DPI_REG_TGEN_VWIDTH_LODD vwidth_lodd = DPI_REG->TGEN_VWIDTH_LODD;
  111. vwidth_lodd.VPW_LODD = 5;
  112. DPI_EXT_OUTREG32(NULL, &DPI_REG->TGEN_VWIDTH_LODD, AS_UINT32(&vwidth_lodd));
  113. DPI_EXT_LOG_PRINT("TGEN_VWIDTH_LODD: 0x%x\n",
  114. DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x28));
  115. DPI_REG_TGEN_VPORCH_LODD vporch_lodd = DPI_REG->TGEN_VPORCH_LODD;
  116. vporch_lodd.VFP_LODD = 2;
  117. vporch_lodd.VBP_LODD = 15;
  118. DPI_EXT_OUTREG32(NULL, &DPI_REG->TGEN_VPORCH_LODD, AS_UINT32(&vporch_lodd));
  119. DPI_EXT_LOG_PRINT("TGEN_VPORCH_LODD: 0x%x\n",
  120. DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x2C));
  121. /*Set LEVEN,VFP/VPW/VBP */
  122. DPI_REG_TGEN_VWIDTH_LEVEN vwidth_leven = DPI_REG->TGEN_VWIDTH_LEVEN;
  123. vwidth_leven.VPW_LEVEN = 5;
  124. vwidth_leven.VPW_HALF_LEVEN = 1;
  125. DPI_EXT_OUTREG32(NULL, &DPI_REG->TGEN_VWIDTH_LEVEN, AS_UINT32(&vwidth_leven));
  126. DPI_EXT_LOG_PRINT("TGEN_VWIDTH_LEVEN: 0x%x\n",
  127. DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x68));
  128. DPI_REG_TGEN_VPORCH_LEVEN vporch_leven = DPI_REG->TGEN_VPORCH_LEVEN;
  129. vporch_leven.VFP_LEVEN = 2;
  130. vporch_leven.VBP_LEVEN = 16;
  131. DPI_EXT_OUTREG32(NULL, &DPI_REG->TGEN_VPORCH_LEVEN, AS_UINT32(&vporch_leven));
  132. DPI_EXT_LOG_PRINT("TGEN_VPORCH_LEVEN: 0x%x\n",
  133. DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x6C));
  134. }
  135. return 0;
  136. }
  137. int config3DMode(unsigned int resolution)
  138. {
  139. DPI_EXT_LOG_PRINT("config3DMode\n");
  140. /*Enable Interlace mode */
  141. DPI_REG_CNTL ctr = DPI_REG->CNTL;
  142. ctr.TDFP_EN = 1;
  143. ctr.VS_RODD_EN = 0;
  144. ctr.FAKE_DE_RODD = 1;
  145. DPI_EXT_OUTREG32(NULL, &DPI_REG->CNTL, AS_UINT32(&ctr));
  146. /*Set LODD,LEVEN Vsize */
  147. DPI_REG_SIZE size = DPI_REG->SIZE;
  148. size.WIDTH = 1280;
  149. size.HEIGHT = 720;
  150. DPI_EXT_OUTREG32(NULL, &DPI_REG->SIZE, AS_UINT32(&size));
  151. /*Set LODD,VFP/VPW/VBP */
  152. DPI_REG_TGEN_VWIDTH_LODD vwidth_lodd = DPI_REG->TGEN_VWIDTH_LODD;
  153. vwidth_lodd.VPW_LODD = 5;
  154. DPI_EXT_OUTREG32(NULL, &DPI_REG->TGEN_VWIDTH_LODD, AS_UINT32(&vwidth_lodd));
  155. DPI_EXT_LOG_PRINT("TGEN_VWIDTH_LODD: 0x%x\n", DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x28));
  156. DPI_REG_TGEN_VPORCH_LODD vporch_lodd = DPI_REG->TGEN_VPORCH_LODD;
  157. vporch_lodd.VFP_LODD = 5;
  158. vporch_lodd.VBP_LODD = 20;
  159. DPI_EXT_OUTREG32(NULL, &DPI_REG->TGEN_VPORCH_LODD, AS_UINT32(&vporch_lodd));
  160. DPI_EXT_LOG_PRINT("TGEN_VPORCH_LODD: 0x%x\n", DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x2C));
  161. /*Set LEVEN,VFP/VPW/VBP */
  162. DPI_REG_TGEN_VWIDTH_RODD vwidth_rodd = DPI_REG->TGEN_VWIDTH_RODD;
  163. vwidth_rodd.VPW_RODD = 5;
  164. DPI_EXT_OUTREG32(NULL, &DPI_REG->TGEN_VWIDTH_RODD, AS_UINT32(&vwidth_rodd));
  165. DPI_EXT_LOG_PRINT("TGEN_VWIDTH_LEVEN: 0x%x\n", DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x70));
  166. DPI_REG_TGEN_VPORCH_RODD vporch_rodd = DPI_REG->TGEN_VPORCH_RODD;
  167. vporch_rodd.VFP_RODD = 5;
  168. vporch_rodd.VBP_RODD = 20;
  169. DPI_EXT_OUTREG32(NULL, &DPI_REG->TGEN_VPORCH_RODD, AS_UINT32(&vporch_rodd));
  170. DPI_EXT_LOG_PRINT("TGEN_VPORCH_LEVEN: 0x%x\n", DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x74));
  171. return 0;
  172. }
  173. int config3DInterlaceMode(unsigned int resolution)
  174. {
  175. DPI_EXT_LOG_PRINT("config3DInterlaceMode\n");
  176. /*Enable Interlace mode */
  177. DPI_REG_CNTL ctr = DPI_REG->CNTL;
  178. ctr.INTL_EN = 1;
  179. ctr.TDFP_EN = 1;
  180. ctr.VS_LODD_EN = 1;
  181. ctr.VS_LEVEN_EN = 0;
  182. ctr.VS_RODD_EN = 0;
  183. ctr.VS_REVEN_EN = 0;
  184. ctr.FAKE_DE_LODD = 0;
  185. ctr.FAKE_DE_RODD = 1;
  186. ctr.FAKE_DE_LEVEN = 1;
  187. ctr.FAKE_DE_REVEN = 1;
  188. DPI_EXT_OUTREG32(NULL, &DPI_REG->CNTL, AS_UINT32(&ctr));
  189. /*Set LODD,LEVEN Vsize */
  190. DPI_REG_SIZE size = DPI_REG->SIZE;
  191. size.HEIGHT = 240;
  192. DPI_EXT_OUTREG32(NULL, &DPI_REG->SIZE, AS_UINT32(&size));
  193. /*Set LODD,VFP/VPW/VBP */
  194. DPI_REG_TGEN_VWIDTH_LODD vwidth_lodd = DPI_REG->TGEN_VWIDTH_LODD;
  195. vwidth_lodd.VPW_LODD = 3;
  196. DPI_EXT_OUTREG32(NULL, &DPI_REG->TGEN_VWIDTH_LODD, AS_UINT32(&vwidth_lodd));
  197. DPI_EXT_LOG_PRINT("TGEN_VWIDTH_LODD: 0x%x\n", DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x28));
  198. DPI_REG_TGEN_VPORCH_LODD vporch_lodd = DPI_REG->TGEN_VPORCH_LODD;
  199. vporch_lodd.VFP_LODD = 4;
  200. vporch_lodd.VBP_LODD = 15;
  201. DPI_EXT_OUTREG32(NULL, &DPI_REG->TGEN_VPORCH_LODD, AS_UINT32(&vporch_lodd));
  202. DPI_EXT_LOG_PRINT("TGEN_VPORCH_LODD: 0x%x\n", DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x2C));
  203. /*Set LEVEN,VFP/VPW/VBP */
  204. DPI_REG_TGEN_VWIDTH_RODD vwidth_rodd = DPI_REG->TGEN_VWIDTH_RODD;
  205. vwidth_rodd.VPW_RODD = 3;
  206. vwidth_rodd.VPW_HALF_RODD = 1;
  207. DPI_EXT_OUTREG32(NULL, &DPI_REG->TGEN_VWIDTH_RODD, AS_UINT32(&vwidth_rodd));
  208. DPI_EXT_LOG_PRINT("TGEN_VWIDTH_LEVEN: 0x%x\n", DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x70));
  209. DPI_REG_TGEN_VPORCH_RODD vporch_rodd = DPI_REG->TGEN_VPORCH_RODD;
  210. vporch_rodd.VFP_RODD = 4;
  211. vporch_rodd.VBP_RODD = 16;
  212. DPI_EXT_OUTREG32(NULL, &DPI_REG->TGEN_VPORCH_RODD, AS_UINT32(&vporch_rodd));
  213. DPI_EXT_LOG_PRINT("TGEN_VPORCH_LEVEN: 0x%x\n", DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x74));
  214. /*Set LEVEN,VFP/VPW/VBP */
  215. DPI_REG_TGEN_VWIDTH_LEVEN vwidth_leven = DPI_REG->TGEN_VWIDTH_LEVEN;
  216. vwidth_leven.VPW_LEVEN = 3;
  217. DPI_EXT_OUTREG32(NULL, &DPI_REG->TGEN_VWIDTH_LEVEN, AS_UINT32(&vwidth_leven));
  218. DPI_EXT_LOG_PRINT("TGEN_VWIDTH_LEVEN: 0x%x\n", DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x68));
  219. DPI_REG_TGEN_VPORCH_LEVEN vporch_leven = DPI_REG->TGEN_VPORCH_LEVEN;
  220. vporch_leven.VFP_LEVEN = 4;
  221. vporch_leven.VBP_LEVEN = 15;
  222. DPI_EXT_OUTREG32(NULL, &DPI_REG->TGEN_VPORCH_LEVEN, AS_UINT32(&vporch_leven));
  223. DPI_EXT_LOG_PRINT("TGEN_VPORCH_LEVEN: 0x%x\n", DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x6C));
  224. /*Set REVEN,VFP/VPW/VBP */
  225. DPI_REG_TGEN_VWIDTH_REVEN vwidth_reven = DPI_REG->TGEN_VWIDTH_REVEN;
  226. vwidth_reven.VPW_REVEN = 3;
  227. vwidth_reven.VPW_HALF_REVEN = 1;
  228. DPI_EXT_OUTREG32(NULL, &DPI_REG->TGEN_VWIDTH_REVEN, AS_UINT32(&vwidth_reven));
  229. DPI_EXT_LOG_PRINT("TGEN_VWIDTH_REVEN: 0x%x\n", DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x78));
  230. DPI_REG_TGEN_VPORCH_REVEN vporch_reven = DPI_REG->TGEN_VPORCH_REVEN;
  231. vporch_reven.VFP_REVEN = 4;
  232. vporch_reven.VBP_REVEN = 16;
  233. DPI_EXT_OUTREG32(NULL, &DPI_REG->TGEN_VPORCH_REVEN, AS_UINT32(&vporch_reven));
  234. DPI_EXT_LOG_PRINT("TGEN_VPORCH_REVEN: 0x%x\n", DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x7C));
  235. }
  236. unsigned int readDPIStatus(void)
  237. {
  238. unsigned int status = DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x40);
  239. unsigned int field = (status >> 20) & 0x01;
  240. unsigned int line_num = status & 0x1FFF;
  241. return field;
  242. }
  243. unsigned int readDPITDLRStatus(void)
  244. {
  245. unsigned int status = DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x40);
  246. unsigned int tdlr = (status >> 21) & 0x01;
  247. return tdlr;
  248. }
  249. unsigned int clearDPIStatus(void)
  250. {
  251. OUTREG32(&DPI_REG->STATUS, 0);
  252. return 0;
  253. }
  254. unsigned int clearDPIIntrStatus(void)
  255. {
  256. OUTREG32(&DPI_REG->INT_STATUS, 0);
  257. return 0;
  258. }
  259. unsigned int readDPIIntrStatus(void)
  260. {
  261. unsigned int status = DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x0C);
  262. return status;
  263. }
  264. unsigned int ClearDPIIntrStatus(void)
  265. {
  266. OUTREG32(&DPI_REG->INT_STATUS, 0);
  267. return 0;
  268. }
  269. unsigned int enableRGB2YUV(AviColorSpace_e format)
  270. {
  271. DPI_EXT_LOG_PRINT("enableRGB2YUV\n");
  272. DPI_REG_CNTL ctr = DPI_REG->CNTL;
  273. DPI_REG_OUTPUT_SETTING output_setting = DPI_REG->OUTPUT_SETTING;
  274. if (format == acsYCbCr444) {
  275. ctr.RGB2YUV_EN = 1;
  276. output_setting.YC_MAP = 7;
  277. output_setting.DUAL_EDGE_SEL = 0;
  278. } else if (format == acsYCbCr422) {
  279. ctr.RGB2YUV_EN = 1;
  280. ctr.YUV422_EN = 1;
  281. ctr.CLPF_EN = 1;
  282. output_setting.YC_MAP = 7;
  283. }
  284. /*
  285. DPI_OUTPUT_SETTING YUV422 bit mapping, output bit number
  286. DPI_YUV422_SETTING
  287. */
  288. DPI_EXT_OUTREG32(NULL, &DPI_REG->CNTL, AS_UINT32(&ctr));
  289. DPI_EXT_OUTREG32(NULL, &DPI_REG->OUTPUT_SETTING, AS_UINT32(&output_setting));
  290. return 0;
  291. }
  292. unsigned int enableSingleEdge(void)
  293. {
  294. DPI_EXT_LOG_PRINT("enableSingleEdge\n");
  295. /*
  296. Pixel clock = 2 * dpi clock
  297. Disable dual edge
  298. */
  299. DPI_REG_DDR_SETTING ddr_setting = DPI_REG->DDR_SETTING;
  300. ddr_setting.DDR_EN = 0;
  301. ddr_setting.DDR_4PHASE = 0;
  302. DPI_EXT_OUTREG32(NULL, &DPI_REG->OUTPUT_SETTING, AS_UINT32(&ddr_setting));
  303. return 0;
  304. }
  305. int enableAndGetChecksum(void)
  306. {
  307. DPI_EXT_LOG_PRINT("enableAndGetChecksum\n");
  308. int checkSumNum = -1;
  309. DPI_REG_CHKSUM checkSum = DPI_REG->CHKSUM;
  310. checkSum.CHKSUM_EN = 1;
  311. DPI_EXT_OUTREG32(NULL, &DPI_REG->CHKSUM, AS_UINT32(&checkSum));
  312. while (((DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x48) >> 30) & 0x1) == 0) {
  313. checkSumNum = (DPI_EXT_INREG32(DISPSYS_DPI_BASE + 0x48) & 0x00FFFFFF);
  314. break;
  315. }
  316. return checkSumNum;
  317. }
  318. /*
  319. int enableAndGetChecksumCmdq(cmdqRecHandle cmdq_handle)
  320. {
  321. DPI_EXT_LOG_PRINT("enableAndGetChecksumCmdq\n");
  322. //loop
  323. {
  324. //poll vsync status
  325. cmdqRecPoll(cmdq_handle, DPI_PHY_ADDR+0xC, 0x1, 0x1);
  326. //stop DPI
  327. cmdqRecWrite(cmdq_handle, DPI_PHY_ADDR, 0x0, 0x1);
  328. //wait a token, wait vsync isr to read checksum and then set token
  329. cmdqRecWait(cmdq_handle, CMDQ_SYNC_TOKEN_STREAM_EOF);
  330. cmdqRecClearEventToken(cmdq_handle, CMDQ_SYNC_TOKEN_STREAM_EOF);
  331. //start DPI
  332. cmdqRecWrite(cmdq_handle, DPI_PHY_ADDR, 0x1, 0x1);
  333. //wait a token, wait vsync isr to read checksum and then set token
  334. cmdqRecWait(cmdq_handle, CMDQ_SYNC_TOKEN_STREAM_EOF);
  335. cmdqRecClearEventToken(cmdq_handle, CMDQ_SYNC_TOKEN_STREAM_EOF);
  336. //enable checksum
  337. cmdqRecWrite(cmdq_handle, DPI_PHY_ADDR+0x48, 0x80000000, 0x80000000);
  338. DPI_EXT_LOG_PRINT("DISPSYS_DPI_BASE+0x48: 0x%x\n", DISPSYS_DPI_BASE+0x48);
  339. //poll checksum status
  340. cmdqRecPoll(cmdq_handle, DPI_PHY_ADDR+0x48, 0x40000000, 0x40000000);
  341. // dump trigger loop instructions
  342. cmdqRecDumpCommand(cmdq_handle);
  343. cmdqRecStartLoop(cmdq_handle);
  344. CMDQ_Handle = cmdq_handle;
  345. s_isCmdqInited = true;
  346. }
  347. return 0;
  348. }
  349. */
  350. unsigned int configDpiRepetition(void)
  351. {
  352. DPI_EXT_LOG_PRINT("configDpiRepetition\n");
  353. DPI_REG_CNTL ctrl = DPI_REG->CNTL;
  354. ctrl.PIXREP = 1;
  355. DPI_EXT_OUTREG32(NULL, &DPI_REG->CNTL, AS_UINT32(&ctrl));
  356. return 0;
  357. }
  358. unsigned int configDpiEmbsync(void)
  359. {
  360. DPI_EXT_LOG_PRINT("configDpiEmbsync\n");
  361. DPI_REG_CNTL ctrl = DPI_REG->CNTL;
  362. ctrl.EMBSYNC_EN = 1;
  363. DPI_EXT_OUTREG32(NULL, &DPI_REG->CNTL, AS_UINT32(&ctrl));
  364. DPI_REG_DDR_SETTING ddr_setting = DPI_REG->DDR_SETTING;
  365. ddr_setting.DATA_THROT = 0; /*should sii8348 support */
  366. DPI_EXT_OUTREG32(NULL, &DPI_REG->DDR_SETTING, AS_UINT32(&ddr_setting));
  367. DPI_REG_EMBSYNC_SETTING emb_setting = DPI_REG->EMBSYNC_SETTING;
  368. emb_setting.EMBSYNC_OPT = 0; /*should sii8348 support */
  369. DPI_EXT_OUTREG32(NULL, &DPI_REG->EMBSYNC_SETTING, AS_UINT32(&emb_setting));
  370. return 0;
  371. }
  372. unsigned int configDpiColorTransformToBT709(void)
  373. {
  374. DPI_EXT_LOG_PRINT("configDpiColorTransform\n");
  375. /*
  376. DPI_REG_CNTL ctrl = DPI_REG->CNTL;
  377. ctrl.RGB2YUV_EN = 1;
  378. DPI_EXT_OUTREG32(NULL, &DPI_REG->CNTL, AS_UINT32(&ctrl));
  379. */
  380. DPI_REG_MATRIX_SET matrix_set = DPI_REG->MATRIX_SET;
  381. matrix_set.EXT_MATRIX_EN = 1;
  382. DPI_EXT_OUTREG32(NULL, &DPI_REG->MATRIX_SET, AS_UINT32(&matrix_set));
  383. DPI_REG_MATRIX_COEF matrix_coef_00 = DPI_REG->MATRIX_COEF_00;
  384. matrix_coef_00.MATRIX_COFEF_00 = 218;
  385. matrix_coef_00.MATRIX_COFEF_01 = 732;
  386. DPI_EXT_OUTREG32(NULL, &DPI_REG->MATRIX_COEF_00, AS_UINT32(&matrix_coef_00));
  387. DPI_REG_MATRIX_COEF matrix_coef_02 = DPI_REG->MATRIX_COEF_02;
  388. matrix_coef_02.MATRIX_COFEF_00 = 74;
  389. matrix_coef_02.MATRIX_COFEF_01 = 8075;
  390. DPI_EXT_OUTREG32(NULL, &DPI_REG->MATRIX_COEF_02, AS_UINT32(&matrix_coef_02));
  391. DPI_REG_MATRIX_COEF matrix_coef_11 = DPI_REG->MATRIX_COEF_11;
  392. matrix_coef_11.MATRIX_COFEF_00 = 7797;
  393. matrix_coef_11.MATRIX_COFEF_01 = 512;
  394. DPI_EXT_OUTREG32(NULL, &DPI_REG->MATRIX_COEF_11, AS_UINT32(&matrix_coef_11));
  395. DPI_REG_MATRIX_COEF matrix_coef_20 = DPI_REG->MATRIX_COEF_20;
  396. matrix_coef_20.MATRIX_COFEF_00 = 512;
  397. matrix_coef_20.MATRIX_COFEF_01 = 7727;
  398. DPI_EXT_OUTREG32(NULL, &DPI_REG->MATRIX_COEF_20, AS_UINT32(&matrix_coef_20));
  399. DPI_REG_MATRIX_COEF_ONE matrix_coef_22 = DPI_REG->MATRIX_COEF_22;
  400. matrix_coef_22.MATRIX_COFEF_00 = 8145;
  401. DPI_EXT_OUTREG32(NULL, &DPI_REG->MATRIX_COEF_22, AS_UINT32(&matrix_coef_22));
  402. DPI_REG_MATRIX_OFFSET matrix_in_offset_0 = DPI_REG->MATRIX_IN_OFFSET_0;
  403. matrix_in_offset_0.MATRIX_OFFSET_0 = 0;
  404. matrix_in_offset_0.MATRIX_OFFSET_1 = 0;
  405. DPI_EXT_OUTREG32(NULL, &DPI_REG->MATRIX_IN_OFFSET_0, AS_UINT32(&matrix_in_offset_0));
  406. DPI_REG_MATRIX_OFFSET_ONE matrix_in_offset_2 = DPI_REG->MATRIX_IN_OFFSET_2;
  407. matrix_in_offset_2.MATRIX_OFFSET_0 = 0;
  408. DPI_EXT_OUTREG32(NULL, &DPI_REG->MATRIX_IN_OFFSET_2, AS_UINT32(&matrix_in_offset_2));
  409. DPI_REG_MATRIX_OFFSET matrix_out_offset_0 = DPI_REG->MATRIX_OUT_OFFSET_0;
  410. matrix_out_offset_0.MATRIX_OFFSET_0 = 0;
  411. matrix_out_offset_0.MATRIX_OFFSET_1 = 128;
  412. DPI_EXT_OUTREG32(NULL, &DPI_REG->MATRIX_OUT_OFFSET_0, AS_UINT32(&matrix_out_offset_0));
  413. DPI_REG_MATRIX_OFFSET_ONE matrix_out_offset_2 = DPI_REG->MATRIX_OUT_OFFSET_2;
  414. matrix_out_offset_2.MATRIX_OFFSET_0 = 128;
  415. DPI_EXT_OUTREG32(NULL, &DPI_REG->MATRIX_OUT_OFFSET_2, AS_UINT32(&matrix_out_offset_2));
  416. return 0;
  417. }
  418. unsigned int configDpiRGB888ToLimitRange(void)
  419. {
  420. DPI_EXT_LOG_PRINT("configDpiRGB888ToLimitRange\n");
  421. /*
  422. DPI_REG_CNTL ctrl = DPI_REG->CNTL;
  423. ctrl.RGB2YUV_EN = 1;
  424. DPI_EXT_OUTREG32(NULL, &DPI_REG->CNTL, AS_UINT32(&ctrl));
  425. */
  426. DPI_REG_MATRIX_SET matrix_set = DPI_REG->MATRIX_SET;
  427. matrix_set.EXT_MATRIX_EN = 1;
  428. DPI_EXT_OUTREG32(NULL, &DPI_REG->MATRIX_SET, AS_UINT32(&matrix_set));
  429. DPI_REG_MATRIX_COEF matrix_coef_00 = DPI_REG->MATRIX_COEF_00;
  430. matrix_coef_00.MATRIX_COFEF_00 = 879;
  431. matrix_coef_00.MATRIX_COFEF_01 = 0;
  432. DPI_EXT_OUTREG32(NULL, &DPI_REG->MATRIX_COEF_00, AS_UINT32(&matrix_coef_00));
  433. DPI_REG_MATRIX_COEF matrix_coef_02 = DPI_REG->MATRIX_COEF_02;
  434. matrix_coef_02.MATRIX_COFEF_00 = 0;
  435. matrix_coef_02.MATRIX_COFEF_01 = 0;
  436. DPI_EXT_OUTREG32(NULL, &DPI_REG->MATRIX_COEF_02, AS_UINT32(&matrix_coef_02));
  437. DPI_REG_MATRIX_COEF matrix_coef_11 = DPI_REG->MATRIX_COEF_11;
  438. matrix_coef_11.MATRIX_COFEF_00 = 879;
  439. matrix_coef_11.MATRIX_COFEF_01 = 0;
  440. DPI_EXT_OUTREG32(NULL, &DPI_REG->MATRIX_COEF_11, AS_UINT32(&matrix_coef_11));
  441. DPI_REG_MATRIX_COEF matrix_coef_20 = DPI_REG->MATRIX_COEF_20;
  442. matrix_coef_20.MATRIX_COFEF_00 = 0;
  443. matrix_coef_20.MATRIX_COFEF_01 = 0;
  444. DPI_EXT_OUTREG32(NULL, &DPI_REG->MATRIX_COEF_20, AS_UINT32(&matrix_coef_20));
  445. DPI_REG_MATRIX_COEF_ONE matrix_coef_22 = DPI_REG->MATRIX_COEF_22;
  446. matrix_coef_22.MATRIX_COFEF_00 = 879;
  447. DPI_EXT_OUTREG32(NULL, &DPI_REG->MATRIX_COEF_22, AS_UINT32(&matrix_coef_22));
  448. DPI_REG_MATRIX_OFFSET matrix_in_offset_0 = DPI_REG->MATRIX_IN_OFFSET_0;
  449. matrix_in_offset_0.MATRIX_OFFSET_0 = 0;
  450. matrix_in_offset_0.MATRIX_OFFSET_1 = 0;
  451. DPI_EXT_OUTREG32(NULL, &DPI_REG->MATRIX_IN_OFFSET_0, AS_UINT32(&matrix_in_offset_0));
  452. DPI_REG_MATRIX_OFFSET_ONE matrix_in_offset_2 = DPI_REG->MATRIX_IN_OFFSET_2;
  453. matrix_in_offset_2.MATRIX_OFFSET_0 = 0;
  454. DPI_EXT_OUTREG32(NULL, &DPI_REG->MATRIX_IN_OFFSET_2, AS_UINT32(&matrix_in_offset_2));
  455. DPI_REG_MATRIX_OFFSET matrix_out_offset_0 = DPI_REG->MATRIX_OUT_OFFSET_0;
  456. matrix_out_offset_0.MATRIX_OFFSET_0 = 16;
  457. matrix_out_offset_0.MATRIX_OFFSET_1 = 16;
  458. DPI_EXT_OUTREG32(NULL, &DPI_REG->MATRIX_OUT_OFFSET_0, AS_UINT32(&matrix_out_offset_0));
  459. DPI_REG_MATRIX_OFFSET_ONE matrix_out_offset_2 = DPI_REG->MATRIX_OUT_OFFSET_2;
  460. matrix_out_offset_2.MATRIX_OFFSET_0 = 16;
  461. DPI_EXT_OUTREG32(NULL, &DPI_REG->MATRIX_OUT_OFFSET_2, AS_UINT32(&matrix_out_offset_2));
  462. return 0;
  463. }
  464. void ddp_dpi_ConfigInputSwap(unsigned int order)
  465. {
  466. DPI_REG_CNTL ctrl = DPI_REG->CNTL;
  467. ctrl.RGB_SWAP = order;
  468. DPI_EXT_LOG_PRINT("ddp_dpi_ConfigInputSwap: 0x%x\n", order);
  469. DPI_EXT_OUTREG32(NULL, &DPI_REG->CNTL, AS_UINT32(&ctrl));
  470. }
  471. int mux_test_read(void)
  472. {
  473. DPI_EXT_LOG_PRINT("********** mux register dump *********\n");
  474. DPI_EXT_LOG_PRINT("[CLK_CFG_0]=0x%08x\n", DPI_EXT_INREG32(CLK_CFG_0));
  475. DPI_EXT_LOG_PRINT("[CLK_CFG_1]=0x%08x\n", DPI_EXT_INREG32(CLK_CFG_1));
  476. DPI_EXT_LOG_PRINT("[CLK_CFG_2]=0x%08x\n", DPI_EXT_INREG32(CLK_CFG_2));
  477. DPI_EXT_LOG_PRINT("[CLK_CFG_3]=0x%08x\n", DPI_EXT_INREG32(CLK_CFG_3));
  478. DPI_EXT_LOG_PRINT("[CLK_CFG_4]=0x%08x\n", DPI_EXT_INREG32(CLK_CFG_4));
  479. DPI_EXT_LOG_PRINT("[CLK_CFG_5]=0x%08x\n", DPI_EXT_INREG32(CLK_CFG_5));
  480. DPI_EXT_LOG_PRINT("[CLK_CFG_6]=0x%08x\n", DPI_EXT_INREG32(CLK_CFG_6));
  481. DPI_EXT_LOG_PRINT("[CLK_CFG_UPDATE]=0x%08x\n", DPI_EXT_INREG32(CLK_CFG_UPDATE));
  482. DPI_EXT_LOG_PRINT("[DISPSYS_IO_DRIVING]=0x%08x\n", DPI_EXT_INREG32(DISPSYS_IO_DRIVING));
  483. return 0;
  484. }
  485. /*****************************DPI DVT Case End*********************************/
  486. #endif /*#if defined(RDMA_DPI_PATH_SUPPORT) || defined(DPI_DVT_TEST_SUPPORT) */