dpi_dvt_test.c 61 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161
  1. #if defined(RDMA_DPI_PATH_SUPPORT) || defined(DPI_DVT_TEST_SUPPORT)
  2. #define VENDOR_CHIP_DRIVER
  3. #include <linux/kernel.h>
  4. #include <linux/module.h>
  5. #include <linux/fs.h>
  6. #include <asm/uaccess.h>
  7. #include <linux/mm.h>
  8. #include <linux/string.h>
  9. #include <linux/time.h>
  10. #include <linux/uaccess.h>
  11. #include <linux/delay.h>
  12. #include <linux/vmalloc.h>
  13. #include <linux/err.h>
  14. #include <linux/switch.h>
  15. #include <linux/interrupt.h>
  16. #include <linux/wait.h>
  17. #include <linux/spinlock.h>
  18. #include <linux/kthread.h>
  19. #include <linux/timer.h>
  20. #include <mach/mt_irq.h>
  21. #include <linux/types.h>
  22. #ifdef CONFIG_MTK_CLKMGR
  23. #include <mach/mt_clkmgr.h>
  24. #endif
  25. #include <mach/m4u.h>
  26. #include <mach/m4u_port.h>
  27. #include "ddp_log.h"
  28. #include "ddp_dump.h"
  29. #include "ddp_info.h"
  30. #include "dpi_dvt_test.h"
  31. #include "dpi_dvt_platform.h"
  32. DPI_U64 data_va = 0, data_mva = 0;
  33. /*
  34. To-do list:
  35. 1. Open RDMA_DPI_PATH_SUPPORT or DPI_DVT_TEST_SUPPORT;
  36. 2. extern picture data structure and modify Makefile,
  37. e.g. extern unsigned char kara_1280x720[2764800];
  38. 3. Modify sii8348 driver;
  39. */
  40. /***********************************************************************************/
  41. /**********************************Resource File***************************************/
  42. /*#define BMP_HEADER_SIZE 54*/
  43. /*
  44. extern unsigned char kara_1280x720[2764800];
  45. extern unsigned char Gene_1280x720[2764854];
  46. extern unsigned char Kara_1440x480[2073654];
  47. extern unsigned char Gene_1280x720[2764854];
  48. extern unsigned char venice_1920x1080[6220854];
  49. extern unsigned char PDA0026_720x480[1036854];
  50. extern unsigned char Kara_1440x480[2073654];
  51. */
  52. /******************************DPI DVT Path Control*************************************/
  53. DPI_DVT_CONTEXT DPI_DVT_Context;
  54. DPI_BOOL disconnectFlag = true;
  55. static HDMI_DRIVER *hdmi_drv;
  56. static disp_ddp_path_config extd_dpi_params;
  57. static disp_ddp_path_config extd_rdma_params;
  58. static disp_ddp_path_config extd_ovl_params;
  59. static disp_ddp_path_config extd_gamma_params;
  60. /*TEST_CASE_TYPE test_type;*/
  61. DPI_U64 data_va = 0, data_mva = 0
  62. /*****************************Basic Function Start******************************************/
  63. #ifdef DPI_DVT_TEST_SUPPORT
  64. enum RDMA_MODE {
  65. RDMA_MODE_DIRECT_LINK = 0,
  66. RDMA_MODE_MEMORY = 1,
  67. };
  68. DPI_I32 dvt_init_OVL_param(DPI_U32 mode)
  69. {
  70. if (mode == RDMA_MODE_DIRECT_LINK) {
  71. extd_ovl_params.dst_dirty = 1;
  72. extd_ovl_params.dst_w = extd_dpi_params.dispif_config.dpi.width;
  73. extd_ovl_params.dst_h = extd_dpi_params.dispif_config.dpi.height;
  74. extd_ovl_params.ovl_dirty = 1;
  75. extd_ovl_params.ovl_config[0].layer_en = 1;
  76. extd_ovl_params.ovl_config[1].layer_en = 0;
  77. extd_ovl_params.ovl_config[2].layer_en = 0;
  78. extd_ovl_params.ovl_config[3].layer_en = 0;
  79. extd_ovl_params.ovl_config[0].source = OVL_LAYER_SOURCE_MEM;
  80. extd_ovl_params.ovl_config[0].layer = 0;
  81. extd_ovl_params.ovl_config[0].fmt = eRGB888;
  82. extd_ovl_params.ovl_config[0].addr = data_mva;
  83. extd_ovl_params.ovl_config[0].vaddr = data_va;
  84. extd_ovl_params.ovl_config[0].src_x = 0;
  85. extd_ovl_params.ovl_config[0].src_y = 0;
  86. extd_ovl_params.ovl_config[0].src_w = extd_dpi_params.dispif_config.dpi.width;
  87. extd_ovl_params.ovl_config[0].src_h = extd_dpi_params.dispif_config.dpi.height;
  88. extd_ovl_params.ovl_config[0].src_pitch =
  89. extd_dpi_params.dispif_config.dpi.width * 3;
  90. extd_ovl_params.ovl_config[0].dst_x = 0;
  91. extd_ovl_params.ovl_config[0].dst_y = 0;
  92. extd_ovl_params.ovl_config[0].dst_w = extd_dpi_params.dispif_config.dpi.width;
  93. extd_ovl_params.ovl_config[0].dst_h = extd_dpi_params.dispif_config.dpi.height;
  94. extd_ovl_params.ovl_config[0].isDirty = true;
  95. }
  96. return 0;
  97. }
  98. DPI_I32 dvt_init_GAMMA_param(DPI_U32 mode)
  99. {
  100. if (mode == RDMA_MODE_DIRECT_LINK) {
  101. extd_gamma_params.dst_dirty = 1;
  102. extd_gamma_params.dst_w = extd_dpi_params.dispif_config.dpi.width;
  103. extd_gamma_params.dst_h = extd_dpi_params.dispif_config.dpi.height;
  104. extd_gamma_params.lcm_bpp = 24;
  105. }
  106. return 0;
  107. }
  108. /*
  109. * OVL1 -> OVL1_MOUT -> DISP_RDMA1 -> RDMA1_SOUT -> DPI_SEL -> DPI
  110. */
  111. DPI_I32 dvt_start_ovl1_to_dpi(DPI_U32 resolution, DPI_U32 timeS)
  112. {
  113. DPI_I32 ret = 0;
  114. DPI_DVT_LOG_W("set Mutex and connect path\n");
  115. dvt_connect_ovl1_dpi(NULL);
  116. dvt_mutex_set_ovl1_dpi(dvt_acquire_mutex(), NULL);
  117. DPI_DVT_LOG_W("top clock on\n");
  118. dvt_ddp_path_top_clock_on();
  119. DPI_DVT_LOG_W("module init\n");
  120. ddp_driver_dpi.init(DISP_MODULE_DPI, NULL);
  121. ddp_driver_rdma.init(DISP_MODULE_RDMA_LONG1, NULL);
  122. ddp_driver_ovl.init(DISP_MODULE_OVL1, NULL);
  123. DPI_DVT_LOG_W("module power on\n");
  124. ddp_driver_dpi.power_on(DISP_MODULE_DPI, NULL);
  125. ddp_driver_rdma.power_on(DISP_MODULE_RDMA_LONG1, NULL);
  126. ddp_driver_ovl.power_on(DISP_MODULE_OVL1, NULL);
  127. DPI_DVT_LOG_W("module config\n");
  128. ddp_driver_dpi.config(DISP_MODULE_DPI, &extd_dpi_params, NULL);
  129. ret = dvt_allocate_buffer(resolution, M4U_FOR_OVL1);
  130. if (ret < 0) {
  131. DDPERR("dvt_allocate_buffer error: ret: %d\n", ret);
  132. return ret;
  133. }
  134. dvt_init_RDMA_param(RDMA_MODE_DIRECT_LINK);
  135. ddp_driver_rdma.config(DISP_MODULE_RDMA_LONG1, &extd_rdma_params, NULL);
  136. dvt_init_OVL_param(RDMA_MODE_DIRECT_LINK);
  137. ddp_driver_ovl.config(DISP_MODULE_OVL1, &extd_ovl_params, NULL);
  138. configOVL0Layer0Swap(DISP_MODULE_OVL1, 0); /* BGR:0, RGB:1 */
  139. DPI_DVT_LOG_W("module reset\n");
  140. dvt_mutex_reset(NULL, dvt_acquire_mutex());
  141. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  142. ddp_driver_rdma.reset(DISP_MODULE_RDMA_LONG1, NULL);
  143. ddp_driver_ovl.reset(DISP_MODULE_OVL1, NULL);
  144. DPI_DVT_LOG_W("module trigger\n");
  145. dvt_mutex_enable(NULL, dvt_acquire_mutex());
  146. ddp_driver_dpi.trigger(DISP_MODULE_DPI, NULL);
  147. DPI_DVT_LOG_W("module start\n");
  148. ddp_driver_rdma.start(DISP_MODULE_RDMA_LONG1, NULL);
  149. ddp_driver_dpi.start(DISP_MODULE_DPI, NULL);
  150. ddp_driver_ovl.start(DISP_MODULE_OVL1, NULL);
  151. msleep(3 * 1000);
  152. hdmi_drv->video_config(resolution, 0, 0);
  153. DPI_DVT_LOG_W("module dump_info\n");
  154. ddp_driver_dpi.dump_info(DISP_MODULE_DPI, 1);
  155. ddp_driver_rdma.dump_info(DISP_MODULE_RDMA_LONG1, 1);
  156. ddp_driver_ovl.dump_info(DISP_MODULE_OVL1, NULL);
  157. ddp_dump_reg(DISP_MODULE_CONFIG);
  158. ddp_dump_analysis(DISP_MODULE_CONFIG);
  159. dvt_mutex_dump_reg();
  160. msleep(timeS * 1000);
  161. DPI_DVT_LOG_W("module stop\n");
  162. dvt_mutex_disenable(NULL, dvt_acquire_mutex());
  163. ddp_driver_dpi.stop(DISP_MODULE_DPI, NULL);
  164. ddp_driver_rdma.stop(DISP_MODULE_RDMA_LONG1, NULL);
  165. ddp_driver_ovl.stop(DISP_MODULE_OVL1, NULL);
  166. DPI_DVT_LOG_W("module reset\n");
  167. dvt_mutex_reset(NULL, dvt_acquire_mutex());
  168. dvt_mutex_reset(NULL, dvt_acquire_mutex());
  169. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  170. ddp_driver_rdma.reset(DISP_MODULE_RDMA_LONG1, NULL);
  171. ddp_driver_ovl.reset(DISP_MODULE_OVL1, NULL);
  172. DPI_DVT_LOG_W("module power off\n");
  173. ddp_driver_dpi.power_off(DISP_MODULE_DPI, NULL);
  174. ddp_driver_rdma.power_off(DISP_MODULE_RDMA_LONG1, NULL);
  175. ddp_driver_ovl.power_off(DISP_MODULE_OVL1, NULL);
  176. DPI_DVT_LOG_W("top clock off\n");
  177. dvt_ddp_path_top_clock_off();
  178. DPI_DVT_LOG_W("set Mutex and disconnect path\n");
  179. dvt_disconnect_ovl1_dpi(NULL);
  180. if (data_va)
  181. vfree(data_va);
  182. return 0;
  183. }
  184. /*
  185. * OVL0 -> OVL0_MOUT -> COLOR0_SEL -> COLOR0 -> CCORRO -> AAL0 -> GAMMA0 -> DITHER0 -> DITHER0_MUT
  186. * DISP_RDMA0 -> RDMA0_SOUT -> DPI_SEL -> DPI
  187. */
  188. DPI_I32 dvt_start_ovl0_to_dpi(DPI_U32 resolution, DPI_U32 timeS)
  189. {
  190. DPI_I32 ret = 0;
  191. DPI_DVT_LOG_W("set Mutex and connect path\n");
  192. dvt_connect_ovl0_dpi(NULL);
  193. dvt_mutex_set_ovl0_dpi(HW_MUTEX_FOR_UPLINK, NULL);
  194. DPI_DVT_LOG_W("top clock on\n");
  195. dvt_ddp_path_top_clock_on();
  196. DPI_DVT_LOG_W("module init\n");
  197. ddp_driver_dpi.init(DISP_MODULE_DPI, NULL);
  198. ddp_driver_rdma.init(DISP_MODULE_RDMA_LONG0, NULL);
  199. ddp_driver_ovl.init(DISP_MODULE_OVL0, NULL);
  200. DPI_DVT_LOG_W("module power on\n");
  201. ddp_driver_dpi.power_on(DISP_MODULE_DPI, NULL);
  202. ddp_driver_rdma.power_on(DISP_MODULE_RDMA_LONG0, NULL);
  203. ddp_driver_ovl.power_on(DISP_MODULE_OVL0, NULL);
  204. DPI_DVT_LOG_W("module config\n");
  205. ddp_driver_dpi.config(DISP_MODULE_DPI, &extd_dpi_params, NULL);
  206. ret = dvt_allocate_buffer(resolution, M4U_FOR_OVL0);
  207. if (ret < 0) {
  208. DDPERR("dvt_allocate_buffer error: ret: %d\n", ret);
  209. return ret;
  210. }
  211. dvt_init_RDMA_param(RDMA_MODE_DIRECT_LINK);
  212. ddp_driver_rdma.config(DISP_MODULE_RDMA_LONG0, &extd_rdma_params, NULL);
  213. dvt_init_OVL_param(RDMA_MODE_DIRECT_LINK);
  214. ddp_driver_ovl.config(DISP_MODULE_OVL0, &extd_ovl_params, NULL);
  215. configOVL0Layer0Swap(DISP_MODULE_OVL0, 0); /* BGR:0, RGB:1 */
  216. DPI_DVT_LOG_W("module reset\n");
  217. dvt_mutex_reset(NULL, HW_MUTEX_FOR_UPLINK);
  218. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  219. ddp_driver_rdma.reset(DISP_MODULE_RDMA_LONG0, NULL);
  220. ddp_driver_ovl.reset(DISP_MODULE_OVL0, NULL);
  221. DPI_DVT_LOG_W("module trigger\n");
  222. dvt_mutex_enable(NULL, HW_MUTEX_FOR_UPLINK);
  223. ddp_driver_dpi.trigger(DISP_MODULE_DPI, NULL);
  224. DPI_DVT_LOG_W("module start\n");
  225. ddp_driver_rdma.start(DISP_MODULE_RDMA_LONG0, NULL);
  226. ddp_driver_dpi.start(DISP_MODULE_DPI, NULL);
  227. ddp_driver_ovl.start(DISP_MODULE_OVL0, NULL);
  228. msleep(3 * 1000);
  229. hdmi_drv->video_config(resolution, 0, 0);
  230. DPI_DVT_LOG_W("module dump_info\n");
  231. ddp_driver_dpi.dump_info(DISP_MODULE_DPI, 1);
  232. ddp_driver_rdma.dump_info(DISP_MODULE_RDMA_LONG0, 1);
  233. ddp_driver_ovl.dump_info(DISP_MODULE_OVL0, NULL);
  234. ddp_dump_reg(DISP_MODULE_CONFIG);
  235. ddp_dump_analysis(DISP_MODULE_CONFIG);
  236. dvt_mutex_dump_reg();
  237. msleep(timeS * 1000);
  238. DPI_DVT_LOG_W("module stop\n");
  239. dvt_mutex_disenable(NULL, HW_MUTEX_FOR_UPLINK);
  240. ddp_driver_dpi.stop(DISP_MODULE_DPI, NULL);
  241. ddp_driver_rdma.stop(DISP_MODULE_RDMA_LONG0, NULL);
  242. ddp_driver_ovl.stop(DISP_MODULE_OVL0, NULL);
  243. DPI_DVT_LOG_W("module reset\n");
  244. dvt_mutex_reset(NULL, HW_MUTEX_FOR_UPLINK);
  245. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  246. ddp_driver_rdma.reset(DISP_MODULE_RDMA_LONG0, NULL);
  247. ddp_driver_ovl.reset(DISP_MODULE_OVL0, NULL);
  248. DPI_DVT_LOG_W("module power off\n");
  249. ddp_driver_dpi.power_off(DISP_MODULE_DPI, NULL);
  250. ddp_driver_rdma.power_off(DISP_MODULE_RDMA_LONG0, NULL);
  251. ddp_driver_ovl.power_off(DISP_MODULE_OVL0, NULL);
  252. DPI_DVT_LOG_W("top clock off\n");
  253. dvt_ddp_path_top_clock_off();
  254. DPI_DVT_LOG_W("set Mutex and disconnect path\n");
  255. dvt_disconnect_ovl0_dpi(NULL);
  256. if (data_va)
  257. vfree(data_va);
  258. return 0;
  259. }
  260. /**********************************ROME LONG PATH End*****************************************/
  261. /*
  262. * 1. register irq;
  263. * 2. aquire mutex and connect RDMA2 -> DPI
  264. * 3. enable Top clock and IRQ
  265. * 4. power on
  266. *
  267. * 5. configure -> start -> stop -> reset
  268. *
  269. * 6. power off
  270. * 7. close top clock and disable IRQ
  271. * 8. release mutex and disconnect RDMA2 -> DPI
  272. * 9. unregister irq
  273. */
  274. DPI_I32 dpi_dvt_power_on(void)
  275. {
  276. DPI_DVT_LOG_W("module init\n");
  277. ddp_driver_dpi.init(DISP_MODULE_DPI, NULL);
  278. DPI_DVT_LOG_W("module power on\n");
  279. ddp_driver_dpi.power_on(DISP_MODULE_DPI, NULL);
  280. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  281. ddp_driver_dpi.config(DISP_MODULE_DPI, &extd_dpi_params, NULL);
  282. }
  283. DPI_I32 dpi_dvt_show(DPI_U32 timeS)
  284. {
  285. DPI_DVT_LOG_W("dpi_dvt_show\n");
  286. DPI_EnableColorBar(COLOR_BAR_PATTERN);
  287. ddp_driver_dpi.trigger(DISP_MODULE_DPI, NULL);
  288. ddp_driver_dpi.start(DISP_MODULE_DPI, NULL);
  289. ddp_driver_dpi.dump_info(DISP_MODULE_DPI, 1);
  290. msleep(timeS * 1000);
  291. DPI_DVT_LOG_W("module stop\n");
  292. ddp_driver_dpi.stop(DISP_MODULE_DPI, NULL);
  293. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  294. DPI_DisableColorBar();
  295. DPI_DVT_LOG_W("module power Off\n");
  296. return 0;
  297. }
  298. DPI_I32 dpi_dvt_show_pattern(DPI_U32 pattern, DPI_U32 timeS)
  299. {
  300. DPI_DVT_LOG_W("module init\n");
  301. ddp_driver_dpi.init(DISP_MODULE_DPI, NULL);
  302. DPI_DVT_LOG_W("module power on\n");
  303. ddp_driver_dpi.power_on(DISP_MODULE_DPI, NULL);
  304. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  305. ddp_driver_dpi.config(DISP_MODULE_DPI, &extd_dpi_params, NULL);
  306. DPI_EnableColorBar(pattern);
  307. if (pattern == 100)
  308. ddp_dpi_EnableColorBar_0();
  309. else if (pattern == 99)
  310. ddp_dpi_EnableColorBar_16();
  311. if (timeS == 100)
  312. enableRGB2YUV(acsYCbCr444);
  313. else if (timeS == 99) {
  314. configDpiRepetition();
  315. configInterlaceMode(HDMI_VIDEO_720x480i_60Hz);
  316. }
  317. ddp_driver_dpi.trigger(DISP_MODULE_DPI, NULL);
  318. ddp_driver_dpi.start(DISP_MODULE_DPI, NULL);
  319. msleep(50);
  320. hdmi_drv->video_config(DPI_DVT_Context.output_video_resolution, 0, 0);
  321. ddp_driver_dpi.dump_info(DISP_MODULE_DPI, 1);
  322. msleep(timeS * 1000);
  323. DPI_DisableColorBar();
  324. DPI_DVT_LOG_W("module stop\n");
  325. ddp_driver_dpi.stop(DISP_MODULE_DPI, NULL);
  326. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  327. DPI_DVT_LOG_W("module power Off\n");
  328. ddp_driver_dpi.power_off(DISP_MODULE_DPI, NULL);
  329. return 0;
  330. }
  331. DPI_I32 dpi_dvt_show_pattern_for_limit_range(DPI_U32 pattern, DPI_U32 timeS)
  332. {
  333. DPI_DVT_LOG_W("module init\n");
  334. ddp_driver_dpi.init(DISP_MODULE_DPI, NULL);
  335. DPI_DVT_LOG_W("module power on\n");
  336. ddp_driver_dpi.power_on(DISP_MODULE_DPI, NULL);
  337. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  338. ddp_driver_dpi.config(DISP_MODULE_DPI, &extd_dpi_params, NULL);
  339. if (pattern != 100)
  340. configDpiRGB888ToLimitRange();
  341. ddp_dpi_EnableColorBar_16();
  342. ddp_driver_dpi.trigger(DISP_MODULE_DPI, NULL);
  343. ddp_driver_dpi.start(DISP_MODULE_DPI, NULL);
  344. hdmi_drv->video_config(DPI_DVT_Context.output_video_resolution, 0, 0);
  345. ddp_driver_dpi.dump_info(DISP_MODULE_DPI, 1);
  346. msleep(timeS * 1000);
  347. DPI_DisableColorBar();
  348. DPI_DVT_LOG_W("module stop\n");
  349. ddp_driver_dpi.stop(DISP_MODULE_DPI, NULL);
  350. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  351. DPI_DVT_LOG_W("module power Off\n");
  352. ddp_driver_dpi.power_off(DISP_MODULE_DPI, NULL);
  353. return 0;
  354. }
  355. DPI_I32 dvt_start_rdma_to_dpi_for_checkSum(DPI_U32 resolution, DPI_U32 timeS)
  356. {
  357. DPI_I32 ret = 0;
  358. DPI_U32 loop_num = 1000;
  359. DPI_I32 checkSum = -1;
  360. DPI_DVT_LOG_W("set Mutex and connect path\n");
  361. dvt_connect_path(NULL);
  362. dvt_mutex_set(dvt_acquire_mutex(), NULL);
  363. DPI_DVT_LOG_W("top clock on\n");
  364. dvt_ddp_path_top_clock_on();
  365. DPI_DVT_LOG_W("module init\n");
  366. ddp_driver_dpi.init(DISP_MODULE_DPI, NULL);
  367. ddp_driver_rdma.init(DISP_MODULE_RDMA_SHORT, NULL);
  368. DPI_DVT_LOG_W("module power on\n");
  369. ddp_driver_dpi.power_on(DISP_MODULE_DPI, NULL);
  370. ddp_driver_rdma.power_on(DISP_MODULE_RDMA_SHORT, NULL);
  371. /*_test_cmdq_build_trigger_loop();*/
  372. DPI_DVT_LOG_W("module config\n");
  373. ddp_driver_dpi.config(DISP_MODULE_DPI, &extd_dpi_params, NULL);
  374. ret = dvt_allocate_buffer(resolution, M4U_FOR_RDMA1);
  375. if (ret < 0) {
  376. DDPERR("dvt_allocate_buffer error: ret: %d\n", ret);
  377. return ret;
  378. }
  379. dvt_init_RDMA_param(RDMA_MODE_MEMORY);
  380. ddp_driver_rdma.config(DISP_MODULE_RDMA_SHORT, &extd_rdma_params, NULL);
  381. /*configRDMASwap(0, 1); *//*input_swap, format 11:RGB, 01 BGR */
  382. DPI_DVT_LOG_W("module reset\n");
  383. dvt_mutex_reset(NULL, dvt_acquire_mutex());
  384. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  385. ddp_driver_rdma.reset(DISP_MODULE_RDMA_SHORT, NULL);
  386. DPI_DVT_LOG_W("module trigger\n");
  387. dvt_mutex_enable(NULL, dvt_acquire_mutex());
  388. ddp_driver_dpi.trigger(DISP_MODULE_DPI, NULL);
  389. DPI_DVT_LOG_W("module start\n");
  390. ddp_driver_rdma.start(DISP_MODULE_RDMA_SHORT, NULL);
  391. ddp_driver_dpi.start(DISP_MODULE_DPI, NULL);
  392. hdmi_drv->video_config(resolution, 0, 0);
  393. /*_test_cmdq_get_checkSum();*/
  394. DPI_DVT_LOG_W("module dump_info\n");
  395. ddp_driver_dpi.dump_info(DISP_MODULE_DPI, 1);
  396. ddp_driver_rdma.dump_info(DISP_MODULE_RDMA_SHORT, 1);
  397. dvt_mutex_dump_reg();
  398. msleep(timeS * 1000);
  399. DPI_DVT_LOG_W("module stop\n");
  400. dvt_mutex_disenable(NULL, dvt_acquire_mutex());
  401. ddp_driver_dpi.stop(DISP_MODULE_DPI, NULL);
  402. ddp_driver_rdma.stop(DISP_MODULE_RDMA_SHORT, NULL);
  403. DPI_DVT_LOG_W("module reset\n");
  404. dvt_mutex_reset(NULL, dvt_acquire_mutex());
  405. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  406. ddp_driver_rdma.reset(DISP_MODULE_RDMA_SHORT, NULL);
  407. DPI_DVT_LOG_W("module power off\n");
  408. ddp_driver_dpi.power_off(DISP_MODULE_DPI, NULL);
  409. ddp_driver_rdma.power_off(DISP_MODULE_RDMA_SHORT, NULL);
  410. DPI_DVT_LOG_W("top clock off\n");
  411. dvt_ddp_path_top_clock_off();
  412. DPI_DVT_LOG_W("set Mutex and disconnect path\n");
  413. dvt_disconnect_path(NULL);
  414. dvt_mutex_set(dvt_acquire_mutex(), NULL);
  415. if (data_va)
  416. vfree(data_va);
  417. return 0;
  418. }
  419. DPI_I32 dvt_start_rdma_to_dpi_for_interlace(DPI_U32 resolution, DPI_U32 timeS)
  420. {
  421. DPI_I32 ret = 0;
  422. DPI_U32 loop_num = 10000;
  423. DPI_DVT_LOG_W("set Mutex and connect path\n");
  424. dvt_connect_path(NULL);
  425. dvt_mutex_set(dvt_acquire_mutex(), NULL);
  426. DPI_DVT_LOG_W("top clock on\n");
  427. dvt_ddp_path_top_clock_on();
  428. DPI_DVT_LOG_W("module init\n");
  429. ddp_driver_dpi.init(DISP_MODULE_DPI, NULL);
  430. ddp_driver_rdma.init(DISP_MODULE_RDMA_SHORT, NULL);
  431. DPI_DVT_LOG_W("module power on\n");
  432. ddp_driver_dpi.power_on(DISP_MODULE_DPI, NULL);
  433. ddp_driver_rdma.power_on(DISP_MODULE_RDMA_SHORT, NULL);
  434. DPI_DVT_LOG_W("module config\n");
  435. ddp_driver_dpi.config(DISP_MODULE_DPI, &extd_dpi_params, NULL);
  436. configInterlaceMode(resolution);
  437. if (timeS == 98)
  438. configDpiRepetition();
  439. ret = dvt_allocate_buffer(resolution, M4U_FOR_RDMA1);
  440. if (ret < 0) {
  441. DDPERR("dvt_allocate_buffer error: ret: %d\n", ret);
  442. return ret;
  443. }
  444. dvt_init_RDMA_param(RDMA_MODE_MEMORY);
  445. extd_rdma_params.rdma_config.pitch = extd_dpi_params.dispif_config.dpi.width * 3 * 2;
  446. ddp_driver_rdma.config(DISP_MODULE_RDMA_SHORT, &extd_rdma_params, NULL);
  447. /*configRDMASwap(0, 1); */
  448. /*
  449. _test_cmdq_build_trigger_loop();
  450. _test_cmdq_for_interlace(data_mva, (data_mva + (extd_dpi_params.dispif_config.dpi.width * 3)));
  451. */
  452. DPI_DVT_LOG_W("module reset\n");
  453. dvt_mutex_reset(NULL, dvt_acquire_mutex());
  454. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  455. ddp_driver_rdma.reset(DISP_MODULE_RDMA_SHORT, NULL);
  456. DPI_DVT_LOG_W("module trigger\n");
  457. dvt_mutex_enable(NULL, dvt_acquire_mutex());
  458. ddp_driver_dpi.trigger(DISP_MODULE_DPI, NULL);
  459. DPI_DVT_LOG_W("module start\n");
  460. ddp_driver_rdma.start(DISP_MODULE_RDMA_SHORT, NULL);
  461. ddp_driver_dpi.start(DISP_MODULE_DPI, NULL);
  462. hdmi_drv->video_config(resolution, 0, 0);
  463. msleep(50);
  464. for (;;) {
  465. wait_event_interruptible(hdmi_dpi_config_wq, atomic_read(&hdmi_dpi_config_event));
  466. atomic_set(&hdmi_dpi_config_event, 0);
  467. if (readDPIStatus() == 0) {
  468. set_rdma2_address(DISP_MODULE_RDMA_SHORT, data_mva);
  469. } else {
  470. set_rdma2_address(DISP_MODULE_RDMA_SHORT,
  471. (data_mva +
  472. (extd_dpi_params.dispif_config.dpi.width * 3)));
  473. }
  474. clearDPIStatus();
  475. if (disconnectFlag)
  476. break;
  477. }
  478. DPI_DVT_LOG_W("module dump_info\n");
  479. ddp_driver_dpi.dump_info(DISP_MODULE_DPI, 1);
  480. ddp_driver_rdma.dump_info(DISP_MODULE_RDMA_SHORT, 1);
  481. dvt_mutex_dump_reg();
  482. msleep(timeS * 1000);
  483. DPI_DVT_LOG_W("module stop\n");
  484. dvt_mutex_disenable(NULL, dvt_acquire_mutex());
  485. ddp_driver_dpi.stop(DISP_MODULE_DPI, NULL);
  486. ddp_driver_rdma.stop(DISP_MODULE_RDMA_SHORT, NULL);
  487. DPI_DVT_LOG_W("module reset\n");
  488. dvt_mutex_reset(NULL, dvt_acquire_mutex());
  489. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  490. ddp_driver_rdma.reset(DISP_MODULE_RDMA_SHORT, NULL);
  491. DPI_DVT_LOG_W("module power off\n");
  492. ddp_driver_dpi.power_off(DISP_MODULE_DPI, NULL);
  493. ddp_driver_rdma.power_off(DISP_MODULE_RDMA_SHORT, NULL);
  494. DPI_DVT_LOG_W("top clock off\n");
  495. dvt_ddp_path_top_clock_off();
  496. DPI_DVT_LOG_W("set Mutex and disconnect path\n");
  497. dvt_disconnect_path(NULL);
  498. dvt_mutex_set(dvt_acquire_mutex(), NULL);
  499. if (data_va)
  500. vfree(data_va);
  501. return 0;
  502. }
  503. DPI_I32 dvt_start_rdma_to_dpi_for_RGB2YUV(DPI_U32 resolution, DPI_U32 timeS, AviColorSpace_e format)
  504. {
  505. DPI_I32 ret = 0;
  506. DPI_DVT_LOG_W("set Mutex and connect path\n");
  507. dvt_connect_path(NULL);
  508. dvt_mutex_set(dvt_acquire_mutex(), NULL);
  509. DPI_DVT_LOG_W("top clock on\n");
  510. dvt_ddp_path_top_clock_on();
  511. DPI_DVT_LOG_W("module init\n");
  512. ddp_driver_dpi.init(DISP_MODULE_DPI, NULL);
  513. ddp_driver_rdma.init(DISP_MODULE_RDMA_SHORT, NULL);
  514. DPI_DVT_LOG_W("module power on\n");
  515. ddp_driver_dpi.power_on(DISP_MODULE_DPI, NULL);
  516. ddp_driver_rdma.power_on(DISP_MODULE_RDMA_SHORT, NULL);
  517. DPI_DVT_LOG_W("module config\n");
  518. ddp_driver_dpi.config(DISP_MODULE_DPI, &extd_dpi_params, NULL);
  519. enableRGB2YUV(format);
  520. ret = dvt_allocate_buffer(resolution, M4U_FOR_RDMA1);
  521. if (ret < 0) {
  522. DDPERR("dvt_allocate_buffer error: ret: %d\n", ret);
  523. return ret;
  524. }
  525. dvt_init_RDMA_param(RDMA_MODE_MEMORY);
  526. ddp_driver_rdma.config(DISP_MODULE_RDMA_SHORT, &extd_rdma_params, NULL);
  527. /*configRDMASwap(0, 1); */
  528. DPI_DVT_LOG_W("module reset\n");
  529. dvt_mutex_reset(NULL, dvt_acquire_mutex());
  530. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  531. ddp_driver_rdma.reset(DISP_MODULE_RDMA_SHORT, NULL);
  532. DPI_DVT_LOG_W("module trigger\n");
  533. dvt_mutex_enable(NULL, dvt_acquire_mutex());
  534. ddp_driver_dpi.trigger(DISP_MODULE_DPI, NULL);
  535. DPI_DVT_LOG_W("module start\n");
  536. ddp_driver_rdma.start(DISP_MODULE_RDMA_SHORT, NULL);
  537. ddp_driver_dpi.start(DISP_MODULE_DPI, NULL);
  538. hdmi_drv->video_config(resolution, 0, 0);
  539. DPI_DVT_LOG_W("module dump_info\n");
  540. ddp_driver_dpi.dump_info(DISP_MODULE_DPI, 1);
  541. ddp_driver_rdma.dump_info(DISP_MODULE_RDMA_SHORT, 1);
  542. dvt_mutex_dump_reg();
  543. msleep(timeS * 1000);
  544. DPI_DVT_LOG_W("module stop\n");
  545. dvt_mutex_disenable(NULL, dvt_acquire_mutex());
  546. ddp_driver_dpi.stop(DISP_MODULE_DPI, NULL);
  547. ddp_driver_rdma.stop(DISP_MODULE_RDMA_SHORT, NULL);
  548. DPI_DVT_LOG_W("module reset\n");
  549. dvt_mutex_reset(NULL, dvt_acquire_mutex());
  550. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  551. ddp_driver_rdma.reset(DISP_MODULE_RDMA_SHORT, NULL);
  552. DPI_DVT_LOG_W("module power off\n");
  553. ddp_driver_dpi.power_off(DISP_MODULE_DPI, NULL);
  554. ddp_driver_rdma.power_off(DISP_MODULE_RDMA_SHORT, NULL);
  555. DPI_DVT_LOG_W("top clock off\n");
  556. dvt_ddp_path_top_clock_off();
  557. DPI_DVT_LOG_W("set Mutex and disconnect path\n");
  558. dvt_disconnect_path(NULL);
  559. dvt_mutex_set(dvt_acquire_mutex(), NULL);
  560. if (data_va)
  561. vfree(data_va);
  562. return 0;
  563. }
  564. DPI_I32 dvt_start_rdma_to_dpi_for_3D(DPI_U32 resolution, DPI_U32 timeS)
  565. {
  566. DPI_I32 ret = 0;
  567. DPI_U32 loop_num = 10000;
  568. DPI_DVT_LOG_W("set Mutex and connect path\n");
  569. dvt_connect_path(NULL);
  570. dvt_mutex_set(dvt_acquire_mutex(), NULL);
  571. DPI_DVT_LOG_W("top clock on\n");
  572. dvt_ddp_path_top_clock_on();
  573. DPI_DVT_LOG_W("module init\n");
  574. ddp_driver_dpi.init(DISP_MODULE_DPI, NULL);
  575. ddp_driver_rdma.init(DISP_MODULE_RDMA_SHORT, NULL);
  576. DPI_DVT_LOG_W("module power on\n");
  577. ddp_driver_dpi.power_on(DISP_MODULE_DPI, NULL);
  578. ddp_driver_rdma.power_on(DISP_MODULE_RDMA_SHORT, NULL);
  579. DPI_DVT_LOG_W("module config\n");
  580. ddp_driver_dpi.config(DISP_MODULE_DPI, &extd_dpi_params, NULL);
  581. config3DMode(resolution);
  582. ret = dvt_allocate_buffer(resolution, M4U_FOR_RDMA1);
  583. if (ret < 0) {
  584. DDPERR("dvt_allocate_buffer error: ret: %d\n", ret);
  585. return ret;
  586. }
  587. dvt_init_RDMA_param(RDMA_MODE_MEMORY);
  588. ddp_driver_rdma.config(DISP_MODULE_RDMA_SHORT, &extd_rdma_params, NULL);
  589. /*configRDMASwap(0, 1); */
  590. DPI_DVT_LOG_W("module reset\n");
  591. dvt_mutex_reset(NULL, dvt_acquire_mutex());
  592. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  593. ddp_driver_rdma.reset(DISP_MODULE_RDMA_SHORT, NULL);
  594. DPI_DVT_LOG_W("module trigger\n");
  595. dvt_mutex_enable(NULL, dvt_acquire_mutex());
  596. ddp_driver_dpi.trigger(DISP_MODULE_DPI, NULL);
  597. DPI_DVT_LOG_W("module start\n");
  598. ddp_driver_rdma.start(DISP_MODULE_RDMA_SHORT, NULL);
  599. ddp_driver_dpi.start(DISP_MODULE_DPI, NULL);
  600. hdmi_drv->video_config(resolution, 0, 0);
  601. msleep(50);
  602. DPI_DVT_LOG_W("module dump_info\n");
  603. ddp_driver_dpi.dump_info(DISP_MODULE_DPI, 1);
  604. ddp_driver_rdma.dump_info(DISP_MODULE_RDMA_SHORT, 1);
  605. dvt_mutex_dump_reg();
  606. for (;;) {
  607. wait_event_interruptible(hdmi_dpi_config_wq, atomic_read(&hdmi_dpi_config_event));
  608. atomic_set(&hdmi_dpi_config_event, 0);
  609. if (readDPIStatus() == 0)
  610. set_rdma2_address(DISP_MODULE_RDMA_SHORT, data_mva);
  611. else
  612. set_rdma2_address(DISP_MODULE_RDMA_SHORT, data_mva);
  613. if (disconnectFlag)
  614. break;
  615. }
  616. DPI_DVT_LOG_W("module stop\n");
  617. dvt_mutex_disenable(NULL, dvt_acquire_mutex());
  618. ddp_driver_dpi.stop(DISP_MODULE_DPI, NULL);
  619. ddp_driver_rdma.stop(DISP_MODULE_RDMA_SHORT, NULL);
  620. DPI_DVT_LOG_W("module reset\n");
  621. dvt_mutex_reset(NULL, dvt_acquire_mutex());
  622. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  623. ddp_driver_rdma.reset(DISP_MODULE_RDMA_SHORT, NULL);
  624. DPI_DVT_LOG_W("module power off\n");
  625. ddp_driver_dpi.power_off(DISP_MODULE_DPI, NULL);
  626. ddp_driver_rdma.power_off(DISP_MODULE_RDMA_SHORT, NULL);
  627. DPI_DVT_LOG_W("top clock off\n");
  628. dvt_ddp_path_top_clock_off();
  629. DPI_DVT_LOG_W("set Mutex and disconnect path\n");
  630. dvt_disconnect_path(NULL);
  631. dvt_mutex_set(dvt_acquire_mutex(), NULL);
  632. if (data_va)
  633. vfree(data_va);
  634. return 0;
  635. }
  636. DPI_I32 dvt_start_rdma_to_dpi_for_3D_interlace(DPI_U32 resolution, DPI_U32 timeS)
  637. {
  638. DPI_I32 ret = 0;
  639. DPI_U32 loop_num = 10000;
  640. DPI_DVT_LOG_W("set Mutex and connect path\n");
  641. dvt_connect_path(NULL);
  642. dvt_mutex_set(dvt_acquire_mutex(), NULL);
  643. DPI_DVT_LOG_W("top clock on\n");
  644. dvt_ddp_path_top_clock_on();
  645. DPI_DVT_LOG_W("module init\n");
  646. ddp_driver_dpi.init(DISP_MODULE_DPI, NULL);
  647. ddp_driver_rdma.init(DISP_MODULE_RDMA_SHORT, NULL);
  648. DPI_DVT_LOG_W("module power on\n");
  649. ddp_driver_dpi.power_on(DISP_MODULE_DPI, NULL);
  650. ddp_driver_rdma.power_on(DISP_MODULE_RDMA_SHORT, NULL);
  651. DPI_DVT_LOG_W("module config\n");
  652. ddp_driver_dpi.config(DISP_MODULE_DPI, &extd_dpi_params, NULL);
  653. config3DInterlaceMode(resolution);
  654. if (resolution == HDMI_VIDEO_720x480i_60Hz)
  655. configDpiRepetition();
  656. ret = dvt_allocate_buffer(resolution, M4U_FOR_RDMA1);
  657. if (ret < 0) {
  658. DDPERR("dvt_allocate_buffer error: ret: %d\n", ret);
  659. return ret;
  660. }
  661. dvt_init_RDMA_param(RDMA_MODE_MEMORY);
  662. extd_rdma_params.rdma_config.pitch = extd_dpi_params.dispif_config.dpi.width * 3 * 2;
  663. ddp_driver_rdma.config(DISP_MODULE_RDMA_SHORT, &extd_rdma_params, NULL);
  664. /*configRDMASwap(0, 1); */
  665. DPI_DVT_LOG_W("module reset\n");
  666. dvt_mutex_reset(NULL, dvt_acquire_mutex());
  667. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  668. ddp_driver_rdma.reset(DISP_MODULE_RDMA_SHORT, NULL);
  669. DPI_DVT_LOG_W("module trigger\n");
  670. dvt_mutex_enable(NULL, dvt_acquire_mutex());
  671. ddp_driver_dpi.trigger(DISP_MODULE_DPI, NULL);
  672. DPI_DVT_LOG_W("module start\n");
  673. ddp_driver_rdma.start(DISP_MODULE_RDMA_SHORT, NULL);
  674. ddp_driver_dpi.start(DISP_MODULE_DPI, NULL);
  675. hdmi_drv->video_config(resolution, 0, 0);
  676. msleep(50);
  677. DPI_DVT_LOG_W("module dump_info\n");
  678. ddp_driver_dpi.dump_info(DISP_MODULE_DPI, 1);
  679. ddp_driver_rdma.dump_info(DISP_MODULE_RDMA_SHORT, 1);
  680. dvt_mutex_dump_reg();
  681. msleep(timeS * 1000);
  682. for (;;) {
  683. wait_event_interruptible(hdmi_dpi_config_wq, atomic_read(&hdmi_dpi_config_event));
  684. atomic_set(&hdmi_dpi_config_event, 0);
  685. if (readDPIStatus() == 0) {
  686. set_rdma2_address(DISP_MODULE_RDMA_SHORT, data_mva);
  687. } else {
  688. set_rdma2_address(DISP_MODULE_RDMA_SHORT,
  689. (data_mva +
  690. (extd_dpi_params.dispif_config.dpi.width * 3)));
  691. }
  692. clearDPIStatus();
  693. if (disconnectFlag)
  694. break;
  695. }
  696. DPI_DVT_LOG_W("module stop\n");
  697. dvt_mutex_disenable(NULL, dvt_acquire_mutex());
  698. ddp_driver_dpi.stop(DISP_MODULE_DPI, NULL);
  699. ddp_driver_rdma.stop(DISP_MODULE_RDMA_SHORT, NULL);
  700. DPI_DVT_LOG_W("module reset\n");
  701. dvt_mutex_reset(NULL, dvt_acquire_mutex());
  702. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  703. ddp_driver_rdma.reset(DISP_MODULE_RDMA_SHORT, NULL);
  704. DPI_DVT_LOG_W("module power off\n");
  705. ddp_driver_dpi.power_off(DISP_MODULE_DPI, NULL);
  706. ddp_driver_rdma.power_off(DISP_MODULE_RDMA_SHORT, NULL);
  707. DPI_DVT_LOG_W("top clock off\n");
  708. dvt_ddp_path_top_clock_off();
  709. DPI_DVT_LOG_W("set Mutex and disconnect path\n");
  710. dvt_disconnect_path(NULL);
  711. dvt_mutex_set(dvt_acquire_mutex(), NULL);
  712. if (data_va)
  713. vfree(data_va);
  714. return 0;
  715. }
  716. DPI_I32 dvt_start_rdma_to_dpi_for_Single_Edge(DPI_U32 resolution, DPI_U32 timeS)
  717. {
  718. DPI_I32 ret = 0;
  719. DPI_DVT_LOG_W("set Mutex and connect path\n");
  720. dvt_connect_path(NULL);
  721. dvt_mutex_set(dvt_acquire_mutex(), NULL);
  722. DPI_DVT_LOG_W("top clock on\n");
  723. dvt_ddp_path_top_clock_on();
  724. DPI_DVT_LOG_W("module init\n");
  725. ddp_driver_dpi.init(DISP_MODULE_DPI, NULL);
  726. ddp_driver_rdma.init(DISP_MODULE_RDMA_SHORT, NULL);
  727. DPI_DVT_LOG_W("module power on\n");
  728. ddp_driver_dpi.power_on(DISP_MODULE_DPI, NULL);
  729. ddp_driver_rdma.power_on(DISP_MODULE_RDMA_SHORT, NULL);
  730. DPI_DVT_LOG_W("module config\n");
  731. ddp_driver_dpi.config(DISP_MODULE_DPI, &extd_dpi_params, NULL);
  732. enableSingleEdge();
  733. ret = dvt_allocate_buffer(resolution, M4U_FOR_RDMA1);
  734. if (ret < 0) {
  735. DDPERR("dvt_allocate_buffer error: ret: %d\n", ret);
  736. return ret;
  737. }
  738. dvt_init_RDMA_param(RDMA_MODE_MEMORY);
  739. ddp_driver_rdma.config(DISP_MODULE_RDMA_SHORT, &extd_rdma_params, NULL);
  740. /*configRDMASwap(0, 1); */
  741. DPI_DVT_LOG_W("module reset\n");
  742. dvt_mutex_reset(NULL, dvt_acquire_mutex());
  743. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  744. ddp_driver_rdma.reset(DISP_MODULE_RDMA_SHORT, NULL);
  745. DPI_DVT_LOG_W("module trigger\n");
  746. dvt_mutex_enable(NULL, dvt_acquire_mutex());
  747. ddp_driver_dpi.trigger(DISP_MODULE_DPI, NULL);
  748. DPI_DVT_LOG_W("module start\n");
  749. ddp_driver_rdma.start(DISP_MODULE_RDMA_SHORT, NULL);
  750. ddp_driver_dpi.start(DISP_MODULE_DPI, NULL);
  751. hdmi_drv->video_config(resolution, 0, 0);
  752. DPI_DVT_LOG_W("module dump_info\n");
  753. ddp_driver_dpi.dump_info(DISP_MODULE_DPI, 1);
  754. ddp_driver_rdma.dump_info(DISP_MODULE_RDMA_SHORT, 1);
  755. dvt_mutex_dump_reg();
  756. msleep(timeS * 1000);
  757. DPI_DVT_LOG_W("module stop\n");
  758. dvt_mutex_disenable(NULL, dvt_acquire_mutex());
  759. ddp_driver_dpi.stop(DISP_MODULE_DPI, NULL);
  760. ddp_driver_rdma.stop(DISP_MODULE_RDMA_SHORT, NULL);
  761. DPI_DVT_LOG_W("module reset\n");
  762. dvt_mutex_reset(NULL, dvt_acquire_mutex());
  763. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  764. ddp_driver_rdma.reset(DISP_MODULE_RDMA_SHORT, NULL);
  765. DPI_DVT_LOG_W("module power off\n");
  766. ddp_driver_dpi.power_off(DISP_MODULE_DPI, NULL);
  767. ddp_driver_rdma.power_off(DISP_MODULE_RDMA_SHORT, NULL);
  768. DPI_DVT_LOG_W("top clock off\n");
  769. dvt_ddp_path_top_clock_off();
  770. DPI_DVT_LOG_W("set Mutex and disconnect path\n");
  771. dvt_disconnect_path(NULL);
  772. dvt_mutex_set(dvt_acquire_mutex(), NULL);
  773. if (data_va)
  774. vfree(data_va);
  775. return 0;
  776. }
  777. DPI_I32 dvt_start_rdma_to_dpi_for_embsync(DPI_U32 resolution, DPI_U32 timeS)
  778. {
  779. DPI_I32 ret = 0;
  780. DPI_DVT_LOG_W("set Mutex and connect path\n");
  781. dvt_connect_path(NULL);
  782. dvt_mutex_set(dvt_acquire_mutex(), NULL);
  783. DPI_DVT_LOG_W("top clock on\n");
  784. dvt_ddp_path_top_clock_on();
  785. DPI_DVT_LOG_W("module init\n");
  786. ddp_driver_dpi.init(DISP_MODULE_DPI, NULL);
  787. ddp_driver_rdma.init(DISP_MODULE_RDMA_SHORT, NULL);
  788. DPI_DVT_LOG_W("module power on\n");
  789. ddp_driver_dpi.power_on(DISP_MODULE_DPI, NULL);
  790. ddp_driver_rdma.power_on(DISP_MODULE_RDMA_SHORT, NULL);
  791. DPI_DVT_LOG_W("module config\n");
  792. ddp_driver_dpi.config(DISP_MODULE_DPI, &extd_dpi_params, NULL);
  793. configDpiEmbsync();
  794. ret = dvt_allocate_buffer(resolution, M4U_FOR_RDMA1);
  795. if (ret < 0) {
  796. DDPERR("dvt_allocate_buffer error: ret: %d\n", ret);
  797. return ret;
  798. }
  799. dvt_init_RDMA_param(RDMA_MODE_MEMORY);
  800. extd_rdma_params.rdma_config.pitch = extd_dpi_params.dispif_config.dpi.width * 3 * 2;
  801. ddp_driver_rdma.config(DISP_MODULE_RDMA_SHORT, &extd_rdma_params, NULL);
  802. /*configRDMASwap(0, 1); */
  803. DPI_DVT_LOG_W("module reset\n");
  804. dvt_mutex_reset(NULL, dvt_acquire_mutex());
  805. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  806. ddp_driver_rdma.reset(DISP_MODULE_RDMA_SHORT, NULL);
  807. DPI_DVT_LOG_W("module trigger\n");
  808. dvt_mutex_enable(NULL, dvt_acquire_mutex());
  809. ddp_driver_dpi.trigger(DISP_MODULE_DPI, NULL);
  810. DPI_DVT_LOG_W("module start\n");
  811. ddp_driver_rdma.start(DISP_MODULE_RDMA_SHORT, NULL);
  812. ddp_driver_dpi.start(DISP_MODULE_DPI, NULL);
  813. hdmi_drv->video_config(resolution, 0, 0);
  814. msleep(50);
  815. DPI_DVT_LOG_W("module dump_info\n");
  816. ddp_driver_dpi.dump_info(DISP_MODULE_DPI, 1);
  817. ddp_driver_rdma.dump_info(DISP_MODULE_RDMA_SHORT, 1);
  818. dvt_mutex_dump_reg();
  819. msleep(timeS * 1000);
  820. DPI_DVT_LOG_W("module stop\n");
  821. dvt_mutex_disenable(NULL, dvt_acquire_mutex());
  822. ddp_driver_dpi.stop(DISP_MODULE_DPI, NULL);
  823. ddp_driver_rdma.stop(DISP_MODULE_RDMA_SHORT, NULL);
  824. DPI_DVT_LOG_W("module reset\n");
  825. dvt_mutex_reset(NULL, dvt_acquire_mutex());
  826. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  827. ddp_driver_rdma.reset(DISP_MODULE_RDMA_SHORT, NULL);
  828. DPI_DVT_LOG_W("module power off\n");
  829. ddp_driver_dpi.power_off(DISP_MODULE_DPI, NULL);
  830. ddp_driver_rdma.power_off(DISP_MODULE_RDMA_SHORT, NULL);
  831. DPI_DVT_LOG_W("top clock off\n");
  832. dvt_ddp_path_top_clock_off();
  833. DPI_DVT_LOG_W("set Mutex and disconnect path\n");
  834. dvt_disconnect_path(NULL);
  835. dvt_mutex_set(dvt_acquire_mutex(), NULL);
  836. if (data_va)
  837. vfree(data_va);
  838. return 0;
  839. }
  840. DPI_I32 dvt_start_rdma_to_dpi_for_color_space_transform(DPI_U32 resolution, DPI_U32 timeS)
  841. {
  842. DPI_I32 ret = 0;
  843. DPI_DVT_LOG_W("set Mutex and connect path\n");
  844. dvt_connect_path(NULL);
  845. dvt_mutex_set(dvt_acquire_mutex(), NULL);
  846. DPI_DVT_LOG_W("top clock on\n");
  847. dvt_ddp_path_top_clock_on();
  848. DPI_DVT_LOG_W("module init\n");
  849. ddp_driver_dpi.init(DISP_MODULE_DPI, NULL);
  850. ddp_driver_rdma.init(DISP_MODULE_RDMA_SHORT, NULL);
  851. DPI_DVT_LOG_W("module power on\n");
  852. ddp_driver_dpi.power_on(DISP_MODULE_DPI, NULL);
  853. ddp_driver_rdma.power_on(DISP_MODULE_RDMA_SHORT, NULL);
  854. DPI_DVT_LOG_W("module config\n");
  855. ddp_driver_dpi.config(DISP_MODULE_DPI, &extd_dpi_params, NULL);
  856. configDpiColorTransformToBT709();
  857. ret = dvt_allocate_buffer(resolution, M4U_FOR_RDMA1);
  858. if (ret < 0) {
  859. DDPERR("dvt_allocate_buffer error: ret: %d\n", ret);
  860. return ret;
  861. }
  862. dvt_init_RDMA_param(RDMA_MODE_MEMORY);
  863. ddp_driver_rdma.config(DISP_MODULE_RDMA_SHORT, &extd_rdma_params, NULL);
  864. /*configRDMASwap(0, 1); */
  865. DPI_DVT_LOG_W("module reset\n");
  866. dvt_mutex_reset(NULL, dvt_acquire_mutex());
  867. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  868. ddp_driver_rdma.reset(DISP_MODULE_RDMA_SHORT, NULL);
  869. DPI_DVT_LOG_W("module trigger\n");
  870. dvt_mutex_enable(NULL, dvt_acquire_mutex());
  871. ddp_driver_dpi.trigger(DISP_MODULE_DPI, NULL);
  872. DPI_DVT_LOG_W("module start\n");
  873. ddp_driver_rdma.start(DISP_MODULE_RDMA_SHORT, NULL);
  874. ddp_driver_dpi.start(DISP_MODULE_DPI, NULL);
  875. hdmi_drv->video_config(resolution, 0, 0);
  876. DPI_DVT_LOG_W("module dump_info\n");
  877. ddp_driver_dpi.dump_info(DISP_MODULE_DPI, 1);
  878. ddp_driver_rdma.dump_info(DISP_MODULE_RDMA_SHORT, 1);
  879. dvt_mutex_dump_reg();
  880. msleep(timeS * 1000);
  881. DPI_DVT_LOG_W("module stop\n");
  882. dvt_mutex_disenable(NULL, dvt_acquire_mutex());
  883. ddp_driver_dpi.stop(DISP_MODULE_DPI, NULL);
  884. ddp_driver_rdma.stop(DISP_MODULE_RDMA_SHORT, NULL);
  885. DPI_DVT_LOG_W("module reset\n");
  886. dvt_mutex_reset(NULL, dvt_acquire_mutex());
  887. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  888. ddp_driver_rdma.reset(DISP_MODULE_RDMA_SHORT, NULL);
  889. DPI_DVT_LOG_W("module power off\n");
  890. ddp_driver_dpi.power_off(DISP_MODULE_DPI, NULL);
  891. ddp_driver_rdma.power_off(DISP_MODULE_RDMA_SHORT, NULL);
  892. DPI_DVT_LOG_W("top clock off\n");
  893. dvt_ddp_path_top_clock_off();
  894. DPI_DVT_LOG_W("set Mutex and disconnect path\n");
  895. dvt_disconnect_path(NULL);
  896. dvt_mutex_set(dvt_acquire_mutex(), NULL);
  897. if (data_va)
  898. vfree(data_va);
  899. return 0;
  900. }
  901. DPI_I32 dvt_start_rdma_to_dpi_for_limit_range_transform(DPI_U32 resolution, DPI_U32 timeS)
  902. {
  903. DPI_I32 ret = 0;
  904. DPI_DVT_LOG_W("set Mutex and connect path\n");
  905. dvt_connect_path(NULL);
  906. dvt_mutex_set(dvt_acquire_mutex(), NULL);
  907. DPI_DVT_LOG_W("top clock on\n");
  908. dvt_ddp_path_top_clock_on();
  909. DPI_DVT_LOG_W("module init\n");
  910. ddp_driver_dpi.init(DISP_MODULE_DPI, NULL);
  911. ddp_driver_rdma.init(DISP_MODULE_RDMA_SHORT, NULL);
  912. DPI_DVT_LOG_W("module power on\n");
  913. ddp_driver_dpi.power_on(DISP_MODULE_DPI, NULL);
  914. ddp_driver_rdma.power_on(DISP_MODULE_RDMA_SHORT, NULL);
  915. DPI_DVT_LOG_W("module config\n");
  916. ddp_driver_dpi.config(DISP_MODULE_DPI, &extd_dpi_params, NULL);
  917. ret = dvt_allocate_buffer(resolution, M4U_FOR_RDMA1);
  918. if (ret < 0) {
  919. DDPERR("dvt_allocate_buffer error: ret: %d\n", ret);
  920. return ret;
  921. }
  922. dvt_init_RDMA_param(RDMA_MODE_MEMORY);
  923. ddp_driver_rdma.config(DISP_MODULE_RDMA_SHORT, &extd_rdma_params, NULL);
  924. configDpiRGB888ToLimitRange();
  925. /*configRDMASwap(0, 1); */
  926. DPI_DVT_LOG_W("module reset\n");
  927. dvt_mutex_reset(NULL, dvt_acquire_mutex());
  928. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  929. ddp_driver_rdma.reset(DISP_MODULE_RDMA_SHORT, NULL);
  930. DPI_DVT_LOG_W("module trigger\n");
  931. dvt_mutex_enable(NULL, dvt_acquire_mutex());
  932. ddp_driver_dpi.trigger(DISP_MODULE_DPI, NULL);
  933. DPI_DVT_LOG_W("module start\n");
  934. ddp_driver_rdma.start(DISP_MODULE_RDMA_SHORT, NULL);
  935. ddp_driver_dpi.start(DISP_MODULE_DPI, NULL);
  936. hdmi_drv->video_config(resolution, 0, 0);
  937. DPI_DVT_LOG_W("module dump_info\n");
  938. ddp_driver_dpi.dump_info(DISP_MODULE_DPI, 1);
  939. ddp_driver_rdma.dump_info(DISP_MODULE_RDMA_SHORT, 1);
  940. dvt_mutex_dump_reg();
  941. msleep(timeS * 1000);
  942. DPI_DVT_LOG_W("module stop\n");
  943. dvt_mutex_disenable(NULL, dvt_acquire_mutex());
  944. ddp_driver_dpi.stop(DISP_MODULE_DPI, NULL);
  945. ddp_driver_rdma.stop(DISP_MODULE_RDMA_SHORT, NULL);
  946. DPI_DVT_LOG_W("module reset\n");
  947. dvt_mutex_reset(NULL, dvt_acquire_mutex());
  948. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  949. ddp_driver_rdma.reset(DISP_MODULE_RDMA_SHORT, NULL);
  950. DPI_DVT_LOG_W("module power off\n");
  951. ddp_driver_dpi.power_off(DISP_MODULE_DPI, NULL);
  952. ddp_driver_rdma.power_off(DISP_MODULE_RDMA_SHORT, NULL);
  953. DPI_DVT_LOG_W("top clock off\n");
  954. dvt_ddp_path_top_clock_off();
  955. DPI_DVT_LOG_W("set Mutex and disconnect path\n");
  956. dvt_disconnect_path(NULL);
  957. dvt_mutex_set(dvt_acquire_mutex(), NULL);
  958. if (data_va)
  959. vfree(data_va);
  960. return 0;
  961. }
  962. #endif /*#ifdef DPI_DVT_TEST_SUPPORT */
  963. DPI_I32 dvt_init_RDMA_param(DPI_U32 mode)
  964. {
  965. if (mode == RDMA_MODE_DIRECT_LINK) {
  966. DPI_DVT_LOG_W("RDMA_MODE_DIRECT_LINK configure\n");
  967. extd_rdma_params.dst_dirty = 1;
  968. extd_rdma_params.dst_w = extd_dpi_params.dispif_config.dpi.width;
  969. extd_rdma_params.dst_h = extd_dpi_params.dispif_config.dpi.height;
  970. } else if (mode == RDMA_MODE_MEMORY) {
  971. DPI_DVT_LOG_W("RDMA_MODE_MEMORY configure\n");
  972. extd_rdma_params.rdma_dirty = 1;
  973. extd_rdma_params.rdma_config.address = data_mva;
  974. extd_rdma_params.rdma_config.inputFormat = UFMT_RGB888;
  975. extd_rdma_params.rdma_config.pitch = extd_dpi_params.dispif_config.dpi.width * 3;
  976. extd_rdma_params.rdma_config.width = extd_dpi_params.dispif_config.dpi.width;
  977. extd_rdma_params.rdma_config.height = extd_dpi_params.dispif_config.dpi.height;
  978. }
  979. return 0;
  980. }
  981. void dpi_dvt_parameters(DPI_U8 arg)
  982. {
  983. DPI_POLARITY clk_pol, de_pol, hsync_pol, vsync_pol;
  984. DPI_U32 dpi_clock = 0;
  985. DPI_U32 dpi_clk_div, dpi_clk_duty, hsync_pulse_width, hsync_back_porch, hsync_front_porch,
  986. vsync_pulse_width, vsync_back_porch, vsync_front_porch, intermediat_buffer_num;
  987. switch (arg) {
  988. case HDMI_VIDEO_720x480p_60Hz:
  989. {
  990. #if defined(MHL_SII8338) || defined(MHL_SII8348)
  991. clk_pol = HDMI_POLARITY_FALLING;
  992. #else
  993. clk_pol = HDMI_POLARITY_RISING;
  994. #endif
  995. de_pol = HDMI_POLARITY_RISING;
  996. hsync_pol = HDMI_POLARITY_RISING;
  997. vsync_pol = HDMI_POLARITY_RISING;
  998. dpi_clk_div = 2;
  999. hsync_pulse_width = 62;
  1000. hsync_back_porch = 60;
  1001. hsync_front_porch = 16;
  1002. vsync_pulse_width = 6;
  1003. vsync_back_porch = 30;
  1004. vsync_front_porch = 9;
  1005. DPI_DVT_Context.bg_height =
  1006. ((480 * DPI_DVT_Context.scaling_factor) / 100 >> 2) << 2;
  1007. DPI_DVT_Context.bg_width =
  1008. ((720 * DPI_DVT_Context.scaling_factor) / 100 >> 2) << 2;
  1009. DPI_DVT_Context.hdmi_width = 720 - DPI_DVT_Context.bg_width;
  1010. DPI_DVT_Context.hdmi_height = 480 - DPI_DVT_Context.bg_height;
  1011. DPI_DVT_Context.output_video_resolution = HDMI_VIDEO_720x480p_60Hz;
  1012. dpi_clock = 27027;
  1013. break;
  1014. }
  1015. case HDMI_VIDEO_720x480i_60Hz:
  1016. {
  1017. #if defined(MHL_SII8338) || defined(MHL_SII8348)
  1018. clk_pol = HDMI_POLARITY_FALLING;
  1019. #else
  1020. clk_pol = HDMI_POLARITY_RISING;
  1021. #endif
  1022. de_pol = HDMI_POLARITY_RISING;
  1023. hsync_pol = HDMI_POLARITY_RISING;
  1024. vsync_pol = HDMI_POLARITY_RISING;
  1025. dpi_clk_div = 2;
  1026. hsync_pulse_width = 124 / 2;
  1027. hsync_back_porch = 114 / 2;
  1028. hsync_front_porch = 38 / 2;
  1029. vsync_pulse_width = 6;
  1030. vsync_back_porch = 30;
  1031. vsync_front_porch = 9;
  1032. DPI_DVT_Context.bg_height =
  1033. ((480 * DPI_DVT_Context.scaling_factor) / 100 >> 2) << 2;
  1034. DPI_DVT_Context.bg_width =
  1035. ((1440 / 2 * DPI_DVT_Context.scaling_factor) / 100 >> 2) << 2;
  1036. DPI_DVT_Context.hdmi_width = 1440 / 2 - DPI_DVT_Context.bg_width;
  1037. DPI_DVT_Context.hdmi_height = 480 - DPI_DVT_Context.bg_height;
  1038. DPI_DVT_Context.output_video_resolution = HDMI_VIDEO_720x480i_60Hz;
  1039. dpi_clock = 27027;
  1040. break;
  1041. }
  1042. case HDMI_VIDEO_720x480i_60Hz:
  1043. {
  1044. #if defined(MHL_SII8338) || defined(MHL_SII8348)
  1045. clk_pol = HDMI_POLARITY_FALLING;
  1046. #else
  1047. clk_pol = HDMI_POLARITY_RISING;
  1048. #endif
  1049. de_pol = HDMI_POLARITY_RISING;
  1050. hsync_pol = HDMI_POLARITY_RISING;
  1051. vsync_pol = HDMI_POLARITY_RISING;
  1052. dpi_clk_div = 2;
  1053. hsync_pulse_width = 124 / 2;
  1054. hsync_back_porch = 114 / 2;
  1055. hsync_front_porch = 38 / 2;
  1056. vsync_pulse_width = 6;
  1057. vsync_back_porch = 30;
  1058. vsync_front_porch = 9;
  1059. DPI_DVT_Context.bg_height =
  1060. ((480 * DPI_DVT_Context.scaling_factor) / 100 >> 2) << 2;
  1061. DPI_DVT_Context.bg_width =
  1062. ((1440 / 2 * DPI_DVT_Context.scaling_factor) / 100 >> 2) << 2;
  1063. DPI_DVT_Context.hdmi_width = 1440 / 2 - DPI_DVT_Context.bg_width;
  1064. DPI_DVT_Context.hdmi_height = 480 - DPI_DVT_Context.bg_height;
  1065. DPI_DVT_Context.output_video_resolution = HDMI_VIDEO_720x480i_60Hz;
  1066. dpi_clock = 27027;
  1067. break;
  1068. }
  1069. case HDMI_VIDEO_1280x720p_60Hz:
  1070. {
  1071. clk_pol = HDMI_POLARITY_RISING;
  1072. de_pol = HDMI_POLARITY_RISING;
  1073. #if defined(HDMI_TDA19989)
  1074. hsync_pol = HDMI_POLARITY_FALLING;
  1075. #else
  1076. hsync_pol = HDMI_POLARITY_FALLING;
  1077. #endif
  1078. vsync_pol = HDMI_POLARITY_FALLING;
  1079. #if defined(MHL_SII8338) || defined(MHL_SII8348)
  1080. clk_pol = HDMI_POLARITY_FALLING;
  1081. de_pol = HDMI_POLARITY_RISING;
  1082. hsync_pol = HDMI_POLARITY_FALLING;
  1083. vsync_pol = HDMI_POLARITY_FALLING;
  1084. #endif
  1085. dpi_clk_div = 2;
  1086. hsync_pulse_width = 40;
  1087. hsync_back_porch = 220;
  1088. hsync_front_porch = 110;
  1089. vsync_pulse_width = 5;
  1090. vsync_back_porch = 20;
  1091. vsync_front_porch = 5;
  1092. dpi_clock = 74250;
  1093. DPI_DVT_Context.bg_height =
  1094. ((720 * DPI_DVT_Context.scaling_factor) / 100 >> 2) << 2;
  1095. DPI_DVT_Context.bg_width =
  1096. ((1280 * DPI_DVT_Context.scaling_factor) / 100 >> 2) << 2;
  1097. DPI_DVT_Context.hdmi_width = 1280 - DPI_DVT_Context.bg_width;
  1098. DPI_DVT_Context.hdmi_height = 720 - DPI_DVT_Context.bg_height;
  1099. DPI_DVT_Context.output_video_resolution = HDMI_VIDEO_1280x720p_60Hz;
  1100. break;
  1101. }
  1102. case HDMI_VIDEO_1920x1080p_30Hz:
  1103. {
  1104. #if defined(MHL_SII8338) || defined(MHL_SII8348)
  1105. clk_pol = HDMI_POLARITY_FALLING;
  1106. de_pol = HDMI_POLARITY_RISING;
  1107. hsync_pol = HDMI_POLARITY_FALLING;
  1108. vsync_pol = HDMI_POLARITY_FALLING;
  1109. #else
  1110. clk_pol = HDMI_POLARITY_RISING;
  1111. de_pol = HDMI_POLARITY_RISING;
  1112. hsync_pol = HDMI_POLARITY_FALLING;
  1113. vsync_pol = HDMI_POLARITY_FALLING;
  1114. #endif
  1115. dpi_clk_div = 2;
  1116. hsync_pulse_width = 44;
  1117. hsync_back_porch = 148;
  1118. hsync_front_porch = 88;
  1119. vsync_pulse_width = 5;
  1120. vsync_back_porch = 36;
  1121. vsync_front_porch = 4;
  1122. DPI_DVT_Context.bg_height =
  1123. ((1080 * DPI_DVT_Context.scaling_factor) / 100 >> 2) << 2;
  1124. DPI_DVT_Context.bg_width =
  1125. ((1920 * DPI_DVT_Context.scaling_factor) / 100 >> 2) << 2;
  1126. DPI_DVT_Context.hdmi_width = 1920 - DPI_DVT_Context.bg_width;
  1127. DPI_DVT_Context.hdmi_height = 1080 - DPI_DVT_Context.bg_height;
  1128. DPI_DVT_Context.output_video_resolution = HDMI_VIDEO_1920x1080p_30Hz;
  1129. dpi_clock = 74250;
  1130. break;
  1131. }
  1132. case HDMI_VIDEO_1920x1080p_60Hz:
  1133. {
  1134. #if defined(MHL_SII8338) || defined(MHL_SII8348)
  1135. clk_pol = HDMI_POLARITY_FALLING;
  1136. de_pol = HDMI_POLARITY_RISING;
  1137. hsync_pol = HDMI_POLARITY_FALLING;
  1138. vsync_pol = HDMI_POLARITY_FALLING;
  1139. #else
  1140. clk_pol = HDMI_POLARITY_RISING;
  1141. de_pol = HDMI_POLARITY_RISING;
  1142. hsync_pol = HDMI_POLARITY_FALLING;
  1143. vsync_pol = HDMI_POLARITY_FALLING;
  1144. #endif
  1145. dpi_clk_div = 2;
  1146. hsync_pulse_width = 44;
  1147. hsync_back_porch = 148;
  1148. hsync_front_porch = 88;
  1149. vsync_pulse_width = 5;
  1150. vsync_back_porch = 36;
  1151. vsync_front_porch = 4;
  1152. DPI_DVT_Context.bg_height =
  1153. ((1080 * DPI_DVT_Context.scaling_factor) / 100 >> 2) << 2;
  1154. DPI_DVT_Context.bg_width =
  1155. ((1920 * DPI_DVT_Context.scaling_factor) / 100 >> 2) << 2;
  1156. DPI_DVT_Context.hdmi_width = 1920 - DPI_DVT_Context.bg_width;
  1157. DPI_DVT_Context.hdmi_height = 1080 - DPI_DVT_Context.bg_height;
  1158. DPI_DVT_Context.output_video_resolution = HDMI_VIDEO_1920x1080p_60Hz;
  1159. dpi_clock = 148500;
  1160. break;
  1161. }
  1162. case HDMI_VIDEO_1920x1080i_60Hz:
  1163. {
  1164. #if defined(MHL_SII8338) || defined(MHL_SII8348)
  1165. clk_pol = HDMI_POLARITY_FALLING;
  1166. de_pol = HDMI_POLARITY_RISING;
  1167. hsync_pol = HDMI_POLARITY_FALLING;
  1168. vsync_pol = HDMI_POLARITY_FALLING;
  1169. #else
  1170. clk_pol = HDMI_POLARITY_RISING;
  1171. de_pol = HDMI_POLARITY_RISING;
  1172. hsync_pol = HDMI_POLARITY_FALLING;
  1173. vsync_pol = HDMI_POLARITY_FALLING;
  1174. #endif
  1175. dpi_clk_div = 2;
  1176. hsync_pulse_width = 44;
  1177. hsync_back_porch = 148;
  1178. hsync_front_porch = 88;
  1179. vsync_pulse_width = 5;
  1180. vsync_back_porch = 36;
  1181. vsync_front_porch = 4;
  1182. DPI_DVT_Context.bg_height =
  1183. ((1080 * DPI_DVT_Context.scaling_factor) / 100 >> 2) << 2;
  1184. DPI_DVT_Context.bg_width =
  1185. ((1920 * DPI_DVT_Context.scaling_factor) / 100 >> 2) << 2;
  1186. DPI_DVT_Context.hdmi_width = 1920 - DPI_DVT_Context.bg_width;
  1187. DPI_DVT_Context.hdmi_height = 1080 - DPI_DVT_Context.bg_height;
  1188. DPI_DVT_Context.output_video_resolution = HDMI_VIDEO_1920x1080i_60Hz;
  1189. dpi_clock = 74250;
  1190. break;
  1191. }
  1192. default:
  1193. break;
  1194. }
  1195. extd_dpi_params.dispif_config.dpi.width = DPI_DVT_Context.hdmi_width;
  1196. extd_dpi_params.dispif_config.dpi.height = DPI_DVT_Context.hdmi_height;
  1197. extd_dpi_params.dispif_config.dpi.bg_width = DPI_DVT_Context.bg_width;
  1198. extd_dpi_params.dispif_config.dpi.bg_height = DPI_DVT_Context.bg_height;
  1199. extd_dpi_params.dispif_config.dpi.clk_pol = clk_pol;
  1200. extd_dpi_params.dispif_config.dpi.de_pol = de_pol;
  1201. extd_dpi_params.dispif_config.dpi.vsync_pol = vsync_pol;
  1202. extd_dpi_params.dispif_config.dpi.hsync_pol = hsync_pol;
  1203. extd_dpi_params.dispif_config.dpi.hsync_pulse_width = hsync_pulse_width;
  1204. extd_dpi_params.dispif_config.dpi.hsync_back_porch = hsync_back_porch;
  1205. extd_dpi_params.dispif_config.dpi.hsync_front_porch = hsync_front_porch;
  1206. extd_dpi_params.dispif_config.dpi.vsync_pulse_width = vsync_pulse_width;
  1207. extd_dpi_params.dispif_config.dpi.vsync_back_porch = vsync_back_porch;
  1208. extd_dpi_params.dispif_config.dpi.vsync_front_porch = vsync_front_porch;
  1209. extd_dpi_params.dispif_config.dpi.format = 0;
  1210. extd_dpi_params.dispif_config.dpi.rgb_order = 0;
  1211. extd_dpi_params.dispif_config.dpi.i2x_en = true;
  1212. extd_dpi_params.dispif_config.dpi.i2x_edge = 2;
  1213. extd_dpi_params.dispif_config.dpi.embsync = false;
  1214. extd_dpi_params.dispif_config.dpi.dpi_clock = dpi_clock;
  1215. DPI_DVT_LOG_W("dpi_dvt_parameters:%d\n", arg);
  1216. }
  1217. /*****************************Basic Function End********************************************/
  1218. void dvt_dump_ext_dpi_parameters(void)
  1219. {
  1220. DPI_DVT_LOG_W("extd_dpi_params.dispif_config.dpi.width: %d\n",
  1221. extd_dpi_params.dispif_config.dpi.width);
  1222. DPI_DVT_LOG_W("extd_dpi_params.dispif_config.dpi.height: %d\n",
  1223. extd_dpi_params.dispif_config.dpi.height);
  1224. DPI_DVT_LOG_W("extd_dpi_params.dispif_config.dpi.bg_width: %d\n",
  1225. extd_dpi_params.dispif_config.dpi.bg_width);
  1226. DPI_DVT_LOG_W("extd_dpi_params.dispif_config.dpi.bg_height: %d\n",
  1227. extd_dpi_params.dispif_config.dpi.bg_height);
  1228. DPI_DVT_LOG_W("extd_dpi_params.dispif_config.dpi.clk_pol: %d\n",
  1229. extd_dpi_params.dispif_config.dpi.clk_pol);
  1230. DPI_DVT_LOG_W("extd_dpi_params.dispif_config.dpi.de_pol: %d\n",
  1231. extd_dpi_params.dispif_config.dpi.de_pol);
  1232. DPI_DVT_LOG_W("extd_dpi_params.dispif_config.dpi.vsync_pol: %d\n",
  1233. extd_dpi_params.dispif_config.dpi.vsync_pol);
  1234. DPI_DVT_LOG_W("extd_dpi_params.dispif_config.dpi.hsync_pol: %d\n",
  1235. extd_dpi_params.dispif_config.dpi.hsync_pol);
  1236. DPI_DVT_LOG_W("extd_dpi_params.dispif_config.dpi.hsync_pulse_width: %d\n",
  1237. extd_dpi_params.dispif_config.dpi.hsync_pulse_width);
  1238. DPI_DVT_LOG_W("extd_dpi_params.dispif_config.dpi.hsync_back_porch: %d\n",
  1239. extd_dpi_params.dispif_config.dpi.hsync_back_porch);
  1240. DPI_DVT_LOG_W("extd_dpi_params.dispif_config.dpi.hsync_front_porch: %d\n",
  1241. extd_dpi_params.dispif_config.dpi.hsync_front_porch);
  1242. DPI_DVT_LOG_W("extd_dpi_params.dispif_config.dpi.vsync_pulse_width: %d\n",
  1243. extd_dpi_params.dispif_config.dpi.vsync_pulse_width);
  1244. DPI_DVT_LOG_W("extd_dpi_params.dispif_config.dpi.vsync_back_porch: %d\n",
  1245. extd_dpi_params.dispif_config.dpi.vsync_back_porch);
  1246. DPI_DVT_LOG_W("extd_dpi_params.dispif_config.dpi.vsync_front_porch: %d\n",
  1247. extd_dpi_params.dispif_config.dpi.vsync_front_porch);
  1248. DPI_DVT_LOG_W("extd_dpi_params.dispif_config.dpi.format: %d\n",
  1249. extd_dpi_params.dispif_config.dpi.format);
  1250. DPI_DVT_LOG_W("extd_dpi_params.dispif_config.dpi.rgb_order: %d\n",
  1251. extd_dpi_params.dispif_config.dpi.rgb_order);
  1252. DPI_DVT_LOG_W("extd_dpi_params.dispif_config.dpi.i2x_en: %d\n",
  1253. extd_dpi_params.dispif_config.dpi.i2x_en);
  1254. DPI_DVT_LOG_W("extd_dpi_params.dispif_config.dpi.i2x_edge: %d\n",
  1255. extd_dpi_params.dispif_config.dpi.i2x_edge);
  1256. DPI_DVT_LOG_W("extd_dpi_params.dispif_config.dpi.embsync: %d\n",
  1257. extd_dpi_params.dispif_config.dpi.embsync);
  1258. DPI_DVT_LOG_W("extd_dpi_params.dispif_config.dpi.dpi_clock: %d\n",
  1259. extd_dpi_params.dispif_config.dpi.dpi_clock);
  1260. }
  1261. DPI_I32 dvt_copy_file_data(void *ptr, DPI_U32 resolution)
  1262. {
  1263. DPI_U32 offset = 0;
  1264. struct file *filp = NULL;
  1265. struct inode *inode;
  1266. mm_segment_t fs;
  1267. off_t fsize;
  1268. DPI_DVT_LOG_W("dvt_copy_file_data, resolution: %d\n", resolution);
  1269. /*
  1270. if(resolution == HDMI_VIDEO_1280x720p_60Hz)
  1271. memcpy(ptr, kara_1280x720, 2764800);
  1272. */
  1273. return 0;
  1274. }
  1275. DPI_I32 dvt_allocate_buffer(DPI_U32 resolution, HW_MODULE_Type hw_type)
  1276. {
  1277. DPI_I32 ret = 0;
  1278. M4U_PORT_STRUCT m4uport;
  1279. m4u_client_t *client = NULL;
  1280. DPI_I32 M4U_PORT = M4U_PORT_UNKNOWN;
  1281. DPI_U32 hdmiPixelSize =
  1282. extd_dpi_params.dispif_config.dpi.width * extd_dpi_params.dispif_config.dpi.height;
  1283. DPI_U32 hdmiDataSize = hdmiPixelSize * 3;
  1284. DPI_U32 hdmiBufferSize = hdmiDataSize;
  1285. DPI_DVT_LOG_W("dvt_allocate_buffer, width: %d, height: %d\n",
  1286. extd_dpi_params.dispif_config.dpi.width,
  1287. extd_dpi_params.dispif_config.dpi.height);
  1288. data_va = (DPI_U64) vmalloc(hdmiBufferSize);
  1289. if (((void *)data_va) == NULL) {
  1290. DDPERR("vmalloc %d bytes fail\n", hdmiBufferSize);
  1291. return -1;
  1292. }
  1293. memset((void *)data_va, 0, hdmiBufferSize);
  1294. client = m4u_create_client();
  1295. if (IS_ERR_OR_NULL(client)) {
  1296. DDPERR("create client fail!\n");
  1297. return -1;
  1298. }
  1299. if (hw_type == M4U_FOR_RDMA1)
  1300. M4U_PORT = M4U_PORT_DISP_RDMA1;
  1301. #ifdef DPI_DVT_TEST_SUPPORT
  1302. else if (hw_type == M4U_FOR_RDMA0)
  1303. M4U_PORT = M4U_PORT_DISP_RDMA0;
  1304. if (hw_type == M4U_FOR_OVL0)
  1305. M4U_PORT = M4U_PORT_DISP_OVL0;
  1306. else if (hw_type == M4U_FOR_OVL1)
  1307. M4U_PORT = M4U_PORT_DISP_OVL1;
  1308. #endif
  1309. m4u_alloc_mva(client, M4U_PORT, data_va, 0, hdmiBufferSize, M4U_PROT_READ | M4U_PROT_WRITE,
  1310. 0, &data_mva);
  1311. memset((void *)&m4uport, 0, sizeof(M4U_PORT_STRUCT));
  1312. m4uport.ePortID = M4U_PORT;
  1313. m4uport.Virtuality = 1;
  1314. m4uport.domain = 0;
  1315. m4uport.Security = 0;
  1316. m4uport.Distance = 1;
  1317. m4uport.Direction = 0;
  1318. m4u_config_port(&m4uport);
  1319. DPI_DVT_LOG_W("resolution %d\n", resolution);
  1320. ret = dvt_copy_file_data(data_va, resolution);
  1321. return ret;
  1322. }
  1323. DPI_I32 dvt_start_rdma_to_dpi(DPI_U32 resolution, DPI_U32 timeS, DPI_U32 caseNum)
  1324. {
  1325. DPI_I32 ret = 0;
  1326. DPI_DVT_LOG_W("set Mutex and connect path\n");
  1327. dvt_connect_path(NULL);
  1328. dvt_mutex_set(dvt_acquire_mutex(), NULL);
  1329. DPI_DVT_LOG_W("top clock on\n");
  1330. dvt_ddp_path_top_clock_on();
  1331. DPI_DVT_LOG_W("module init\n");
  1332. ddp_driver_dpi.init(DISP_MODULE_DPI, NULL);
  1333. ddp_driver_rdma.init(DISP_MODULE_RDMA_SHORT, NULL);
  1334. DPI_DVT_LOG_W("module power on\n");
  1335. ddp_driver_dpi.power_on(DISP_MODULE_DPI, NULL);
  1336. ddp_driver_rdma.power_on(DISP_MODULE_RDMA_SHORT, NULL);
  1337. DPI_DVT_LOG_W("module config\n");
  1338. ddp_driver_dpi.config(DISP_MODULE_DPI, &extd_dpi_params, NULL);
  1339. ret = dvt_allocate_buffer(resolution, M4U_FOR_RDMA1);
  1340. if (ret < 0) {
  1341. DDPERR("dvt_allocate_buffer error: ret: %d\n", ret);
  1342. return ret;
  1343. }
  1344. dvt_init_RDMA_param(RDMA_MODE_MEMORY);
  1345. ddp_driver_rdma.config(DISP_MODULE_RDMA_SHORT, &extd_rdma_params, NULL);
  1346. DISP_REG_SET(NULL, 1 * DISP_RDMA_INDEX_OFFSET + DISP_REG_RDMA_SIZE_CON_0, 0x00000500);
  1347. DISP_REG_SET(NULL, 1 * DISP_RDMA_INDEX_OFFSET + DISP_REG_RDMA_MEM_CON, 0x010);
  1348. /*configRDMASwap(0, 1); *//*input_swap, format 11:RGB, 01 BGR */
  1349. DPI_DVT_LOG_W("module reset\n");
  1350. dvt_mutex_reset(NULL, dvt_acquire_mutex());
  1351. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  1352. ddp_driver_rdma.reset(DISP_MODULE_RDMA_SHORT, NULL);
  1353. DPI_DVT_LOG_W("module trigger\n");
  1354. dvt_mutex_enable(NULL, dvt_acquire_mutex());
  1355. ddp_driver_dpi.trigger(DISP_MODULE_DPI, NULL);
  1356. /*ddp_driver_rdma.trigger(DISP_MODULE_RDMA_SHORT, NULL); */
  1357. DPI_DVT_LOG_W("module start\n");
  1358. ddp_driver_rdma.start(DISP_MODULE_RDMA_SHORT, NULL);
  1359. ddp_driver_dpi.start(DISP_MODULE_DPI, NULL);
  1360. #ifdef VENDOR_CHIP_DRIVER
  1361. /*hdmi_drv->video_config(resolution, 0, 0); */
  1362. #endif
  1363. DPI_DVT_LOG_W("module dump_info\n");
  1364. ddp_driver_dpi.dump_info(DISP_MODULE_DPI, 1);
  1365. ddp_driver_rdma.dump_info(DISP_MODULE_RDMA_SHORT, 1);
  1366. dvt_mutex_dump_reg();
  1367. msleep(timeS * 1000);
  1368. DPI_DVT_LOG_W("module stop\n");
  1369. dvt_mutex_disenable(NULL, dvt_acquire_mutex());
  1370. ddp_driver_dpi.stop(DISP_MODULE_DPI, NULL);
  1371. ddp_driver_rdma.stop(DISP_MODULE_RDMA_SHORT, NULL);
  1372. DPI_DVT_LOG_W("module reset\n");
  1373. dvt_mutex_reset(NULL, dvt_acquire_mutex());
  1374. ddp_driver_dpi.reset(DISP_MODULE_DPI, NULL);
  1375. ddp_driver_rdma.reset(DISP_MODULE_RDMA_SHORT, NULL);
  1376. DPI_DVT_LOG_W("module power off\n");
  1377. ddp_driver_dpi.power_off(DISP_MODULE_DPI, NULL);
  1378. ddp_driver_rdma.power_off(DISP_MODULE_RDMA_SHORT, NULL);
  1379. DPI_DVT_LOG_W("top clock off\n");
  1380. dvt_ddp_path_top_clock_off();
  1381. DPI_DVT_LOG_W("set Mutex and disconnect path\n");
  1382. dvt_disconnect_path(NULL);
  1383. dvt_mutex_set(dvt_acquire_mutex(), NULL);
  1384. if (data_va)
  1385. vfree(data_va);
  1386. return 0;
  1387. }
  1388. /*******************************Test Case Start***********************************/
  1389. static DPI_I32 dpi_dvt_testcase_4_timing(DPI_U32 resolution)
  1390. {
  1391. DPI_DVT_LOG_W("dpi_dvt_testcase_4_timing, resolution: %d\n", resolution);
  1392. dpi_dvt_parameters(resolution);
  1393. dvt_dump_ext_dpi_parameters();
  1394. dvt_start_rdma_to_dpi(resolution, 20);
  1395. return 0;
  1396. }
  1397. #ifdef DPI_DVT_TEST_SUPPORT
  1398. static DPI_I32 dpi_dvt_testcase_1_RB_Swap(DPI_U32 resolution, DPI_U32 swap)
  1399. {
  1400. DPI_DVT_LOG_W("dpi_dvt_testcase_1_RB_Swap, swap: %d. (0: RGB,1: BGR)\n", swap);
  1401. /* LCM_COLOR_ORDER_BGR or LCM_COLOR_ORDER_RGB */
  1402. dpi_dvt_parameters(resolution);
  1403. extd_dpi_params.dispif_config.dpi.rgb_order = swap;
  1404. dvt_dump_ext_dpi_parameters();
  1405. dpi_dvt_show_pattern(COLOR_BAR_PATTERN, 30 * 60 * 60)
  1406. return 0;
  1407. }
  1408. static DPI_I32 dpi_dvt_testcase_2_BG(DPI_U32 BG_factor)
  1409. {
  1410. DPI_DVT_LOG_W("dpi_dvt_testcase_2_BG, BG_factor: %d\n", BG_factor);
  1411. DPI_DVT_Context.scaling_factor = BG_factor;
  1412. dpi_dvt_parameters(DPI_DVT_Context.output_video_resolution);
  1413. dvt_dump_ext_dpi_parameters();
  1414. dpi_dvt_show_pattern(COLOR_BAR_PATTERN, 10);
  1415. return 0;
  1416. }
  1417. static DPI_I32 dpi_dvt_testcase_3_pattern(DPI_U32 pattern)
  1418. {
  1419. /* 0x01 -> 0x71 */
  1420. DPI_DVT_LOG_W("dpi_dvt_testcase_3_pattern, pattern: %d\n", pattern);
  1421. DPI_DVT_Context.output_video_resolution = HDMI_VIDEO_1920x1080p_30Hz;
  1422. dpi_dvt_parameters(DPI_DVT_Context.output_video_resolution);
  1423. dvt_dump_ext_dpi_parameters();
  1424. dpi_dvt_show_pattern(pattern, 20);
  1425. return 0;
  1426. }
  1427. static DPI_I32 dpi_dvt_testcase_5_interlace(DPI_U32 resolution)
  1428. {
  1429. DPI_DVT_LOG_W("dpi_dvt_testcase_5_interlace, resolution: %d\n", resolution);
  1430. dpi_dvt_parameters(resolution);
  1431. dvt_dump_ext_dpi_parameters();
  1432. dvt_start_rdma_to_dpi_for_interlace(resolution, 30);
  1433. return 0;
  1434. }
  1435. static DPI_I32 dpi_dvt_testcase_6_yuv(DPI_U32 resolution, AviColorSpace_e format)
  1436. {
  1437. DPI_DVT_LOG_W("dpi_dvt_testcase_6_yuv444, resolution: %d, format: %d\n", resolution,
  1438. format);
  1439. dpi_dvt_parameters(resolution);
  1440. dvt_dump_ext_dpi_parameters();
  1441. dvt_start_rdma_to_dpi_for_RGB2YUV(resolution, 30, format);
  1442. return 0;
  1443. }
  1444. static DPI_I32 dpi_dvt_testcase_7_3D(DPI_U32 resolution)
  1445. {
  1446. DPI_DVT_LOG_W("dpi_dvt_testcase_7_3D, resolution: %d\n", resolution);
  1447. /*
  1448. //for DPI DVT 3D Display
  1449. //hw_context->valid_audio_if = 0;
  1450. //hw_context->valid_vsif = 0;
  1451. //hw_context->valid_avif = 0;
  1452. //hw_context->valid_3d = 0;
  1453. */
  1454. dpi_dvt_parameters(resolution);
  1455. extd_dpi_params.dispif_config.dpi.dpi_clock *= 2;
  1456. dvt_dump_ext_dpi_parameters();
  1457. /*test_type = Test_3D; */
  1458. dvt_start_rdma_to_dpi_for_3D(resolution, 20);
  1459. return 0;
  1460. }
  1461. static DPI_I32 dpi_dvt_testcase_8_3D_interlace(DPI_U32 resolution)
  1462. {
  1463. DPI_DVT_LOG_W("dpi_dvt_testcase_8_3D_interlace, resolution: %d\n", resolution);
  1464. dpi_dvt_parameters(resolution);
  1465. extd_dpi_params.dispif_config.dpi.dpi_clock *= 2;
  1466. dvt_dump_ext_dpi_parameters();
  1467. /*test_type = Test_3D; */
  1468. dvt_start_rdma_to_dpi_for_3D_interlace(resolution, 30);
  1469. return 0;
  1470. }
  1471. static DPI_I32 dpi_dvt_testcase_9_Single_Edge(DPI_U32 resolution)
  1472. {
  1473. DPI_DVT_LOG_W("dpi_dvt_testcase_9_Single_Edge, resolution: %d\n", resolution);
  1474. dpi_dvt_parameters(resolution);
  1475. dvt_dump_ext_dpi_parameters();
  1476. dvt_start_rdma_to_dpi_for_Single_Edge(resolution, 20);
  1477. return 0;
  1478. }
  1479. static DPI_I32 dpi_dvt_testcase_10_checkSum(DPI_U32 resolution)
  1480. {
  1481. DPI_DVT_LOG_W("dpi_dvt_testcase_10_checkSum, resolution: %d\n", resolution);
  1482. dpi_dvt_parameters(resolution);
  1483. dvt_dump_ext_dpi_parameters();
  1484. dvt_start_rdma_to_dpi_for_checkSum(resolution, 30);
  1485. return 0;
  1486. }
  1487. static DPI_I32 dpi_dvt_testcase_11_ovl1_to_dpi(DPI_U32 resolution)
  1488. {
  1489. DPI_DVT_LOG_W("dpi_dvt_testcase_11_ovl1_to_dpi, resolution: %d\n", resolution);
  1490. dpi_dvt_parameters(resolution);
  1491. dvt_dump_ext_dpi_parameters();
  1492. dvt_start_ovl1_to_dpi(resolution, 30);
  1493. return 0;
  1494. }
  1495. static DPI_I32 dpi_dvt_testcase_12_repetition(DPI_U32 resolution)
  1496. {
  1497. DPI_DVT_LOG_W("dpi_dvt_testcase_12_repetition, resolution: %d\n", resolution);
  1498. dpi_dvt_parameters(resolution);
  1499. dvt_dump_ext_dpi_parameters();
  1500. /*test_type = Test_Repeation; */
  1501. dvt_start_rdma_to_dpi_for_interlace(resolution, 98);
  1502. return 0;
  1503. }
  1504. static DPI_I32 dpi_dvt_testcase_13_embsync(DPI_U32 resolution)
  1505. {
  1506. DPI_DVT_LOG_W("dpi_dvt_testcase_13_embsync, resolution: %d\n", resolution);
  1507. dpi_dvt_parameters(resolution);
  1508. dvt_dump_ext_dpi_parameters();
  1509. dvt_start_rdma_to_dpi_for_embsync(resolution, 10);
  1510. return 0;
  1511. }
  1512. static DPI_I32 dpi_dvt_testcase_14_color_space_transform(DPI_U32 resolution)
  1513. {
  1514. DPI_DVT_LOG_W("dpi_dvt_testcase_14_color_space_transform, resolution: %d\n", resolution);
  1515. dpi_dvt_parameters(resolution);
  1516. dvt_dump_ext_dpi_parameters();
  1517. dvt_start_rdma_to_dpi_for_color_space_transform(resolution, 10);
  1518. return 0;
  1519. }
  1520. static DPI_I32 dpi_dvt_testcase_15_limit_range_transform(DPI_U32 resolution)
  1521. {
  1522. DPI_DVT_LOG_W("dpi_dvt_testcase_15_limit_range_transform, resolution: %d\n", resolution);
  1523. dpi_dvt_parameters(resolution);
  1524. dvt_dump_ext_dpi_parameters();
  1525. /*test_type = Test_Limit_Range; */
  1526. dpi_dvt_show_pattern_for_limit_range(0x41, 20);
  1527. return 0;
  1528. }
  1529. static DPI_I32 dpi_dvt_testcase_16_ovl0_to_dpi(DPI_U32 resolution)
  1530. {
  1531. DPI_DVT_LOG_W("dpi_dvt_testcase_16_ovl0_to_dpi, resolution: %d\n", resolution);
  1532. dpi_dvt_parameters(resolution);
  1533. dvt_dump_ext_dpi_parameters();
  1534. dvt_start_ovl0_to_dpi(resolution, 20);
  1535. return 0;
  1536. }
  1537. #endif
  1538. /*******************************Test Case End************************************/
  1539. DPI_I32 dpi_dvt_run_cases(DPI_U32 caseNum)
  1540. {
  1541. switch (caseNum) {
  1542. case 0x08:
  1543. {
  1544. dpi_dvt_testcase_4_timing(HDMI_VIDEO_1280x720p_60Hz);
  1545. break;
  1546. }
  1547. #ifdef DPI_DVT_TEST_SUPPORT
  1548. case 0x1:
  1549. {
  1550. dpi_dvt_testcase_1_RB_Swap(HDMI_VIDEO_1280x720p_60Hz, DPI_COLOR_ORDER_BGR);
  1551. msleep(500);
  1552. dpi_dvt_testcase_1_RB_Swap(HDMI_VIDEO_1920x1080p_30Hz, DPI_COLOR_ORDER_RGB);
  1553. break;
  1554. }
  1555. case 0x02:
  1556. {
  1557. dpi_dvt_testcase_2_BG(10);
  1558. msleep(500);
  1559. dpi_dvt_testcase_2_BG(50);
  1560. msleep(500);
  1561. dpi_dvt_testcase_2_BG(80);
  1562. msleep(500);
  1563. dpi_dvt_testcase_2_BG(100);
  1564. msleep(500);
  1565. dpi_dvt_testcase_2_BG(0);
  1566. break;
  1567. }
  1568. case 0x04:
  1569. {
  1570. dpi_dvt_testcase_3_pattern(100);
  1571. msleep(500);
  1572. /*test_type = Test_Limit_Range; */
  1573. dpi_dvt_testcase_3_pattern(99);
  1574. msleep(500);
  1575. dpi_dvt_testcase_3_pattern(0x41);
  1576. msleep(500);
  1577. dpi_dvt_testcase_3_pattern(0x11);
  1578. msleep(500);
  1579. dpi_dvt_testcase_3_pattern(0x21);
  1580. msleep(500);
  1581. dpi_dvt_testcase_3_pattern(0x31);
  1582. msleep(500);
  1583. dpi_dvt_testcase_3_pattern(0x41);
  1584. msleep(500);
  1585. dpi_dvt_testcase_3_pattern(0x51);
  1586. msleep(500);
  1587. dpi_dvt_testcase_3_pattern(0x61);
  1588. msleep(500);
  1589. dpi_dvt_testcase_3_pattern(0x71);
  1590. break;
  1591. }
  1592. case 0x10:
  1593. {
  1594. dpi_dvt_testcase_5_interlace(HDMI_VIDEO_720x480i_60Hz);
  1595. msleep(500);
  1596. dpi_dvt_testcase_5_interlace(HDMI_VIDEO_1920x1080i_60Hz);
  1597. dpi_dvt_testcase_5_interlace(HDMI_VIDEO_1440x480i_60Hz);
  1598. break;
  1599. dpi_dvt_testcase_5_interlace(HDMI_VIDEO_1920x1080i_60Hz);
  1600. break;
  1601. }
  1602. case 0x20:
  1603. {
  1604. dpi_dvt_testcase_6_yuv(HDMI_VIDEO_1920x1080p_30Hz, acsYCbCr444);
  1605. msleep(500);
  1606. dpi_dvt_testcase_6_yuv(HDMI_VIDEO_1920x1080p_60Hz, acsYCbCr422);
  1607. msleep(500);
  1608. dpi_dvt_testcase_6_yuv(HDMI_VIDEO_1280x720p_60Hz, acsYCbCr444);
  1609. msleep(500);
  1610. break;
  1611. }
  1612. case 0x40:
  1613. {
  1614. dpi_dvt_testcase_7_3D(HDMI_VIDEO_1280x720p_60Hz);
  1615. dpi_dvt_testcase_7_3D(HDMI_VIDEO_720x480p_60Hz);
  1616. break;
  1617. }
  1618. case 0x80:
  1619. {
  1620. dpi_dvt_testcase_8_3D_interlace(HDMI_VIDEO_720x480i_60Hz);
  1621. break;
  1622. }
  1623. case 0x100:
  1624. {
  1625. dpi_dvt_testcase_9_Single_Edge(HDMI_VIDEO_1920x1080p_60Hz);
  1626. break;
  1627. }
  1628. case 0x200:
  1629. {
  1630. dpi_dvt_testcase_10_checkSum(HDMI_VIDEO_1920x1080p_30Hz);
  1631. break;
  1632. }
  1633. case 0x400:
  1634. {
  1635. dpi_dvt_testcase_11_ovl1_to_dpi(HDMI_VIDEO_1920x1080p_60Hz);
  1636. break;
  1637. }
  1638. case 0x800:
  1639. {
  1640. dpi_dvt_testcase_12_repetition(HDMI_VIDEO_720x480i_60Hz);
  1641. break;
  1642. }
  1643. case 0x1000:
  1644. {
  1645. dpi_dvt_testcase_13_embsync(HDMI_VIDEO_1920x1080p_60Hz);
  1646. break;
  1647. }
  1648. case 0x2000:
  1649. {
  1650. dpi_dvt_testcase_14_color_space_transform(HDMI_VIDEO_1920x1080p_60Hz);
  1651. break;
  1652. dpi_dvt_testcase_14_color_space_transform(HDMI_VIDEO_1920x1080p_30Hz);
  1653. break;
  1654. }
  1655. case 0x4000:
  1656. {
  1657. dpi_dvt_testcase_15_limit_range_transform(HDMI_VIDEO_1920x1080p_30Hz);
  1658. break;
  1659. }
  1660. case 0x8000:
  1661. {
  1662. dpi_dvt_testcase_16_ovl0_to_dpi(HDMI_VIDEO_1920x1080p_60Hz);
  1663. break;
  1664. }
  1665. #endif
  1666. default:
  1667. DDPERR("case number is invailed, case: %d\n", caseNum);
  1668. }
  1669. return 0;
  1670. }
  1671. unsigned int dpi_dvt_ioctl(unsigned int arg)
  1672. {
  1673. int ret = 0;
  1674. DPI_U32 flags, tempFlags, move;
  1675. /*get HDMI Driver from vendor floder */
  1676. hdmi_drv = (struct HDMI_DRIVER *)HDMI_GetDriver();
  1677. if (NULL == hdmi_drv) {
  1678. DPI_DVT_LOG_W("[hdmi]%s, hdmi_init fail, can not get hdmi driver handle\n",
  1679. __func__);
  1680. return -1;
  1681. }
  1682. flags = arg;
  1683. tempFlags = 0x1;
  1684. move = 0;
  1685. DPI_DVT_LOG_W("flags: 0x%x\n", flags);
  1686. while (flags) {
  1687. if (flags & 0x1) {
  1688. tempFlags = (tempFlags << move);
  1689. DPI_DVT_LOG_W("tempFlags: 0x%x\n", tempFlags);
  1690. dpi_dvt_run_cases(tempFlags);
  1691. tempFlags = 0x01;
  1692. }
  1693. flags = (flags >> 1);
  1694. move += 1;
  1695. DPI_DVT_LOG_W("flags: 0x%x, move: %d\n", flags, move);
  1696. }
  1697. return ret;
  1698. }
  1699. #else
  1700. unsigned int dpi_dvt_ioctl(unsigned int arg)
  1701. {
  1702. return 0;
  1703. }
  1704. #endif