mt8193hdmicmd.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671
  1. #ifdef HDMI_MT8193_SUPPORT
  2. #include "mt8193hdmicmd.h"
  3. #include "mt8193_ctrl.h"
  4. static unsigned int pdMpegInfoReg[] = {
  5. 0x19c, 0x00000001, /* version */
  6. 0x1A0, 0x00000085, /* type */
  7. 0x1A4, 0x0000000a, /* length */
  8. 0x188, 0x000000dE, /* check sum */
  9. 0x188, 0x00000040,
  10. 0x188, 0x00000050,
  11. 0x188, 0x00000000,
  12. 0x188, 0x00000002,
  13. 0x188, 0x00000000,
  14. 0x188, 0x00000000,
  15. 0x188, 0x00000000,
  16. 0x188, 0x00000000,
  17. 0x188, 0x00000000,
  18. 0x188, 0x00000000
  19. };
  20. static unsigned int pdMpegInfoReg2[] = {
  21. 0x19c, 0x00000001, /* version */
  22. 0x1A0, 0x00000085, /* type */
  23. 0x1A4, 0x0000000a, /* length */
  24. 0x188, 0x000000d4, /* check sum */
  25. 0x188, 0x00000041,
  26. 0x188, 0x00000052,
  27. 0x188, 0x00000003,
  28. 0x188, 0x00000002,
  29. 0x188, 0x00000000,
  30. 0x188, 0x00000000,
  31. 0x188, 0x00000000,
  32. 0x188, 0x00000000,
  33. 0x188, 0x00000000,
  34. 0x188, 0x00000004
  35. };
  36. static unsigned int pdSpdInfoReg[] = {
  37. 0x19c, 0x00000001, /* version */
  38. 0x1A0, 0x00000083, /* type */
  39. 0x1A4, 0x00000019, /* length, 25 bytes */
  40. 0x188, 0x000000d1, /* check sum */
  41. 0x188, 0x00000040,
  42. 0x188, 0x00000050,
  43. 0x188, 0x00000000,
  44. 0x188, 0x00000002,
  45. 0x188, 0x00000000,
  46. 0x188, 0x00000000,
  47. 0x188, 0x00000000,
  48. 0x188, 0x00000000,
  49. 0x188, 0x00000000,
  50. 0x188, 0x00000000,
  51. 0x188, 0x00000000,
  52. 0x188, 0x00000000,
  53. 0x188, 0x00000000,
  54. 0x188, 0x00000000,
  55. 0x188, 0x00000000,
  56. 0x188, 0x00000000,
  57. 0x188, 0x00000000,
  58. 0x188, 0x00000000,
  59. 0x188, 0x00000000,
  60. 0x188, 0x00000000,
  61. 0x188, 0x00000000,
  62. 0x188, 0x00000000,
  63. 0x188, 0x00000000,
  64. 0x188, 0x00000000,
  65. 0x188, 0x00000000
  66. };
  67. static unsigned int pdSpdInfoReg2[] = {
  68. 0x19c, 0x00000001, /* version */
  69. 0x1A0, 0x00000083, /* type */
  70. 0x1A4, 0x00000019, /* length, 25 bytes */
  71. 0x188, 0x000000cf, /* check sum */
  72. 0x188, 0x00000040,
  73. 0x188, 0x00000050,
  74. 0x188, 0x00000000,
  75. 0x188, 0x00000002,
  76. 0x188, 0x00000000,
  77. 0x188, 0x00000000,
  78. 0x188, 0x00000000,
  79. 0x188, 0x00000000,
  80. 0x188, 0x00000000,
  81. 0x188, 0x00000000,
  82. 0x188, 0x00000000,
  83. 0x188, 0x00000000,
  84. 0x188, 0x00000000,
  85. 0x188, 0x00000000,
  86. 0x188, 0x00000000,
  87. 0x188, 0x00000000,
  88. 0x188, 0x00000000,
  89. 0x188, 0x00000000,
  90. 0x188, 0x00000000,
  91. 0x188, 0x00000000,
  92. 0x188, 0x00000000,
  93. 0x188, 0x00000000,
  94. 0x188, 0x00000000,
  95. 0x188, 0x00000000,
  96. 0x188, 0x00000002
  97. };
  98. static unsigned int pdAudioInfoReg[] = {
  99. 0x19c, 0x00000001, /* version */
  100. 0x1A0, 0x00000084, /* type */
  101. 0x1A4, 0x0000000a, /* length */
  102. 0x188, 0x0000006a, /* check sum */
  103. 0x188, 0x00000000,
  104. 0x188, 0x00000000,
  105. 0x188, 0x00000000,
  106. 0x188, 0x00000007,
  107. 0x188, 0x00000000,
  108. 0x188, 0x00000000,
  109. 0x188, 0x00000000,
  110. 0x188, 0x00000000,
  111. 0x188, 0x00000000,
  112. 0x188, 0x00000000
  113. };
  114. static unsigned int pdAudioInfoReg2[] = {
  115. 0x19c, 0x00000001, /* version */
  116. 0x1A0, 0x00000084, /* type */
  117. 0x1A4, 0x0000000a, /* length */
  118. 0x188, 0x00000055, /* check sum */
  119. 0x188, 0x00000000,
  120. 0x188, 0x00000000,
  121. 0x188, 0x00000000,
  122. 0x188, 0x00000007,
  123. 0x188, 0x00000001,
  124. 0x188, 0x00000002,
  125. 0x188, 0x00000003,
  126. 0x188, 0x00000004,
  127. 0x188, 0x00000005,
  128. 0x188, 0x00000006
  129. };
  130. static unsigned int pdVendorSpecInfoReg[] = {
  131. 0x19c, 0x00000001, /* version */
  132. 0x1A0, 0x00000081, /* type */
  133. 0x1A4, 0x0000000a, /* length */
  134. 0x188, 0x000000E2, /* check sum */
  135. 0x188, 0x00000040,
  136. 0x188, 0x00000050,
  137. 0x188, 0x00000000,
  138. 0x188, 0x00000002,
  139. 0x188, 0x00000000,
  140. 0x188, 0x00000000,
  141. 0x188, 0x00000000,
  142. 0x188, 0x00000000,
  143. 0x188, 0x00000000,
  144. 0x188, 0x00000000
  145. };
  146. static unsigned int pdVendorSpecInfoReg2[] = {
  147. 0x19c, 0x00000001, /* version */
  148. 0x1A0, 0x00000081, /* type */
  149. 0x1A4, 0x0000000a, /* length */
  150. 0x188, 0x000000d2, /* check sum */
  151. 0x188, 0x00000040,
  152. 0x188, 0x00000050,
  153. 0x188, 0x00000000,
  154. 0x188, 0x00000002,
  155. 0x188, 0x00000001,
  156. 0x188, 0x00000002,
  157. 0x188, 0x00000003,
  158. 0x188, 0x00000004,
  159. 0x188, 0x00000006,
  160. 0x188, 0x00000000
  161. };
  162. static unsigned int pdGenericInfoReg[] = {
  163. 0x19c, 0x00000001, /* version */
  164. 0x1A0, 0x00000087, /* type */
  165. 0x1A4, 0x0000000a, /* length */
  166. 0x188, 0x000000DC, /* check sum */
  167. 0x188, 0x00000040,
  168. 0x188, 0x00000050,
  169. 0x188, 0x00000000,
  170. 0x188, 0x00000002,
  171. 0x188, 0x00000000,
  172. 0x188, 0x00000000,
  173. 0x188, 0x00000000,
  174. 0x188, 0x00000000,
  175. 0x188, 0x00000000,
  176. 0x188, 0x00000000
  177. };
  178. static unsigned int pdGenericInfoReg2[] = {
  179. 0x19c, 0x00000001, /* version */
  180. 0x1A0, 0x00000087, /* type */
  181. 0x1A4, 0x0000000a, /* length */
  182. 0x188, 0x000000BA, /* check sum */
  183. 0x188, 0x00000041,
  184. 0x188, 0x00000051,
  185. 0x188, 0x00000000,
  186. 0x188, 0x00000002,
  187. 0x188, 0x00000010,
  188. 0x188, 0x00000001,
  189. 0x188, 0x00000002,
  190. 0x188, 0x00000003,
  191. 0x188, 0x00000004,
  192. 0x188, 0x00000006
  193. };
  194. static unsigned int pdACPInfoReg[] = {
  195. 0x19c, 0x00000002, /* version, acp type */
  196. 0x1A0, 0x00000004, /* type */
  197. 0x1A4, 0x00000000, /* length */
  198. 0x188, 0x000000dE, /* check sum, PB0 */
  199. 0x188, 0x00000040,
  200. 0x188, 0x00000050,
  201. 0x188, 0x00000000,
  202. 0x188, 0x00000002
  203. };
  204. static unsigned int pdACPInfoReg2[] = {
  205. 0x19c, 0x00000002, /* version, acp type */
  206. 0x1A0, 0x00000004, /* type */
  207. 0x1A4, 0x00000000, /* length */
  208. 0x188, 0x000000dE, /* check sum, PB0 */
  209. 0x188, 0x00000040,
  210. 0x188, 0x00000050,
  211. 0x188, 0x00000001,
  212. 0x188, 0x00000001
  213. };
  214. static unsigned int pdISRC1InfoReg[] = {
  215. 0x19c, 0x00000002, /* version, ISRC status */
  216. 0x1A0, 0x00000005, /* type */
  217. 0x1A4, 0x00000000, /* length */
  218. 0x188, 0x000000dE, /* check sum, PB0 */
  219. 0x188, 0x00000040,
  220. 0x188, 0x00000050,
  221. 0x188, 0x00000000,
  222. 0x188, 0x00000002
  223. };
  224. static unsigned int pdISRC1InfoReg2[] = {
  225. 0x19c, 0x00000002, /* version, ISRC status */
  226. 0x1A0, 0x00000005, /* type */
  227. 0x1A4, 0x00000000, /* length */
  228. 0x188, 0x000000d0, /* check sum, PB0 */
  229. 0x188, 0x00000041,
  230. 0x188, 0x00000051,
  231. 0x188, 0x00000003,
  232. 0x188, 0x00000001
  233. };
  234. static unsigned int pdISRC2InfoReg[] = {
  235. 0x19c, 0x00000000, /* version, ISRC status */
  236. 0x1A0, 0x00000006, /* type */
  237. 0x1A4, 0x00000000, /* length */
  238. 0x188, 0x000000dE, /* check sum, PB0 */
  239. 0x188, 0x00000040,
  240. 0x188, 0x00000050,
  241. 0x188, 0x00000000,
  242. 0x188, 0x00000002
  243. };
  244. static unsigned int pdISRC2InfoReg2[] = {
  245. 0x19c, 0x00000000, /* version, ISRC status */
  246. 0x1A0, 0x00000006, /* type */
  247. 0x1A4, 0x00000000, /* length */
  248. 0x188, 0x000000d6, /* check sum, PB0 */
  249. 0x188, 0x00000042,
  250. 0x188, 0x00000052,
  251. 0x188, 0x00000002,
  252. 0x188, 0x00000004
  253. };
  254. static unsigned int pdGamutInfoReg[] = {
  255. 0x19c, 0x00000080, /* HB1 version */
  256. 0x1A0, 0x0000000a, /* HB0 type */
  257. 0x1A4, 0x00000030, /* HB2 */
  258. 0x188, 0x00000000 /* PB0 */
  259. };
  260. static unsigned int pdGamutInfoReg2[] = {
  261. 0x19c, 0x00000080, /* HB1 version */
  262. 0x1A0, 0x0000000a, /* HB0 type */
  263. 0x1A4, 0x00000030, /* HB2 */
  264. 0x188, 0x00000001 /* PB0 */
  265. };
  266. void mt8193_InfoframeSetting(unsigned char i1typemode, unsigned char i1typeselect)
  267. {
  268. unsigned int u4Ind;
  269. unsigned char bData;
  270. if ((i1typemode == 0xff) && (i1typeselect == 0xff)) {
  271. hdmi_print("Arg1: Infoframe output type\n");
  272. hdmi_print("1: AVi, 2: Mpeg, 3: SPD\n");
  273. hdmi_print("4: Vendor, 5: Audio, 6: ACP\n");
  274. hdmi_print("7: ISRC1, 8: ISRC2, 9:GENERIC\n");
  275. hdmi_print("10:GAMUT\n");
  276. hdmi_print("Arg2: Infoframe data select\n");
  277. hdmi_print("0: old(default), 1: new;\n");
  278. return;
  279. }
  280. if (i1typeselect == 0) {
  281. switch (i1typemode) {
  282. case 1: /* Avi */
  283. vSendAVIInfoFrame(HDMI_VIDEO_1280x720p_50Hz, 1);
  284. break;
  285. case 2: /* Mpeg */
  286. vWriteHdmiGRLMsk(GRL_CTRL, 0, (1 << 4));
  287. for (u4Ind = 0; u4Ind < (sizeof(pdMpegInfoReg) / 4); u4Ind += 2)
  288. vWriteByteHdmiGRL(pdMpegInfoReg[u4Ind], pdMpegInfoReg[u4Ind + 1]);
  289. vWriteHdmiGRLMsk(GRL_CTRL, (1 << 4), (1 << 4));
  290. break;
  291. case 3:
  292. vWriteHdmiGRLMsk(GRL_CTRL, 0, (1 << 3));
  293. for (u4Ind = 0; u4Ind < (sizeof(pdSpdInfoReg) / 4); u4Ind += 2)
  294. vWriteByteHdmiGRL(pdSpdInfoReg[u4Ind], pdSpdInfoReg[u4Ind + 1]);
  295. vWriteHdmiGRLMsk(GRL_CTRL, (1 << 3), (1 << 3));
  296. break;
  297. case 4:
  298. /* Vendor spec */
  299. vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL, 0, (1 << 0));
  300. for (u4Ind = 0; u4Ind < (sizeof(pdVendorSpecInfoReg) / 4); u4Ind += 2)
  301. vWriteByteHdmiGRL(pdVendorSpecInfoReg[u4Ind],
  302. pdVendorSpecInfoReg[u4Ind + 1]);
  303. vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL, (1 << 0), (1 << 0));
  304. break;
  305. case 5:
  306. vWriteHdmiGRLMsk(GRL_CTRL, 0, (1 << 5));
  307. for (u4Ind = 0; u4Ind < (sizeof(pdAudioInfoReg) / 4); u4Ind += 2)
  308. vWriteByteHdmiGRL(pdAudioInfoReg[u4Ind], pdAudioInfoReg[u4Ind + 1]);
  309. vWriteHdmiGRLMsk(GRL_CTRL, (1 << 5), (1 << 5));
  310. break;
  311. /* ACP */
  312. case 6:
  313. vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL, 0, (1 << 1));
  314. for (u4Ind = 0; u4Ind < (sizeof(pdACPInfoReg) / 4); u4Ind += 2)
  315. vWriteByteHdmiGRL(pdACPInfoReg[u4Ind], pdACPInfoReg[u4Ind + 1]);
  316. for (u4Ind = 0; u4Ind < 23; u4Ind++)
  317. vWriteByteHdmiGRL(GRL_IFM_PORT, 0);
  318. vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL, (1 << 1), (1 << 1));
  319. break;
  320. /* ISCR1 */
  321. case 7:
  322. vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL, 0, (1 << 2));
  323. for (u4Ind = 0; u4Ind < (sizeof(pdISRC1InfoReg) / 4); u4Ind += 2)
  324. vWriteByteHdmiGRL(pdISRC1InfoReg[u4Ind], pdISRC1InfoReg[u4Ind + 1]);
  325. for (u4Ind = 0; u4Ind < 23; u4Ind++)
  326. vWriteByteHdmiGRL(GRL_IFM_PORT, 0);
  327. vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL, (1 << 2), (1 << 2));
  328. break;
  329. case 8:
  330. /* ISCR2 */
  331. vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL, 0, (1 << 3));
  332. for (u4Ind = 0; u4Ind < (sizeof(pdISRC2InfoReg) / 4); u4Ind += 2)
  333. vWriteByteHdmiGRL(pdISRC2InfoReg[u4Ind], pdISRC2InfoReg[u4Ind + 1]);
  334. for (u4Ind = 0; u4Ind < 23; u4Ind++)
  335. vWriteByteHdmiGRL(GRL_IFM_PORT, 0);
  336. vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL, (1 << 3), (1 << 3));
  337. break;
  338. case 9:
  339. /* Generic spec */
  340. vWriteHdmiGRLMsk(GRL_CTRL, 0, (1 << 2));
  341. for (u4Ind = 0; u4Ind < (sizeof(pdGenericInfoReg) / 4); u4Ind += 2)
  342. vWriteByteHdmiGRL(pdGenericInfoReg[u4Ind],
  343. pdGenericInfoReg[u4Ind + 1]);
  344. vWriteHdmiGRLMsk(GRL_CTRL, (1 << 2), (1 << 2));
  345. break;
  346. case 10:
  347. vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL, 0, (1 << 4));
  348. for (u4Ind = 0; u4Ind < (sizeof(pdGamutInfoReg) / 4); u4Ind += 2)
  349. vWriteByteHdmiGRL(pdGamutInfoReg[u4Ind], pdGamutInfoReg[u4Ind + 1]);
  350. for (u4Ind = 0; u4Ind < 27; u4Ind += 1)
  351. vWriteByteHdmiGRL(GRL_IFM_PORT, 0);
  352. vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL, (1 << 4), (1 << 4));
  353. vSendAVIInfoFrame(HDMI_VIDEO_720x480p_60Hz, HDMI_XV_YCC);
  354. break;
  355. case 11:
  356. bData = bReadByteHdmiGRL(GRL_CTRL);
  357. bData &= ~(0x1 << 7);
  358. vWriteByteHdmiGRL(GRL_CTRL, bData);
  359. for (u4Ind = 0; u4Ind < 27; u4Ind += 1)
  360. ;
  361. bData |= (0x1 << 7);
  362. vWriteByteHdmiGRL(GRL_CTRL, bData);
  363. break;
  364. case 12:
  365. bData = bReadByteHdmiGRL(GRL_CFG4);
  366. bData |= (0x1 << 5); /* disable original mute */
  367. bData &= ~(0x1 << 6); /* disable */
  368. vWriteByteHdmiGRL(GRL_CFG4, bData);
  369. for (u4Ind = 0; u4Ind < 27; u4Ind += 1)
  370. ;
  371. bData &= ~(0x1 << 5); /* disable original mute */
  372. bData |= (0x1 << 6); /* disable */
  373. vWriteByteHdmiGRL(GRL_CFG4, bData);
  374. break;
  375. case 13:
  376. bData = bReadByteHdmiGRL(GRL_CFG4);
  377. bData &= ~(0x1 << 5); /* enable original mute */
  378. bData &= ~(0x1 << 6); /* disable */
  379. vWriteByteHdmiGRL(GRL_CFG4, bData);
  380. bData = bReadByteHdmiGRL(GRL_CTRL);
  381. bData &= ~(0x1 << 7);
  382. vWriteByteHdmiGRL(GRL_CTRL, bData);
  383. for (u4Ind = 0; u4Ind < 27; u4Ind += 1)
  384. ;
  385. bData |= (0x1 << 7);
  386. vWriteByteHdmiGRL(GRL_CTRL, bData);
  387. for (u4Ind = 0; u4Ind < 27; u4Ind += 1)
  388. ;
  389. bData &= ~(0x1 << 7);
  390. vWriteByteHdmiGRL(GRL_CTRL, bData);
  391. break;
  392. case 14:
  393. bData = bReadByteHdmiGRL(GRL_CFG4);
  394. bData |= (0x1 << 6); /* disable */
  395. vWriteByteHdmiGRL(GRL_CFG4, bData);
  396. for (u4Ind = 0; u4Ind < 27; u4Ind += 1)
  397. ;
  398. bData &= ~(0x1 << 6);
  399. vWriteByteHdmiGRL(GRL_CFG4, bData);
  400. break;
  401. case 15:
  402. /* vCMDHwNCTSOnOff(FALSE);// change to software NCTS; */
  403. /* vCMDHDMI_NCTS(0x03, 0x12); */
  404. break;
  405. default:
  406. break;
  407. }
  408. } else {
  409. switch (i1typemode) {
  410. case 1: /* Avi */
  411. vSendAVIInfoFrame(HDMI_VIDEO_1280x720p_50Hz, 2);
  412. break;
  413. case 2: /* Mpeg */
  414. vWriteHdmiGRLMsk(GRL_CTRL, 0, (1 << 4));
  415. for (u4Ind = 0; u4Ind < (sizeof(pdMpegInfoReg2) / 4); u4Ind += 2)
  416. vWriteByteHdmiGRL(pdMpegInfoReg2[u4Ind], pdMpegInfoReg2[u4Ind + 1]);
  417. vWriteHdmiGRLMsk(GRL_CTRL, (1 << 4), (1 << 4));
  418. break;
  419. case 3:
  420. vWriteHdmiGRLMsk(GRL_CTRL, 0, (1 << 3));
  421. for (u4Ind = 0; u4Ind < (sizeof(pdSpdInfoReg2) / 4); u4Ind += 2)
  422. vWriteByteHdmiGRL(pdSpdInfoReg2[u4Ind], pdSpdInfoReg2[u4Ind + 1]);
  423. vWriteHdmiGRLMsk(GRL_CTRL, (1 << 3), (1 << 3));
  424. break;
  425. case 4:
  426. /* Vendor spec */
  427. vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL, 0, (1 << 0));
  428. for (u4Ind = 0; u4Ind < (sizeof(pdVendorSpecInfoReg2) / 4); u4Ind += 2)
  429. vWriteByteHdmiGRL(pdVendorSpecInfoReg2[u4Ind],
  430. pdVendorSpecInfoReg2[u4Ind + 1]);
  431. vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL, (1 << 0), (1 << 0));
  432. break;
  433. case 5:
  434. vWriteHdmiGRLMsk(GRL_CTRL, 0, (1 << 5));
  435. for (u4Ind = 0; u4Ind < (sizeof(pdAudioInfoReg2) / 4); u4Ind += 2)
  436. vWriteByteHdmiGRL(pdAudioInfoReg2[u4Ind],
  437. pdAudioInfoReg2[u4Ind + 1]);
  438. vWriteHdmiGRLMsk(GRL_CTRL, (1 << 5), (1 << 5));
  439. break;
  440. /* ACP */
  441. case 6:
  442. vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL, 0, (1 << 1));
  443. for (u4Ind = 0; u4Ind < (sizeof(pdACPInfoReg2) / 4); u4Ind += 2)
  444. vWriteByteHdmiGRL(pdACPInfoReg2[u4Ind], pdACPInfoReg2[u4Ind + 1]);
  445. for (u4Ind = 0; u4Ind < 23; u4Ind++)
  446. vWriteByteHdmiGRL(GRL_IFM_PORT, 0);
  447. vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL, (1 << 1), (1 << 1));
  448. break;
  449. /* ISCR1 */
  450. case 7:
  451. vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL, 0, (1 << 2));
  452. for (u4Ind = 0; u4Ind < (sizeof(pdISRC1InfoReg2) / 4); u4Ind += 2)
  453. vWriteByteHdmiGRL(pdISRC1InfoReg2[u4Ind],
  454. pdISRC1InfoReg2[u4Ind + 1]);
  455. for (u4Ind = 0; u4Ind < 23; u4Ind++)
  456. vWriteByteHdmiGRL(GRL_IFM_PORT, 0);
  457. vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL, (1 << 2), (1 << 2));
  458. break;
  459. case 8:
  460. /* ISCR2 */
  461. vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL, 0, (1 << 3));
  462. for (u4Ind = 0; u4Ind < (sizeof(pdISRC2InfoReg2) / 4); u4Ind += 2)
  463. vWriteByteHdmiGRL(pdISRC2InfoReg2[u4Ind],
  464. pdISRC2InfoReg2[u4Ind + 1]);
  465. for (u4Ind = 0; u4Ind < 23; u4Ind++)
  466. vWriteByteHdmiGRL(GRL_IFM_PORT, 0);
  467. vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL, (1 << 3), (1 << 3));
  468. break;
  469. case 9:
  470. /* Generic spec */
  471. vWriteHdmiGRLMsk(GRL_CTRL, 0, (1 << 2));
  472. for (u4Ind = 0; u4Ind < (sizeof(pdGenericInfoReg2) / 4); u4Ind += 2)
  473. vWriteByteHdmiGRL(pdGenericInfoReg2[u4Ind],
  474. pdGenericInfoReg2[u4Ind + 1]);
  475. vWriteHdmiGRLMsk(GRL_CTRL, (1 << 2), (1 << 2));
  476. break;
  477. case 10:
  478. vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL, 0, (1 << 4));
  479. for (u4Ind = 0; u4Ind < (sizeof(pdGamutInfoReg2) / 4); u4Ind += 2)
  480. vWriteByteHdmiGRL(pdGamutInfoReg2[u4Ind],
  481. pdGamutInfoReg2[u4Ind + 1]);
  482. for (u4Ind = 0; u4Ind < 27; u4Ind += 1)
  483. vWriteByteHdmiGRL(GRL_IFM_PORT, 0);
  484. vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL, (1 << 4), (1 << 4));
  485. vSendAVIInfoFrame(HDMI_VIDEO_720x480p_60Hz, HDMI_XV_YCC);
  486. break;
  487. case 11:
  488. bData = bReadByteHdmiGRL(GRL_CTRL);
  489. bData &= ~(0x1 << 7);
  490. vWriteByteHdmiGRL(GRL_CTRL, bData);
  491. for (u4Ind = 0; u4Ind < 27; u4Ind += 1)
  492. ;
  493. bData |= (0x1 << 7);
  494. vWriteByteHdmiGRL(GRL_CTRL, bData);
  495. break;
  496. case 12:
  497. bData = bReadByteHdmiGRL(GRL_CFG4);
  498. bData |= (0x1 << 5); /* disable original mute */
  499. bData &= ~(0x1 << 6); /* disable */
  500. vWriteByteHdmiGRL(GRL_CFG4, bData);
  501. for (u4Ind = 0; u4Ind < 27; u4Ind += 1)
  502. ;
  503. bData &= ~(0x1 << 5); /* disable original mute */
  504. bData |= (0x1 << 6); /* disable */
  505. vWriteByteHdmiGRL(GRL_CFG4, bData);
  506. break;
  507. case 13:
  508. bData = bReadByteHdmiGRL(GRL_CFG4);
  509. bData &= ~(0x1 << 5); /* enable original mute */
  510. bData &= ~(0x1 << 6); /* disable */
  511. vWriteByteHdmiGRL(GRL_CFG4, bData);
  512. bData = bReadByteHdmiGRL(GRL_CTRL);
  513. bData &= ~(0x1 << 7);
  514. vWriteByteHdmiGRL(GRL_CTRL, bData);
  515. for (u4Ind = 0; u4Ind < 27; u4Ind += 1)
  516. ;
  517. bData |= (0x1 << 7);
  518. vWriteByteHdmiGRL(GRL_CTRL, bData);
  519. for (u4Ind = 0; u4Ind < 27; u4Ind += 1)
  520. ;
  521. bData &= ~(0x1 << 7);
  522. vWriteByteHdmiGRL(GRL_CTRL, bData);
  523. break;
  524. case 14:
  525. bData = bReadByteHdmiGRL(GRL_CFG4);
  526. bData |= (0x1 << 6); /* disable */
  527. vWriteByteHdmiGRL(GRL_CFG4, bData);
  528. for (u4Ind = 0; u4Ind < 27; u4Ind += 1)
  529. ;
  530. bData &= ~(0x1 << 6);
  531. vWriteByteHdmiGRL(GRL_CFG4, bData);
  532. break;
  533. case 15:
  534. /* vCMDHwNCTSOnOff(FALSE);// change to software NCTS; */
  535. /* vCMDHDMI_NCTS(0x03, 0x12); */
  536. break;
  537. default:
  538. break;
  539. }
  540. }
  541. }
  542. #endif