rtl2832_priv.h 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. /*
  2. * Realtek RTL2832 DVB-T demodulator driver
  3. *
  4. * Copyright (C) 2012 Thomas Mair <thomas.mair86@gmail.com>
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation; either version 2 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License along
  17. * with this program; if not, write to the Free Software Foundation, Inc.,
  18. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  19. */
  20. #ifndef RTL2832_PRIV_H
  21. #define RTL2832_PRIV_H
  22. #include "dvb_frontend.h"
  23. #include "rtl2832.h"
  24. struct rtl2832_priv {
  25. struct i2c_adapter *i2c;
  26. struct dvb_frontend fe;
  27. struct rtl2832_config cfg;
  28. bool i2c_gate_state;
  29. bool sleeping;
  30. u8 tuner;
  31. u8 page; /* active register page */
  32. };
  33. struct rtl2832_reg_entry {
  34. u8 page;
  35. u8 start_address;
  36. u8 msb;
  37. u8 lsb;
  38. };
  39. struct rtl2832_reg_value {
  40. int reg;
  41. u32 value;
  42. };
  43. /* Demod register bit names */
  44. enum DVBT_REG_BIT_NAME {
  45. DVBT_SOFT_RST,
  46. DVBT_IIC_REPEAT,
  47. DVBT_TR_WAIT_MIN_8K,
  48. DVBT_RSD_BER_FAIL_VAL,
  49. DVBT_EN_BK_TRK,
  50. DVBT_REG_PI,
  51. DVBT_REG_PFREQ_1_0,
  52. DVBT_PD_DA8,
  53. DVBT_LOCK_TH,
  54. DVBT_BER_PASS_SCAL,
  55. DVBT_CE_FFSM_BYPASS,
  56. DVBT_ALPHAIIR_N,
  57. DVBT_ALPHAIIR_DIF,
  58. DVBT_EN_TRK_SPAN,
  59. DVBT_LOCK_TH_LEN,
  60. DVBT_CCI_THRE,
  61. DVBT_CCI_MON_SCAL,
  62. DVBT_CCI_M0,
  63. DVBT_CCI_M1,
  64. DVBT_CCI_M2,
  65. DVBT_CCI_M3,
  66. DVBT_SPEC_INIT_0,
  67. DVBT_SPEC_INIT_1,
  68. DVBT_SPEC_INIT_2,
  69. DVBT_AD_EN_REG,
  70. DVBT_AD_EN_REG1,
  71. DVBT_EN_BBIN,
  72. DVBT_MGD_THD0,
  73. DVBT_MGD_THD1,
  74. DVBT_MGD_THD2,
  75. DVBT_MGD_THD3,
  76. DVBT_MGD_THD4,
  77. DVBT_MGD_THD5,
  78. DVBT_MGD_THD6,
  79. DVBT_MGD_THD7,
  80. DVBT_EN_CACQ_NOTCH,
  81. DVBT_AD_AV_REF,
  82. DVBT_PIP_ON,
  83. DVBT_SCALE1_B92,
  84. DVBT_SCALE1_B93,
  85. DVBT_SCALE1_BA7,
  86. DVBT_SCALE1_BA9,
  87. DVBT_SCALE1_BAA,
  88. DVBT_SCALE1_BAB,
  89. DVBT_SCALE1_BAC,
  90. DVBT_SCALE1_BB0,
  91. DVBT_SCALE1_BB1,
  92. DVBT_KB_P1,
  93. DVBT_KB_P2,
  94. DVBT_KB_P3,
  95. DVBT_OPT_ADC_IQ,
  96. DVBT_AD_AVI,
  97. DVBT_AD_AVQ,
  98. DVBT_K1_CR_STEP12,
  99. DVBT_TRK_KS_P2,
  100. DVBT_TRK_KS_I2,
  101. DVBT_TR_THD_SET2,
  102. DVBT_TRK_KC_P2,
  103. DVBT_TRK_KC_I2,
  104. DVBT_CR_THD_SET2,
  105. DVBT_PSET_IFFREQ,
  106. DVBT_SPEC_INV,
  107. DVBT_BW_INDEX,
  108. DVBT_RSAMP_RATIO,
  109. DVBT_CFREQ_OFF_RATIO,
  110. DVBT_FSM_STAGE,
  111. DVBT_RX_CONSTEL,
  112. DVBT_RX_HIER,
  113. DVBT_RX_C_RATE_LP,
  114. DVBT_RX_C_RATE_HP,
  115. DVBT_GI_IDX,
  116. DVBT_FFT_MODE_IDX,
  117. DVBT_RSD_BER_EST,
  118. DVBT_CE_EST_EVM,
  119. DVBT_RF_AGC_VAL,
  120. DVBT_IF_AGC_VAL,
  121. DVBT_DAGC_VAL,
  122. DVBT_SFREQ_OFF,
  123. DVBT_CFREQ_OFF,
  124. DVBT_POLAR_RF_AGC,
  125. DVBT_POLAR_IF_AGC,
  126. DVBT_AAGC_HOLD,
  127. DVBT_EN_RF_AGC,
  128. DVBT_EN_IF_AGC,
  129. DVBT_IF_AGC_MIN,
  130. DVBT_IF_AGC_MAX,
  131. DVBT_RF_AGC_MIN,
  132. DVBT_RF_AGC_MAX,
  133. DVBT_IF_AGC_MAN,
  134. DVBT_IF_AGC_MAN_VAL,
  135. DVBT_RF_AGC_MAN,
  136. DVBT_RF_AGC_MAN_VAL,
  137. DVBT_DAGC_TRG_VAL,
  138. DVBT_AGC_TARG_VAL,
  139. DVBT_LOOP_GAIN_3_0,
  140. DVBT_LOOP_GAIN_4,
  141. DVBT_VTOP,
  142. DVBT_KRF,
  143. DVBT_AGC_TARG_VAL_0,
  144. DVBT_AGC_TARG_VAL_8_1,
  145. DVBT_AAGC_LOOP_GAIN,
  146. DVBT_LOOP_GAIN2_3_0,
  147. DVBT_LOOP_GAIN2_4,
  148. DVBT_LOOP_GAIN3,
  149. DVBT_VTOP1,
  150. DVBT_VTOP2,
  151. DVBT_VTOP3,
  152. DVBT_KRF1,
  153. DVBT_KRF2,
  154. DVBT_KRF3,
  155. DVBT_KRF4,
  156. DVBT_EN_GI_PGA,
  157. DVBT_THD_LOCK_UP,
  158. DVBT_THD_LOCK_DW,
  159. DVBT_THD_UP1,
  160. DVBT_THD_DW1,
  161. DVBT_INTER_CNT_LEN,
  162. DVBT_GI_PGA_STATE,
  163. DVBT_EN_AGC_PGA,
  164. DVBT_CKOUTPAR,
  165. DVBT_CKOUT_PWR,
  166. DVBT_SYNC_DUR,
  167. DVBT_ERR_DUR,
  168. DVBT_SYNC_LVL,
  169. DVBT_ERR_LVL,
  170. DVBT_VAL_LVL,
  171. DVBT_SERIAL,
  172. DVBT_SER_LSB,
  173. DVBT_CDIV_PH0,
  174. DVBT_CDIV_PH1,
  175. DVBT_MPEG_IO_OPT_2_2,
  176. DVBT_MPEG_IO_OPT_1_0,
  177. DVBT_CKOUTPAR_PIP,
  178. DVBT_CKOUT_PWR_PIP,
  179. DVBT_SYNC_LVL_PIP,
  180. DVBT_ERR_LVL_PIP,
  181. DVBT_VAL_LVL_PIP,
  182. DVBT_CKOUTPAR_PID,
  183. DVBT_CKOUT_PWR_PID,
  184. DVBT_SYNC_LVL_PID,
  185. DVBT_ERR_LVL_PID,
  186. DVBT_VAL_LVL_PID,
  187. DVBT_SM_PASS,
  188. DVBT_UPDATE_REG_2,
  189. DVBT_BTHD_P3,
  190. DVBT_BTHD_D3,
  191. DVBT_FUNC4_REG0,
  192. DVBT_FUNC4_REG1,
  193. DVBT_FUNC4_REG2,
  194. DVBT_FUNC4_REG3,
  195. DVBT_FUNC4_REG4,
  196. DVBT_FUNC4_REG5,
  197. DVBT_FUNC4_REG6,
  198. DVBT_FUNC4_REG7,
  199. DVBT_FUNC4_REG8,
  200. DVBT_FUNC4_REG9,
  201. DVBT_FUNC4_REG10,
  202. DVBT_FUNC5_REG0,
  203. DVBT_FUNC5_REG1,
  204. DVBT_FUNC5_REG2,
  205. DVBT_FUNC5_REG3,
  206. DVBT_FUNC5_REG4,
  207. DVBT_FUNC5_REG5,
  208. DVBT_FUNC5_REG6,
  209. DVBT_FUNC5_REG7,
  210. DVBT_FUNC5_REG8,
  211. DVBT_FUNC5_REG9,
  212. DVBT_FUNC5_REG10,
  213. DVBT_FUNC5_REG11,
  214. DVBT_FUNC5_REG12,
  215. DVBT_FUNC5_REG13,
  216. DVBT_FUNC5_REG14,
  217. DVBT_FUNC5_REG15,
  218. DVBT_FUNC5_REG16,
  219. DVBT_FUNC5_REG17,
  220. DVBT_FUNC5_REG18,
  221. DVBT_AD7_SETTING,
  222. DVBT_RSSI_R,
  223. DVBT_ACI_DET_IND,
  224. DVBT_REG_MON,
  225. DVBT_REG_MONSEL,
  226. DVBT_REG_GPE,
  227. DVBT_REG_GPO,
  228. DVBT_REG_4MSEL,
  229. DVBT_TEST_REG_1,
  230. DVBT_TEST_REG_2,
  231. DVBT_TEST_REG_3,
  232. DVBT_TEST_REG_4,
  233. DVBT_REG_BIT_NAME_ITEM_TERMINATOR,
  234. };
  235. static const struct rtl2832_reg_value rtl2832_tuner_init_tua9001[] = {
  236. {DVBT_DAGC_TRG_VAL, 0x39},
  237. {DVBT_AGC_TARG_VAL_0, 0x0},
  238. {DVBT_AGC_TARG_VAL_8_1, 0x5a},
  239. {DVBT_AAGC_LOOP_GAIN, 0x16},
  240. {DVBT_LOOP_GAIN2_3_0, 0x6},
  241. {DVBT_LOOP_GAIN2_4, 0x1},
  242. {DVBT_LOOP_GAIN3, 0x16},
  243. {DVBT_VTOP1, 0x35},
  244. {DVBT_VTOP2, 0x21},
  245. {DVBT_VTOP3, 0x21},
  246. {DVBT_KRF1, 0x0},
  247. {DVBT_KRF2, 0x40},
  248. {DVBT_KRF3, 0x10},
  249. {DVBT_KRF4, 0x10},
  250. {DVBT_IF_AGC_MIN, 0x80},
  251. {DVBT_IF_AGC_MAX, 0x7f},
  252. {DVBT_RF_AGC_MIN, 0x9c},
  253. {DVBT_RF_AGC_MAX, 0x7f},
  254. {DVBT_POLAR_RF_AGC, 0x0},
  255. {DVBT_POLAR_IF_AGC, 0x0},
  256. {DVBT_AD7_SETTING, 0xe9f4},
  257. {DVBT_OPT_ADC_IQ, 0x1},
  258. {DVBT_AD_AVI, 0x0},
  259. {DVBT_AD_AVQ, 0x0},
  260. };
  261. static const struct rtl2832_reg_value rtl2832_tuner_init_fc0012[] = {
  262. {DVBT_DAGC_TRG_VAL, 0x5a},
  263. {DVBT_AGC_TARG_VAL_0, 0x0},
  264. {DVBT_AGC_TARG_VAL_8_1, 0x5a},
  265. {DVBT_AAGC_LOOP_GAIN, 0x16},
  266. {DVBT_LOOP_GAIN2_3_0, 0x6},
  267. {DVBT_LOOP_GAIN2_4, 0x1},
  268. {DVBT_LOOP_GAIN3, 0x16},
  269. {DVBT_VTOP1, 0x35},
  270. {DVBT_VTOP2, 0x21},
  271. {DVBT_VTOP3, 0x21},
  272. {DVBT_KRF1, 0x0},
  273. {DVBT_KRF2, 0x40},
  274. {DVBT_KRF3, 0x10},
  275. {DVBT_KRF4, 0x10},
  276. {DVBT_IF_AGC_MIN, 0x80},
  277. {DVBT_IF_AGC_MAX, 0x7f},
  278. {DVBT_RF_AGC_MIN, 0x80},
  279. {DVBT_RF_AGC_MAX, 0x7f},
  280. {DVBT_POLAR_RF_AGC, 0x0},
  281. {DVBT_POLAR_IF_AGC, 0x0},
  282. {DVBT_AD7_SETTING, 0xe9bf},
  283. {DVBT_EN_GI_PGA, 0x0},
  284. {DVBT_THD_LOCK_UP, 0x0},
  285. {DVBT_THD_LOCK_DW, 0x0},
  286. {DVBT_THD_UP1, 0x11},
  287. {DVBT_THD_DW1, 0xef},
  288. {DVBT_INTER_CNT_LEN, 0xc},
  289. {DVBT_GI_PGA_STATE, 0x0},
  290. {DVBT_EN_AGC_PGA, 0x1},
  291. {DVBT_IF_AGC_MAN, 0x0},
  292. };
  293. static const struct rtl2832_reg_value rtl2832_tuner_init_e4000[] = {
  294. {DVBT_DAGC_TRG_VAL, 0x5a},
  295. {DVBT_AGC_TARG_VAL_0, 0x0},
  296. {DVBT_AGC_TARG_VAL_8_1, 0x5a},
  297. {DVBT_AAGC_LOOP_GAIN, 0x18},
  298. {DVBT_LOOP_GAIN2_3_0, 0x8},
  299. {DVBT_LOOP_GAIN2_4, 0x1},
  300. {DVBT_LOOP_GAIN3, 0x18},
  301. {DVBT_VTOP1, 0x35},
  302. {DVBT_VTOP2, 0x21},
  303. {DVBT_VTOP3, 0x21},
  304. {DVBT_KRF1, 0x0},
  305. {DVBT_KRF2, 0x40},
  306. {DVBT_KRF3, 0x10},
  307. {DVBT_KRF4, 0x10},
  308. {DVBT_IF_AGC_MIN, 0x80},
  309. {DVBT_IF_AGC_MAX, 0x7f},
  310. {DVBT_RF_AGC_MIN, 0x80},
  311. {DVBT_RF_AGC_MAX, 0x7f},
  312. {DVBT_POLAR_RF_AGC, 0x0},
  313. {DVBT_POLAR_IF_AGC, 0x0},
  314. {DVBT_AD7_SETTING, 0xe9d4},
  315. {DVBT_EN_GI_PGA, 0x0},
  316. {DVBT_THD_LOCK_UP, 0x0},
  317. {DVBT_THD_LOCK_DW, 0x0},
  318. {DVBT_THD_UP1, 0x14},
  319. {DVBT_THD_DW1, 0xec},
  320. {DVBT_INTER_CNT_LEN, 0xc},
  321. {DVBT_GI_PGA_STATE, 0x0},
  322. {DVBT_EN_AGC_PGA, 0x1},
  323. {DVBT_REG_GPE, 0x1},
  324. {DVBT_REG_GPO, 0x1},
  325. {DVBT_REG_MONSEL, 0x1},
  326. {DVBT_REG_MON, 0x1},
  327. {DVBT_REG_4MSEL, 0x0},
  328. };
  329. #endif /* RTL2832_PRIV_H */