mt8193hdmictrl.c 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977
  1. #ifdef HDMI_MT8193_SUPPORT
  2. #include "mt8193_ctrl.h"
  3. #include "mt8193hdmictrl.h"
  4. #include "mt8193_iic.h"
  5. #include "mt8193hdcp.h"
  6. #include "mt8193edid.h"
  7. #include "mt8193cec.h"
  8. HDMI_AV_INFO_T _stAvdAVInfo = { 0 };
  9. static unsigned char _bAudInfoFm[5];
  10. static unsigned char _bAviInfoFm[5];
  11. static unsigned char _bSpdInf[25] = { 0 };
  12. static unsigned char _bAcpType;
  13. static unsigned char _bAcpData[16] = { 0 };
  14. static unsigned char _bIsrc1Data[16] = { 0 };
  15. static unsigned int _u4NValue;
  16. unsigned char is_user_mute_hdmi_audio = 0;
  17. static const char *szHdmiResStr[HDMI_VIDEO_RESOLUTION_NUM] = {
  18. "RES_480P",
  19. "RES_576P",
  20. "RES_720P60HZ",
  21. "RES_720P50HZ",
  22. "RES_1080I60HZ",
  23. "RES_1080I50HZ",
  24. "RES_1080P30HZ",
  25. "RES_1080P25HZ",
  26. "RES_1080P24HZ",
  27. "RES_1080P23_976HZ",
  28. "RES_1080P29_97HZ",
  29. "RES_1080P60HZ",
  30. "RES_1080P50HZ",
  31. };
  32. static const char *cHdmiAudFsStr[7] = {
  33. "HDMI_FS_32K",
  34. "HDMI_FS_44K",
  35. "HDMI_FS_48K",
  36. "HDMI_FS_88K",
  37. "HDMI_FS_96K",
  38. "HDMI_FS_176K",
  39. "HDMI_FS_192K"
  40. };
  41. static const char *cAudCodingTypeStr[16] = {
  42. "Refer to Stream Header",
  43. "PCM",
  44. "AC3",
  45. "MPEG1",
  46. "MP3",
  47. "MPEG2",
  48. "AAC",
  49. "DTS",
  50. "ATRAC",
  51. "ONE Bit Audio",
  52. "Dolby Digital+",
  53. "DTS-HD",
  54. "MAT(MLP)",
  55. "DST",
  56. "WMA Pro",
  57. "Reserved",
  58. };
  59. static const char *cAudChCountStr[8] = {
  60. "Refer to Stream Header",
  61. "2ch",
  62. "3ch",
  63. "4ch",
  64. "5ch",
  65. "6ch",
  66. "7ch",
  67. "8ch",
  68. };
  69. static const char *cAudFsStr[8] = {
  70. "Refer to Stream Header",
  71. "32 khz",
  72. "44.1 khz",
  73. "48 khz",
  74. "88.2 khz",
  75. "96 khz",
  76. "176.4 khz",
  77. "192 khz"
  78. };
  79. static const char *cAudChMapStr[32] = {
  80. "FR,FL",
  81. "LFE,FR,FL",
  82. "FC,FR,FL",
  83. "FC,LFE,FR,FL",
  84. "RC,FR,FL",
  85. "RC,LFE,FR,FL",
  86. "RC,FC,FR,FL",
  87. "RC,FC,LFE,FR,FL",
  88. "RR,RL,FR,FL",
  89. "RR,RL,LFE,FR,FL",
  90. "RR,RL,FC,FR,FL",
  91. "RR,RL,FC,LFE,FR,FL",
  92. "RC,RR,RL,FR,FL",
  93. "RC,RR,RL,LFE,FR,FL",
  94. "RC,RR,RL,FC,FR,FL",
  95. "RC,RR,RL,FC,LFE,FR,FL",
  96. "RRC,RLC,RR,RL,FR,FL",
  97. "RRC,RLC,RR,RL,LFE,FR,FL",
  98. "RRC,RLC,RR,RL,FC,FR,FL",
  99. "RRC,RLC,RR,RL,FC,LFE,FR,FL",
  100. "FRC,FLC,FR,FL",
  101. "FRC,FLC,LFE,FR,FL",
  102. "FRC,FLC,FC,FR,FL",
  103. "FRC,FLC,FC,LFE,FR,FL",
  104. "FRC,FLC,RC,FR,FL",
  105. "FRC,FLC,RC,LFE,FR,FL",
  106. "FRC,FLC,RC,FC,FR,FL",
  107. "FRC,FLC,RC,FC,LFE,FR,FL",
  108. "FRC,FLC,RR,RL,FR,FL",
  109. "FRC,FLC,RR,RL,LFE,FR,FL",
  110. "FRC,FLC,RR,RL,FC,FR,FL",
  111. "FRC,FLC,RR,RL,FC,LFE,FR,FL",
  112. };
  113. static const char *cAudDMINHStr[2] = {
  114. "Permiited down mixed stereo or no information",
  115. "Prohibited down mixed stereo"
  116. };
  117. static const char *cAudSampleSizeStr[4] = {
  118. "Refer to Stream Header",
  119. "16 bit",
  120. "20 bit",
  121. "24 bit"
  122. };
  123. static const char *cAviRgbYcbcrStr[4] = {
  124. "RGB",
  125. "YCbCr 4:2:2",
  126. "YCbCr 4:4:4",
  127. "Future"
  128. };
  129. static const char *cAviActivePresentStr[2] = {
  130. "No data",
  131. "Actuve Format(R0..R3) Valid",
  132. };
  133. static const char *cAviBarStr[4] = {
  134. "Bar data not valid",
  135. "Vert. Bar info valid",
  136. "Horiz. Bar info valid",
  137. "Vert. and Horiz Bar info valid",
  138. };
  139. static const char *cAviScanStr[4] = {
  140. "No data",
  141. "Overscanned display",
  142. "underscanned display",
  143. "Future",
  144. };
  145. static const char *cAviColorimetryStr[4] = {
  146. "no data",
  147. "ITU601",
  148. "ITU709",
  149. "Extended Colorimetry infor valid",
  150. };
  151. static const char *cAviAspectStr[4] = {
  152. "No data",
  153. "4:3",
  154. "16:9",
  155. "Future",
  156. };
  157. static const char *cAviActiveStr[16] = {
  158. "reserved",
  159. "reserved",
  160. "box 16:9(top)",
  161. "box 14:9(top)",
  162. "box > 16:9(center)",
  163. "reserved",
  164. "reserved",
  165. "reserved",
  166. "Same as picture aspect ratio",
  167. "4:3(Center)",
  168. "16:9(Center)",
  169. "14:9(Center)",
  170. "reserved",
  171. "4:3(with shoot & protect 14:9 center)",
  172. "16:9(with shoot & protect 14:9 center)",
  173. "16:3(with shoot & protect 4:3 center)"
  174. };
  175. static const char *cAviItContentStr[2] = {
  176. "no data",
  177. "IT Content"
  178. };
  179. static const char *cAviExtColorimetryStr[2] = {
  180. "xvYCC601",
  181. "xvYCC709",
  182. };
  183. static const char *cAviRGBRangeStr[4] = {
  184. "depends on video format",
  185. "Limit range",
  186. "FULL range",
  187. "Reserved",
  188. };
  189. static const char *cAviScaleStr[4] = {
  190. "Unknown non-uniform scaling",
  191. "Picture has been scaled horizontally",
  192. "Picture has been scaled vertically",
  193. "Picture has been scaled horizontally and vertically",
  194. };
  195. static const char *cSPDDeviceStr[16] = {
  196. "unknown",
  197. "Digital STB",
  198. "DVD Player",
  199. "D-VHS",
  200. "HDD Videorecorder",
  201. "DVC",
  202. "DSC",
  203. "Video CD",
  204. "Game",
  205. "PC General",
  206. "Blu-Ray Disc",
  207. "Super Audio CD",
  208. "reserved",
  209. "reserved",
  210. "reserved",
  211. "reserved",
  212. };
  213. /* //////////////////////////////////////////// */
  214. unsigned int mt8193_hdmidrv_read(unsigned short u2Reg)
  215. {
  216. unsigned int u4Data;
  217. mt8193_i2c_read(HDMIDRV_BASE + u2Reg, &u4Data);
  218. /* MT8193_DRV_LOG("[R]addr = 0x%04x, data = 0x%08x\n", u2Reg, u4Data); */
  219. return u4Data;
  220. }
  221. void mt8193_hdmidrv_write(unsigned short u2Reg, unsigned int u4Data)
  222. {
  223. /* MT8193_DRV_LOG("[W]addr = 0x%04x, data = 0x%08x\n", u2Reg, u4Data); */
  224. mt8193_i2c_write(HDMIDRV_BASE + u2Reg, u4Data);
  225. }
  226. /* /////////////////////////////////////////////// */
  227. unsigned int mt8193_hdmisys_read(unsigned short u2Reg)
  228. {
  229. unsigned int u4Data;
  230. mt8193_i2c_read(HDMISYS_BASE + u2Reg, &u4Data);
  231. /* MT8193_PLL_LOG("[R]addr = 0x%04x, data = 0x%08x\n", u2Reg, u4Data); */
  232. return u4Data;
  233. }
  234. void mt8193_hdmisys_write(unsigned short u2Reg, unsigned int u4Data)
  235. {
  236. /* MT8193_PLL_LOG("[W]addr= 0x%04x, data = 0x%08x\n", u2Reg, u4Data); */
  237. mt8193_i2c_write(HDMISYS_BASE + u2Reg, u4Data);
  238. }
  239. /* /////////////////////////////////////////////////// */
  240. unsigned int mt8193_hdmidgi_read(unsigned short u2Reg)
  241. {
  242. unsigned int u4Data;
  243. mt8193_i2c_read(HDMIDGI_BASE + u2Reg, &u4Data);
  244. /* MT8193_DGI_LOG("[R]addr= 0x%04x, data = 0x%08x\n", u2Reg, u4Data); */
  245. return u4Data;
  246. }
  247. void mt8193_hdmidgi_write(unsigned short u2Reg, unsigned int u4Data)
  248. {
  249. /* MT8193_DGI_LOG("[W]addr= 0x%04x, data = 0x%08x\n", u2Reg, u4Data); */
  250. mt8193_i2c_write(HDMIDGI_BASE + u2Reg, u4Data);
  251. }
  252. /* ///////////////////////////////////////////////////// */
  253. unsigned int mt8193_pad_read(unsigned short u2Reg)
  254. {
  255. unsigned int u4Data;
  256. mt8193_i2c_read(HDMIPAD_BASE + u2Reg, &u4Data);
  257. return u4Data;
  258. }
  259. void mt8193_pad_write(unsigned short u2Reg, unsigned int u4Data)
  260. {
  261. mt8193_i2c_write(HDMIPAD_BASE + u2Reg, u4Data);
  262. }
  263. /* ///////////////////////////////////////////////////// */
  264. void vHotPlugPinInit(void)
  265. {
  266. vWriteIoPadMsk(IO_PAD_PD, IO_PAD_HOT_PLUG_PD, IO_PAD_HOT_PLUG_PD);
  267. }
  268. unsigned char fgIsAcpEnable(void)
  269. {
  270. if (bReadByteHdmiGRL(GRL_ACP_ISRC_CTRL) & ACP_EN)
  271. return TRUE;
  272. else
  273. return FALSE;
  274. }
  275. unsigned char fgIsVSEnable(void)
  276. {
  277. if (bReadByteHdmiGRL(GRL_ACP_ISRC_CTRL) & VS_EN)
  278. return TRUE;
  279. else
  280. return FALSE;
  281. }
  282. unsigned char fgIsISRC1Enable(void)
  283. {
  284. if (bReadByteHdmiGRL(GRL_ACP_ISRC_CTRL) & ISRC1_EN)
  285. return TRUE;
  286. else
  287. return FALSE;
  288. }
  289. unsigned char fgIsISRC2Enable(void)
  290. {
  291. if (bReadByteHdmiGRL(GRL_ACP_ISRC_CTRL) & ISRC2_EN)
  292. return TRUE;
  293. else
  294. return FALSE;
  295. }
  296. unsigned char vIsDviMode(void)
  297. {
  298. unsigned char bData;
  299. bData = bReadByteHdmiGRL(GRL_CFG1);
  300. if (bData & CFG1_DVI)
  301. return TRUE;
  302. else
  303. return FALSE;
  304. }
  305. unsigned char bCheckStatus(unsigned char bMode)
  306. {
  307. unsigned char bStatus = 0;
  308. bStatus = bReadByteHdmiGRL(GRL_STATUS);
  309. if ((bStatus & bMode) == bMode)
  310. return TRUE;
  311. else
  312. return FALSE;
  313. }
  314. unsigned char bCheckPordHotPlug(unsigned char bMode)
  315. {
  316. unsigned char bStatus = FALSE;
  317. if (bMode == (PORD_MODE | HOTPLUG_MODE))
  318. bStatus = bCheckStatus(STATUS_PORD | STATUS_HTPLG);
  319. else if (bMode == HOTPLUG_MODE)
  320. bStatus = bCheckStatus(STATUS_HTPLG);
  321. else if (bMode == PORD_MODE)
  322. bStatus = bCheckStatus(STATUS_PORD);
  323. return bStatus;
  324. }
  325. unsigned char hdmi_port_status(void)
  326. {
  327. return bReadByteHdmiGRL(GRL_STATUS) & (PORD_MODE | HOTPLUG_MODE);
  328. }
  329. void MuteHDMIAudio(void)
  330. {
  331. unsigned char bData;
  332. MT8193_AUDIO_FUNC();
  333. bData = bReadByteHdmiGRL(GRL_AUDIO_CFG);
  334. bData |= AUDIO_ZERO;
  335. vWriteByteHdmiGRL(GRL_AUDIO_CFG, bData);
  336. }
  337. void vBlackHDMIOnly(void)
  338. {
  339. MT8193_DRV_FUNC();
  340. }
  341. void vHDMIAVMute(void)
  342. {
  343. MT8193_AUDIO_FUNC();
  344. vBlackHDMIOnly();
  345. MuteHDMIAudio();
  346. }
  347. void vTxSignalOnOff(unsigned char bOn)
  348. {
  349. unsigned char bData1;
  350. MT8193_PLL_FUNC();
  351. bData1 = bReadByteHdmiGRL(GRL_INT) & INT_MDI;
  352. if (bOn) {
  353. HDMI_DEF_LOG("[hdmi]tmds on\n");
  354. vWriteHdmiSYSMsk(HDMI_SYS_AMPCTRL, 0, RG_SET_DTXST);
  355. /* the 5ms delay time after pll setting , resolve CTS 7-6 can't find trigger and result fail */
  356. mdelay(5);
  357. vWriteHdmiSYSMsk(HDMI_SYS_PLLCTRL6, 0, ABIST_MODE_SET_MSK);
  358. vWriteHdmiSYSMsk(HDMI_SYS_PLLCTRL6, 0, ABIST_MODE_EN | ABIST_LV_EN);
  359. udelay(20);
  360. vWriteHdmiSYSMsk(HDMI_SYS_PLLCTRL2, 0, POW_HDMITX | POW_PLL_L);
  361. udelay(20);
  362. vWriteHdmiSYSMsk(HDMI_SYS_PLLCTRL2, POW_HDMITX, POW_HDMITX | POW_PLL_L);
  363. udelay(20);
  364. vWriteHdmiSYSMsk(HDMI_SYS_PLLCTRL2, POW_HDMITX | POW_PLL_L, POW_HDMITX | POW_PLL_L);
  365. } else {
  366. HDMI_DEF_LOG("[hdmi]tmds off\n");
  367. vWriteHdmiSYSMsk(HDMI_SYS_AMPCTRL, 0, RG_SET_DTXST);
  368. vWriteHdmiSYSMsk(HDMI_SYS_PLLCTRL1, 0, RG_ENCKST);
  369. vWriteHdmiSYSMsk(HDMI_SYS_PLLCTRL6, ABIST_MODE_SET, ABIST_MODE_SET_MSK);
  370. vWriteHdmiSYSMsk(HDMI_SYS_PLLCTRL6, ABIST_MODE_EN | ABIST_LV_EN,
  371. ABIST_MODE_EN | ABIST_LV_EN);
  372. vWriteHdmiSYSMsk(HDMI_SYS_PLLCTRL7, 0, TX_DRV_ENABLE_MSK);
  373. }
  374. if (bData1 != INT_MDI)
  375. bClearGRLInt(INT_MDI);
  376. }
  377. void vSetCTL0BeZero(unsigned char fgBeZero)
  378. {
  379. unsigned char bTemp;
  380. MT8193_VIDEO_FUNC();
  381. if (fgBeZero == TRUE) {
  382. bTemp = bReadByteHdmiGRL(GRL_CFG1);
  383. bTemp |= (1 << 4);
  384. vWriteByteHdmiGRL(GRL_CFG1, bTemp);
  385. } else {
  386. bTemp = bReadByteHdmiGRL(GRL_CFG1);
  387. bTemp &= ~(1 << 4);
  388. vWriteByteHdmiGRL(GRL_CFG1, bTemp);
  389. }
  390. }
  391. void vWriteHdmiIntMask(unsigned char bMask)
  392. {
  393. MT8193_DRV_FUNC();
  394. vWriteByteHdmiGRL(GRL_INT_MASK, bMask); /* INT mask */
  395. }
  396. void vUnBlackHDMIOnly(void)
  397. {
  398. HDMI_DEF_LOG("[hdmi]vid unmute\n");
  399. }
  400. void UnMuteHDMIAudio(void)
  401. {
  402. unsigned char bData;
  403. HDMI_DEF_LOG("[hdmi]aud unmute\n");
  404. bData = bReadByteHdmiGRL(GRL_AUDIO_CFG);
  405. bData &= ~AUDIO_ZERO;
  406. vWriteByteHdmiGRL(GRL_AUDIO_CFG, bData);
  407. }
  408. void vTmdsOnOffAndResetHdcp(unsigned char fgHdmiTmdsEnable)
  409. {
  410. MT8193_DRV_FUNC();
  411. if (fgHdmiTmdsEnable == 1) {
  412. mdelay(10);
  413. vTxSignalOnOff(SV_ON);
  414. } else {
  415. vHDMIAVMute();
  416. mdelay(2);
  417. vTxSignalOnOff(SV_OFF);
  418. vHDCPReset();
  419. mdelay(10);
  420. }
  421. }
  422. void vVideoPLLInit(void)
  423. {
  424. MT8193_DRV_FUNC();
  425. /* init analog part */
  426. vWriteHdmiSYS(HDMI_SYS_AMPCTRL, HDMI_ANL_INIT[0]);
  427. vWriteHdmiSYS(HDMI_SYS_AMPCTRL1, HDMI_ANL_INIT[1]);
  428. vWriteHdmiSYS(HDMI_SYS_PLLCTRL1, HDMI_ANL_INIT[2]);
  429. vWriteHdmiSYS(HDMI_SYS_PLLCTRL2, HDMI_ANL_INIT[3]);
  430. vWriteHdmiSYS(HDMI_SYS_PLLCTRL3, HDMI_ANL_INIT[4]);
  431. vWriteHdmiSYS(HDMI_SYS_PLLCTRL4, HDMI_ANL_INIT[5]);
  432. vWriteHdmiSYS(HDMI_SYS_PLLCTRL5, HDMI_ANL_INIT[6]);
  433. vWriteHdmiSYS(HDMI_SYS_PLLCTRL5, HDMI_ANL_INIT[7]);
  434. }
  435. void vVideoPLLInit_1080P_36BIT(void)
  436. {
  437. MT8193_DRV_FUNC();
  438. /* init analog part */
  439. vWriteHdmiSYS(HDMI_SYS_AMPCTRL, HDMI_ANL_INIT_1080P_36BIT[0]);
  440. vWriteHdmiSYS(HDMI_SYS_AMPCTRL1, HDMI_ANL_INIT_1080P_36BIT[1]);
  441. vWriteHdmiSYS(HDMI_SYS_PLLCTRL1, HDMI_ANL_INIT_1080P_36BIT[2]);
  442. vWriteHdmiSYS(HDMI_SYS_PLLCTRL2, HDMI_ANL_INIT_1080P_36BIT[3]);
  443. vWriteHdmiSYS(HDMI_SYS_PLLCTRL3, HDMI_ANL_INIT_1080P_36BIT[4]);
  444. vWriteHdmiSYS(HDMI_SYS_PLLCTRL4, HDMI_ANL_INIT_1080P_36BIT[5]);
  445. vWriteHdmiSYS(HDMI_SYS_PLLCTRL5, HDMI_ANL_INIT_1080P_36BIT[6]);
  446. vWriteHdmiSYS(HDMI_SYS_PLLCTRL5, HDMI_ANL_INIT_1080P_36BIT[7]);
  447. }
  448. void vSetHDMITxPLL(unsigned char bResIndex, unsigned char bdeepmode)
  449. {
  450. unsigned char u4Feq = 0;
  451. MT8193_PLL_FUNC();
  452. vWriteHdmiDGIMsk(dgi0_anaif_ctrl1, dgi1_pad_clk_en,
  453. anaif_dig1_clk_sel | dgi1_pad_clk_en | clk_sel_tv_mode | data_in_tv_mode |
  454. dgi1_clk_pad_sel_tv_mode | tv_mode_clk_en);
  455. if ((bResIndex == HDMI_VIDEO_720x480p_60Hz) || (bResIndex == HDMI_VIDEO_720x576p_50Hz))
  456. u4Feq = 0; /* 27M */
  457. else if ((bResIndex == HDMI_VIDEO_1920x1080p_60Hz)
  458. || (bResIndex == HDMI_VIDEO_1920x1080p_50Hz))
  459. u4Feq = 2; /* 148M */
  460. else
  461. u4Feq = 1; /* 74M */
  462. if (((bResIndex == HDMI_VIDEO_1920x1080p_60Hz) || (bResIndex == HDMI_VIDEO_1920x1080p_50Hz))
  463. && (bdeepmode == HDMI_DEEP_COLOR_12_BIT))
  464. vVideoPLLInit_1080P_36BIT();
  465. else
  466. vVideoPLLInit();
  467. udelay(10);
  468. if (bdeepmode == HDMI_NO_DEEP_COLOR) {
  469. vWriteHdmiSYSMsk(HDMI_SYS_PLLCTRL2, (HDMI_PLL_SETTING[u4Feq][0]), 0xFF);
  470. vWriteHdmiSYS(HDMI_SYS_PLLCTRL3,
  471. (HDMI_PLL_SETTING[u4Feq][1]) | (HDMI_PLL_SETTING[u4Feq][2] << 8) |
  472. (HDMI_PLL_SETTING[u4Feq][3] << 16) | (HDMI_PLL_SETTING[u4Feq][4] <<
  473. 24));
  474. } else if (bdeepmode == HDMI_DEEP_COLOR_10_BIT) {
  475. vWriteHdmiSYSMsk(HDMI_SYS_PLLCTRL2, (HDMI_PLL_SETTING_X_1_25[u4Feq][0]), 0xFF);
  476. vWriteHdmiSYS(HDMI_SYS_PLLCTRL3,
  477. (HDMI_PLL_SETTING_X_1_25[u4Feq][1]) |
  478. (HDMI_PLL_SETTING_X_1_25[u4Feq][2] << 8) |
  479. (HDMI_PLL_SETTING_X_1_25[u4Feq][3] << 16) |
  480. (HDMI_PLL_SETTING_X_1_25[u4Feq][4] << 24));
  481. } else if (bdeepmode == HDMI_DEEP_COLOR_12_BIT) {
  482. vWriteHdmiSYSMsk(HDMI_SYS_PLLCTRL2, (HDMI_PLL_SETTING_X_1_5[u4Feq][0]), 0xFF);
  483. vWriteHdmiSYS(HDMI_SYS_PLLCTRL3,
  484. (HDMI_PLL_SETTING_X_1_5[u4Feq][1]) | (HDMI_PLL_SETTING_X_1_5[u4Feq][2]
  485. << 8) |
  486. (HDMI_PLL_SETTING_X_1_5[u4Feq][3] << 16) |
  487. (HDMI_PLL_SETTING_X_1_5[u4Feq][4] << 24));
  488. }
  489. vWriteHdmiSYSMsk(HDMI_SYS_PLLCTRL6, RG_CK148M_EN, RG_CK148M_EN);
  490. }
  491. void vEnableDeepColor(unsigned char ui1Mode)
  492. {
  493. unsigned int u4Data;
  494. MT8193_DRV_FUNC();
  495. if (ui1Mode == HDMI_DEEP_COLOR_10_BIT)
  496. u4Data = COLOR_10BIT_MODE;
  497. else if (ui1Mode == HDMI_DEEP_COLOR_12_BIT)
  498. u4Data = COLOR_12BIT_MODE;
  499. else if (ui1Mode == HDMI_DEEP_COLOR_16_BIT)
  500. u4Data = COLOR_16BIT_MODE;
  501. else
  502. u4Data = COLOR_8BIT_MODE;
  503. if (u4Data == COLOR_8BIT_MODE) {
  504. vWriteHdmiSYSMsk(HDMI_SYS_CFG20, u4Data, DEEP_COLOR_MODE_MASK | DEEP_COLOR_EN);
  505. } else {
  506. vWriteHdmiSYSMsk(HDMI_SYS_CFG20, u4Data | DEEP_COLOR_EN,
  507. DEEP_COLOR_MODE_MASK | DEEP_COLOR_EN);
  508. }
  509. }
  510. void vResetHDMIPLL(void)
  511. {
  512. vWriteHdmiSYSMsk(HDMI_SYS_PLLCTRL2, 0, POW_PLL_L);
  513. udelay(2);
  514. vWriteHdmiSYSMsk(HDMI_SYS_PLLCTRL2, POW_PLL_L, POW_PLL_L);
  515. udelay(2);
  516. }
  517. void vSetHDMITxPLLTrigger(void)
  518. {
  519. vWriteHdmiSYS(HDMI_SYS_PLLCTRL7, 0);
  520. vWriteHdmiSYS(HDMI_SYS_AMPCTRL, 0x0000bbbb);
  521. vWriteHdmiSYS(HDMI_SYS_AMPCTRL1, 0x00000000);
  522. /* 480i pll setting */
  523. vWriteHdmiSYS(HDMI_SYS_PLLCTRL1, 0x1F001F00);
  524. vWriteHdmiSYS(HDMI_SYS_PLLCTRL2, 0x00300094);
  525. vWriteHdmiSYS(HDMI_SYS_PLLCTRL3, 0xF4c81400);
  526. vWriteHdmiSYS(HDMI_SYS_PLLCTRL4, 0x46331717);
  527. vWriteHdmiSYS(HDMI_SYS_PLLCTRL5, 0x00004140);
  528. udelay(20);
  529. vWriteHdmiSYS(HDMI_SYS_PLLCTRL1, 0x1F001F00);
  530. vWriteHdmiSYS(HDMI_SYS_PLLCTRL2, 0x00200094);
  531. vWriteHdmiSYS(HDMI_SYS_PLLCTRL3, 0xF4c81400);
  532. vWriteHdmiSYS(HDMI_SYS_PLLCTRL4, 0x46331717);
  533. vWriteHdmiSYS(HDMI_SYS_PLLCTRL5, 0x00004140);
  534. udelay(20);
  535. vWriteHdmiSYS(HDMI_SYS_PLLCTRL2, 0x00300094); /* later, toggle 0x0f20[12] =1 */
  536. vWriteHdmiSYS(HDMI_SYS_PLLCTRL7, 0x31ff0000);
  537. }
  538. void vChangeVpll(unsigned char bRes, unsigned char bdeepmode)
  539. {
  540. MT8193_PLL_FUNC();
  541. vSetHDMITxPLL(bRes, bdeepmode); /* set PLL */
  542. vEnableDeepColor(bdeepmode);
  543. }
  544. void vResetHDMI(unsigned char bRst)
  545. {
  546. MT8193_DRV_FUNC();
  547. if (bRst) {
  548. vWriteHdmiSYSMsk(HDMI_SYS_CFG1C, HDMI_RST, HDMI_RST);
  549. } else {
  550. vWriteHdmiSYSMsk(HDMI_SYS_CFG1C, 0, HDMI_RST);
  551. vWriteHdmiGRLMsk(GRL_CFG3, 0, CFG3_CONTROL_PACKET_DELAY);
  552. /* Designer suggest adjust Control packet deliver time */
  553. vWriteHdmiSYSMsk(HDMI_SYS_CFG1C, ANLG_ON, ANLG_ON);
  554. }
  555. }
  556. void vHDMIAVUnMute(void)
  557. {
  558. MT8193_AUDIO_FUNC();
  559. if (_bflagvideomute == FALSE)
  560. vUnBlackHDMIOnly();
  561. if ((_bflagaudiomute == FALSE) && (is_user_mute_hdmi_audio == 0))
  562. UnMuteHDMIAudio();
  563. }
  564. void hdmi_user_mute_audio(unsigned char mute)
  565. {
  566. HDMI_DEF_LOG("is_user_mute_hdmi_audio=%d\n", is_user_mute_hdmi_audio);
  567. if (mute == 0) {
  568. is_user_mute_hdmi_audio = 0;
  569. UnMuteHDMIAudio();
  570. } else {
  571. is_user_mute_hdmi_audio = 1;
  572. MuteHDMIAudio();
  573. }
  574. }
  575. void vHDMIVideoOutput(unsigned char ui1Res, unsigned char ui1ColorSpace)
  576. {
  577. MT8193_VIDEO_FUNC();
  578. vWriteHdmiDGIMsk(fifo_ctrl, sw_rst, sw_rst);
  579. vWriteHdmiDGIMsk(dgi1_clk_rst_ctrl,
  580. dgi1_clk_out_enable | dgi1_clk_in_inv_enable | dgi1_clk_in_enable,
  581. dgi1_clk_out_enable | dgi1_clk_in_inv_enable | dgi1_clk_in_enable);
  582. vWriteHdmiDGIMsk(data_out_ctrl, fall_use_fall, fall_use_fall | rise_use_fall);
  583. vWriteHdmiDGIMsk(fifo_ctrl, (0x40 << 0), rd_start);
  584. vWriteHdmiDGIMsk(fifo_ctrl, fifo_reset_on, fifo_reset_sel | fifo_reset_on);
  585. vWriteHdmiDGIMsk(dec_ctl, dgi1_on, dgi1_on);
  586. vWriteHdmiDGIMsk(ctrl_422_444, (CBCR_PRELOAD[ui1Res] << 8), rg_cbcr_preload);
  587. if (ui1ColorSpace == HDMI_YCBCR_444) {
  588. vWriteHdmiDGIMsk(ctrl_422_444, rpt_422_444, rpt_422_444 | bypass_422_444);
  589. vWriteHdmiDGIMsk(data_out_ctrl, (0x1 << 0) | (0x0 << 2) | (0x0 << 4),
  590. y_out_delay | c1_out_delay | c2_out_delay);
  591. vWriteHdmiDGIMsk(dgi1_yuv2rgb_ctr, 0, rg_yuv709_rgb | rg_yuv2rgb_en);
  592. } else if (ui1ColorSpace == HDMI_YCBCR_422) {
  593. vWriteHdmiDGIMsk(ctrl_422_444, bypass_422_444, rpt_422_444 | bypass_422_444);
  594. vWriteHdmiDGIMsk(data_out_ctrl, (0x1 << 0) | (0x0 << 2) | (0x0 << 4),
  595. y_out_delay | c1_out_delay | c2_out_delay);
  596. vWriteHdmiDGIMsk(dgi1_yuv2rgb_ctr, 0, rg_yuv709_rgb | rg_yuv2rgb_en);
  597. } else if (ui1ColorSpace == HDMI_RGB) {
  598. vWriteHdmiDGIMsk(ctrl_422_444, rpt_422_444, rpt_422_444 | bypass_422_444);
  599. vWriteHdmiDGIMsk(data_out_ctrl, (0x1 << 0) | (0x1 << 2) | (0x0 << 4),
  600. y_out_delay | c1_out_delay | c2_out_delay);
  601. vWriteHdmiDGIMsk(dgi1_yuv2rgb_ctr, rg_yuv709_rgb | rg_yuv2rgb_en,
  602. rg_yuv709_rgb | rg_yuv2rgb_en);
  603. } else {
  604. hdmi_print("color space type error\n");
  605. }
  606. }
  607. void vSetHDMIDataEnable(unsigned char bResIndex)
  608. {
  609. MT8193_VIDEO_FUNC();
  610. if (bResIndex < HDMI_VIDEO_RESOLUTION_NUM) {
  611. vWriteHdmiDGIMsk(tg_ctrl02, HVSYNC_TOTAL_WIDTH_ACTIVE[bResIndex][0], 0xffffffff);
  612. vWriteHdmiDGIMsk(tg_ctrl03, HVSYNC_TOTAL_WIDTH_ACTIVE[bResIndex][1], 0xffffffff);
  613. vWriteHdmiDGIMsk(tg_ctrl04, HVSYNC_TOTAL_WIDTH_ACTIVE[bResIndex][5] << 5,
  614. 0xffffffff);
  615. vWriteHdmiDGIMsk(tg_ctrl05, HVSYNC_TOTAL_WIDTH_ACTIVE[bResIndex][4], 0xffffffff);
  616. vWriteHdmiDGIMsk(tg_ctrl06, HVSYNC_TOTAL_WIDTH_ACTIVE[bResIndex][3], 0xffffffff);
  617. vWriteHdmiDGIMsk(tg_ctrl07, HVSYNC_TOTAL_WIDTH_ACTIVE[bResIndex][2], 0xffffffff);
  618. }
  619. }
  620. void vSetHDMISyncDelay(unsigned char bResIndex)
  621. {
  622. MT8193_VIDEO_FUNC();
  623. vWriteHdmiDGIMsk(tg_ctrl00, prgs_out, syn_del | prgs_out);
  624. vWriteHdmiDGIMsk(tg_ctrl01, HVSYNC_DELAY[bResIndex],
  625. rg_vsync_delay | rg_hsync_delay | rg_vsync_forward);
  626. }
  627. void vEnableNotice(unsigned char bOn)
  628. {
  629. unsigned char bData;
  630. MT8193_VIDEO_FUNC();
  631. if (bOn == TRUE) {
  632. bData = bReadByteHdmiGRL(GRL_CFG2);
  633. bData |= 0x40; /* temp. solve 720p issue. to avoid audio packet jitter problem */
  634. vWriteByteHdmiGRL(GRL_CFG2, bData);
  635. } else {
  636. bData = bReadByteHdmiGRL(GRL_CFG2);
  637. bData &= ~0x40;
  638. vWriteByteHdmiGRL(GRL_CFG2, bData);
  639. }
  640. }
  641. void vEnableHdmiMode(unsigned char bOn)
  642. {
  643. unsigned char bData;
  644. MT8193_DRV_FUNC();
  645. if (bOn == TRUE) {
  646. bData = bReadByteHdmiGRL(GRL_CFG1);
  647. bData &= ~CFG1_DVI; /* enable HDMI mode */
  648. vWriteByteHdmiGRL(GRL_CFG1, bData);
  649. HDMI_DEF_LOG("[hdmi]to hdmi mode\n");
  650. } else {
  651. bData = bReadByteHdmiGRL(GRL_CFG1);
  652. bData |= CFG1_DVI; /* disable HDMI mode */
  653. vWriteByteHdmiGRL(GRL_CFG1, bData);
  654. HDMI_DEF_LOG("[hdmi]to dvi mode\n");
  655. }
  656. }
  657. void vEnableNCTSAutoWrite(void)
  658. {
  659. unsigned char bData;
  660. MT8193_AUDIO_FUNC();
  661. bData = bReadByteHdmiGRL(GRL_DIVN);
  662. bData |= NCTS_WRI_ANYTIME; /* enabel N-CTS can be written in any time */
  663. vWriteByteHdmiGRL(GRL_DIVN, bData);
  664. }
  665. void vHDMISettingColorSpace(unsigned char ui1colorspace)
  666. {
  667. if (ui1colorspace == HDMI_YCBCR_444)
  668. vWriteByteHdmiGRL(GRL_DIV_RESET, UNSWAP_YC);
  669. else if (ui1colorspace == HDMI_YCBCR_422)
  670. vWriteByteHdmiGRL(GRL_DIV_RESET, SWAP_YC);
  671. else
  672. vWriteByteHdmiGRL(GRL_DIV_RESET, UNSWAP_YC);
  673. }
  674. void vHDMIResetGenReg(unsigned char ui1resindex, unsigned char ui1colorspace)
  675. {
  676. MT8193_DRV_FUNC();
  677. vResetHDMI(1);
  678. vHDMIVideoOutput(ui1resindex, ui1colorspace);
  679. vResetHDMI(0);
  680. vEnableNotice(TRUE);
  681. vWriteHdmiIntMask(0xff);
  682. vSetHDMIDataEnable(ui1resindex);
  683. vSetHDMISyncDelay(ui1resindex);
  684. if (i4SharedInfo(SI_EDID_VSDB_EXIST) == TRUE)
  685. vEnableHdmiMode(TRUE);
  686. else
  687. vEnableHdmiMode(FALSE);
  688. vEnableNCTSAutoWrite();
  689. vHDMISettingColorSpace(ui1colorspace);
  690. }
  691. void vAudioPacketOff(unsigned char bOn)
  692. {
  693. unsigned char bData;
  694. MT8193_AUDIO_FUNC();
  695. bData = bReadByteHdmiGRL(GRL_SHIFT_R2);
  696. if (bOn)
  697. bData |= 0x40;
  698. else
  699. bData &= ~0x40;
  700. vWriteByteHdmiGRL(GRL_SHIFT_R2, bData);
  701. }
  702. void vSetChannelSwap(unsigned char u1SwapBit)
  703. {
  704. MT8193_AUDIO_FUNC();
  705. vWriteHdmiGRLMsk(GRL_CH_SWAP, u1SwapBit, 0xff);
  706. }
  707. void vEnableIecTxRaw(void)
  708. {
  709. unsigned char bData;
  710. MT8193_AUDIO_FUNC();
  711. bData = bReadByteHdmiGRL(GRL_MIX_CTRL);
  712. bData |= MIX_CTRL_FLAT;
  713. vWriteByteHdmiGRL(GRL_MIX_CTRL, bData);
  714. }
  715. void vSetHdmiI2SDataFmt(unsigned char bFmt)
  716. {
  717. unsigned char bData;
  718. MT8193_AUDIO_FUNC();
  719. bData = bReadByteHdmiGRL(GRL_CFG0);
  720. bData &= ~0x33;
  721. switch (bFmt) {
  722. case RJT_24BIT:
  723. bData |= (CFG0_I2S_MODE_RTJ | CFG0_I2S_MODE_24Bit);
  724. break;
  725. case RJT_16BIT:
  726. bData |= (CFG0_I2S_MODE_RTJ | CFG0_I2S_MODE_16Bit);
  727. break;
  728. case LJT_24BIT:
  729. bData |= (CFG0_I2S_MODE_LTJ | CFG0_I2S_MODE_24Bit);
  730. break;
  731. case LJT_16BIT:
  732. bData |= (CFG0_I2S_MODE_LTJ | CFG0_I2S_MODE_16Bit);
  733. break;
  734. case I2S_24BIT:
  735. bData |= (CFG0_I2S_MODE_I2S | CFG0_I2S_MODE_24Bit);
  736. break;
  737. case I2S_16BIT:
  738. bData |= (CFG0_I2S_MODE_I2S | CFG0_I2S_MODE_16Bit);
  739. break;
  740. }
  741. vWriteByteHdmiGRL(GRL_CFG0, bData);
  742. }
  743. void vAOUT_BNUM_SEL(unsigned char bBitNum)
  744. {
  745. MT8193_AUDIO_FUNC();
  746. vWriteByteHdmiGRL(GRL_AOUT_BNUM_SEL, bBitNum);
  747. }
  748. void vSetHdmiHighBitrate(unsigned char fgHighBitRate)
  749. {
  750. unsigned char bData;
  751. MT8193_AUDIO_FUNC();
  752. if (fgHighBitRate == TRUE) {
  753. bData = bReadByteHdmiGRL(GRL_AOUT_BNUM_SEL);
  754. bData |= HIGH_BIT_RATE_PACKET_ALIGN;
  755. vWriteByteHdmiGRL(GRL_AOUT_BNUM_SEL, bData);
  756. udelay(100); /* 1ms */
  757. bData = bReadByteHdmiGRL(GRL_AUDIO_CFG);
  758. bData |= HIGH_BIT_RATE;
  759. vWriteByteHdmiGRL(GRL_AUDIO_CFG, bData);
  760. } else {
  761. bData = bReadByteHdmiGRL(GRL_AOUT_BNUM_SEL);
  762. bData &= ~HIGH_BIT_RATE_PACKET_ALIGN;
  763. vWriteByteHdmiGRL(GRL_AOUT_BNUM_SEL, bData);
  764. bData = bReadByteHdmiGRL(GRL_AUDIO_CFG);
  765. bData &= ~HIGH_BIT_RATE;
  766. vWriteByteHdmiGRL(GRL_AUDIO_CFG, bData);
  767. }
  768. }
  769. void vDSTNormalDouble(unsigned char fgEnable)
  770. {
  771. unsigned char bData;
  772. MT8193_AUDIO_FUNC();
  773. if (fgEnable) {
  774. bData = bReadByteHdmiGRL(GRL_AUDIO_CFG);
  775. bData |= DST_NORMAL_DOUBLE;
  776. vWriteByteHdmiGRL(GRL_AUDIO_CFG, bData);
  777. } else {
  778. bData = bReadByteHdmiGRL(GRL_AUDIO_CFG);
  779. bData &= ~DST_NORMAL_DOUBLE;
  780. vWriteByteHdmiGRL(GRL_AUDIO_CFG, bData);
  781. }
  782. }
  783. void vEnableDSTConfig(unsigned char fgEnable)
  784. {
  785. unsigned char bData;
  786. MT8193_AUDIO_FUNC();
  787. if (fgEnable) {
  788. bData = bReadByteHdmiGRL(GRL_AUDIO_CFG);
  789. bData |= SACD_DST;
  790. vWriteByteHdmiGRL(GRL_AUDIO_CFG, bData);
  791. } else {
  792. bData = bReadByteHdmiGRL(GRL_AUDIO_CFG);
  793. bData &= ~SACD_DST;
  794. vWriteByteHdmiGRL(GRL_AUDIO_CFG, bData);
  795. }
  796. }
  797. void vDisableDsdConfig(void)
  798. {
  799. unsigned char bData;
  800. MT8193_AUDIO_FUNC();
  801. bData = bReadByteHdmiGRL(GRL_AUDIO_CFG);
  802. bData &= ~SACD_SEL;
  803. vWriteByteHdmiGRL(GRL_AUDIO_CFG, bData);
  804. }
  805. void vSetHdmiI2SChNum(unsigned char bChNum, unsigned char bChMapping)
  806. {
  807. unsigned char bData, bData1, bData2, bData3;
  808. MT8193_AUDIO_FUNC();
  809. if (bChNum == 2) { /* I2S 2ch */
  810. bData = 0x04; /* 2ch data */
  811. bData1 = 0x50; /* data0 */
  812. } else if ((bChNum == 3) || (bChNum == 4)) { /* I2S 2ch */
  813. if ((bChNum == 4) && (bChMapping == 0x08))
  814. bData = 0x14; /* 4ch data */
  815. else
  816. bData = 0x0c; /* 4ch data */
  817. bData1 = 0x50; /* data0 */
  818. } else if ((bChNum == 6) || (bChNum == 5)) { /* I2S 5.1ch */
  819. if ((bChNum == 6) && (bChMapping == 0x0E)) {
  820. bData = 0x3C; /* 6.0 ch data */
  821. bData1 = 0x50; /* data0 */
  822. } else {
  823. bData = 0x1C; /* 5.1ch data, 5/0ch */
  824. bData1 = 0x50; /* data0 */
  825. }
  826. } else if (bChNum == 8) { /* I2S 5.1ch */
  827. bData = 0x3C; /* 7.1ch data */
  828. bData1 = 0x50; /* data0 */
  829. } else if (bChNum == 7) { /* I2S 6.1ch */
  830. bData = 0x3C; /* 6.1ch data */
  831. bData1 = 0x50; /* data0 */
  832. } else {
  833. bData = 0x04; /* 2ch data */
  834. bData1 = 0x50; /* data0 */
  835. }
  836. bData2 = 0xc6;
  837. bData3 = 0xfa;
  838. vWriteByteHdmiGRL(GRL_CH_SW0, bData1);
  839. vWriteByteHdmiGRL(GRL_CH_SW1, bData2);
  840. vWriteByteHdmiGRL(GRL_CH_SW2, bData3);
  841. vWriteByteHdmiGRL(GRL_I2S_UV, bData);
  842. /* vDisableDsdConfig(); */
  843. }
  844. void vSetHdmiIecI2s(unsigned char bIn)
  845. {
  846. unsigned char bData;
  847. MT8193_AUDIO_FUNC();
  848. if (bIn == SV_SPDIF) {
  849. bData = bReadByteHdmiGRL(GRL_CFG1);
  850. if ((bData & CFG1_SPDIF) == 0) {
  851. bData |= CFG1_SPDIF;
  852. vWriteByteHdmiGRL(GRL_CFG1, bData);
  853. }
  854. } else {
  855. bData = bReadByteHdmiGRL(GRL_CFG1);
  856. if (bData & CFG1_SPDIF) {
  857. bData &= ~CFG1_SPDIF;
  858. vWriteByteHdmiGRL(GRL_CFG1, bData);
  859. }
  860. bData = bReadByteHdmiGRL(GRL_CFG1);
  861. }
  862. }
  863. void vSetHDMIAudioIn(void)
  864. {
  865. unsigned char bData2;
  866. MT8193_AUDIO_FUNC();
  867. bData2 = vCheckPcmBitSize(0);
  868. vSetChannelSwap(LFE_CC_SWAP);
  869. vEnableIecTxRaw();
  870. vSetHdmiI2SDataFmt(I2S_16BIT);
  871. if (bData2 == PCM_24BIT)
  872. vAOUT_BNUM_SEL(AOUT_24BIT);
  873. else
  874. vAOUT_BNUM_SEL(AOUT_16BIT);
  875. vSetHdmiHighBitrate(FALSE);
  876. vDSTNormalDouble(FALSE);
  877. vEnableDSTConfig(FALSE);
  878. vDisableDsdConfig();
  879. vSetHdmiI2SChNum(2, 0);
  880. vSetHdmiIecI2s(SV_I2S);
  881. }
  882. void vHwNCTSOnOff(unsigned char bHwNctsOn)
  883. {
  884. unsigned char bData;
  885. MT8193_AUDIO_FUNC();
  886. if (i4SharedInfo(SI_EDID_VSDB_EXIST) == FALSE)
  887. return;
  888. bData = bReadByteHdmiGRL(GRL_CTS_CTRL);
  889. if (bHwNctsOn == TRUE)
  890. bData &= ~CTS_CTRL_SOFT;
  891. else
  892. bData |= CTS_CTRL_SOFT;
  893. vWriteByteHdmiGRL(GRL_CTS_CTRL, bData);
  894. }
  895. void vHalHDMI_NCTS(unsigned char bAudioFreq, unsigned char bPix, unsigned char bDeepMode)
  896. {
  897. unsigned char bTemp, bData, bData1[NCTS_BYTES];
  898. unsigned int u4Temp, u4NTemp = 0;
  899. MT8193_AUDIO_FUNC();
  900. MT8193_AUDIO_LOG("bAudioFreq=%d, bPix=%d, bDeepMode=%d\n", bAudioFreq, bPix, bDeepMode);
  901. bData = 0;
  902. vWriteByteHdmiGRL(GRL_NCTS, bData); /* YT suggest 3 dummy N-CTS */
  903. vWriteByteHdmiGRL(GRL_NCTS, bData);
  904. vWriteByteHdmiGRL(GRL_NCTS, bData);
  905. for (bTemp = 0; bTemp < NCTS_BYTES; bTemp++)
  906. bData1[bTemp] = 0;
  907. if (bDeepMode == HDMI_NO_DEEP_COLOR) {
  908. for (bTemp = 0; bTemp < NCTS_BYTES; bTemp++) {
  909. if ((bAudioFreq < 7) && (bPix < 9))
  910. bData1[bTemp] = HDMI_NCTS[bAudioFreq][bPix][bTemp];
  911. }
  912. u4NTemp = (bData1[4] << 16) | (bData1[5] << 8) | (bData1[6]); /* N */
  913. u4Temp = (bData1[0] << 24) | (bData1[1] << 16) | (bData1[2] << 8) | (bData1[3]); /* CTS */
  914. } else {
  915. for (bTemp = 0; bTemp < NCTS_BYTES; bTemp++) {
  916. if ((bAudioFreq < 7) && (bPix < 9))
  917. bData1[bTemp] = HDMI_NCTS[bAudioFreq][bPix][bTemp];
  918. }
  919. u4NTemp = (bData1[4] << 16) | (bData1[5] << 8) | (bData1[6]); /* N */
  920. u4Temp = (bData1[0] << 24) | (bData1[1] << 16) | (bData1[2] << 8) | (bData1[3]);
  921. if (bDeepMode == HDMI_DEEP_COLOR_10_BIT)
  922. u4Temp = (u4Temp >> 2) * 5; /* (*5/4) */
  923. else if (bDeepMode == HDMI_DEEP_COLOR_12_BIT)
  924. u4Temp = (u4Temp >> 1) * 3; /* (*3/2) */
  925. else if (bDeepMode == HDMI_DEEP_COLOR_16_BIT)
  926. u4Temp = (u4Temp << 1); /* (*2) */
  927. bData1[0] = (u4Temp >> 24) & 0xff;
  928. bData1[1] = (u4Temp >> 16) & 0xff;
  929. bData1[2] = (u4Temp >> 8) & 0xff;
  930. bData1[3] = (u4Temp) & 0xff;
  931. }
  932. for (bTemp = 0; bTemp < NCTS_BYTES; bTemp++) {
  933. bData = bData1[bTemp];
  934. vWriteByteHdmiGRL(GRL_NCTS, bData);
  935. }
  936. _u4NValue = u4NTemp;
  937. }
  938. void vHDMI_NCTS(unsigned char bHDMIFsFreq, unsigned char bResolution, unsigned char bdeepmode)
  939. {
  940. unsigned char bPix;
  941. MT8193_AUDIO_FUNC();
  942. vWriteHdmiGRLMsk(DUMMY_304, AUDIO_I2S_NCTS_SEL_64, AUDIO_I2S_NCTS_SEL);
  943. switch (bResolution) {
  944. case HDMI_VIDEO_720x480p_60Hz:
  945. case HDMI_VIDEO_720x576p_50Hz:
  946. default:
  947. bPix = 0;
  948. break;
  949. case HDMI_VIDEO_1280x720p_60Hz: /* 74.175M pixel clock */
  950. case HDMI_VIDEO_1920x1080i_60Hz:
  951. case HDMI_VIDEO_1920x1080p_23Hz:
  952. bPix = 2;
  953. break;
  954. case HDMI_VIDEO_1280x720p_50Hz: /* 74.25M pixel clock */
  955. case HDMI_VIDEO_1920x1080i_50Hz:
  956. case HDMI_VIDEO_1920x1080p_24Hz:
  957. bPix = 3;
  958. break;
  959. }
  960. vHalHDMI_NCTS(bHDMIFsFreq, bPix, bdeepmode);
  961. }
  962. void vSetHdmiClkRefIec2(unsigned char fgSyncIec2Clock)
  963. {
  964. MT8193_AUDIO_FUNC();
  965. }
  966. void vSetHDMISRCOff(void)
  967. {
  968. unsigned char bData;
  969. MT8193_AUDIO_FUNC();
  970. bData = bReadByteHdmiGRL(GRL_MIX_CTRL);
  971. bData &= ~MIX_CTRL_SRC_EN;
  972. vWriteByteHdmiGRL(GRL_MIX_CTRL, bData);
  973. bData = 0x00;
  974. vWriteByteHdmiGRL(GRL_SHIFT_L1, bData);
  975. }
  976. void vHalSetHDMIFS(unsigned char bFs)
  977. {
  978. unsigned char bData;
  979. MT8193_AUDIO_FUNC();
  980. bData = bReadByteHdmiGRL(GRL_CFG5);
  981. bData &= CFG5_CD_RATIO_MASK;
  982. bData |= bFs;
  983. vWriteByteHdmiGRL(GRL_CFG5, bData);
  984. }
  985. void vHdmiAclkInv(unsigned char bInv)
  986. {
  987. unsigned char bData;
  988. MT8193_AUDIO_FUNC();
  989. if (bInv == TRUE) {
  990. bData = bReadByteHdmiGRL(GRL_CFG2);
  991. bData |= 0x80;
  992. vWriteByteHdmiGRL(GRL_CFG2, bData);
  993. } else {
  994. bData = bReadByteHdmiGRL(GRL_CFG2);
  995. bData &= ~0x80;
  996. vWriteByteHdmiGRL(GRL_CFG2, bData);
  997. }
  998. }
  999. void vSetHDMIFS(unsigned char bFs, unsigned char fgAclInv)
  1000. {
  1001. MT8193_AUDIO_FUNC();
  1002. vHalSetHDMIFS(bFs);
  1003. if (fgAclInv)
  1004. vHdmiAclkInv(TRUE); /* //fix 192kHz, SPDIF downsample noise issue, ACL iNV */
  1005. else
  1006. vHdmiAclkInv(FALSE); /* fix 192kHz, SPDIF downsample noise issue */
  1007. _stAvdAVInfo.u1HdmiI2sMclk = bFs;
  1008. }
  1009. void vReEnableSRC(void)
  1010. {
  1011. unsigned char bData;
  1012. MT8193_AUDIO_FUNC();
  1013. bData = bReadByteHdmiGRL(GRL_MIX_CTRL);
  1014. if (bData & MIX_CTRL_SRC_EN) {
  1015. bData &= ~MIX_CTRL_SRC_EN;
  1016. vWriteByteHdmiGRL(GRL_MIX_CTRL, bData);
  1017. udelay(255);
  1018. bData |= MIX_CTRL_SRC_EN;
  1019. vWriteByteHdmiGRL(GRL_MIX_CTRL, bData);
  1020. }
  1021. }
  1022. void vHDMIAudioSRC(unsigned char ui1hdmifs, unsigned char ui1resindex, unsigned char bdeepmode)
  1023. {
  1024. MT8193_AUDIO_FUNC();
  1025. vHwNCTSOnOff(FALSE);
  1026. vSetHdmiClkRefIec2(FALSE);
  1027. switch (ui1hdmifs) {
  1028. case HDMI_FS_44K:
  1029. vSetHDMISRCOff();
  1030. vSetHDMIFS(CFG5_FS128, FALSE);
  1031. break;
  1032. case HDMI_FS_48K:
  1033. vSetHDMISRCOff();
  1034. vSetHDMIFS(CFG5_FS128, FALSE);
  1035. break;
  1036. default:
  1037. break;
  1038. }
  1039. vHDMI_NCTS(ui1hdmifs, ui1resindex, bdeepmode);
  1040. vReEnableSRC();
  1041. }
  1042. void vHwSet_Hdmi_I2S_C_Status(unsigned char *prLChData, unsigned char *prRChData)
  1043. {
  1044. unsigned char bData;
  1045. MT8193_AUDIO_FUNC();
  1046. if (i4SharedInfo(SI_EDID_VSDB_EXIST) == FALSE)
  1047. return;
  1048. bData = prLChData[0];
  1049. vWriteByteHdmiGRL(GRL_I2S_C_STA0, bData);
  1050. vWriteByteHdmiGRL(GRL_L_STATUS_0, bData);
  1051. bData = prRChData[0];
  1052. vWriteByteHdmiGRL(GRL_R_STATUS_0, bData);
  1053. bData = prLChData[1];
  1054. vWriteByteHdmiGRL(GRL_I2S_C_STA1, bData);
  1055. vWriteByteHdmiGRL(GRL_L_STATUS_1, bData);
  1056. bData = prRChData[1];
  1057. vWriteByteHdmiGRL(GRL_R_STATUS_1, bData);
  1058. bData = prLChData[2];
  1059. vWriteByteHdmiGRL(GRL_I2S_C_STA2, bData);
  1060. vWriteByteHdmiGRL(GRL_L_STATUS_2, bData);
  1061. bData = prRChData[2];
  1062. vWriteByteHdmiGRL(GRL_R_STATUS_2, bData);
  1063. bData = prLChData[3];
  1064. vWriteByteHdmiGRL(GRL_I2S_C_STA3, bData);
  1065. vWriteByteHdmiGRL(GRL_L_STATUS_3, bData);
  1066. bData = prRChData[3];
  1067. vWriteByteHdmiGRL(GRL_R_STATUS_3, bData);
  1068. bData = prLChData[4];
  1069. vWriteByteHdmiGRL(GRL_I2S_C_STA4, bData);
  1070. vWriteByteHdmiGRL(GRL_L_STATUS_4, bData);
  1071. bData = prRChData[4];
  1072. vWriteByteHdmiGRL(GRL_R_STATUS_4, bData);
  1073. for (bData = 0; bData < 19; bData++) {
  1074. vWriteByteHdmiGRL(GRL_L_STATUS_5 + bData * 4, 0);
  1075. vWriteByteHdmiGRL(GRL_R_STATUS_5 + bData * 4, 0);
  1076. }
  1077. }
  1078. void vHDMI_I2S_C_Status(void)
  1079. {
  1080. unsigned char bData = 0;
  1081. unsigned char bhdmi_RCh_status[5];
  1082. unsigned char bhdmi_LCh_status[5];
  1083. MT8193_AUDIO_FUNC();
  1084. bhdmi_LCh_status[0] = _stAvdAVInfo.bhdmiLChstatus[0];
  1085. bhdmi_LCh_status[1] = _stAvdAVInfo.bhdmiLChstatus[1];
  1086. bhdmi_LCh_status[2] = _stAvdAVInfo.bhdmiLChstatus[2];
  1087. bhdmi_RCh_status[0] = _stAvdAVInfo.bhdmiRChstatus[0];
  1088. bhdmi_RCh_status[1] = _stAvdAVInfo.bhdmiRChstatus[1];
  1089. bhdmi_RCh_status[2] = _stAvdAVInfo.bhdmiRChstatus[2];
  1090. bhdmi_LCh_status[0] &= ~0x02;
  1091. bhdmi_RCh_status[0] &= ~0x02;
  1092. bData = _stAvdAVInfo.bhdmiLChstatus[3] & 0xf0;
  1093. switch (_stAvdAVInfo.e_hdmi_fs) {
  1094. case HDMI_FS_32K:
  1095. bData |= 0x03;
  1096. break;
  1097. case HDMI_FS_44K:
  1098. break;
  1099. case HDMI_FS_48K:
  1100. default:
  1101. bData |= 0x02;
  1102. break;
  1103. }
  1104. bhdmi_LCh_status[3] = bData;
  1105. bhdmi_RCh_status[3] = bData;
  1106. bData = _stAvdAVInfo.bhdmiLChstatus[4];
  1107. bData |= ((~(bhdmi_LCh_status[3] & 0x0f)) << 4);
  1108. bhdmi_LCh_status[4] = bData;
  1109. bhdmi_RCh_status[4] = bData;
  1110. vHwSet_Hdmi_I2S_C_Status(&bhdmi_LCh_status[0], &bhdmi_RCh_status[0]);
  1111. }
  1112. void vHalSendAudioInfoFrame(unsigned char bData1, unsigned char bData2, unsigned char bData4, unsigned char bData5)
  1113. {
  1114. unsigned char bAUDIO_CHSUM;
  1115. unsigned char bData = 0;
  1116. MT8193_AUDIO_FUNC();
  1117. if (i4SharedInfo(SI_EDID_VSDB_EXIST) == FALSE)
  1118. return;
  1119. vWriteHdmiGRLMsk(GRL_CTRL, 0, CTRL_AUDIO_EN);
  1120. vWriteByteHdmiGRL(GRL_INFOFRM_VER, AUDIO_VERS);
  1121. vWriteByteHdmiGRL(GRL_INFOFRM_TYPE, AUDIO_TYPE);
  1122. vWriteByteHdmiGRL(GRL_INFOFRM_LNG, AUDIO_LEN);
  1123. bAUDIO_CHSUM = AUDIO_TYPE + AUDIO_VERS + AUDIO_LEN;
  1124. bAUDIO_CHSUM += bData1;
  1125. bAUDIO_CHSUM += bData2;
  1126. bAUDIO_CHSUM += bData4;
  1127. bAUDIO_CHSUM += bData5;
  1128. bAUDIO_CHSUM = 0x100 - bAUDIO_CHSUM;
  1129. vWriteByteHdmiGRL(GRL_IFM_PORT, bAUDIO_CHSUM);
  1130. vWriteByteHdmiGRL(GRL_IFM_PORT, bData1);
  1131. vWriteByteHdmiGRL(GRL_IFM_PORT, bData2); /* bData2 */
  1132. vWriteByteHdmiGRL(GRL_IFM_PORT, 0); /* bData3 */
  1133. vWriteByteHdmiGRL(GRL_IFM_PORT, bData4);
  1134. vWriteByteHdmiGRL(GRL_IFM_PORT, bData5);
  1135. for (bData = 0; bData < 5; bData++)
  1136. vWriteByteHdmiGRL(GRL_IFM_PORT, 0);
  1137. bData = bReadByteHdmiGRL(GRL_CTRL);
  1138. bData |= CTRL_AUDIO_EN;
  1139. vWriteByteHdmiGRL(GRL_CTRL, bData);
  1140. }
  1141. void vSendAudioInfoFrame(void)
  1142. {
  1143. MT8193_AUDIO_FUNC();
  1144. if (i4SharedInfo(SI_EDID_VSDB_EXIST) == FALSE)
  1145. return;
  1146. _bAudInfoFm[0] = 0x01;
  1147. _bAudInfoFm[2] = 0x00;
  1148. _bAudInfoFm[1] = 0;
  1149. _bAudInfoFm[3] = 0x0;
  1150. _bAudInfoFm[4] = 0x0;
  1151. vHalSendAudioInfoFrame(_bAudInfoFm[0], _bAudInfoFm[1], _bAudInfoFm[2], _bAudInfoFm[3]);
  1152. }
  1153. void vChgHDMIAudioOutput(unsigned char ui1hdmifs, unsigned char ui1resindex, unsigned char bdeepmode)
  1154. {
  1155. unsigned int ui4Index;
  1156. MT8193_AUDIO_FUNC();
  1157. if (i4SharedInfo(SI_EDID_VSDB_EXIST) == FALSE)
  1158. return;
  1159. MuteHDMIAudio();
  1160. vAudioPacketOff(TRUE);
  1161. vSetHDMIAudioIn();
  1162. vHDMIAudioSRC(ui1hdmifs, ui1resindex, bdeepmode);
  1163. vHDMI_I2S_C_Status();
  1164. vSendAudioInfoFrame();
  1165. for (ui4Index = 0; ui4Index < 5; ui4Index++)
  1166. udelay(5);
  1167. vHwNCTSOnOff(TRUE);
  1168. vAudioPacketOff(FALSE);
  1169. if (is_user_mute_hdmi_audio == 0)
  1170. UnMuteHDMIAudio();
  1171. HDMI_DEF_LOG("[hdmi]set aud,e_hdmi_fs:%d,u1HdmiI2sMclk:%d,ui1_aud_out_ch_number=%d\n",
  1172. _stAvdAVInfo.e_hdmi_fs, _stAvdAVInfo.u1HdmiI2sMclk,
  1173. _stAvdAVInfo.ui1_aud_out_ch_number);
  1174. }
  1175. void vDisableGamut(void)
  1176. {
  1177. MT8193_AUDIO_FUNC();
  1178. if (i4SharedInfo(SI_EDID_VSDB_EXIST) == FALSE)
  1179. return;
  1180. vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL, 0, GAMUT_EN);
  1181. }
  1182. void vHalSendAVIInfoFrame(unsigned char *pr_bData)
  1183. {
  1184. unsigned char bAVI_CHSUM;
  1185. unsigned char bData1 = 0, bData2 = 0, bData3 = 0, bData4 = 0, bData5 = 0;
  1186. unsigned char bData;
  1187. MT8193_VIDEO_FUNC();
  1188. if (i4SharedInfo(SI_EDID_VSDB_EXIST) == FALSE)
  1189. return;
  1190. bData1 = *pr_bData;
  1191. bData2 = *(pr_bData + 1);
  1192. bData3 = *(pr_bData + 2);
  1193. bData4 = *(pr_bData + 3);
  1194. bData5 = *(pr_bData + 4);
  1195. vWriteHdmiGRLMsk(GRL_CTRL, 0, CTRL_AVI_EN);
  1196. vWriteByteHdmiGRL(GRL_INFOFRM_VER, AVI_VERS);
  1197. vWriteByteHdmiGRL(GRL_INFOFRM_TYPE, AVI_TYPE);
  1198. vWriteByteHdmiGRL(GRL_INFOFRM_LNG, AVI_LEN);
  1199. bAVI_CHSUM = AVI_TYPE + AVI_VERS + AVI_LEN;
  1200. bAVI_CHSUM += bData1;
  1201. bAVI_CHSUM += bData2;
  1202. bAVI_CHSUM += bData3;
  1203. bAVI_CHSUM += bData4;
  1204. bAVI_CHSUM += bData5;
  1205. bAVI_CHSUM = 0x100 - bAVI_CHSUM;
  1206. vWriteByteHdmiGRL(GRL_IFM_PORT, bAVI_CHSUM);
  1207. vWriteByteHdmiGRL(GRL_IFM_PORT, bData1);
  1208. vWriteByteHdmiGRL(GRL_IFM_PORT, bData2);
  1209. vWriteByteHdmiGRL(GRL_IFM_PORT, bData3);
  1210. vWriteByteHdmiGRL(GRL_IFM_PORT, bData4);
  1211. vWriteByteHdmiGRL(GRL_IFM_PORT, bData5);
  1212. for (bData2 = 0; bData2 < 8; bData2++)
  1213. vWriteByteHdmiGRL(GRL_IFM_PORT, 0);
  1214. bData = bReadByteHdmiGRL(GRL_CTRL);
  1215. bData |= CTRL_AVI_EN;
  1216. vWriteByteHdmiGRL(GRL_CTRL, bData);
  1217. }
  1218. void vSendAVIInfoFrame(unsigned char ui1resindex, unsigned char ui1colorspace)
  1219. {
  1220. MT8193_VIDEO_FUNC();
  1221. if (i4SharedInfo(SI_EDID_VSDB_EXIST) == FALSE)
  1222. return;
  1223. if (ui1colorspace == HDMI_YCBCR_444)
  1224. _bAviInfoFm[0] = 0x40;
  1225. else if (ui1colorspace == HDMI_YCBCR_422)
  1226. _bAviInfoFm[0] = 0x20;
  1227. else
  1228. _bAviInfoFm[0] = 0x00;
  1229. _bAviInfoFm[0] |= 0x10; /* A0=1, Active format (R0~R3) inf valid */
  1230. _bAviInfoFm[1] = 0x0; /* bData2 */
  1231. if ((ui1resindex == HDMI_VIDEO_720x480p_60Hz) || (ui1resindex == HDMI_VIDEO_720x576p_50Hz))
  1232. _bAviInfoFm[1] |= AV_INFO_SD_ITU601;
  1233. else
  1234. _bAviInfoFm[1] |= AV_INFO_HD_ITU709;
  1235. _bAviInfoFm[1] |= 0x20;
  1236. _bAviInfoFm[1] |= 0x08;
  1237. _bAviInfoFm[2] = 0; /* bData3 */
  1238. _bAviInfoFm[2] |= 0x04; /* limit Range */
  1239. _bAviInfoFm[3] = HDMI_VIDEO_ID_CODE[ui1resindex]; /* bData4 */
  1240. if ((_bAviInfoFm[1] & AV_INFO_16_9_OUTPUT)
  1241. && ((ui1resindex == HDMI_VIDEO_720x480p_60Hz)
  1242. || (ui1resindex == HDMI_VIDEO_720x576p_50Hz))) {
  1243. _bAviInfoFm[3] = _bAviInfoFm[3] + 1;
  1244. }
  1245. _bAviInfoFm[4] = 0x00;
  1246. vHalSendAVIInfoFrame(&_bAviInfoFm[0]);
  1247. }
  1248. void vHalSendSPDInfoFrame(unsigned char *pr_bData)
  1249. {
  1250. unsigned char bSPD_CHSUM, bData;
  1251. unsigned char i = 0;
  1252. MT8193_VIDEO_FUNC();
  1253. if (i4SharedInfo(SI_EDID_VSDB_EXIST) == FALSE)
  1254. return;
  1255. vWriteHdmiGRLMsk(GRL_CTRL, 0, CTRL_SPD_EN);
  1256. vWriteByteHdmiGRL(GRL_INFOFRM_VER, SPD_VERS);
  1257. vWriteByteHdmiGRL(GRL_INFOFRM_TYPE, SPD_TYPE);
  1258. vWriteByteHdmiGRL(GRL_INFOFRM_LNG, SPD_LEN);
  1259. bSPD_CHSUM = SPD_TYPE + SPD_VERS + SPD_LEN;
  1260. for (i = 0; i < SPD_LEN; i++)
  1261. bSPD_CHSUM += (*(pr_bData + i));
  1262. bSPD_CHSUM = 0x100 - bSPD_CHSUM;
  1263. vWriteByteHdmiGRL(GRL_IFM_PORT, bSPD_CHSUM);
  1264. for (i = 0; i < SPD_LEN; i++)
  1265. vWriteByteHdmiGRL(GRL_IFM_PORT, *(pr_bData + i));
  1266. bData = bReadByteHdmiGRL(GRL_CTRL);
  1267. bData |= CTRL_SPD_EN;
  1268. vWriteByteHdmiGRL(GRL_CTRL, bData);
  1269. }
  1270. void vSend_AVUNMUTE(void)
  1271. {
  1272. unsigned char bData;
  1273. MT8193_VIDEO_FUNC();
  1274. if (i4SharedInfo(SI_EDID_VSDB_EXIST) == FALSE)
  1275. return;
  1276. bData = bReadByteHdmiGRL(GRL_CFG4);
  1277. bData |= CFG4_AV_UNMUTE_EN; /* disable original mute */
  1278. bData &= ~CFG4_AV_UNMUTE_SET; /* disable */
  1279. vWriteByteHdmiGRL(GRL_CFG4, bData);
  1280. udelay(30);
  1281. bData &= ~CFG4_AV_UNMUTE_EN; /* disable original mute */
  1282. bData |= CFG4_AV_UNMUTE_SET; /* disable */
  1283. vWriteByteHdmiGRL(GRL_CFG4, bData);
  1284. }
  1285. void vChgHDMIVideoResolution(unsigned char ui1resindex,
  1286. unsigned char ui1colorspace, unsigned char ui1hdmifs, unsigned char bdeepmode)
  1287. {
  1288. unsigned int u4Index;
  1289. MT8193_VIDEO_FUNC();
  1290. vHDMIAVMute();
  1291. vTxSignalOnOff(SV_ON);
  1292. vHDMIResetGenReg(ui1resindex, ui1colorspace);
  1293. vWriteHdmiDGIMsk(dgi1_yuv2rgb_ctr, 0, fifo_write_en);
  1294. mdelay(20);
  1295. vChgHDMIAudioOutput(ui1hdmifs, ui1resindex, bdeepmode);
  1296. for (u4Index = 0; u4Index < 5; u4Index++)
  1297. udelay(10);
  1298. vDisableGamut();
  1299. vSendAVIInfoFrame(ui1resindex, ui1colorspace);
  1300. vHalSendSPDInfoFrame(&_bSpdInf[0]);
  1301. vSend_AVUNMUTE();
  1302. HDMI_DEF_LOG("[hdmi]vid:%x,cs:%x,fs:%x,dp:%x\n", ui1resindex, ui1colorspace, ui1hdmifs,
  1303. bdeepmode);
  1304. vWriteHdmiDGIMsk(fifo_ctrl, 0, fifo_reset_sel | fifo_reset_on | sw_rst);
  1305. vWriteHdmiDGIMsk(dgi1_yuv2rgb_ctr, fifo_write_en, fifo_write_en);
  1306. vWriteHdmiSYSMsk(HDMI_SYS_PLLCTRL7, TX_DRV_ENABLE, TX_DRV_ENABLE_MSK);
  1307. }
  1308. void vChgtoSoftNCTS(unsigned char ui1resindex, unsigned char ui1audiosoft,
  1309. unsigned char ui1hdmifs, unsigned char bdeepmode)
  1310. {
  1311. MT8193_AUDIO_FUNC();
  1312. vHwNCTSOnOff(ui1audiosoft); /* change to software NCTS; */
  1313. vHDMI_NCTS(ui1hdmifs, ui1resindex, bdeepmode);
  1314. }
  1315. void vShowHpdRsenStatus(void)
  1316. {
  1317. if (bCheckPordHotPlug(HOTPLUG_MODE) == TRUE)
  1318. hdmi_print("[HDMI]HPD ON\n");
  1319. else
  1320. hdmi_print("[HDMI]HPD OFF\n");
  1321. if (bCheckPordHotPlug(PORD_MODE) == TRUE)
  1322. hdmi_print("[HDMI]RSEN ON\n");
  1323. else
  1324. hdmi_print("[HDMI]RSEN OFF\n");
  1325. if (i4SharedInfo(SI_HDMI_RECEIVER_STATUS) == HDMI_PLUG_IN_ONLY)
  1326. hdmi_print("[HDMI]SI_HDMI_RECEIVER_STATUS = HDMI_PLUG_IN_ONLY\n");
  1327. else if (i4SharedInfo(SI_HDMI_RECEIVER_STATUS) == HDMI_PLUG_IN_AND_SINK_POWER_ON)
  1328. hdmi_print("[HDMI]SI_HDMI_RECEIVER_STATUS = HDMI_PLUG_IN_AND_SINK_POWER_ON\n");
  1329. else if (i4SharedInfo(SI_HDMI_RECEIVER_STATUS) == HDMI_PLUG_OUT)
  1330. hdmi_print("[HDMI]SI_HDMI_RECEIVER_STATUS = HDMI_PLUG_OUT\n");
  1331. else
  1332. hdmi_print("[HDMI]SI_HDMI_RECEIVER_STATUS error\n");
  1333. }
  1334. void vShowOutputVideoResolution(void)
  1335. {
  1336. hdmi_print("[HDMI]HDMI output resolution = %s\n", szHdmiResStr[_stAvdAVInfo.e_resolution]); /* */
  1337. }
  1338. void vShowDviOrHdmiMode(void)
  1339. {
  1340. if (vIsDviMode())
  1341. hdmi_print("[HDMI]DVI Mode\n");
  1342. else
  1343. hdmi_print("[HDMI]HDMI Mode\n");
  1344. }
  1345. void vShowDeepColor(void)
  1346. {
  1347. if (_stAvdAVInfo.e_deep_color_bit == HDMI_NO_DEEP_COLOR)
  1348. hdmi_print("[HDMI]HDMI output deepcolor = HDMI_NO_DEEP_COLOR\n");
  1349. else if (_stAvdAVInfo.e_deep_color_bit == HDMI_DEEP_COLOR_10_BIT)
  1350. hdmi_print("[HDMI]HDMI output deepcolor = HDMI_DEEP_COLOR_10_BIT\n");
  1351. else if (_stAvdAVInfo.e_deep_color_bit == HDMI_DEEP_COLOR_12_BIT)
  1352. hdmi_print("[HDMI]HDMI output deepcolor = HDMI_DEEP_COLOR_12_BIT\n");
  1353. else if (_stAvdAVInfo.e_deep_color_bit == HDMI_DEEP_COLOR_16_BIT)
  1354. hdmi_print("[HDMI]HDMI output deepcolor = HDMI_DEEP_COLOR_16_BIT\n");
  1355. else
  1356. hdmi_print("[HDMI]HDMI output deepcolor error\n");
  1357. }
  1358. void vShowColorSpace(void)
  1359. {
  1360. if (_stAvdAVInfo.e_video_color_space == HDMI_RGB)
  1361. hdmi_print("[HDMI]HDMI output colorspace = HDMI_RGB\n");
  1362. else if (_stAvdAVInfo.e_video_color_space == HDMI_RGB_FULL)
  1363. hdmi_print("[HDMI]HDMI output colorspace = HDMI_RGB_FULL\n");
  1364. else if (_stAvdAVInfo.e_video_color_space == HDMI_YCBCR_444)
  1365. hdmi_print("[HDMI]HDMI output colorspace = HDMI_YCBCR_444\n");
  1366. else if (_stAvdAVInfo.e_video_color_space == HDMI_YCBCR_422)
  1367. hdmi_print("[HDMI]HDMI output colorspace = HDMI_YCBCR_422\n");
  1368. else if (_stAvdAVInfo.e_video_color_space == HDMI_XV_YCC)
  1369. hdmi_print("[HDMI]HDMI output colorspace = HDMI_XV_YCC\n");
  1370. else
  1371. hdmi_print("[HDMI]HDMI output colorspace error\n");
  1372. }
  1373. void vShowInforFrame(void)
  1374. {
  1375. hdmi_print
  1376. ("====================Audio inforFrame Start ====================================\n");
  1377. hdmi_print("Data Byte (1~5) = 0x%x 0x%x 0x%x 0x%x 0x%x\n", _bAudInfoFm[0],
  1378. _bAudInfoFm[1], _bAudInfoFm[2], _bAudInfoFm[3], _bAudInfoFm[4]);
  1379. hdmi_print("CC2~ CC0: 0x%x, %s\n", _bAudInfoFm[0] & 0x07,
  1380. cAudChCountStr[_bAudInfoFm[0] & 0x07]);
  1381. hdmi_print("CT3~ CT0: 0x%x, %s\n", (_bAudInfoFm[0] >> 4) & 0x0f,
  1382. cAudCodingTypeStr[(_bAudInfoFm[0] >> 4) & 0x0f]);
  1383. hdmi_print("SS1, SS0: 0x%x, %s\n", _bAudInfoFm[1] & 0x03,
  1384. cAudSampleSizeStr[_bAudInfoFm[1] & 0x03]);
  1385. hdmi_print("SF2~ SF0: 0x%x, %s\n", (_bAudInfoFm[1] >> 2) & 0x07,
  1386. cAudFsStr[(_bAudInfoFm[1] >> 2) & 0x07]);
  1387. hdmi_print("CA7~ CA0: 0x%x, %s\n", _bAudInfoFm[3] & 0xff,
  1388. cAudChMapStr[_bAudInfoFm[3] & 0xff]);
  1389. hdmi_print("LSV3~LSV0: %d db\n", (_bAudInfoFm[4] >> 3) & 0x0f);
  1390. hdmi_print("DM_INH: 0x%x ,%s\n", (_bAudInfoFm[4] >> 7) & 0x01,
  1391. cAudDMINHStr[(_bAudInfoFm[4] >> 7) & 0x01]);
  1392. hdmi_print
  1393. ("====================Audio inforFrame End ======================================\n");
  1394. hdmi_print
  1395. ("====================AVI inforFrame Start ====================================\n");
  1396. hdmi_print("Data Byte (1~5) = 0x%x 0x%x 0x%x 0x%x 0x%x\n", _bAviInfoFm[0],
  1397. _bAviInfoFm[1], _bAviInfoFm[2], _bAviInfoFm[3], _bAviInfoFm[4]);
  1398. hdmi_print("S1,S0: 0x%x, %s\n", _bAviInfoFm[0] & 0x03, cAviScanStr[_bAviInfoFm[0] & 0x03]);
  1399. hdmi_print("B1,S0: 0x%x, %s\n", (_bAviInfoFm[0] >> 2) & 0x03,
  1400. cAviBarStr[(_bAviInfoFm[0] >> 2) & 0x03]);
  1401. hdmi_print("A0: 0x%x, %s\n", (_bAviInfoFm[0] >> 4) & 0x01,
  1402. cAviActivePresentStr[(_bAviInfoFm[0] >> 4) & 0x01]);
  1403. hdmi_print("Y1,Y0: 0x%x, %s\n", (_bAviInfoFm[0] >> 5) & 0x03,
  1404. cAviRgbYcbcrStr[(_bAviInfoFm[0] >> 5) & 0x03]);
  1405. hdmi_print("R3~R0: 0x%x, %s\n", (_bAviInfoFm[1]) & 0x0f,
  1406. cAviActiveStr[(_bAviInfoFm[1]) & 0x0f]);
  1407. hdmi_print("M1,M0: 0x%x, %s\n", (_bAviInfoFm[1] >> 4) & 0x03,
  1408. cAviAspectStr[(_bAviInfoFm[1] >> 4) & 0x03]);
  1409. hdmi_print("C1,C0: 0x%x, %s\n", (_bAviInfoFm[1] >> 6) & 0x03,
  1410. cAviColorimetryStr[(_bAviInfoFm[1] >> 6) & 0x03]);
  1411. hdmi_print("SC1,SC0: 0x%x, %s\n", (_bAviInfoFm[2]) & 0x03,
  1412. cAviScaleStr[(_bAviInfoFm[2]) & 0x03]);
  1413. hdmi_print("Q1,Q0: 0x%x, %s\n", (_bAviInfoFm[2] >> 2) & 0x03,
  1414. cAviRGBRangeStr[(_bAviInfoFm[2] >> 2) & 0x03]);
  1415. if (((_bAviInfoFm[2] >> 4) & 0x07) <= 1)
  1416. hdmi_print("EC2~EC0: 0x%x, %s\n", (_bAviInfoFm[2] >> 4) & 0x07,
  1417. cAviExtColorimetryStr[(_bAviInfoFm[2] >> 4) & 0x07]);
  1418. else
  1419. hdmi_print("EC2~EC0: resevered\n");
  1420. hdmi_print("ITC: 0x%x, %s\n", (_bAviInfoFm[2] >> 7) & 0x01,
  1421. cAviItContentStr[(_bAviInfoFm[2] >> 7) & 0x01]);
  1422. hdmi_print
  1423. ("====================AVI inforFrame End ======================================\n");
  1424. hdmi_print
  1425. ("====================SPD inforFrame Start ====================================\n");
  1426. hdmi_print("Data Byte (1~8) = 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
  1427. _bSpdInf[0], _bSpdInf[1], _bSpdInf[2], _bSpdInf[3], _bSpdInf[4], _bSpdInf[5],
  1428. _bSpdInf[6], _bSpdInf[7]);
  1429. hdmi_print("Data Byte (9~16) = 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
  1430. _bSpdInf[8], _bSpdInf[9], _bSpdInf[10], _bSpdInf[11], _bSpdInf[12], _bSpdInf[13],
  1431. _bSpdInf[14], _bSpdInf[15]);
  1432. hdmi_print("Data Byte (17~24)= 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
  1433. _bSpdInf[16], _bSpdInf[17], _bSpdInf[18], _bSpdInf[19], _bSpdInf[20],
  1434. _bSpdInf[21], _bSpdInf[22], _bSpdInf[23]);
  1435. hdmi_print("Data Byte 25 = 0x%x\n", _bSpdInf[24]);
  1436. hdmi_print("Source Device information is %s\n", cSPDDeviceStr[_bSpdInf[24]]);
  1437. hdmi_print
  1438. ("====================SPD inforFrame End ======================================\n");
  1439. if (fgIsAcpEnable()) {
  1440. hdmi_print
  1441. ("====================ACP inforFrame Start ====================================\n");
  1442. hdmi_print("Acp type =0x%x\n", _bAcpType);
  1443. if (_bAcpType == 0) {
  1444. hdmi_print("Generic Audio\n");
  1445. hdmi_print
  1446. ("Data Byte (1~8)= 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
  1447. _bAcpData[0], _bAcpData[1], _bAcpData[2], _bAcpData[3], _bAcpData[4],
  1448. _bAcpData[5], _bAcpData[6], _bAcpData[7]);
  1449. hdmi_print
  1450. ("Data Byte (9~16)= 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
  1451. _bAcpData[8], _bAcpData[9], _bAcpData[10], _bAcpData[11],
  1452. _bAcpData[12], _bAcpData[13], _bAcpData[14], _bAcpData[15]);
  1453. } else if (_bAcpType == 1) {
  1454. hdmi_print("IEC 60958-Identified Audio\n");
  1455. hdmi_print
  1456. ("Data Byte (1~8)= 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
  1457. _bAcpData[0], _bAcpData[1], _bAcpData[2], _bAcpData[3], _bAcpData[4],
  1458. _bAcpData[5], _bAcpData[6], _bAcpData[7]);
  1459. hdmi_print
  1460. ("Data Byte (9~16)= 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
  1461. _bAcpData[8], _bAcpData[9], _bAcpData[10], _bAcpData[11],
  1462. _bAcpData[12], _bAcpData[13], _bAcpData[14], _bAcpData[15]);
  1463. } else if (_bAcpType == 2) {
  1464. hdmi_print("DVD Audio\n");
  1465. hdmi_print("DVD-AUdio_TYPE_Dependent Generation = 0x%x\n", _bAcpData[0]);
  1466. hdmi_print("Copy Permission = 0x%x\n", (_bAcpData[1] >> 6) & 0x03);
  1467. hdmi_print("Copy Number = 0x%x\n", (_bAcpData[1] >> 3) & 0x07);
  1468. hdmi_print("Quality = 0x%x\n", (_bAcpData[1] >> 1) & 0x03);
  1469. hdmi_print("Transaction = 0x%x\n", _bAcpData[1] & 0x01);
  1470. } else if (_bAcpType == 3) {
  1471. hdmi_print("SuperAudio CD\n");
  1472. hdmi_print
  1473. ("CCI_1 Byte (1~8)= 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
  1474. _bAcpData[0], _bAcpData[1], _bAcpData[2], _bAcpData[3], _bAcpData[4],
  1475. _bAcpData[5], _bAcpData[6], _bAcpData[7]);
  1476. hdmi_print
  1477. ("CCI_1 Byte (9~16)= 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
  1478. _bAcpData[8], _bAcpData[9], _bAcpData[10], _bAcpData[11],
  1479. _bAcpData[12], _bAcpData[13], _bAcpData[14], _bAcpData[15]);
  1480. }
  1481. hdmi_print
  1482. ("====================ACP inforFrame End ======================================\n");
  1483. }
  1484. if (fgIsISRC1Enable()) {
  1485. hdmi_print
  1486. ("====================ISRC1 inforFrame Start ====================================\n");
  1487. hdmi_print("Data Byte (1~8)= 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
  1488. _bIsrc1Data[0], _bIsrc1Data[1], _bIsrc1Data[2], _bIsrc1Data[3],
  1489. _bIsrc1Data[4], _bIsrc1Data[5], _bIsrc1Data[6], _bIsrc1Data[7]);
  1490. hdmi_print
  1491. ("====================ISRC1 inforFrame End ======================================\n");
  1492. }
  1493. if (fgIsISRC2Enable()) {
  1494. hdmi_print
  1495. ("====================ISRC2 inforFrame Start ====================================\n");
  1496. hdmi_print("Data Byte (1~8)= 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
  1497. _bIsrc1Data[8], _bIsrc1Data[9], _bIsrc1Data[10], _bIsrc1Data[11],
  1498. _bIsrc1Data[12], _bIsrc1Data[13], _bIsrc1Data[14], _bIsrc1Data[15]);
  1499. hdmi_print
  1500. ("====================ISRC2 inforFrame End ======================================\n");
  1501. }
  1502. }
  1503. unsigned int u4ReadNValue(void)
  1504. {
  1505. return _u4NValue;
  1506. }
  1507. unsigned int u4ReadCtsValue(void)
  1508. {
  1509. unsigned int u4Data;
  1510. u4Data = bReadByteHdmiGRL(GRL_CTS0) & 0xff;
  1511. u4Data |= ((bReadByteHdmiGRL(GRL_CTS1) & 0xff) << 8);
  1512. u4Data |= ((bReadByteHdmiGRL(GRL_CTS2) & 0x0f) << 16);
  1513. return u4Data;
  1514. }
  1515. void vShowHdmiAudioStatus(void)
  1516. {
  1517. hdmi_print("[HDMI]HDMI output audio Channel Number =%d\n",
  1518. _stAvdAVInfo.ui1_aud_out_ch_number);
  1519. hdmi_print("[HDMI]HDMI output Audio Fs = %s\n", cHdmiAudFsStr[_stAvdAVInfo.e_hdmi_fs]);
  1520. hdmi_print("[HDMI]HDMI MCLK =%d\n", _stAvdAVInfo.u1HdmiI2sMclk);
  1521. hdmi_print("[HDMI]HDMI output ACR N= %d, CTS = %d\n", u4ReadNValue(), u4ReadCtsValue());
  1522. }
  1523. void vCheckDGI1CRC(void)
  1524. {
  1525. unsigned short u4Data = 0xffff, i;
  1526. for (i = 0; i < 10; i++) {
  1527. vWriteHdmiDGIMsk(dgi1_crc_mon_ctrl, c_crc_clr, c_crc_clr);
  1528. vWriteHdmiDGIMsk(dgi1_crc_mon_ctrl, c_crc_start, c_crc_start);
  1529. mdelay(30);
  1530. if (i == 0)
  1531. u4Data = dReadHdmiDGI(dgi1_crc_out) & 0xffff;
  1532. else {
  1533. if ((u4Data != (dReadHdmiDGI(dgi1_crc_out) & 0xffff)) || (u4Data == 0)) {
  1534. hdmi_print("[HDMI]number = %d, u4Data = 0x%x\n", i, u4Data);
  1535. hdmi_print("[HDMI]dgi crc error\n");
  1536. return;
  1537. }
  1538. }
  1539. }
  1540. hdmi_print("[HDMI]dgi crc pass\n");
  1541. }
  1542. void vCheckHDMICRC(void)
  1543. {
  1544. unsigned short u4Data = 0xffff, i;
  1545. for (i = 0; i < 10; i++) {
  1546. vWriteHdmiGRLMsk(CRC_CTRL, clr_crc_result, clr_crc_result | init_crc);
  1547. vWriteHdmiGRLMsk(CRC_CTRL, init_crc, clr_crc_result | init_crc);
  1548. mdelay(40);
  1549. if (i == 0)
  1550. u4Data =
  1551. (bReadByteHdmiGRL(CRC_RESULT_L) & 0xff) +
  1552. ((bReadByteHdmiGRL(CRC_RESULT_H) & 0xff) << 8);
  1553. else {
  1554. if ((u4Data !=
  1555. ((bReadByteHdmiGRL(CRC_RESULT_L) & 0xff) +
  1556. ((bReadByteHdmiGRL(CRC_RESULT_H) & 0xff) << 8))) || (u4Data == 0)) {
  1557. hdmi_print("[HDMI]number = %d, u4Data = 0x%x\n", i, u4Data);
  1558. hdmi_print("[HDMI]hdmi crc error\n");
  1559. return;
  1560. }
  1561. }
  1562. }
  1563. hdmi_print("[HDMI]hdmi crc pass\n");
  1564. }
  1565. void vCheckHDMICLKPIN(void)
  1566. {
  1567. unsigned int u4Data, i;
  1568. for (i = 0; i < 5; i++) {
  1569. vWriteHdmiSYSMsk(HDMI_SYS_FMETER, TRI_CAL | CALSEL, TRI_CAL | CALSEL);
  1570. vWriteHdmiSYSMsk(HDMI_SYS_FMETER, CLK_EXC, CLK_EXC);
  1571. while (!(dReadHdmiSYS(HDMI_SYS_FMETER) && CAL_OK))
  1572. ;
  1573. u4Data = ((dReadHdmiSYS(HDMI_SYS_FMETER) & (0xffff0000)) >> 16) * 26000 / 1024;
  1574. hdmi_print("[HDMI]hdmi pin clk = %d.%dM\n", (u4Data / 1000),
  1575. (u4Data - ((u4Data / 1000) * 1000)));
  1576. }
  1577. }
  1578. void mt8193_hdmistatus(void)
  1579. {
  1580. vShowHpdRsenStatus();
  1581. vShowOutputVideoResolution();
  1582. vShowDviOrHdmiMode();
  1583. vShowDeepColor();
  1584. vShowColorSpace();
  1585. vShowInforFrame();
  1586. vShowHdmiAudioStatus();
  1587. vShowEdidRawData();
  1588. vShowEdidInformation();
  1589. vShowHdcpRawData();
  1590. vCheckDGI1CRC();
  1591. vCheckHDMICRC();
  1592. vCheckHDMICLKPIN();
  1593. }
  1594. #endif