raontv_internal.h 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. /******************************************************************************
  2. * (c) COPYRIGHT 2010 RAONTECH, Inc. ALL RIGHTS RESERVED.
  3. *
  4. * TITLE : RAONTECH TV internal header file.
  5. *
  6. * FILENAME : raontv_internal.h
  7. *
  8. * DESCRIPTION :
  9. * All the declarations and definitions necessary for the RAONTECH TV driver.
  10. *
  11. ******************************************************************************/
  12. /******************************************************************************
  13. * REVISION HISTORY
  14. *
  15. * DATE NAME REMARKS
  16. * ---------- ------------- ------------------------------------------------
  17. * 07/26/2013 Yang, Maverick Created.
  18. ******************************************************************************/
  19. #ifndef __RAONTV_INTERNAL_H__
  20. #define __RAONTV_INTERNAL_H__
  21. #ifdef __cplusplus
  22. extern "C"{
  23. #endif
  24. #include "raontv.h"
  25. // Do not modify the order!
  26. typedef enum
  27. {
  28. RTV_TV_MODE_TDMB = 0, // Band III Korea
  29. RTV_TV_MODE_DAB_B3 = 1, // Band III
  30. RTV_TV_MODE_DAB_L = 2, // L-Band
  31. RTV_TV_MODE_1SEG = 3, // UHF
  32. RTV_TV_MODE_FM = 4, // FM
  33. MAX_NUM_RTV_MODE
  34. } E_RTV_TV_MODE_TYPE;
  35. typedef struct
  36. {
  37. U8 bReg;
  38. U8 bVal;
  39. } RTV_REG_INIT_INFO;
  40. struct RTV_ADC_CFG_INFO {
  41. U32 dwTNCO;
  42. U32 dwPNCO1;
  43. U32 dwPNCO2;
  44. U32 dwCFREQGAIN;
  45. U16 dwGAIN;
  46. };
  47. typedef struct
  48. {
  49. U8 bReg;
  50. U8 bMask;
  51. U8 bVal;
  52. } RTV_REG_MASK_INFO;
  53. #if defined(RTV_IF_TSIF) || defined(RTV_IF_SPI_SLAVE)
  54. #if defined(RTV_TSIF_CLK_SPEED_DIV_2) // 12MHz
  55. #define RTV_COMM_CON47_CLK_SEL 2
  56. #elif defined(RTV_TSIF_CLK_SPEED_DIV_4) // 6MHz
  57. #define RTV_COMM_CON47_CLK_SEL 3
  58. #elif defined(RTV_TSIF_CLK_SPEED_DIV_6) // 3MHz
  59. #define RTV_COMM_CON47_CLK_SEL 4
  60. #elif defined(RTV_TSIF_CLK_SPEED_DIV_8) // 1.5MHz
  61. #define RTV_COMM_CON47_CLK_SEL 5
  62. #else
  63. #error "Code not present"
  64. #endif
  65. #endif
  66. #if defined(RTV_IF_SPI) || defined(RTV_IF_EBI2)
  67. #if defined(RTV_INTR_POLARITY_LOW_ACTIVE)
  68. #define SPI_INTR_POL_ACTIVE 0x00
  69. #elif defined(RTV_INTR_POLARITY_HIGH_ACTIVE)
  70. #define SPI_INTR_POL_ACTIVE (1<<7)
  71. #endif
  72. #else
  73. #if defined(RTV_INTR_POLARITY_LOW_ACTIVE)
  74. #define I2C_INTR_POL_ACTIVE 0x08 /* level low */
  75. #elif defined(RTV_INTR_POLARITY_HIGH_ACTIVE)
  76. #define I2C_INTR_POL_ACTIVE 0x18 /* level high */
  77. #endif
  78. #endif
  79. #if defined(RTV_IF_SPI) || defined(RTV_IF_EBI2)
  80. #if (RTV_SRC_CLK_FREQ_KHz == 4000) /* FPGA */
  81. #define RTV_SPI_INTR_DEACT_PRD_VAL 0x51
  82. #elif (RTV_SRC_CLK_FREQ_KHz == 13000)
  83. #define RTV_SPI_INTR_DEACT_PRD_VAL ((6<<4)|3)
  84. #elif (RTV_SRC_CLK_FREQ_KHz == 16000)
  85. #define RTV_SPI_INTR_DEACT_PRD_VAL ((6<<4)|3)
  86. #elif (RTV_SRC_CLK_FREQ_KHz == 16384)
  87. #define RTV_SPI_INTR_DEACT_PRD_VAL ((6<<4)|3)
  88. #elif (RTV_SRC_CLK_FREQ_KHz == 18000)
  89. #define RTV_SPI_INTR_DEACT_PRD_VAL ((6<<4)|3)
  90. #elif (RTV_SRC_CLK_FREQ_KHz == 19200) /* 1 clk: 52.08ns */
  91. #define RTV_SPI_INTR_DEACT_PRD_VAL ((6<<4)|3)
  92. #elif (RTV_SRC_CLK_FREQ_KHz == 24000)
  93. #define RTV_SPI_INTR_DEACT_PRD_VAL ((6<<4)|3)
  94. #elif (RTV_SRC_CLK_FREQ_KHz == 24576) /* 1 clk: 40.7ns */
  95. #define RTV_SPI_INTR_DEACT_PRD_VAL ((7<<4)|2)/*about 10us*/
  96. #elif (RTV_SRC_CLK_FREQ_KHz == 26000)
  97. #define RTV_SPI_INTR_DEACT_PRD_VAL ((6<<4)|3)
  98. #elif (RTV_SRC_CLK_FREQ_KHz == 27000)
  99. #define RTV_SPI_INTR_DEACT_PRD_VAL ((6<<4)|3)
  100. #elif (RTV_SRC_CLK_FREQ_KHz == 32000)
  101. #define RTV_SPI_INTR_DEACT_PRD_VAL ((6<<4)|3)
  102. #elif (RTV_SRC_CLK_FREQ_KHz == 32768)
  103. #define RTV_SPI_INTR_DEACT_PRD_VAL ((6<<4)|3)
  104. #elif (RTV_SRC_CLK_FREQ_KHz == 36000) /* 1clk: 27.7 ns */
  105. #define RTV_SPI_INTR_DEACT_PRD_VAL ((7<<4)|3)
  106. #elif (RTV_SRC_CLK_FREQ_KHz == 38400)
  107. #define RTV_SPI_INTR_DEACT_PRD_VAL ((6<<4)|3)
  108. #elif (RTV_SRC_CLK_FREQ_KHz == 40000)
  109. #define RTV_SPI_INTR_DEACT_PRD_VAL ((6<<4)|3)
  110. #elif (RTV_SRC_CLK_FREQ_KHz == 48000) /* 1clk: 20.8 ns */
  111. #define RTV_SPI_INTR_DEACT_PRD_VAL ((9<<4)|0)
  112. #else
  113. #error "Code not present"
  114. #endif
  115. #endif /* #if defined(RTV_IF_SPI) */
  116. #define SPI_OVERFLOW_INTR 0x02
  117. #define SPI_UNDERFLOW_INTR 0x20
  118. #define SPI_THRESHOLD_INTR 0x08
  119. #define SPI_INTR_BITS (SPI_THRESHOLD_INTR|SPI_UNDERFLOW_INTR|SPI_OVERFLOW_INTR)
  120. #define MODE1 2
  121. #define MODE2 1
  122. #define MODE3 0
  123. #define MAP_SEL_REG 0x03
  124. #define OFDM_PAGE 0x07
  125. #define FEC_PAGE 0x03
  126. #define HOST_PAGE 0x00
  127. #define SPI_CTRL_PAGE 0x0E
  128. #define RF_PAGE 0x0F
  129. #define OFDM_E_CON (0x10)
  130. #define SPI_MEM_PAGE 0xFF /* Temp value. > 15 */
  131. #if defined(RTV_IF_SPI) || defined(RTV_IF_EBI2)
  132. #define RTV_REG_MAP_SEL(page) do {g_bRtvPage = page;} while(0)
  133. #define RTV_REG_GET_MAP_SEL g_bRtvPage
  134. #else
  135. #define RTV_REG_MAP_SEL(page)\
  136. do {\
  137. RTV_REG_SET(MAP_SEL_REG, page);\
  138. g_bRtvPage = page;\
  139. } while (0)
  140. #define RTV_REG_GET_MAP_SEL\
  141. (RTV_REG_GET(MAP_SEL_REG))
  142. #endif
  143. #define RTV_TS_STREAM_DISABLE_DELAY 20 // ms
  144. // ISDB-T Channel
  145. #define ISDBT_CH_NUM_START__JAPAN 13
  146. #define ISDBT_CH_NUM_END__JAPAN 62
  147. #define ISDBT_CH_FREQ_START__JAPAN 473143
  148. #define ISDBT_CH_FREQ_STEP__JAPAN 6000
  149. #define ISDBT_CH_NUM_START__BRAZIL 14
  150. #define ISDBT_CH_NUM_END__BRAZIL 69
  151. #define ISDBT_CH_FREQ_START__BRAZIL 473143
  152. #define ISDBT_CH_FREQ_STEP__BRAZIL 6000
  153. #define ISDBT_CH_NUM_START__ARGENTINA 14
  154. #define ISDBT_CH_NUM_END__ARGENTINA 69
  155. #define ISDBT_CH_FREQ_START__ARGENTINA 473143
  156. #define ISDBT_CH_FREQ_STEP__ARGENTINA 6000
  157. extern volatile E_RTV_ADC_CLK_FREQ_TYPE g_eRtvAdcClkFreqType;
  158. extern E_RTV_COUNTRY_BAND_TYPE g_eRtvCountryBandType;
  159. /* Use SPI/EBI2 interrupt handler to prevent the changing of register map. */
  160. extern volatile BOOL g_fRtvChannelChange;
  161. extern BOOL g_fRtvStreamEnabled;
  162. extern U8 g_bRtvIntrMaskRegL;
  163. extern U8 g_bAdjId;
  164. extern U8 g_bAdjSat;
  165. extern U8 g_bAdjRefL;
  166. extern UINT g_nRtvMscThresholdSize;
  167. #define FM_MIN_FREQ_KHz 75950 // See PLL table in raontv_rf_pll_data_fm.h
  168. #define FM_MAX_FREQ_KHz 108050
  169. #define FM_SCAN_STEP_FREQ_KHz (RTV_FM_CH_STEP_FREQ_KHz/2)
  170. /*=============================================================================
  171. *
  172. * Common inline functions.
  173. *
  174. *============================================================================*/
  175. static INLINE void rtv_SetupInterruptThreshold(void)
  176. {
  177. #if defined(RTV_IF_SPI) || defined(RTV_IF_EBI2)
  178. RTV_REG_MAP_SEL(SPI_CTRL_PAGE);
  179. RTV_REG_SET(0x23, g_nRtvMscThresholdSize/188);
  180. #endif
  181. }
  182. // Pause straem
  183. static INLINE void rtv_StreamDisable(E_RTV_TV_MODE_TYPE eTvMode)
  184. {
  185. if (g_fRtvStreamEnabled) {
  186. RTV_REG_MAP_SEL(FEC_PAGE);
  187. RTV_REG_SET(0xA8, 0x80);
  188. RTV_REG_SET(0xAA, 0x80);
  189. #if defined(RTV_IF_SPI) || defined(RTV_IF_EBI2)
  190. RTV_REG_MAP_SEL(SPI_CTRL_PAGE);
  191. /* Disable interrupts. */
  192. g_bRtvIntrMaskRegL |= SPI_INTR_BITS;
  193. RTV_REG_SET(0x24, g_bRtvIntrMaskRegL);
  194. /* To clear interrupt and data. */
  195. RTV_REG_SET(0x2A, 1);
  196. RTV_REG_SET(0x2A, 0);
  197. #endif
  198. g_fRtvStreamEnabled = FALSE;
  199. }
  200. }
  201. /* Enable the stream path forcely for ISDB-T and FM only! */
  202. static INLINE void rtv_StreamEnable(void)
  203. {
  204. if (!g_fRtvStreamEnabled) {
  205. #if defined(RTV_IF_SPI) || defined(RTV_IF_EBI2)
  206. rtv_SetupInterruptThreshold();
  207. /* Enable SPI interrupts */
  208. g_bRtvIntrMaskRegL &= ~(SPI_INTR_BITS);
  209. RTV_REG_SET(0x24, g_bRtvIntrMaskRegL);
  210. #endif
  211. RTV_REG_MAP_SEL(FEC_PAGE);
  212. RTV_REG_SET(0xA8, 0x81);
  213. RTV_REG_SET(0xAA, 0x81);
  214. g_fRtvStreamEnabled = TRUE;
  215. }
  216. }
  217. //#define DEBUG_UPDATEADJ
  218. static INLINE void rtv_UpdateAdj(void)
  219. {
  220. U8 bAdjRssId;
  221. RTV_REG_MAP_SEL(RF_PAGE);
  222. bAdjRssId = RTV_REG_GET(0x15);
  223. if ((bAdjRssId > g_bAdjId) && (g_bAdjRefL != 0x4F))
  224. g_bAdjRefL =g_bAdjRefL - 0x08;
  225. else if ((bAdjRssId < g_bAdjSat) && (g_bAdjRefL != 0x6F))
  226. g_bAdjRefL = g_bAdjRefL + 0x08;
  227. RTV_REG_SET(0x44, g_bAdjRefL);
  228. #if defined(DEBUG_UPDATEADJ)
  229. RTV_DBGMSG3("[rtv_UpdateAdj] ID(0x%02X), WARN(0x%02X) SAT(0x%02X), ",
  230. bAdjRssId, g_bAdjId,g_bAdjSat);
  231. RTV_DBGMSG1("REF_L(0x%02X) \n", g_bAdjRefL);
  232. #endif
  233. }
  234. #ifdef RTV_IF_TSIF
  235. //#define SYNC_POLARITY_ACTIVE_LOW
  236. //#define SYNC_LENGTH_1BIT
  237. #endif
  238. static INLINE void rtv_ConfigureTsifFormat(void)
  239. {
  240. RTV_REG_MAP_SEL(FEC_PAGE);
  241. #if defined(RTV_IF_MPEG2_SERIAL_TSIF) || defined(RTV_IF_SPI_SLAVE)
  242. #if defined(RTV_TSIF_FORMAT_1)
  243. RTV_REG_SET(0x9F, 0x00);
  244. RTV_REG_SET(0xA4, 0x0B);
  245. RTV_REG_SET(0xA5, 0x08);
  246. #elif defined(RTV_TSIF_FORMAT_2)
  247. RTV_REG_SET(0x9F, 0x10);
  248. RTV_REG_SET(0xA4, 0x0B);
  249. RTV_REG_SET(0xA5, 0x08);
  250. #elif defined(RTV_TSIF_FORMAT_3)
  251. RTV_REG_SET(0x9F, 0x00);
  252. RTV_REG_SET(0xA4, 0x0B);
  253. RTV_REG_SET(0xA5, 0x00);
  254. #elif defined(RTV_TSIF_FORMAT_4)
  255. RTV_REG_SET(0x9F, 0x10);
  256. RTV_REG_SET(0xA4, 0x0B);
  257. RTV_REG_SET(0xA5, 0x00);
  258. #else
  259. #error "Code not present"
  260. #endif
  261. #elif defined(RTV_IF_QUALCOMM_TSIF)
  262. #if defined(RTV_TSIF_FORMAT_1)
  263. RTV_REG_SET(0x9F, 0x00);
  264. RTV_REG_SET(0xA4, 0x0B);
  265. RTV_REG_SET(0xA5, 0x08);
  266. #elif defined(RTV_TSIF_FORMAT_2)
  267. RTV_REG_SET(0x9F, 0x00);
  268. RTV_REG_SET(0xA4, 0x0B);
  269. RTV_REG_SET(0xA5, 0x00);
  270. #elif defined(RTV_TSIF_FORMAT_3)
  271. RTV_REG_SET(0x9F, 0x00);
  272. RTV_REG_SET(0xA4, 0x0B);
  273. RTV_REG_SET(0xA5, 0x00);
  274. #elif defined(RTV_TSIF_FORMAT_4)
  275. RTV_REG_SET(0x9F, 0x00);
  276. RTV_REG_SET(0xA4, 0x0B);
  277. RTV_REG_SET(0xA5, 0x04);
  278. #elif defined(RTV_TSIF_FORMAT_5)
  279. RTV_REG_SET(0x9F, 0x00);
  280. RTV_REG_SET(0xA4, 0x0B);
  281. RTV_REG_SET(0xA5, 0x0C);
  282. #else
  283. #error "Code not present"
  284. #endif
  285. #endif
  286. #ifdef SYNC_LENGTH_1BIT
  287. RTV_REG_MASK_SET(0xA4,0x80,0x80);
  288. #endif
  289. #ifdef SYNC_POLARITY_ACTIVE_LOW
  290. RTV_REG_MASK_SET(0x9F,0x04,0x04);
  291. #endif
  292. }
  293. /*==============================================================================
  294. * External functions for RAONTV driver core.
  295. *============================================================================*/
  296. void rtv_ConfigureHostIF(void);
  297. INT rtv_InitSystem(E_RTV_TV_MODE_TYPE eTvMode, E_RTV_ADC_CLK_FREQ_TYPE eAdcClkFreqType);
  298. #ifdef __cplusplus
  299. }
  300. #endif
  301. #endif /* __RAONTV_INTERNAL_H__ */