it913x-fe-priv.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. struct it913xset { u32 pro;
  2. u32 address;
  3. u8 reg[15];
  4. u8 count;
  5. };
  6. struct adctable { u32 adcFrequency;
  7. u32 bandwidth;
  8. u32 coeff_1_2048;
  9. u32 coeff_1_4096;
  10. u32 coeff_1_8191;
  11. u32 coeff_1_8192;
  12. u32 coeff_1_8193;
  13. u32 coeff_2_2k;
  14. u32 coeff_2_4k;
  15. u32 coeff_2_8k;
  16. u16 bfsfcw_fftinx_ratio;
  17. u16 fftinx_bfsfcw_ratio;
  18. };
  19. /* clock and coeff tables only table 3 is used with IT9137*/
  20. /* TODO other tables relate AF9035 may be removed */
  21. static struct adctable tab1[] = {
  22. { 20156250, BANDWIDTH_6_MHZ,
  23. 0x02b8ba6e, 0x015c5d37, 0x00ae340d, 0x00ae2e9b, 0x00ae292a,
  24. 0x015c5d37, 0x00ae2e9b, 0x0057174e, 0x02f1, 0x015c },
  25. { 20156250, BANDWIDTH_7_MHZ,
  26. 0x032cd980, 0x01966cc0, 0x00cb3cba, 0x00cb3660, 0x00cb3007,
  27. 0x01966cc0, 0x00cb3660, 0x00659b30, 0x0285, 0x0196 },
  28. { 20156250, BANDWIDTH_8_MHZ,
  29. 0x03a0f893, 0x01d07c49, 0x00e84567, 0x00e83e25, 0x00e836e3,
  30. 0x01d07c49, 0x00e83e25, 0x00741f12, 0x0234, 0x01d0 },
  31. { 20156250, BANDWIDTH_5_MHZ,
  32. 0x02449b5c, 0x01224dae, 0x00912b60, 0x009126d7, 0x0091224e,
  33. 0x01224dae, 0x009126d7, 0x0048936b, 0x0387, 0x0122 }
  34. };
  35. static struct adctable tab2[] = {
  36. { 20187500, BANDWIDTH_6_MHZ,
  37. 0x02b7a654, 0x015bd32a, 0x00adef04, 0x00ade995, 0x00ade426,
  38. 0x015bd32a, 0x00ade995, 0x0056f4ca, 0x02f2, 0x015c },
  39. { 20187500, BANDWIDTH_7_MHZ,
  40. 0x032b9761, 0x0195cbb1, 0x00caec30, 0x00cae5d8, 0x00cadf81,
  41. 0x0195cbb1, 0x00cae5d8, 0x006572ec, 0x0286, 0x0196 },
  42. { 20187500, BANDWIDTH_8_MHZ,
  43. 0x039f886f, 0x01cfc438, 0x00e7e95b, 0x00e7e21c, 0x00e7dadd,
  44. 0x01cfc438, 0x00e7e21c, 0x0073f10e, 0x0235, 0x01d0 },
  45. { 20187500, BANDWIDTH_5_MHZ,
  46. 0x0243b546, 0x0121daa3, 0x0090f1d9, 0x0090ed51, 0x0090e8ca,
  47. 0x0121daa3, 0x0090ed51, 0x004876a9, 0x0388, 0x0122 }
  48. };
  49. static struct adctable tab3[] = {
  50. { 20250000, BANDWIDTH_6_MHZ,
  51. 0x02b580ad, 0x015ac057, 0x00ad6597, 0x00ad602b, 0x00ad5ac1,
  52. 0x015ac057, 0x00ad602b, 0x0056b016, 0x02f4, 0x015b },
  53. { 20250000, BANDWIDTH_7_MHZ,
  54. 0x03291620, 0x01948b10, 0x00ca4bda, 0x00ca4588, 0x00ca3f36,
  55. 0x01948b10, 0x00ca4588, 0x006522c4, 0x0288, 0x0195 },
  56. { 20250000, BANDWIDTH_8_MHZ,
  57. 0x039cab92, 0x01ce55c9, 0x00e7321e, 0x00e72ae4, 0x00e723ab,
  58. 0x01ce55c9, 0x00e72ae4, 0x00739572, 0x0237, 0x01ce },
  59. { 20250000, BANDWIDTH_5_MHZ,
  60. 0x0241eb3b, 0x0120f59e, 0x00907f53, 0x00907acf, 0x0090764b,
  61. 0x0120f59e, 0x00907acf, 0x00483d67, 0x038b, 0x0121 }
  62. };
  63. static struct adctable tab4[] = {
  64. { 20583333, BANDWIDTH_6_MHZ,
  65. 0x02aa4598, 0x015522cc, 0x00aa96bb, 0x00aa9166, 0x00aa8c12,
  66. 0x015522cc, 0x00aa9166, 0x005548b3, 0x0300, 0x0155 },
  67. { 20583333, BANDWIDTH_7_MHZ,
  68. 0x031bfbdc, 0x018dfdee, 0x00c7052f, 0x00c6fef7, 0x00c6f8bf,
  69. 0x018dfdee, 0x00c6fef7, 0x00637f7b, 0x0293, 0x018e },
  70. { 20583333, BANDWIDTH_8_MHZ,
  71. 0x038db21f, 0x01c6d910, 0x00e373a3, 0x00e36c88, 0x00e3656d,
  72. 0x01c6d910, 0x00e36c88, 0x0071b644, 0x0240, 0x01c7 },
  73. { 20583333, BANDWIDTH_5_MHZ,
  74. 0x02388f54, 0x011c47aa, 0x008e2846, 0x008e23d5, 0x008e1f64,
  75. 0x011c47aa, 0x008e23d5, 0x004711ea, 0x039a, 0x011c }
  76. };
  77. static struct adctable tab5[] = {
  78. { 20416667, BANDWIDTH_6_MHZ,
  79. 0x02afd765, 0x0157ebb3, 0x00abfb39, 0x00abf5d9, 0x00abf07a,
  80. 0x0157ebb3, 0x00abf5d9, 0x0055faed, 0x02fa, 0x0158 },
  81. { 20416667, BANDWIDTH_7_MHZ,
  82. 0x03227b4b, 0x01913da6, 0x00c8a518, 0x00c89ed3, 0x00c8988e,
  83. 0x01913da6, 0x00c89ed3, 0x00644f69, 0x028d, 0x0191 },
  84. { 20416667, BANDWIDTH_8_MHZ,
  85. 0x03951f32, 0x01ca8f99, 0x00e54ef7, 0x00e547cc, 0x00e540a2,
  86. 0x01ca8f99, 0x00e547cc, 0x0072a3e6, 0x023c, 0x01cb },
  87. { 20416667, BANDWIDTH_5_MHZ,
  88. 0x023d337f, 0x011e99c0, 0x008f515a, 0x008f4ce0, 0x008f4865,
  89. 0x011e99c0, 0x008f4ce0, 0x0047a670, 0x0393, 0x011f }
  90. };
  91. static struct adctable tab6[] = {
  92. { 20480000, BANDWIDTH_6_MHZ,
  93. 0x02adb6db, 0x0156db6e, 0x00ab7312, 0x00ab6db7, 0x00ab685c,
  94. 0x0156db6e, 0x00ab6db7, 0x0055b6db, 0x02fd, 0x0157 },
  95. { 20480000, BANDWIDTH_7_MHZ,
  96. 0x03200000, 0x01900000, 0x00c80640, 0x00c80000, 0x00c7f9c0,
  97. 0x01900000, 0x00c80000, 0x00640000, 0x028f, 0x0190 },
  98. { 20480000, BANDWIDTH_8_MHZ,
  99. 0x03924925, 0x01c92492, 0x00e4996e, 0x00e49249, 0x00e48b25,
  100. 0x01c92492, 0x00e49249, 0x00724925, 0x023d, 0x01c9 },
  101. { 20480000, BANDWIDTH_5_MHZ,
  102. 0x023b6db7, 0x011db6db, 0x008edfe5, 0x008edb6e, 0x008ed6f7,
  103. 0x011db6db, 0x008edb6e, 0x00476db7, 0x0396, 0x011e }
  104. };
  105. static struct adctable tab7[] = {
  106. { 20500000, BANDWIDTH_6_MHZ,
  107. 0x02ad0b99, 0x015685cc, 0x00ab4840, 0x00ab42e6, 0x00ab3d8c,
  108. 0x015685cc, 0x00ab42e6, 0x0055a173, 0x02fd, 0x0157 },
  109. { 20500000, BANDWIDTH_7_MHZ,
  110. 0x031f3832, 0x018f9c19, 0x00c7d44b, 0x00c7ce0c, 0x00c7c7ce,
  111. 0x018f9c19, 0x00c7ce0c, 0x0063e706, 0x0290, 0x0190 },
  112. { 20500000, BANDWIDTH_8_MHZ,
  113. 0x039164cb, 0x01c8b266, 0x00e46056, 0x00e45933, 0x00e45210,
  114. 0x01c8b266, 0x00e45933, 0x00722c99, 0x023e, 0x01c9 },
  115. { 20500000, BANDWIDTH_5_MHZ,
  116. 0x023adeff, 0x011d6f80, 0x008ebc36, 0x008eb7c0, 0x008eb34a,
  117. 0x011d6f80, 0x008eb7c0, 0x00475be0, 0x0396, 0x011d }
  118. };
  119. static struct adctable tab8[] = {
  120. { 20625000, BANDWIDTH_6_MHZ,
  121. 0x02a8e4bd, 0x0154725e, 0x00aa3e81, 0x00aa392f, 0x00aa33de,
  122. 0x0154725e, 0x00aa392f, 0x00551c98, 0x0302, 0x0154 },
  123. { 20625000, BANDWIDTH_7_MHZ,
  124. 0x031a6032, 0x018d3019, 0x00c69e41, 0x00c6980c, 0x00c691d8,
  125. 0x018d3019, 0x00c6980c, 0x00634c06, 0x0294, 0x018d },
  126. { 20625000, BANDWIDTH_8_MHZ,
  127. 0x038bdba6, 0x01c5edd3, 0x00e2fe02, 0x00e2f6ea, 0x00e2efd2,
  128. 0x01c5edd3, 0x00e2f6ea, 0x00717b75, 0x0242, 0x01c6 },
  129. { 20625000, BANDWIDTH_5_MHZ,
  130. 0x02376948, 0x011bb4a4, 0x008ddec1, 0x008dda52, 0x008dd5e3,
  131. 0x011bb4a4, 0x008dda52, 0x0046ed29, 0x039c, 0x011c }
  132. };
  133. struct table {
  134. u32 xtal;
  135. struct adctable *table;
  136. };
  137. static struct table fe_clockTable[] = {
  138. {12000000, tab3}, /* FPGA */
  139. {16384000, tab6}, /* 16.38MHz */
  140. {20480000, tab6}, /* 20.48MHz */
  141. {36000000, tab3}, /* 36.00MHz */
  142. {30000000, tab1}, /* 30.00MHz */
  143. {26000000, tab4}, /* 26.00MHz */
  144. {28000000, tab5}, /* 28.00MHz */
  145. {32000000, tab7}, /* 32.00MHz */
  146. {34000000, tab2}, /* 34.00MHz */
  147. {24000000, tab1}, /* 24.00MHz */
  148. {22000000, tab8}, /* 22.00MHz */
  149. {12000000, tab3} /* 12.00MHz */
  150. };
  151. /* fe get */
  152. fe_code_rate_t fe_code[] = {
  153. FEC_1_2,
  154. FEC_2_3,
  155. FEC_3_4,
  156. FEC_5_6,
  157. FEC_7_8,
  158. FEC_NONE,
  159. };
  160. fe_guard_interval_t fe_gi[] = {
  161. GUARD_INTERVAL_1_32,
  162. GUARD_INTERVAL_1_16,
  163. GUARD_INTERVAL_1_8,
  164. GUARD_INTERVAL_1_4,
  165. };
  166. fe_hierarchy_t fe_hi[] = {
  167. HIERARCHY_NONE,
  168. HIERARCHY_1,
  169. HIERARCHY_2,
  170. HIERARCHY_4,
  171. };
  172. fe_transmit_mode_t fe_mode[] = {
  173. TRANSMISSION_MODE_2K,
  174. TRANSMISSION_MODE_8K,
  175. TRANSMISSION_MODE_4K,
  176. };
  177. fe_modulation_t fe_con[] = {
  178. QPSK,
  179. QAM_16,
  180. QAM_64,
  181. };
  182. /* Standard demodulator functions */
  183. static struct it913xset set_solo_fe[] = {
  184. {PRO_LINK, DVBT_INTEN, {0x04}, 0x01},
  185. {PRO_LINK, DVBT_ENABLE, {0x05}, 0x01},
  186. {PRO_DMOD, MP2IF_MPEG_PAR_MODE, {0x00}, 0x01},
  187. {PRO_LINK, HOSTB_MPEG_SER_MODE, {0x00}, 0x01},
  188. {PRO_LINK, HOSTB_MPEG_PAR_MODE, {0x00}, 0x01},
  189. {PRO_DMOD, DCA_UPPER_CHIP, {0x00}, 0x01},
  190. {PRO_LINK, HOSTB_DCA_UPPER, {0x00}, 0x01},
  191. {PRO_DMOD, DCA_LOWER_CHIP, {0x00}, 0x01},
  192. {PRO_LINK, HOSTB_DCA_LOWER, {0x00}, 0x01},
  193. {PRO_DMOD, DCA_PLATCH, {0x00}, 0x01},
  194. {PRO_DMOD, DCA_FPGA_LATCH, {0x00}, 0x01},
  195. {PRO_DMOD, DCA_STAND_ALONE, {0x01}, 0x01},
  196. {PRO_DMOD, DCA_ENABLE, {0x00}, 0x01},
  197. {PRO_DMOD, MP2IF_MPEG_PAR_MODE, {0x00}, 0x01},
  198. {PRO_DMOD, BFS_FCW, {0x00, 0x00, 0x00}, 0x03},
  199. {0xff, 0x0000, {0x00}, 0x00}, /* Terminating Entry */
  200. };
  201. static struct it913xset init_1[] = {
  202. {PRO_LINK, LOCK3_OUT, {0x01}, 0x01},
  203. {PRO_LINK, PADMISCDRSR, {0x01}, 0x01},
  204. {PRO_LINK, PADMISCDR2, {0x00}, 0x01},
  205. {PRO_LINK, PADMISCDR4, {0x00}, 0x01}, /* Power up */
  206. {PRO_LINK, PADMISCDR8, {0x00}, 0x01},
  207. {0xff, 0x0000, {0x00}, 0x00} /* Terminating Entry */
  208. };
  209. /* ---------IT9137 0x38 tuner init---------- */
  210. static struct it913xset it9137_set[] = {
  211. {PRO_DMOD, 0x0043, {0x00}, 0x01},
  212. {PRO_DMOD, 0x0046, {0x38}, 0x01},
  213. {PRO_DMOD, 0x0051, {0x01}, 0x01},
  214. {PRO_DMOD, 0x005f, {0x00, 0x00}, 0x02},
  215. {PRO_DMOD, 0x0068, {0x0a}, 0x01},
  216. {PRO_DMOD, 0x0070, {0x0a, 0x05, 0x02}, 0x03},
  217. {PRO_DMOD, 0x0075, {0x8c, 0x8c, 0x8c, 0xc8, 0x01}, 0x05},
  218. {PRO_DMOD, 0x007e, {0x04, 0x00}, 0x02},
  219. {PRO_DMOD, 0x0081, { 0x0a, 0x12, 0x02, 0x0a, 0x03, 0xc8, 0xb8,
  220. 0xd0, 0xc3, 0x01 }, 0x0a},
  221. {PRO_DMOD, 0x008e, {0x01}, 0x01},
  222. {PRO_DMOD, 0x0092, {0x06, 0x00, 0x00, 0x00, 0x00}, 0x05},
  223. {PRO_DMOD, 0x0099, {0x01}, 0x01},
  224. {PRO_DMOD, 0x009b, {0x3c, 0x28}, 0x02},
  225. {PRO_DMOD, 0x009f, {0xe1, 0xcf}, 0x02},
  226. {PRO_DMOD, 0x00a3, {0x01, 0x5a, 0x01, 0x01}, 0x04},
  227. {PRO_DMOD, 0x00a9, {0x00, 0x01}, 0x02},
  228. {PRO_DMOD, 0x00b0, {0x01}, 0x01},
  229. {PRO_DMOD, 0x00b3, {0x02, 0x32}, 0x02},
  230. {PRO_DMOD, 0x00b6, {0x14}, 0x01},
  231. {PRO_DMOD, 0x00c0, {0x11, 0x00, 0x05}, 0x03},
  232. {PRO_DMOD, 0x00c4, {0x00}, 0x01},
  233. {PRO_DMOD, 0x00c6, {0x19, 0x00}, 0x02},
  234. {PRO_DMOD, 0x00cc, {0x2e, 0x51, 0x33}, 0x03},
  235. {PRO_DMOD, 0x00f3, {0x05, 0x8c, 0x8c}, 0x03},
  236. {PRO_DMOD, 0x00f8, {0x03, 0x06, 0x06}, 0x03},
  237. {PRO_DMOD, 0x00fc, { 0x02, 0x02, 0x02, 0x09, 0x50, 0x7b, 0x77,
  238. 0x00, 0x02, 0xc8, 0x05, 0x7b }, 0x0c},
  239. {PRO_DMOD, 0x0109, {0x02}, 0x01},
  240. {PRO_DMOD, 0x0115, {0x0a, 0x03}, 0x02},
  241. {PRO_DMOD, 0x011a, {0xc8, 0x7b, 0xbc, 0xa0}, 0x04},
  242. {PRO_DMOD, 0x0122, {0x02, 0x18, 0xc3}, 0x03},
  243. {PRO_DMOD, 0x0127, {0x00, 0x07}, 0x02},
  244. {PRO_DMOD, 0x012a, {0x53, 0x51, 0x4e, 0x43}, 0x04},
  245. {PRO_DMOD, 0x0137, {0x01, 0x00, 0x07, 0x00, 0x06}, 0x05},
  246. {PRO_DMOD, 0x013d, {0x00, 0x01, 0x5b, 0xc8}, 0x04},
  247. {PRO_DMOD, 0xf130, {0x04}, 0x01},
  248. {PRO_DMOD, 0xf132, {0x04}, 0x01},
  249. {PRO_DMOD, 0xf144, {0x1a}, 0x01},
  250. {PRO_DMOD, 0xf146, {0x00}, 0x01},
  251. {PRO_DMOD, 0xf14a, {0x01}, 0x01},
  252. {PRO_DMOD, 0xf14c, {0x00, 0x00}, 0x02},
  253. {PRO_DMOD, 0xf14f, {0x04}, 0x01},
  254. {PRO_DMOD, 0xf158, {0x7f}, 0x01},
  255. {PRO_DMOD, 0xf15a, {0x00, 0x08}, 0x02},
  256. {PRO_DMOD, 0xf15d, {0x03, 0x05}, 0x02},
  257. {PRO_DMOD, 0xf163, {0x05}, 0x01},
  258. {PRO_DMOD, 0xf166, {0x01, 0x40, 0x0f}, 0x03},
  259. {PRO_DMOD, 0xf17a, {0x00, 0x00}, 0x02},
  260. {PRO_DMOD, 0xf183, {0x01}, 0x01},
  261. {PRO_DMOD, 0xf19d, {0x40}, 0x01},
  262. {PRO_DMOD, 0xf1bc, {0x36, 0x00}, 0x02},
  263. {PRO_DMOD, 0xf1cb, {0xa0, 0x01}, 0x02},
  264. {PRO_DMOD, 0xf204, {0x10}, 0x01},
  265. {PRO_DMOD, 0xf214, {0x00}, 0x01},
  266. {PRO_DMOD, 0xf24c, {0x88, 0x95, 0x9a, 0x90}, 0x04},
  267. {PRO_DMOD, 0xf25a, {0x07, 0xe8, 0x03, 0xb0, 0x04}, 0x05},
  268. {PRO_DMOD, 0xf270, {0x01, 0x02, 0x01, 0x02}, 0x04},
  269. {PRO_DMOD, 0xf40e, {0x0a, 0x40, 0x08}, 0x03},
  270. {PRO_DMOD, 0xf55f, {0x0a}, 0x01},
  271. {PRO_DMOD, 0xf561, {0x15, 0x20}, 0x02},
  272. {PRO_DMOD, 0xf5df, {0xfb, 0x00}, 0x02},
  273. {PRO_DMOD, 0xf5e3, {0x09, 0x01, 0x01}, 0x03},
  274. {PRO_DMOD, 0xf5f8, {0x01}, 0x01},
  275. {PRO_DMOD, 0xf5fd, {0x01}, 0x01},
  276. {PRO_DMOD, 0xf600, { 0x05, 0x08, 0x0b, 0x0e, 0x11, 0x14, 0x17,
  277. 0x1f }, 0x08},
  278. {PRO_DMOD, 0xf60e, {0x00, 0x04, 0x32, 0x10}, 0x04},
  279. {PRO_DMOD, 0xf707, {0xfc, 0x00, 0x37, 0x00}, 0x04},
  280. {PRO_DMOD, 0xf78b, {0x01}, 0x01},
  281. {PRO_DMOD, 0xf80f, {0x40, 0x54, 0x5a}, 0x03},
  282. {PRO_DMOD, 0xf905, {0x01}, 0x01},
  283. {PRO_DMOD, 0xfb06, {0x03}, 0x01},
  284. {PRO_DMOD, 0xfd8b, {0x00}, 0x01},
  285. {PRO_LINK, GPIOH5_EN, {0x01}, 0x01},
  286. {PRO_LINK, GPIOH5_ON, {0x01}, 0x01},
  287. {PRO_LINK, GPIOH5_O, {0x00}, 0x01},
  288. {PRO_LINK, GPIOH5_O, {0x01}, 0x01},/* ?, but enable */
  289. {0xff, 0x0000, {0x00}, 0x00}, /* Terminating Entry */
  290. };
  291. static struct it913xset set_it9137_template[] = {
  292. {PRO_DMOD, 0xee06, {0x00}, 0x01},
  293. {PRO_DMOD, 0xec56, {0x00}, 0x01},
  294. {PRO_DMOD, 0xec4c, {0x00}, 0x01},
  295. {PRO_DMOD, 0xec4d, {0x00}, 0x01},
  296. {PRO_DMOD, 0xec4e, {0x00}, 0x01},
  297. {PRO_DMOD, 0xec4f, {0x00}, 0x01},
  298. {PRO_DMOD, 0xec50, {0x00}, 0x01},
  299. {0xff, 0x0000, {0x00}, 0x00}, /* Terminating Entry */
  300. };