sysreg.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895
  1. #include "drv_types.h"
  2. #include "sysreg.h"
  3. #include "hdmi_time.h"
  4. #include "../../module_include/drv_gpio.h"
  5. #pragma pack(push,1)
  6. typedef struct __SYSTEM_REG
  7. {
  8. union
  9. {
  10. UINT32 reg000_007[0x2];
  11. struct
  12. {
  13. UINT32 VenderID: 16;
  14. UINT32 DeviceID: 16;
  15. UINT32 AuxVss: 8;
  16. UINT32 RevisionID: 8;
  17. UINT32 Information : 16;
  18. };
  19. struct
  20. {
  21. UINT32 reg000_b00_b15: 16;
  22. UINT32 chipInfo: 32;
  23. UINT32 reg004_b16_b31: 16;
  24. };
  25. };
  26. //UINT8 reg008_033[0x2c];
  27. UINT8 reg008_017[0x10];
  28. union
  29. {
  30. UINT32 reg018_01b;
  31. struct
  32. {
  33. UINT32 reg02C_b0_b5: 6;
  34. UINT32 R_CBUS_DRV_PD_P0: 2;
  35. UINT32 R_CBUS_DRV_PD_P1: 2;
  36. UINT32 R_CBUS_DRV_PD_P2: 2;
  37. UINT32 R_CBUS_DRV_P0: 2;
  38. UINT32 R_CBUS_DRV_P1: 2;
  39. UINT32 R_CBUS_DRV_P2: 2;
  40. UINT32 R_CBUS_VREF_SEL: 1;
  41. UINT32 R_CBUS_SR_PD: 1;
  42. UINT32 R_CBUS_PD_SEL: 3;
  43. UINT32 R_CBUS_EN_P0_CTL_0: 1;
  44. UINT32 R_CBUS_EN_P0_CTL_1: 1;
  45. UINT32 R_CBUS_EN_P0_CTL_2: 1;
  46. UINT32 R_CBUS_EN_P1_CTL_0: 1;
  47. UINT32 R_CBUS_EN_P1_CTL_1: 1;
  48. UINT32 R_CBUS_EN_P1_CTL_2: 1;
  49. UINT32 R_CBUS_EN_P2_CTL_0: 1;
  50. UINT32 R_CBUS_EN_P2_CTL_1: 1;
  51. UINT32 R_CBUS_EN_P2_CTL_2: 1;
  52. };
  53. };
  54. //UINT8 reg01c_02b[0x10];
  55. UINT8 reg01c_01f[0x4];
  56. union
  57. {
  58. UINT32 reg020_023;
  59. struct
  60. {
  61. UINT32 reg020_b0_b27: 28;
  62. UINT32 R_CBUS_EN_P0_CTL_3: 1 ;
  63. UINT32 R_CBUS_EN_P1_CTL_3: 1;
  64. UINT32 reg020_b30_b31: 2;
  65. };
  66. };
  67. UINT8 reg024_02b[0x8];
  68. union
  69. {
  70. UINT32 reg02C_02F;
  71. struct
  72. {
  73. UINT32 reg02C_b0_b20: 21;
  74. UINT32 AUX_HDMIC_EN: 1;
  75. UINT32 reg02C_b22_b28: 7;
  76. UINT32 AUX_R_CBUS_VREF_TN: 1;
  77. UINT32 AUX_R_CBUS_VREF_PD: 1;
  78. UINT32 R_TSBIST_RSTN: 1;
  79. };
  80. };
  81. UINT8 reg030_033[0x4];
  82. union
  83. {
  84. UINT32 reg034_037;
  85. struct
  86. {
  87. UINT32 reg034_b0_b11: 12;
  88. UINT32 R_AUX_EN_HDMIC_SW5V: 1;
  89. UINT32 R_AUX_HDMIC_SW5V: 1;
  90. UINT32 R_AUX_EN_HDMID_SW5V: 1;
  91. UINT32 R_AUX_HDMID_SW5V: 1;
  92. UINT32 R_AUX_EN_HDMIA_SW5V: 1;
  93. UINT32 R_AUX_HDMIA_SW5V: 1;
  94. UINT32 R_AUX_EN_HDMIB_SW5V: 1;
  95. UINT32 R_AUX_HDMIB_SW5V: 1;
  96. UINT32 reg034_b20_b23: 4;
  97. UINT32 R_ICLK_FROM_IMCLK: 1;
  98. UINT32 R_I2S_5VDET_SELJ: 1;
  99. UINT32 reg034_b26_b31: 6;
  100. };
  101. };
  102. union
  103. {
  104. UINT32 reg038_03B;
  105. struct
  106. {
  107. UINT32 reg038_b0_b2: 3;
  108. UINT32 R_AUX_HPD1_HIGH: 1;
  109. UINT32 R_AUX_HPD2_HIGH: 1;
  110. UINT32 R_AUX_HPD3_HIGH: 1;
  111. UINT32 reg038_b6_b26: 21;
  112. UINT32 R_AUX_HPD0_HIGH: 1;
  113. UINT32 reg038_b28_b31: 4;
  114. };
  115. };
  116. UINT8 reg_03C_0D3[0x98];
  117. union
  118. {
  119. UINT32 reg0D4_0D7;
  120. struct
  121. {
  122. UINT32 reg0D4_b0_b6: 7;
  123. UINT32 HDMI_CD_SENSE: 1;
  124. UINT32 reg0D4_b8_b31: 24;
  125. };
  126. };
  127. //UINT8 reg_0D8_0E7[0x10];
  128. UINT8 reg_0D8_0E3[0xc];
  129. union
  130. {
  131. UINT32 reg0E4_0E7;
  132. struct
  133. {
  134. UINT32 HPD_P0_EN_DIS_CTL0: 1;
  135. UINT32 HPD_P0_EN_DIS_CTL1: 1;
  136. UINT32 HPD_P0_EN_DIS_CTL2: 1;
  137. UINT32 HPD_P0_EN_DIS_CTL3: 1;
  138. UINT32 HPD_P1_EN_DIS_CTL0: 1;
  139. UINT32 HPD_P1_EN_DIS_CTL1: 1;
  140. UINT32 HPD_P1_EN_DIS_CTL2: 1;
  141. UINT32 HPD_P1_EN_DIS_CTL3: 1;
  142. UINT32 HPD_DRV_1_0_VBUS: 2;
  143. UINT32 HPD_DRV_1_0_PD_VBUS: 2;
  144. UINT32 HPD_EN_PU_HPD: 1;
  145. UINT32 HPD_EN_PD_HPD: 1;
  146. UINT32 HPD_EN_PU_VBUS: 1;
  147. UINT32 HPD_EN_PD_VBUS: 1;
  148. UINT32 HPD_OE_P_2_0: 3;
  149. UINT32 reg0e4_b19: 1;
  150. UINT32 HPD_PUDELAY_1_0:2;
  151. UINT32 HPD_PDDELAY_1_0:2;
  152. UINT32 HPD_SPIN_0:1;// HPDA's 1k on/off 0/1 = with 1k / without 1k
  153. UINT32 HPD_SPIN_1:1;// HPDB's 1k on/off 0/1 = with 1k / without 1k
  154. UINT32 HPD_SPIN_2:1;// HPDC's 1k on/off 0/1 = with 1k / without 1k
  155. UINT32 HPD_SPIN_7_3:5;
  156. };
  157. };
  158. union
  159. {
  160. UINT32 reg0E8_0EB;
  161. struct
  162. {
  163. UINT32 Debug_Bit_A_Sel: 5;
  164. UINT32 reserved_b5: 1;
  165. UINT32 AUX_R_IO_CBUS_SELL: 2;
  166. UINT32 Debug_Bit_B_Sel: 5;
  167. UINT32 reserved_b13: 1;
  168. UINT32 AUX_R_IO_CBUS_SELH: 2;
  169. UINT32 Debug_Bit_C_Sel: 5;
  170. UINT32 reserved_b21: 1;
  171. UINT32 AUX_R_MLIOVREFISEL_b0_b1: 2;
  172. UINT32 Debug_Bit_D_Sel: 5;
  173. UINT32 reserved_b29: 1;
  174. UINT32 AUX_R_MLIOVREFISEL_b2_b3: 2;
  175. };
  176. };
  177. union
  178. {
  179. UINT32 reg0EC_0EF;
  180. struct
  181. {
  182. UINT32 Debug_Bit_E_Sel: 5;
  183. UINT32 reserved_b5_b7: 3;
  184. UINT32 Debug_Bit_F_Sel: 5;
  185. UINT32 reserved_b13_b15: 3;
  186. UINT32 Debug_Bit_G_Sel: 5;
  187. UINT32 AUX_R_CBUS_IO_SEL1: 1;
  188. UINT32 AUX_R_HPDIO_MAN_MODE: 1;
  189. UINT32 AUX_R_HPDIO_HDMI: 1;
  190. UINT32 Debug_Bit_H_Sel: 5;
  191. UINT32 AUX_R_CBUS_IO_SEL0: 1;
  192. UINT32 AUX_R_MHL_ACTIVE: 1;
  193. UINT32 AUX_R_CBUS_PDN: 1;
  194. };
  195. };
  196. UINT8 reg_F0_127[0x38];
  197. union
  198. {
  199. UINT32 reg128_12B;
  200. UINT32 R_HDMISTC_INI_VALUE;
  201. };
  202. union
  203. {
  204. UINT32 reg12C_12F;
  205. struct
  206. {
  207. UINT32 R_HDMISTC_ENA: 1;
  208. UINT32 R_HDMISTC_SPEED_SEL: 3;
  209. UINT32 R_MPEG_CH_SEL: 1;
  210. UINT32 R_AUDIO_SRC_TEST: 1;
  211. UINT32 R_AUDIO_SRC_SEL: 1;
  212. UINT32 reg12c_b07: 1;
  213. UINT32 R_HDMI_TMDSCLK_ENJ: 1;
  214. UINT32 R_HDMI_FUNCTEST: 1;
  215. UINT32 reg12c_b10_b31: 22;
  216. };
  217. };
  218. UINT8 reg130_14f[0x20];
  219. union
  220. {
  221. UINT32 reg150_153;
  222. struct
  223. {
  224. UINT32 reserved_150_b0_b19: 20;
  225. UINT32 r_en_ARC_portA: 1;
  226. UINT32 r_en_ARC_portB: 1;
  227. UINT32 r_en_ARC_portC: 1;
  228. UINT32 r_en_ARC_portD: 1;
  229. UINT32 reserved_150_b24_b26: 3;
  230. UINT32 R_HDMIAC_SEL_D: 1;
  231. UINT32 R_HDMIAC_SEL_C: 1;
  232. UINT32 reserved_150_b29_b31: 3;
  233. };
  234. };
  235. UINT8 reg154_1AB[0x58];
  236. union
  237. {
  238. UINT32 reg1AC_1AF;
  239. struct
  240. {
  241. UINT32 reserved_1AC_b0_b27: 28;
  242. UINT32 R_HPDIO_SEL: 3;
  243. UINT32 reserved_1AC_b31: 1;
  244. };
  245. };
  246. UINT8 reg1B0_214[0x65];
  247. union
  248. {
  249. UINT8 reg215;
  250. struct
  251. {
  252. UINT8 reserved_215_b0_b7: 7;
  253. UINT8 R_DEMOD_PWDN_BG: 1;
  254. };
  255. };
  256. UINT8 reg216_227[0x12];
  257. union
  258. {
  259. UINT32 reg228_22B;
  260. struct
  261. {
  262. UINT32 reserved_228_b0_b30: 31;
  263. UINT32 EN_AVI_V3: 1;
  264. };
  265. };
  266. UINT8 reg22C_253[0x28];
  267. union
  268. {
  269. UINT32 reg254_257;
  270. struct
  271. {
  272. UINT32 reserved_254_b0_b23: 24;
  273. UINT32 R_BYPASS_MHL: 1;
  274. UINT32 R_DROP_LINE: 2;
  275. UINT32 R_DROP_POINT: 2;
  276. UINT32 reserved_254_b29_b30: 2;
  277. UINT32 R_HDMI_TMDS_CLK_DIV2_SRC: 1;
  278. };
  279. };
  280. } SYSTEM_REG;
  281. typedef struct __DDC_REG
  282. {
  283. UINT8 reg0000_0024[0x25];
  284. union
  285. {
  286. UINT8 reg0025;
  287. struct
  288. {
  289. UINT8 PortA_Det5V_En:1;
  290. UINT8 Slave0Neg_tSUtHD:1; //I2C slave 0 negative setup/hold time support
  291. UINT8 unkown_0025_b2_b7:6;
  292. };
  293. };
  294. UINT8 reg0026_002b[0x06];
  295. union
  296. {
  297. UINT8 reg002c_002d[0x02];
  298. struct
  299. {
  300. UINT8 SlaveMMIOPush:1;
  301. UINT8 DDC_5V_in_count:4; //0: 1ms, 1: 125us, 2: 250us, 3: 500us, 4: 1ms, 5: 2ms, 6: 4ms, 7: 8ms, 8: 16ms, 9: 32ms, 10:64ms, 11: 100ms, else: 170ms
  302. UINT8 DDC_5V_out_count:4; //0: 170ms, 1: 125us, 2: 250us, 3: 500us, 4: 1ms, 5: 2ms, 6: 4ms, 7: 8ms, 8: 16ms, 9: 32ms, 10:64ms, 11: 100ms, else: 170ms
  303. UINT8 unkown_002c_002d_b9_bf:7;
  304. };
  305. };
  306. UINT8 reg002e_0030[0x03];
  307. union
  308. {
  309. UINT8 reg0031;
  310. struct
  311. {
  312. UINT8 PortB_Det5V_En: 1;
  313. UINT8 Slave1Neg_tSUtHD:1; //I2C slave 1 negative setup/hold time support
  314. UINT8 unkown_0031_b2_b7:6;
  315. };
  316. };
  317. UINT8 reg0032_004e[0x1d];
  318. union
  319. {
  320. UINT8 reg004f;
  321. struct
  322. {
  323. UINT8 PortA_Det5V_mode: 2; //00,11:detect SCL and SDA ; 01:detect SCL ; 10:detect SDA
  324. UINT8 PortB_Det5V_mode: 2; //00,11:detect SCL and SDA ; 01:detect SCL ; 10:detect SDA
  325. };
  326. };
  327. UINT8 reg0050_0124[0xd5];
  328. union
  329. {
  330. UINT8 reg0125;
  331. struct
  332. {
  333. UINT8 PortC_Det5V_En:1;
  334. UINT8 Slave3Neg_tSUtHD:1; //I2C slave 3 negative setup/hold time support
  335. UINT8 unkown_0125_b2_b7:6;
  336. };
  337. };
  338. UINT8 reg0126_012b[0x6];
  339. union
  340. {
  341. UINT8 reg012c_012d[0x02];
  342. struct
  343. {
  344. UINT8 Slave345_MMIOPush:1;
  345. UINT8 Slave345_DDC_5V_in_count:4; //0: 1ms, 1: 125us, 2: 250us, 3: 500us, 4: 1ms, 5: 2ms, 6: 4ms, 7: 8ms, 8: 16ms, 9: 32ms, 10:64ms, 11: 100ms, else: 170ms
  346. UINT8 Slave345_DDC_5V_out_count:4; //0: 170ms, 1: 125us, 2: 250us, 3: 500us, 4: 1ms, 5: 2ms, 6: 4ms, 7: 8ms, 8: 16ms, 9: 32ms, 10:64ms, 11: 100ms, else: 170ms
  347. UINT8 unkown_012c_012d_b9_bf:7;
  348. };
  349. };
  350. UINT8 reg012e_0141[0x14];
  351. union
  352. {
  353. UINT8 reg0142;
  354. struct
  355. {
  356. UINT8 PortC_Det5V_mode: 2; //00,11:detect SCL and SDA ; 01:detect SCL ; 10:detect SDA
  357. UINT8 unkown_0142_b2_b7:6;
  358. };
  359. };
  360. } DDC_REG;
  361. #pragma pack(pop)
  362. #define SYSTEM_MMIO_BASE 0xBE000000
  363. static volatile SYSTEM_REG *sysreg = (SYSTEM_REG*)SYSTEM_MMIO_BASE;
  364. #define DDC_MMIO_BASE 0xBE060000
  365. static volatile DDC_REG *ddcreg = (DDC_REG*)DDC_MMIO_BASE;
  366. void sysset_DDC_PortA_Det5V_En(BOOL en)
  367. {
  368. ddcreg->PortA_Det5V_En = en;
  369. }
  370. void sysset_DDC_PortB_Det5V_En(BOOL en)
  371. {
  372. ddcreg->PortB_Det5V_En = en;
  373. }
  374. void sysset_DDC_PortC_Det5V_En(BOOL en)
  375. {
  376. ddcreg->PortC_Det5V_En = en;
  377. }
  378. void sysset_hdmi_hpd_detection(void)
  379. {
  380. ddcreg->PortA_Det5V_En = 0;
  381. ddcreg->PortB_Det5V_En = 0;
  382. ddcreg->PortC_Det5V_En = 0;
  383. //For S2 P531 Only have DDC_SDA_%V_Det,
  384. sysreg->R_I2S_5VDET_SELJ = 1;
  385. //Port_A:
  386. //Be06004F[1:0]
  387. //00,11: detect SCL and SDA
  388. //01: detect SCL
  389. //10: detect SDA
  390. ddcreg->PortA_Det5V_mode = 2;
  391. //Port_B:
  392. //Be06004F[3:2]
  393. //00,11: detect SCL and SDA
  394. //01: detect SCL
  395. //10: detect SDA
  396. ddcreg->PortB_Det5V_mode = 2;
  397. //Be060025[0], port A
  398. // 0:disable 5V detection
  399. // 1:enable 5V detection
  400. ddcreg->PortA_Det5V_En = 1;
  401. ddcreg->Slave0Neg_tSUtHD = 1;
  402. //Be060031[0], port B
  403. // 0:disable 5V detection
  404. // 1:enable 5V detection
  405. ddcreg->PortB_Det5V_En = 1;
  406. ddcreg->Slave1Neg_tSUtHD = 1;
  407. //Port_C:
  408. //Be060142[1:0]
  409. //00,11: detect SCL and SDA
  410. //01: detect SCL
  411. //10: detect SDA
  412. ddcreg->PortC_Det5V_mode = 2;
  413. //Be060125[0], port C
  414. // 0:disable 5V detection
  415. // 1:enable 5V detection
  416. ddcreg->PortC_Det5V_En = 1;
  417. ddcreg->Slave3Neg_tSUtHD = 1;
  418. //be06002c[4:1]
  419. //in_count
  420. //0: 1ms, 1: 125us, 2: 250us, 3: 500us, 4: 1ms, 5: 2ms, 6: 4ms, 7: 8ms, 8: 16ms, 9: 32ms, 10:64ms, 11: 100ms, else: 170ms
  421. ddcreg->DDC_5V_in_count = 2; //SONY BDP-S360 SDA high period is about 290us, low period is about 300ms
  422. ddcreg->Slave345_DDC_5V_in_count= 2;
  423. sysreg->R_AUX_HDMIA_SW5V = 0; //SW 5V port A Level
  424. sysreg->R_AUX_EN_HDMIA_SW5V = 1; //SW 5V port A Enable
  425. sysreg->R_AUX_HDMIB_SW5V = 0; //SW 5V port B Level
  426. sysreg->R_AUX_EN_HDMIB_SW5V = 1; //SW 5V port B Enable
  427. sysreg->R_AUX_HDMIC_SW5V = 0; //SW 5V port C Level
  428. sysreg->R_AUX_EN_HDMIC_SW5V = 1; //SW 5V port C Enable
  429. }
  430. void sysset_hdmi_hpd_a(DRV_HPD_LEVEL_e eLevel)
  431. {
  432. if(eLevel == DRV_HPD_LEVEL_HIGH)
  433. {
  434. sysreg->R_AUX_HPD0_HIGH = 1;
  435. }
  436. else
  437. {
  438. sysreg->R_AUX_HPD0_HIGH = 0;
  439. }
  440. }
  441. void sysset_hdmi_hpd_b(DRV_HPD_LEVEL_e eLevel)
  442. {
  443. if(eLevel == DRV_HPD_LEVEL_HIGH)
  444. {
  445. sysreg->R_AUX_HPD1_HIGH = 1;
  446. }
  447. else
  448. {
  449. sysreg->R_AUX_HPD1_HIGH = 0;
  450. }
  451. }
  452. void sysset_hdmi_hpd_c(DRV_HPD_LEVEL_e eLevel)
  453. {
  454. sysreg->HPD_EN_PD_HPD = 0;//For 533 C port only HPD_P2 pull down enable 0/1 = disable / enable output low driver
  455. if(eLevel == DRV_HPD_LEVEL_HIGH)
  456. {
  457. sysreg->R_AUX_HPD2_HIGH = 1;
  458. }
  459. else
  460. {
  461. sysreg->R_AUX_HPD2_HIGH = 0;
  462. }
  463. }
  464. void sysset_hdmi_tmdsclk(BOOL bEnable)
  465. {
  466. sysreg->R_HDMI_TMDSCLK_ENJ = bEnable ? 1 : 0;
  467. }
  468. void sysset_hdmi_stcInitValue(UINT32 value)
  469. {
  470. sysreg->R_HDMISTC_INI_VALUE = value;
  471. }
  472. void sysset_hdmi_stcclk(void)
  473. {
  474. /* Enable HDMI stc clock */
  475. sysreg->R_HDMISTC_ENA = 1;
  476. sysreg->R_MPEG_CH_SEL = 1;
  477. sysreg->R_AUDIO_SRC_TEST = 0;
  478. sysreg->R_AUDIO_SRC_SEL = 1;
  479. sysreg->reg12c_b07 = 0;
  480. }
  481. void sysset_cec_arc(BOOL enable)
  482. {
  483. sysreg->r_en_ARC_portA = enable ? 1 : 0;
  484. sysreg->r_en_ARC_portB = enable ? 1 : 0;
  485. sysreg->r_en_ARC_portC = enable ? 1 : 0;
  486. sysreg->r_en_ARC_portD = enable ? 1 : 0;
  487. if(enable)
  488. {
  489. *((u8 *)0xbe0f0650) = (*((u8 *)0xbe0f0650) &0xF7) | 0x08; //Set Bit:3 IO driving strength 1 for 0025759: [ARC]HEACT 5-12 Signal Amplitude Test
  490. }
  491. else
  492. {
  493. *((u8 *)0xbe0f0650) = (*((u8 *)0xbe0f0650) &0xF7) | 0x00;
  494. }
  495. }
  496. void sysset_cbus_port_sel(HDMI_PORT_T port)
  497. {
  498. switch (port)
  499. {
  500. case HDMI_PORT_A:
  501. sysreg->AUX_R_CBUS_IO_SEL0 = 0;//Select Port:A CBUS
  502. sysreg->AUX_R_CBUS_IO_SEL1 = 0;//Select Port:A CBUS
  503. break;
  504. case HDMI_PORT_B:
  505. sysreg->AUX_R_CBUS_IO_SEL0 = 1;//Select Port:B CBUS
  506. sysreg->AUX_R_CBUS_IO_SEL1 = 0;//Select Port:B CBUS
  507. break;
  508. case HDMI_PORT_C:
  509. sysreg->AUX_R_CBUS_IO_SEL0 = 0;//Select Port:C CBUS
  510. sysreg->AUX_R_CBUS_IO_SEL1 = 1;//Select Port:C CBUS
  511. break;
  512. default:
  513. break;
  514. }
  515. }
  516. void sysset_VbusEnable(BOOL en)
  517. {
  518. //P2_EN_CTL[1] (VBUS's EN)
  519. //P2_EN_CTL[0] (VBUS's A)
  520. //sysreg->R_CBUS_EN_P2_CTL_2= 0;//331 control IDDQ , 533 floaing
  521. //0xbe00001b[6] 331
  522. //sysreg->R_CBUS_EN_P2_CTL_1 = 0;//331 GPIO's EN Set as GPO, 533 floating
  523. //0xbe00001b[5] 331
  524. //sysreg->R_CBUS_EN_P2_CTL_0 = en;//331 GPIO's A Set output value, 533 floating
  525. //0xbe0000e5[6] 533
  526. sysreg->HPD_EN_PU_VBUS = 0;//533 GPIO's EN Set as GPO
  527. //0xbe0000e5[7] 533
  528. sysreg->HPD_EN_PD_VBUS = en;//533 GPIO's A Set output value
  529. }
  530. #ifdef CONFIG_HDMI_SUPPORT_MHL
  531. extern BOOL MHL_CTS;
  532. #endif
  533. void sysset_HDMI_MHL_CBUS_EN_CTS_CTL(BOOL fEn)
  534. {
  535. #ifdef CONFIG_HDMI_SUPPORT_MHL
  536. if(CONFIG_HDMI_MHL_PORT==0)
  537. {
  538. if(MHL_CTS==TRUE)
  539. {
  540. // 1K
  541. sysreg->HPD_P0_EN_DIS_CTL0= 1;
  542. sysreg->HPD_P0_EN_DIS_CTL1= 0;
  543. sysreg->HPD_P0_EN_DIS_CTL2= 1;
  544. sysreg->HPD_P0_EN_DIS_CTL3= 0;
  545. // 100k
  546. sysreg->R_CBUS_EN_P0_CTL_0= 1;
  547. sysreg->R_CBUS_EN_P0_CTL_1= 1;
  548. sysreg->R_CBUS_EN_P0_CTL_2= 1;
  549. sysreg->R_CBUS_EN_P0_CTL_3= 0;
  550. }
  551. else
  552. {
  553. // 1K
  554. sysreg->HPD_P0_EN_DIS_CTL0= 1;
  555. sysreg->HPD_P0_EN_DIS_CTL1= 0;
  556. sysreg->HPD_P0_EN_DIS_CTL2= 1;
  557. sysreg->HPD_P0_EN_DIS_CTL3= 0;
  558. // 100k
  559. sysreg->R_CBUS_EN_P0_CTL_0= 1;
  560. sysreg->R_CBUS_EN_P0_CTL_1= 1;
  561. sysreg->R_CBUS_EN_P0_CTL_2= 1;
  562. sysreg->R_CBUS_EN_P0_CTL_3= 0;
  563. }
  564. sysreg->R_CBUS_EN_P1_CTL_0= 1;
  565. sysreg->R_CBUS_EN_P1_CTL_1= 1;
  566. sysreg->R_CBUS_EN_P1_CTL_2= 1;
  567. sysreg->R_CBUS_EN_P1_CTL_3= 1;
  568. sysreg->HPD_P1_EN_DIS_CTL0= 1;
  569. sysreg->HPD_P1_EN_DIS_CTL1= 1;
  570. sysreg->HPD_P1_EN_DIS_CTL2= 1;
  571. sysreg->HPD_P1_EN_DIS_CTL3= 1;
  572. }
  573. else if(CONFIG_HDMI_MHL_PORT==1)
  574. {
  575. sysreg->R_CBUS_EN_P0_CTL_0= 1;
  576. sysreg->R_CBUS_EN_P0_CTL_1= 1;
  577. sysreg->R_CBUS_EN_P0_CTL_2= 1;
  578. sysreg->R_CBUS_EN_P0_CTL_3= 1;
  579. sysreg->HPD_P0_EN_DIS_CTL0= 1;
  580. sysreg->HPD_P0_EN_DIS_CTL1= 1;
  581. sysreg->HPD_P0_EN_DIS_CTL2= 1;
  582. sysreg->HPD_P0_EN_DIS_CTL3= 1;
  583. if(MHL_CTS==TRUE)
  584. {
  585. // 1K
  586. sysreg->HPD_P1_EN_DIS_CTL0= 1;
  587. sysreg->HPD_P1_EN_DIS_CTL1= 0;
  588. sysreg->HPD_P1_EN_DIS_CTL2= 1;
  589. sysreg->HPD_P1_EN_DIS_CTL3= 0;
  590. // 100k
  591. sysreg->R_CBUS_EN_P1_CTL_0= 1;
  592. sysreg->R_CBUS_EN_P1_CTL_1= 1;
  593. sysreg->R_CBUS_EN_P1_CTL_2= 1;
  594. sysreg->R_CBUS_EN_P1_CTL_3= 0;
  595. }
  596. else
  597. {
  598. // 1K
  599. sysreg->HPD_P1_EN_DIS_CTL0= 1;
  600. sysreg->HPD_P1_EN_DIS_CTL1= 0;
  601. sysreg->HPD_P1_EN_DIS_CTL2= 1;
  602. sysreg->HPD_P1_EN_DIS_CTL3= 0;
  603. // 100k
  604. sysreg->R_CBUS_EN_P1_CTL_0= 1;
  605. sysreg->R_CBUS_EN_P1_CTL_1= 1;
  606. sysreg->R_CBUS_EN_P1_CTL_2= 1;
  607. sysreg->R_CBUS_EN_P1_CTL_3= 0;
  608. }
  609. }
  610. #endif
  611. }
  612. void sysset_Cbus_Init(void)
  613. {
  614. sysreg->R_CBUS_DRV_PD_P0= 0;
  615. sysreg->R_CBUS_DRV_PD_P1= 0;
  616. sysreg->R_CBUS_DRV_PD_P2= 2;//331 control VBUS's DRV
  617. sysreg->R_CBUS_DRV_P0= 0;
  618. sysreg->R_CBUS_DRV_P1= 0;
  619. sysreg->HPD_DRV_1_0_VBUS=2;//533 control VBUS's DRV
  620. sysreg->R_CBUS_VREF_SEL= 1;
  621. sysreg->R_CBUS_SR_PD= 0;//Bryan@20140813 Enable 331A1 ECO for MHL CTS 4.3.10.2
  622. //sysreg->R_CBUS_PD_SEL= 0;
  623. sysreg->AUX_R_CBUS_VREF_PD= 0;
  624. sysreg->AUX_R_CBUS_VREF_TN= 1;
  625. sysreg->AUX_R_IO_CBUS_SELH= 0;//Bryan@20140813 331A1 ECO for MHL CTS 4.3.13.1 & 4.3.16.1
  626. sysreg->AUX_R_IO_CBUS_SELL= 0;
  627. sysreg->R_CBUS_EN_P1_CTL_3= 1;
  628. sysreg->R_CBUS_EN_P0_CTL_3= 1;
  629. //sysreg->R_CBUS_EN_P2_CTL_2= 0;
  630. //sysreg->R_CBUS_EN_P2_CTL_1 = 0;//Set as GPO
  631. //sysreg->R_CBUS_EN_P2_CTL_0 = 0;//Set output value
  632. //*((u8 *)0xbe0f0628) = (*((u8 *)0xbe0f0628)&0xFE) | 0x1 ;//For CD-SENSE current leakage issue, PDE1A1J IN P331, NPDE1A1J IN P531. PDE1A1J CAN'T SET PD =1 IN INPUT MODE
  633. /* CBUS Resistance Setting */
  634. //sysreg->R_ATE_Z_DISCOVER = 1;
  635. //sysreg->R_ATE_Z_SINK = 0;
  636. if(GPIOGetValueByPinFunc(GPIO_PIN_MHL_CD_SENSE_DETECT)==0)
  637. {
  638. sysset_VbusEnable(0);
  639. }
  640. #ifdef CONFIG_HDMI_MHL_PORT
  641. sysset_HDMI_MHL_CBUS_EN_CTS_CTL(FALSE);
  642. #else
  643. sysreg->R_CBUS_EN_P0_CTL_0= 0;
  644. sysreg->R_CBUS_EN_P0_CTL_1= 0;
  645. sysreg->R_CBUS_EN_P0_CTL_2= 0;
  646. sysreg->R_CBUS_EN_P0_CTL_3= 0;
  647. sysreg->R_CBUS_EN_P1_CTL_0= 0;
  648. sysreg->R_CBUS_EN_P1_CTL_1= 0;
  649. sysreg->R_CBUS_EN_P1_CTL_2= 0;
  650. sysreg->R_CBUS_EN_P1_CTL_3= 0;
  651. #endif
  652. }
  653. void sysset_HDMI_Downscale(BOOL en)
  654. {
  655. sysreg->R_BYPASS_MHL = en;
  656. }
  657. void sysset_HDMI_HPD_1K_Init(void)
  658. {
  659. #ifdef HDMI_HPD_USE_1K_OHM
  660. sysreg->R_CBUS_DRV_P0= 0;
  661. sysreg->R_CBUS_DRV_P1= 0;
  662. sysreg->R_CBUS_DRV_P2= 3;
  663. #else
  664. sysreg->R_CBUS_DRV_P0= 0;
  665. sysreg->R_CBUS_DRV_P1= 0;
  666. sysreg->R_CBUS_DRV_P2= 3;
  667. #endif
  668. }
  669. void sysset_HDMI_HPD_1K_OnOff(HDMI_PORT_T ePort, BOOL fOn)
  670. {
  671. if(ePort == HDMI_PORT_A)
  672. {
  673. if(fOn == TRUE)
  674. //sysreg->R_CBUS_DRV_P0= 0;
  675. sysreg->HPD_SPIN_0= 0;
  676. else
  677. //sysreg->R_CBUS_DRV_P0= 2;//For MHL CBus driving
  678. sysreg->HPD_SPIN_0= 1;//For HPD driving
  679. }
  680. else if(ePort == HDMI_PORT_B)
  681. {
  682. if(fOn == TRUE)
  683. //sysreg->R_CBUS_DRV_P1= 0;
  684. sysreg->HPD_SPIN_1= 0;
  685. else
  686. //sysreg->R_CBUS_DRV_P1= 2;//For MHL CBus driving
  687. sysreg->HPD_SPIN_1= 1;//For HPD driving
  688. }
  689. else if(ePort == HDMI_PORT_C)
  690. {
  691. if(fOn == TRUE)
  692. //sysreg->R_CBUS_DRV_P2= 0;
  693. sysreg->HPD_SPIN_2= 0;
  694. else
  695. //sysreg->R_CBUS_DRV_P2= 2;//For MHL CBus driving
  696. sysreg->HPD_SPIN_2= 1;//For HPD driving
  697. }
  698. }
  699. void sysset_HDMI_SW5V(HDMI_PORT_T port, BOOL en)
  700. {
  701. printk("[H] %s port:%d=%d\n", __FUNCTION__, port, en);
  702. switch (port)
  703. {
  704. case HDMI_PORT_A:
  705. if(en == TRUE) //turn on portA SW 5V, turn off portA 5V detection
  706. {
  707. sysreg->R_AUX_HDMIA_SW5V = 1; //SW 5V port A Level
  708. sysreg->R_AUX_EN_HDMIA_SW5V = 1; //SW 5V port A Enable
  709. ddcreg->PortA_Det5V_En = 0; //turn off DDC 5V detection
  710. }
  711. else //turn on portA 5V detection, turn off portA SW 5V
  712. {
  713. ddcreg->PortA_Det5V_En = 1; //turn on DDC 5V detection
  714. HDMI_DelayMs(10);
  715. sysreg->R_AUX_EN_HDMIA_SW5V = 0; //SW 5V port A Enable
  716. //sysreg->R_AUX_HDMIA_SW5V = 0; //SW 5V port A Level
  717. }
  718. break;
  719. case HDMI_PORT_B:
  720. if(en == TRUE)
  721. {
  722. sysreg->R_AUX_HDMIB_SW5V = 1; //SW 5V port B Level
  723. sysreg->R_AUX_EN_HDMIB_SW5V = 1; //SW 5V port B Enable
  724. ddcreg->PortB_Det5V_En = 0; //turn off DDC 5V detection
  725. }
  726. else
  727. {
  728. ddcreg->PortB_Det5V_En = 1; //turn on DDC 5V detection
  729. HDMI_DelayMs(10);
  730. sysreg->R_AUX_EN_HDMIB_SW5V = 0; //SW 5V port B Enable
  731. //sysreg->R_AUX_HDMIB_SW5V = 0; //SW 5V port B Level
  732. }
  733. break;
  734. case HDMI_PORT_C:
  735. if(en == TRUE)
  736. {
  737. sysreg->R_AUX_EN_HDMIC_SW5V = 1; //SW 5V port C Enable
  738. sysreg->R_AUX_HDMIC_SW5V = 1; //SW 5V port C Level
  739. ddcreg->PortC_Det5V_En = 0; //turn off DDC 5V detection
  740. }
  741. else
  742. {
  743. ddcreg->PortC_Det5V_En = 1; //turn on DDC 5V detection
  744. HDMI_DelayMs(10);
  745. sysreg->R_AUX_EN_HDMIC_SW5V = 0; //SW 5V port C Enable
  746. //sysreg->R_AUX_HDMIC_SW5V = 0; //SW 5V port C Level
  747. }
  748. break;
  749. default:
  750. break;
  751. }
  752. }
  753. void sysset_HDMI_MHL_CBus_OFF(void)
  754. {
  755. #ifdef CONFIG_HDMI_MHL_PORT
  756. if(CONFIG_HDMI_MHL_PORT==0)
  757. {
  758. sysreg->R_CBUS_DRV_PD_P0= 0;
  759. }
  760. else if(CONFIG_HDMI_MHL_PORT==1)
  761. {
  762. sysreg->R_CBUS_DRV_PD_P1= 0;
  763. }
  764. #endif
  765. }
  766. void sysset_HDMI_MHL_CBus_ON(void)
  767. {
  768. #ifdef CONFIG_HDMI_MHL_PORT
  769. if(CONFIG_HDMI_MHL_PORT==0)
  770. {
  771. sysreg->R_CBUS_DRV_PD_P0= 2;
  772. }
  773. else if(CONFIG_HDMI_MHL_PORT==1)
  774. {
  775. sysreg->R_CBUS_DRV_PD_P1= 2;
  776. }
  777. #endif
  778. }
  779. void sysset_DEMOD_BG_POWER_DOWN(BOOL fPD)
  780. {
  781. if(fPD == TRUE)
  782. sysreg->R_DEMOD_PWDN_BG= 1;
  783. else
  784. sysreg->R_DEMOD_PWDN_BG= 0;
  785. }
  786. void sysset_HDMI_EN_AVI_V3(BOOL bEnable)
  787. {
  788. sysreg->EN_AVI_V3 = bEnable ? 1 : 0;
  789. }