raontv_rf.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509
  1. /******************************************************************************
  2. * (c) COPYRIGHT 2013 RAONTECH, Inc. ALL RIGHTS RESERVED.
  3. *
  4. * TITLE : RAONTECH TV RF services source file.
  5. *
  6. * FILENAME : raontv_rf.c
  7. *
  8. * DESCRIPTION :
  9. * Library of routines to initialize, and operate on, the RAONTECH RF chip.
  10. *
  11. ******************************************************************************/
  12. /******************************************************************************
  13. * REVISION HISTORY
  14. *
  15. * DATE NAME REMARKS
  16. * ---------- ------------- ------------------------------------------------
  17. * 07/26/2013 Yang, Maverick Created.
  18. ******************************************************************************/
  19. #include "raontv_rf.h"
  20. #include "raontv_rf_adc_data.h"
  21. /* Down conversion Signal Monitoring. */
  22. //#define DEBUG_A_TEST_ZERO
  23. #ifdef RTV_ISDBT_ENABLE
  24. static const RTV_REG_INIT_INFO t_ISDBT_INIT[] =
  25. {
  26. { 0x28, 0x83 },
  27. { 0x2A, 0x00 },
  28. { 0x2B, 0x42 },
  29. { 0x2C, 0xF8 },
  30. { 0x2D, 0x00 },
  31. { 0x2E, 0x18 },
  32. { 0x32, 0x03 },
  33. { 0x33, 0x1B },
  34. { 0x34, 0x60 },
  35. { 0x37, 0xA0 },
  36. { 0x38, 0x08 },
  37. { 0x39, 0x53 },
  38. { 0x3A, 0xDC },
  39. { 0x3B, 0xD0 },
  40. { 0x3C, 0xEB }, // 0x0B => 0xEB
  41. { 0x3D, 0x76 },
  42. { 0x3E, 0x4F },
  43. { 0x3F, 0x26 },
  44. { 0x40, 0xDA },
  45. { 0x41, 0x06 },
  46. { 0x42, 0x02 },
  47. { 0x43, 0x50 },
  48. { 0x44, 0x4F },
  49. { 0x45, 0x88 },
  50. { 0x46, 0xDF },
  51. { 0x49, 0x34 },
  52. { 0x4A, 0x23 },
  53. { 0x4E, 0xFF },
  54. { 0x4F, 0xFD },
  55. { 0x50, 0x7F },
  56. #if defined(RAONTV_CHIP_PKG_WLCSP_HRM_ON)
  57. { 0x51, 0x00 },
  58. #else
  59. { 0x51, 0x07 },
  60. #endif
  61. { 0x52, 0x49 },
  62. { 0x56, 0x14 },
  63. { 0x58, 0x13 },
  64. { 0x5A, 0x3F },
  65. { 0x63, 0x0C },
  66. { 0x64, 0x0C },
  67. { 0x65, 0x4C },
  68. { 0x66, 0x0C },
  69. { 0x67, 0x0C },
  70. { 0x68, 0x4C },
  71. { 0x69, 0x0C },
  72. { 0x6A, 0x0C },
  73. { 0x6B, 0x4C },
  74. { 0x6D, 0x1E },
  75. { 0x6E, 0x1E },
  76. { 0x6F, 0x1E },
  77. { 0x70, 0x1E },
  78. { 0x71, 0x1E },
  79. { 0x72, 0x1E },
  80. { 0x73, 0x1F },
  81. { 0x74, 0x1F },
  82. { 0x78, 0x08 },
  83. { 0x7A, 0x07 },
  84. { 0x7B, 0x03 },
  85. { 0x7D, 0x08 },
  86. { 0x86, 0x82 },
  87. { 0x88, 0x8C },
  88. { 0x89, 0x0A },
  89. { 0x8E, 0x69 },
  90. { 0x8F, 0x00 },
  91. { 0x92, 0x80 },
  92. #ifdef DEBUG_A_TEST_ZERO
  93. { 0xA8, 0xA6 },
  94. #endif
  95. { 0xA9, 0xD6 },
  96. { 0xAA, 0xB5 },
  97. { 0xAB, 0x51 },
  98. { 0xAC, 0xCA },
  99. { 0xAD, 0x52 },
  100. { 0xAE, 0x0C },
  101. { 0xAF, 0x62 },
  102. { 0xB1, 0x75 }
  103. };
  104. #endif /* RTV_ISDBT_ENABLE */
  105. volatile U8 g_nLnaTuneVal;
  106. /*===============================================================================
  107. * rtvRF_ConfigurePowerType
  108. *
  109. * DESCRIPTION :
  110. * This function returns
  111. *
  112. *
  113. * ARGUMENTS : none.
  114. * RETURN VALUE : none.
  115. *============================================================================*/
  116. void rtvRF_ConfigurePowerType(E_RTV_TV_MODE_TYPE eTvMode)
  117. {
  118. RTV_REG_MAP_SEL(RF_PAGE);
  119. #if defined(RTV_PWR_LDO)
  120. RTV_REG_SET(0x5D,0x00);
  121. #elif defined(RTV_PWR_EXTERNAL)
  122. RTV_REG_SET(0x5D,0x01);
  123. #else
  124. #error "Code not present"
  125. #endif
  126. }
  127. static INT rtvRF_Lna_Tuning( U32 dwLoFreq)
  128. {
  129. U8 nidx=0;
  130. #if defined(RAONTV_CHIP_PKG_QFN)
  131. if (470000 < dwLoFreq && 500000 >= dwLoFreq) nidx = 0;
  132. else if (500000 < dwLoFreq && 530000 >= dwLoFreq) nidx = 1;
  133. else if (530000 < dwLoFreq && 630000 >= dwLoFreq) nidx = 2;
  134. else if (630000 < dwLoFreq && 710000 >= dwLoFreq) nidx = 3;
  135. else if (710000 < dwLoFreq && 810000 >= dwLoFreq) nidx = 4;
  136. else
  137. return RTV_INVAILD_FREQ;
  138. #else
  139. if (470000 < dwLoFreq && 510000 >= dwLoFreq) nidx = 0;
  140. else if (510000 < dwLoFreq && 550000 >= dwLoFreq) nidx = 1;
  141. else if (550000 < dwLoFreq && 590000 >= dwLoFreq) nidx = 2;
  142. else if (590000 < dwLoFreq && 670000 >= dwLoFreq) nidx = 3;
  143. else if (670000 < dwLoFreq && 709000 >= dwLoFreq) nidx = 4;
  144. else if (709000 < dwLoFreq && 810000 >= dwLoFreq) nidx = 5;
  145. else
  146. return RTV_INVAILD_FREQ;
  147. #endif
  148. if(g_nLnaTuneVal == nidx)
  149. return RTV_SUCCESS;
  150. RTV_REG_MAP_SEL(RF_PAGE);
  151. RTV_REG_MASK_SET(0x3E,0x3F,g_atLNAtbl[nidx][0]);
  152. RTV_REG_MASK_SET(0x42,0x03,g_atLNAtbl[nidx][1]);
  153. RTV_REG_MASK_SET(0x3C,0x3F,g_atLNAtbl[nidx][2]);
  154. RTV_REG_MASK_SET(0x41,0xF1,g_atLNAtbl[nidx][3]<<3);
  155. RTV_REG_MASK_SET(0xA9,0xF0,g_atLNAtbl[nidx][4]<<4);
  156. RTV_REG_MASK_SET(0xA9,0x0F,g_atLNAtbl[nidx][5]);
  157. RTV_REG_SET(0xAA,(g_atLNAtbl[nidx][6]<<4) | g_atLNAtbl[nidx][7]);
  158. RTV_REG_SET(0xAB,(g_atLNAtbl[nidx][8]<<3) | ((g_atLNAtbl[nidx][10] & 0x1C)>>2 ));
  159. RTV_REG_SET(0xAD,((g_atLNAtbl[nidx][14] & 0x0F) <<4)
  160. | (g_atLNAtbl[nidx][9] & 0x1E)>>1);
  161. RTV_REG_SET(0xAE,((g_atLNAtbl[nidx][9] & 0x01)<<7)
  162. | (g_atLNAtbl[nidx][11]<<2)
  163. | ((g_atLNAtbl[nidx][13] & 0x18)>>3 ));
  164. RTV_REG_SET(0xAC,(g_atLNAtbl[nidx][10] & 0x03)<<6
  165. | (g_atLNAtbl[nidx][12] <<1 )
  166. |((g_atLNAtbl[nidx][14] & 0x10)>>4));
  167. RTV_REG_SET(0xAF,((g_atLNAtbl[nidx][13] & 0x07)<<5)
  168. | g_atLNAtbl[nidx][15]);
  169. RTV_REG_MASK_SET(0x42,0x10,g_atLNAtbl[nidx][16]<<4);
  170. RTV_REG_MASK_SET(0x42,0x0C,g_atLNAtbl[nidx][17]<<2);
  171. g_nLnaTuneVal = nidx;
  172. return RTV_SUCCESS;
  173. }
  174. INT rtvRF_ChangeAdcClock(E_RTV_TV_MODE_TYPE eTvMode,
  175. E_RTV_ADC_CLK_FREQ_TYPE eAdcClkFreqType, S16 dwIFFreq)
  176. {
  177. U8 RD12;
  178. UINT nRetryCnt = 10;
  179. const U8 *pbAdcClkSynTbl = (const U8 *)&g_abAdcClkSynTbl[eAdcClkFreqType];
  180. const struct RTV_ADC_CFG_INFO *ptOfdmCfgTbl = &g_atOfdmCfgTbl_ISDBT[eAdcClkFreqType];
  181. if (pbAdcClkSynTbl[0] == 0xFF) {
  182. RTV_DBGMSG1("[rtvRF_ChangeAdcClock] Unsupport ADC clock type: %d\n", eAdcClkFreqType);
  183. return RTV_UNSUPPORT_ADC_CLK;
  184. }
  185. RTV_REG_MAP_SEL(OFDM_PAGE);
  186. if (dwIFFreq == 857) {
  187. RTV_REG_SET(0x18, ( ptOfdmCfgTbl->dwPNCO2 >> 0 ));
  188. RTV_REG_SET(0x19, ( ptOfdmCfgTbl->dwPNCO2 >> 8 ));
  189. RTV_REG_SET(0x1A, ( ptOfdmCfgTbl->dwPNCO2 >> 16));
  190. RTV_REG_SET(0x1B, ( ptOfdmCfgTbl->dwPNCO2 >> 24));
  191. }
  192. else {
  193. RTV_REG_SET(0x18, ( ptOfdmCfgTbl->dwPNCO1 >> 0 ));
  194. RTV_REG_SET(0x19, ( ptOfdmCfgTbl->dwPNCO1 >> 8 ));
  195. RTV_REG_SET(0x1A, ( ptOfdmCfgTbl->dwPNCO1 >> 16));
  196. RTV_REG_SET(0x1B, ( ptOfdmCfgTbl->dwPNCO1 >> 24));
  197. }
  198. if (eAdcClkFreqType == g_eRtvAdcClkFreqType)
  199. return RTV_SUCCESS;
  200. RTV_REG_SET(0x14, (ptOfdmCfgTbl->dwTNCO >> 0) & 0xFF);
  201. RTV_REG_SET(0x15, (ptOfdmCfgTbl->dwTNCO >> 8) & 0xFF);
  202. RTV_REG_SET(0x16, (ptOfdmCfgTbl->dwTNCO >> 16) & 0xFF);
  203. RTV_REG_SET(0x17, (ptOfdmCfgTbl->dwTNCO >> 24) & 0xFF);
  204. RTV_REG_SET (0x1C,(ptOfdmCfgTbl->dwGAIN)&0xFF);
  205. RTV_REG_SET (0x1D, (ptOfdmCfgTbl->dwCFREQGAIN >> 0) & 0xFF);
  206. RTV_REG_SET (0x1E, (ptOfdmCfgTbl->dwCFREQGAIN >> 8) & 0xFF);
  207. RTV_REG_SET (0x1F, (ptOfdmCfgTbl->dwCFREQGAIN >> 16) & 0xFF);
  208. RTV_REG_MAP_SEL(RF_PAGE);
  209. RTV_REG_SET(0x25,pbAdcClkSynTbl[0]);
  210. RTV_REG_SET(0x26,(pbAdcClkSynTbl[1] & 0xFF));
  211. RTV_REG_MASK_SET(0x87,0xFC,pbAdcClkSynTbl[2]<<2);
  212. RTV_REG_MASK_SET(0x85,0xFC,pbAdcClkSynTbl[3]<<2);
  213. RTV_REG_MASK_SET(0x5C,0xFC,pbAdcClkSynTbl[4]<<2);
  214. RTV_REG_MASK_SET(0x5B,0x3F,pbAdcClkSynTbl[5]);
  215. while (1) {
  216. RTV_DELAY_MS(1);
  217. RD12 = RTV_REG_GET(0x12);
  218. if (RD12 & 0x80)
  219. break;
  220. if (--nRetryCnt == 0) {
  221. RTV_DBGMSG0("[rtvRF_ChangeAdcClock] Syn Unlocked!\n");
  222. return RTV_ADC_CLK_UNLOCKED;
  223. }
  224. }
  225. g_eRtvAdcClkFreqType = eAdcClkFreqType;
  226. #if 0
  227. RTV_DBGMSG1("[rtvRF_ChangeAdcClock] ADC clk Type: %d\n",
  228. g_eRtvAdcClkFreqType[RaonTvChipIdx]);
  229. #endif
  230. return RTV_SUCCESS;
  231. }
  232. INT rtvRF_SetFrequency(E_RTV_TV_MODE_TYPE eTvMode, UINT nChNum, U32 dwChFreqKHz)
  233. {
  234. INT nRet = RTV_SUCCESS;
  235. E_RTV_ADC_CLK_FREQ_TYPE eAdcClkFreqType = RTV_ADC_CLK_FREQ_8_MHz;
  236. U32 dwPLLN = 0, dwPLLF = 0, dwPLLNF = 0;
  237. U32 dwPllFreq = 0, dwLoFreq = 0;
  238. S16 dwIFfREQ = 0;
  239. U8 WR2A,RD15;
  240. U32 PLL_Verify_cnt = 10;
  241. #if (RTV_SRC_CLK_FREQ_KHz == 19200)
  242. U8 nPllr=4;
  243. #else
  244. U8 nPllr=1;
  245. #endif
  246. #if (RTV_SRC_CLK_FREQ_KHz == 13000) || (RTV_SRC_CLK_FREQ_KHz == 27000)
  247. #define pllf_mul 1
  248. #define r_div 3
  249. #else
  250. #define pllf_mul 0
  251. #define r_div 4
  252. #endif
  253. g_fRtvChannelChange = TRUE;
  254. g_bAdjRefL = 0x4F;
  255. /* Get the PLLNF and ADC clock type. */
  256. switch (nChNum) {
  257. case 14: case 22: case 38: case 46: case 54: case 57: case 62:
  258. case 17: case 25: case 26: case 33: case 49: case 65:
  259. eAdcClkFreqType = g_aeAdcClkTypeTbl_ISDBT[2];
  260. break;
  261. case 30: case 41: case 61:
  262. eAdcClkFreqType = g_aeAdcClkTypeTbl_ISDBT[1];
  263. break;
  264. default:
  265. eAdcClkFreqType = g_aeAdcClkTypeTbl_ISDBT[0];
  266. break;
  267. }
  268. #if (RTV_SRC_CLK_FREQ_KHz == 19200)
  269. if (nChNum & 0x01)
  270. dwIFfREQ = -343;
  271. else
  272. dwIFfREQ = 857;
  273. #else
  274. dwIFfREQ = 500;
  275. #endif
  276. dwLoFreq = dwChFreqKHz + dwIFfREQ;
  277. dwPllFreq = dwLoFreq << 1;
  278. if (rtvRF_Lna_Tuning(dwLoFreq) != RTV_SUCCESS) {
  279. nRet = RTV_INVAILD_FREQ;
  280. goto RF_SET_FREQ_EXIT;
  281. }
  282. nRet = rtvRF_ChangeAdcClock(eTvMode, eAdcClkFreqType,dwIFfREQ);
  283. if (nRet != RTV_SUCCESS)
  284. goto RF_SET_FREQ_EXIT;
  285. RTV_REG_MAP_SEL(RF_PAGE);
  286. if (dwLoFreq < 550000) {
  287. RTV_REG_MASK_SET(0x52,0x0F,0x0C);
  288. RTV_REG_MASK_SET(0x56,0x0C,0x08);
  289. }
  290. else {
  291. RTV_REG_MASK_SET(0x52,0x0F,0x09);
  292. RTV_REG_MASK_SET(0x56,0x0C,0x04);
  293. }
  294. /* Set the PLLNF and channel. */
  295. dwPLLN = dwPllFreq / RTV_SRC_CLK_FREQ_KHz;
  296. dwPLLF = dwPllFreq - (dwPLLN* RTV_SRC_CLK_FREQ_KHz);
  297. dwPLLNF = ((dwPLLN<<20 )
  298. + (((dwPLLF<<16) / (RTV_SRC_CLK_FREQ_KHz>>r_div)) << pllf_mul))
  299. * nPllr ;
  300. RTV_REG_MAP_SEL(RF_PAGE);
  301. RTV_REG_SET(0x21, ((dwPLLNF>>22)&0xFF));
  302. #if (RTV_SRC_CLK_FREQ_KHz == 19200)
  303. RTV_REG_SET(0x22, ((dwPLLNF>>14)&0xC0));
  304. RTV_REG_SET(0x2A, 0x00);
  305. RTV_REG_SET(0x23, 0x00);
  306. WR2A = RTV_REG_GET(0x2A) & 0x3F;
  307. RTV_REG_SET(0x2A, (WR2A | 0x80));
  308. RTV_REG_SET(0x2A, (WR2A | 0xC0));
  309. RTV_DELAY_MS(1);
  310. RTV_REG_SET(0x2A, (WR2A | 0x80));
  311. RTV_REG_SET(0x2A, (WR2A | 0x00));
  312. RTV_REG_MASK_SET(0x2E,0x40,0x40);
  313. RTV_REG_MASK_SET(0x2E,0x40,0x00);
  314. #else
  315. RTV_REG_SET(0x22, ((dwPLLNF>>14)&0xFF));
  316. RTV_REG_SET(0x2A, (dwPLLNF&0x3F));
  317. RTV_REG_SET(0x23, ((dwPLLNF>>6)&0xFF));
  318. WR2A = RTV_REG_GET(0x2A) & 0x3F;
  319. RTV_REG_SET(0x2A, (WR2A | 0x80));
  320. RTV_REG_SET(0x2A, (WR2A | 0xC0));
  321. RTV_DELAY_MS(1);
  322. RTV_REG_SET(0x2A, (WR2A | 0x80));
  323. RTV_REG_SET(0x2A, (WR2A | 0x00));
  324. #endif
  325. do {
  326. RTV_DELAY_MS(1);
  327. RD15 = RTV_REG_GET(0x10);
  328. if ((RD15 & 0x20) == 0x20)
  329. break;
  330. else {
  331. #if (RTV_SRC_CLK_FREQ_KHz == 19200)
  332. RTV_REG_SET(0x2A, (WR2A | 0x80));
  333. RTV_REG_SET(0x2A, (WR2A | 0xC0));
  334. RTV_DELAY_MS(1);
  335. RTV_REG_SET(0x2A, (WR2A | 0x80));
  336. RTV_REG_SET(0x2A, (WR2A | 0x00));
  337. RTV_REG_MASK_SET(0x2E,0x40,0x40);
  338. RTV_REG_MASK_SET(0x2E,0x40,0x00);
  339. #else
  340. RTV_REG_SET(0x2A, (WR2A | 0x80));
  341. RTV_REG_SET(0x2A, (WR2A | 0xC0));
  342. RTV_DELAY_MS(1);
  343. RTV_REG_SET(0x2A, (WR2A | 0x80));
  344. RTV_REG_SET(0x2A, (WR2A | 0x00));
  345. #endif
  346. }
  347. } while (--PLL_Verify_cnt);
  348. RTV_REG_MAP_SEL(OFDM_PAGE);
  349. RTV_REG_MASK_SET(0x10, 0x01, 0x01);
  350. RTV_REG_MASK_SET(0x10, 0x01, 0x00);
  351. RTV_REG_MAP_SEL(FEC_PAGE);
  352. RTV_REG_MASK_SET(0xFB, 0x01, 0x01);
  353. RTV_REG_MASK_SET(0xFB, 0x01, 0x00);
  354. if (PLL_Verify_cnt == 0) {
  355. RTV_DBGMSG2("[rtvRF_SetFrequency] (%u/%u) PLL unlocked!\n",
  356. nChNum, dwChFreqKHz);
  357. nRet = RTV_PLL_UNLOCKED;
  358. goto RF_SET_FREQ_EXIT;
  359. }
  360. rtv_UpdateAdj();
  361. RF_SET_FREQ_EXIT:
  362. g_fRtvChannelChange = FALSE;
  363. return nRet;
  364. }
  365. INT rtvRF_Initilize(E_RTV_TV_MODE_TYPE eTvMode)
  366. {
  367. UINT nNumTblEntry = 0;
  368. const RTV_REG_INIT_INFO *ptInitTbl = NULL;
  369. g_fRtvChannelChange = FALSE;
  370. g_eRtvAdcClkFreqType = MAX_NUM_RTV_ADC_CLK_FREQ_TYPE;
  371. g_nLnaTuneVal = 0xFF;
  372. ptInitTbl = t_ISDBT_INIT;
  373. nNumTblEntry = sizeof(t_ISDBT_INIT) / sizeof(RTV_REG_INIT_INFO);
  374. RTV_REG_MAP_SEL(RF_PAGE);
  375. do {
  376. RTV_REG_SET(ptInitTbl->bReg, ptInitTbl->bVal);
  377. ptInitTbl++;
  378. } while (--nNumTblEntry);
  379. #if (RTV_SRC_CLK_FREQ_KHz == 19200)
  380. RTV_REG_MASK_SET(0x2B, 0xF0, 4<<4); //PLLR
  381. RTV_REG_MASK_SET(0x2E, 0x80, 0x00);//DTHEN =0;
  382. RTV_REG_MASK_SET(0x52, 0x20, 0x00); //EN_DIG_VCOTEMPCON 0
  383. RTV_REG_MASK_SET(0x2B, 0x03, 0x02); //SEL_VP 2
  384. RTV_REG_MASK_SET(0x2C, 0xF0, 0xF0); //BWCALI F
  385. RTV_REG_MASK_SET(0x52, 0x0F, 0x09); //ICON_VCO_I2C 9
  386. RTV_REG_MASK_SET(0xB1, 0xE0, 0x60); //ICONDIVFM2 3
  387. RTV_REG_MASK_SET(0x2D, 0xF8, 0x00); //CP_COMP 0
  388. RTV_REG_MASK_SET(0x56, 0x0C, 0x04); //BM_VCOCORE_I2C 1
  389. RTV_REG_MASK_SET(0x88, 0xE0, 0x80); //ICONDIV1 4
  390. RTV_REG_MASK_SET(0x5D, 0xE0, 0x00); //LDO_OUTSEL 0
  391. RTV_REG_SET(0x94, 0x43);
  392. RTV_REG_SET(0x95, 0x72);
  393. RTV_REG_SET(0x96, 0x43);
  394. RTV_REG_SET(0x97, 0x40);
  395. RTV_REG_SET(0x98, 0xBF);
  396. RTV_REG_SET(0x99, 0xDE);
  397. RTV_REG_SET(0x9A, 0x3D);
  398. RTV_REG_SET(0x9B, 0x24);
  399. RTV_REG_SET(0x9C, 0x43);
  400. RTV_REG_SET(0x9D, 0x2A);
  401. RTV_REG_SET(0x9E, 0xC1);
  402. RTV_REG_SET(0x9F, 0x97);
  403. RTV_REG_SET(0xA6, 0x37);
  404. RTV_REG_SET(0xA7, 0x1E);
  405. #else
  406. RTV_REG_MASK_SET(0x2B, 0xF0, 1<<4); //PLLR
  407. RTV_REG_MASK_SET(0x2E, 0x80,0x80);//DTHEN =1;
  408. RTV_REG_MASK_SET(0x52, 0x20, 0x00); //EN_DIG_VCOTEMPCON 0
  409. RTV_REG_MASK_SET(0x2B, 0x03, 0x02); //SEL_VP 2
  410. RTV_REG_MASK_SET(0x2C, 0xF0, 0x80); //BWCALI 8
  411. RTV_REG_MASK_SET(0x52, 0x0F, 0x09); //ICON_VCO_I2C 9
  412. RTV_REG_MASK_SET(0xB1, 0xE0, 0x60); //ICONDIVFM2 3
  413. RTV_REG_MASK_SET(0x2D, 0xF8, 0xF8); //CP_COMP 1F
  414. RTV_REG_MASK_SET(0x56, 0x0C, 0x04); //BM_VCOCORE_I2C 1
  415. RTV_REG_MASK_SET(0x88, 0xE0, 0x80); //ICONDIV1 4
  416. RTV_REG_MASK_SET(0x5D, 0xE0, 0xC0); //LDO_OUTSEL 6
  417. RTV_REG_SET(0x94,0xC3);
  418. RTV_REG_SET(0x95,0x70);
  419. RTV_REG_SET(0x96,0x43);
  420. RTV_REG_SET(0x97,0x7F);
  421. RTV_REG_SET(0x98,0xC1);
  422. RTV_REG_SET(0x99,0x5C);
  423. RTV_REG_SET(0x9A,0xBF);
  424. RTV_REG_SET(0x9B,0xC6);
  425. RTV_REG_SET(0x9C,0x43);
  426. RTV_REG_SET(0x9D,0x96);
  427. RTV_REG_SET(0x9E,0xC1);
  428. RTV_REG_SET(0x9F,0xD7);
  429. RTV_REG_SET(0xA6,0x3B);
  430. RTV_REG_SET(0xA7,0x11);
  431. #endif
  432. return RTV_SUCCESS;
  433. }