mxl692_defs.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Driver for the MaxLinear MxL69x family of combo tuners/demods
  4. *
  5. * Copyright (C) 2020 Brad Love <[email protected]>
  6. *
  7. * based on code:
  8. * Copyright (c) 2016 MaxLinear, Inc. All rights reserved
  9. * which was released under GPL V2
  10. */
  11. /*****************************************************************************
  12. * Defines
  13. *****************************************************************************
  14. */
  15. #define MXL_EAGLE_HOST_MSG_HEADER_SIZE 8
  16. #define MXL_EAGLE_FW_MAX_SIZE_IN_KB 76
  17. #define MXL_EAGLE_QAM_FFE_TAPS_LENGTH 16
  18. #define MXL_EAGLE_QAM_SPUR_TAPS_LENGTH 32
  19. #define MXL_EAGLE_QAM_DFE_TAPS_LENGTH 72
  20. #define MXL_EAGLE_ATSC_FFE_TAPS_LENGTH 4096
  21. #define MXL_EAGLE_ATSC_DFE_TAPS_LENGTH 384
  22. #define MXL_EAGLE_VERSION_SIZE 5 /* A.B.C.D-RCx */
  23. #define MXL_EAGLE_FW_LOAD_TIME 50
  24. #define MXL_EAGLE_FW_MAX_SIZE_IN_KB 76
  25. #define MXL_EAGLE_FW_HEADER_SIZE 16
  26. #define MXL_EAGLE_FW_SEGMENT_HEADER_SIZE 8
  27. #define MXL_EAGLE_MAX_I2C_PACKET_SIZE 58
  28. #define MXL_EAGLE_I2C_MHEADER_SIZE 6
  29. #define MXL_EAGLE_I2C_PHEADER_SIZE 2
  30. /* Enum of Eagle family devices */
  31. enum MXL_EAGLE_DEVICE_E {
  32. MXL_EAGLE_DEVICE_691 = 1, /* Device Mxl691 */
  33. MXL_EAGLE_DEVICE_248 = 2, /* Device Mxl248 */
  34. MXL_EAGLE_DEVICE_692 = 3, /* Device Mxl692 */
  35. MXL_EAGLE_DEVICE_MAX, /* No such device */
  36. };
  37. #define VER_A 1
  38. #define VER_B 1
  39. #define VER_C 1
  40. #define VER_D 3
  41. #define VER_E 6
  42. /* Enum of Host to Eagle I2C protocol opcodes */
  43. enum MXL_EAGLE_OPCODE_E {
  44. /* DEVICE */
  45. MXL_EAGLE_OPCODE_DEVICE_DEMODULATOR_TYPE_SET,
  46. MXL_EAGLE_OPCODE_DEVICE_MPEG_OUT_PARAMS_SET,
  47. MXL_EAGLE_OPCODE_DEVICE_POWERMODE_SET,
  48. MXL_EAGLE_OPCODE_DEVICE_GPIO_DIRECTION_SET,
  49. MXL_EAGLE_OPCODE_DEVICE_GPO_LEVEL_SET,
  50. MXL_EAGLE_OPCODE_DEVICE_INTR_MASK_SET,
  51. MXL_EAGLE_OPCODE_DEVICE_IO_MUX_SET,
  52. MXL_EAGLE_OPCODE_DEVICE_VERSION_GET,
  53. MXL_EAGLE_OPCODE_DEVICE_STATUS_GET,
  54. MXL_EAGLE_OPCODE_DEVICE_GPI_LEVEL_GET,
  55. /* TUNER */
  56. MXL_EAGLE_OPCODE_TUNER_CHANNEL_TUNE_SET,
  57. MXL_EAGLE_OPCODE_TUNER_LOCK_STATUS_GET,
  58. MXL_EAGLE_OPCODE_TUNER_AGC_STATUS_GET,
  59. /* ATSC */
  60. MXL_EAGLE_OPCODE_ATSC_INIT_SET,
  61. MXL_EAGLE_OPCODE_ATSC_ACQUIRE_CARRIER_SET,
  62. MXL_EAGLE_OPCODE_ATSC_STATUS_GET,
  63. MXL_EAGLE_OPCODE_ATSC_ERROR_COUNTERS_GET,
  64. MXL_EAGLE_OPCODE_ATSC_EQUALIZER_FILTER_DFE_TAPS_GET,
  65. MXL_EAGLE_OPCODE_ATSC_EQUALIZER_FILTER_FFE_TAPS_GET,
  66. /* QAM */
  67. MXL_EAGLE_OPCODE_QAM_PARAMS_SET,
  68. MXL_EAGLE_OPCODE_QAM_RESTART_SET,
  69. MXL_EAGLE_OPCODE_QAM_STATUS_GET,
  70. MXL_EAGLE_OPCODE_QAM_ERROR_COUNTERS_GET,
  71. MXL_EAGLE_OPCODE_QAM_CONSTELLATION_VALUE_GET,
  72. MXL_EAGLE_OPCODE_QAM_EQUALIZER_FILTER_FFE_GET,
  73. MXL_EAGLE_OPCODE_QAM_EQUALIZER_FILTER_SPUR_START_GET,
  74. MXL_EAGLE_OPCODE_QAM_EQUALIZER_FILTER_SPUR_END_GET,
  75. MXL_EAGLE_OPCODE_QAM_EQUALIZER_FILTER_DFE_TAPS_NUMBER_GET,
  76. MXL_EAGLE_OPCODE_QAM_EQUALIZER_FILTER_DFE_START_GET,
  77. MXL_EAGLE_OPCODE_QAM_EQUALIZER_FILTER_DFE_MIDDLE_GET,
  78. MXL_EAGLE_OPCODE_QAM_EQUALIZER_FILTER_DFE_END_GET,
  79. /* OOB */
  80. MXL_EAGLE_OPCODE_OOB_PARAMS_SET,
  81. MXL_EAGLE_OPCODE_OOB_RESTART_SET,
  82. MXL_EAGLE_OPCODE_OOB_ERROR_COUNTERS_GET,
  83. MXL_EAGLE_OPCODE_OOB_STATUS_GET,
  84. /* SMA */
  85. MXL_EAGLE_OPCODE_SMA_INIT_SET,
  86. MXL_EAGLE_OPCODE_SMA_PARAMS_SET,
  87. MXL_EAGLE_OPCODE_SMA_TRANSMIT_SET,
  88. MXL_EAGLE_OPCODE_SMA_RECEIVE_GET,
  89. /* DEBUG */
  90. MXL_EAGLE_OPCODE_INTERNAL,
  91. MXL_EAGLE_OPCODE_MAX = 70,
  92. };
  93. /* Enum of Host to Eagle I2C protocol opcodes */
  94. static const char * const MXL_EAGLE_OPCODE_STRING[] = {
  95. /* DEVICE */
  96. "DEVICE_DEMODULATOR_TYPE_SET",
  97. "DEVICE_MPEG_OUT_PARAMS_SET",
  98. "DEVICE_POWERMODE_SET",
  99. "DEVICE_GPIO_DIRECTION_SET",
  100. "DEVICE_GPO_LEVEL_SET",
  101. "DEVICE_INTR_MASK_SET",
  102. "DEVICE_IO_MUX_SET",
  103. "DEVICE_VERSION_GET",
  104. "DEVICE_STATUS_GET",
  105. "DEVICE_GPI_LEVEL_GET",
  106. /* TUNER */
  107. "TUNER_CHANNEL_TUNE_SET",
  108. "TUNER_LOCK_STATUS_GET",
  109. "TUNER_AGC_STATUS_GET",
  110. /* ATSC */
  111. "ATSC_INIT_SET",
  112. "ATSC_ACQUIRE_CARRIER_SET",
  113. "ATSC_STATUS_GET",
  114. "ATSC_ERROR_COUNTERS_GET",
  115. "ATSC_EQUALIZER_FILTER_DFE_TAPS_GET",
  116. "ATSC_EQUALIZER_FILTER_FFE_TAPS_GET",
  117. /* QAM */
  118. "QAM_PARAMS_SET",
  119. "QAM_RESTART_SET",
  120. "QAM_STATUS_GET",
  121. "QAM_ERROR_COUNTERS_GET",
  122. "QAM_CONSTELLATION_VALUE_GET",
  123. "QAM_EQUALIZER_FILTER_FFE_GET",
  124. "QAM_EQUALIZER_FILTER_SPUR_START_GET",
  125. "QAM_EQUALIZER_FILTER_SPUR_END_GET",
  126. "QAM_EQUALIZER_FILTER_DFE_TAPS_NUMBER_GET",
  127. "QAM_EQUALIZER_FILTER_DFE_START_GET",
  128. "QAM_EQUALIZER_FILTER_DFE_MIDDLE_GET",
  129. "QAM_EQUALIZER_FILTER_DFE_END_GET",
  130. /* OOB */
  131. "OOB_PARAMS_SET",
  132. "OOB_RESTART_SET",
  133. "OOB_ERROR_COUNTERS_GET",
  134. "OOB_STATUS_GET",
  135. /* SMA */
  136. "SMA_INIT_SET",
  137. "SMA_PARAMS_SET",
  138. "SMA_TRANSMIT_SET",
  139. "SMA_RECEIVE_GET",
  140. /* DEBUG */
  141. "INTERNAL",
  142. };
  143. /* Enum of Callabck function types */
  144. enum MXL_EAGLE_CB_TYPE_E {
  145. MXL_EAGLE_CB_FW_DOWNLOAD = 0,
  146. };
  147. /* Enum of power supply types */
  148. enum MXL_EAGLE_POWER_SUPPLY_SOURCE_E {
  149. MXL_EAGLE_POWER_SUPPLY_SOURCE_SINGLE, /* Single supply of 3.3V */
  150. MXL_EAGLE_POWER_SUPPLY_SOURCE_DUAL, /* Dual supply, 1.8V & 3.3V */
  151. };
  152. /* Enum of I/O pad drive modes */
  153. enum MXL_EAGLE_IO_MUX_DRIVE_MODE_E {
  154. MXL_EAGLE_IO_MUX_DRIVE_MODE_1X,
  155. MXL_EAGLE_IO_MUX_DRIVE_MODE_2X,
  156. MXL_EAGLE_IO_MUX_DRIVE_MODE_3X,
  157. MXL_EAGLE_IO_MUX_DRIVE_MODE_4X,
  158. MXL_EAGLE_IO_MUX_DRIVE_MODE_5X,
  159. MXL_EAGLE_IO_MUX_DRIVE_MODE_6X,
  160. MXL_EAGLE_IO_MUX_DRIVE_MODE_7X,
  161. MXL_EAGLE_IO_MUX_DRIVE_MODE_8X,
  162. };
  163. /* Enum of demodulator types. Used for selection of demodulator
  164. * type in relevant devices, e.g. ATSC vs. QAM in Mxl691
  165. */
  166. enum MXL_EAGLE_DEMOD_TYPE_E {
  167. MXL_EAGLE_DEMOD_TYPE_QAM, /* Mxl248 or Mxl692 */
  168. MXL_EAGLE_DEMOD_TYPE_OOB, /* Mxl248 only */
  169. MXL_EAGLE_DEMOD_TYPE_ATSC /* Mxl691 or Mxl692 */
  170. };
  171. /* Enum of power modes. Used for initial
  172. * activation, or for activating sleep mode
  173. */
  174. enum MXL_EAGLE_POWER_MODE_E {
  175. MXL_EAGLE_POWER_MODE_SLEEP,
  176. MXL_EAGLE_POWER_MODE_ACTIVE
  177. };
  178. /* Enum of GPIOs, used in device GPIO APIs */
  179. enum MXL_EAGLE_GPIO_NUMBER_E {
  180. MXL_EAGLE_GPIO_NUMBER_0,
  181. MXL_EAGLE_GPIO_NUMBER_1,
  182. MXL_EAGLE_GPIO_NUMBER_2,
  183. MXL_EAGLE_GPIO_NUMBER_3,
  184. MXL_EAGLE_GPIO_NUMBER_4,
  185. MXL_EAGLE_GPIO_NUMBER_5,
  186. MXL_EAGLE_GPIO_NUMBER_6
  187. };
  188. /* Enum of GPIO directions, used in GPIO direction configuration API */
  189. enum MXL_EAGLE_GPIO_DIRECTION_E {
  190. MXL_EAGLE_GPIO_DIRECTION_INPUT,
  191. MXL_EAGLE_GPIO_DIRECTION_OUTPUT
  192. };
  193. /* Enum of GPIO level, used in device GPIO APIs */
  194. enum MXL_EAGLE_GPIO_LEVEL_E {
  195. MXL_EAGLE_GPIO_LEVEL_LOW,
  196. MXL_EAGLE_GPIO_LEVEL_HIGH,
  197. };
  198. /* Enum of I/O Mux function, used in device I/O mux configuration API */
  199. enum MXL_EAGLE_IOMUX_FUNCTION_E {
  200. MXL_EAGLE_IOMUX_FUNC_FEC_LOCK,
  201. MXL_EAGLE_IOMUX_FUNC_MERR,
  202. };
  203. /* Enum of MPEG Data format, used in MPEG and OOB output configuration */
  204. enum MXL_EAGLE_MPEG_DATA_FORMAT_E {
  205. MXL_EAGLE_DATA_SERIAL_LSB_1ST = 0,
  206. MXL_EAGLE_DATA_SERIAL_MSB_1ST,
  207. MXL_EAGLE_DATA_SYNC_WIDTH_BIT = 0,
  208. MXL_EAGLE_DATA_SYNC_WIDTH_BYTE
  209. };
  210. /* Enum of MPEG Clock format, used in MPEG and OOB output configuration */
  211. enum MXL_EAGLE_MPEG_CLOCK_FORMAT_E {
  212. MXL_EAGLE_CLOCK_ACTIVE_HIGH = 0,
  213. MXL_EAGLE_CLOCK_ACTIVE_LOW,
  214. MXL_EAGLE_CLOCK_POSITIVE = 0,
  215. MXL_EAGLE_CLOCK_NEGATIVE,
  216. MXL_EAGLE_CLOCK_IN_PHASE = 0,
  217. MXL_EAGLE_CLOCK_INVERTED,
  218. };
  219. /* Enum of MPEG Clock speeds, used in MPEG output configuration */
  220. enum MXL_EAGLE_MPEG_CLOCK_RATE_E {
  221. MXL_EAGLE_MPEG_CLOCK_54MHZ,
  222. MXL_EAGLE_MPEG_CLOCK_40_5MHZ,
  223. MXL_EAGLE_MPEG_CLOCK_27MHZ,
  224. MXL_EAGLE_MPEG_CLOCK_13_5MHZ,
  225. };
  226. /* Enum of Interrupt mask bit, used in host interrupt configuration */
  227. enum MXL_EAGLE_INTR_MASK_BITS_E {
  228. MXL_EAGLE_INTR_MASK_DEMOD = 0,
  229. MXL_EAGLE_INTR_MASK_SMA_RX = 1,
  230. MXL_EAGLE_INTR_MASK_WDOG = 31
  231. };
  232. /* Enum of QAM Demodulator type, used in QAM configuration */
  233. enum MXL_EAGLE_QAM_DEMOD_ANNEX_TYPE_E {
  234. MXL_EAGLE_QAM_DEMOD_ANNEX_B, /* J.83B */
  235. MXL_EAGLE_QAM_DEMOD_ANNEX_A, /* DVB-C */
  236. };
  237. /* Enum of QAM Demodulator modulation, used in QAM configuration and status */
  238. enum MXL_EAGLE_QAM_DEMOD_QAM_TYPE_E {
  239. MXL_EAGLE_QAM_DEMOD_QAM16,
  240. MXL_EAGLE_QAM_DEMOD_QAM64,
  241. MXL_EAGLE_QAM_DEMOD_QAM256,
  242. MXL_EAGLE_QAM_DEMOD_QAM1024,
  243. MXL_EAGLE_QAM_DEMOD_QAM32,
  244. MXL_EAGLE_QAM_DEMOD_QAM128,
  245. MXL_EAGLE_QAM_DEMOD_QPSK,
  246. MXL_EAGLE_QAM_DEMOD_AUTO,
  247. };
  248. /* Enum of Demodulator IQ setup, used in QAM, OOB configuration and status */
  249. enum MXL_EAGLE_IQ_FLIP_E {
  250. MXL_EAGLE_DEMOD_IQ_NORMAL,
  251. MXL_EAGLE_DEMOD_IQ_FLIPPED,
  252. MXL_EAGLE_DEMOD_IQ_AUTO,
  253. };
  254. /* Enum of OOB Demodulator symbol rates, used in OOB configuration */
  255. enum MXL_EAGLE_OOB_DEMOD_SYMB_RATE_E {
  256. MXL_EAGLE_OOB_DEMOD_SYMB_RATE_0_772MHZ, /* ANSI/SCTE 55-2 0.772 MHz */
  257. MXL_EAGLE_OOB_DEMOD_SYMB_RATE_1_024MHZ, /* ANSI/SCTE 55-1 1.024 MHz */
  258. MXL_EAGLE_OOB_DEMOD_SYMB_RATE_1_544MHZ, /* ANSI/SCTE 55-2 1.544 MHz */
  259. };
  260. /* Enum of tuner channel tuning mode */
  261. enum MXL_EAGLE_TUNER_CHANNEL_TUNE_MODE_E {
  262. MXL_EAGLE_TUNER_CHANNEL_TUNE_MODE_VIEW, /* Normal "view" mode */
  263. MXL_EAGLE_TUNER_CHANNEL_TUNE_MODE_SCAN, /* Fast "scan" mode */
  264. };
  265. /* Enum of tuner bandwidth */
  266. enum MXL_EAGLE_TUNER_BW_E {
  267. MXL_EAGLE_TUNER_BW_6MHZ,
  268. MXL_EAGLE_TUNER_BW_7MHZ,
  269. MXL_EAGLE_TUNER_BW_8MHZ,
  270. };
  271. /* Enum of tuner bandwidth */
  272. enum MXL_EAGLE_JUNCTION_TEMPERATURE_E {
  273. MXL_EAGLE_JUNCTION_TEMPERATURE_BELOW_0_CELSIUS = 0,
  274. MXL_EAGLE_JUNCTION_TEMPERATURE_BETWEEN_0_TO_14_CELSIUS = 1,
  275. MXL_EAGLE_JUNCTION_TEMPERATURE_BETWEEN_14_TO_28_CELSIUS = 3,
  276. MXL_EAGLE_JUNCTION_TEMPERATURE_BETWEEN_28_TO_42_CELSIUS = 2,
  277. MXL_EAGLE_JUNCTION_TEMPERATURE_BETWEEN_42_TO_57_CELSIUS = 6,
  278. MXL_EAGLE_JUNCTION_TEMPERATURE_BETWEEN_57_TO_71_CELSIUS = 7,
  279. MXL_EAGLE_JUNCTION_TEMPERATURE_BETWEEN_71_TO_85_CELSIUS = 5,
  280. MXL_EAGLE_JUNCTION_TEMPERATURE_ABOVE_85_CELSIUS = 4,
  281. };
  282. /* Struct passed in optional callback used during FW download */
  283. struct MXL_EAGLE_FW_DOWNLOAD_CB_PAYLOAD_T {
  284. u32 total_len;
  285. u32 downloaded_len;
  286. };
  287. /* Struct used of I2C protocol between host and Eagle, internal use only */
  288. struct __packed MXL_EAGLE_HOST_MSG_HEADER_T {
  289. u8 opcode;
  290. u8 seqnum;
  291. u8 payload_size;
  292. u8 status;
  293. u32 checksum;
  294. };
  295. /* Device version information struct */
  296. struct __packed MXL_EAGLE_DEV_VER_T {
  297. u8 chip_id;
  298. u8 firmware_ver[MXL_EAGLE_VERSION_SIZE];
  299. u8 mxlware_ver[MXL_EAGLE_VERSION_SIZE];
  300. };
  301. /* Xtal configuration struct */
  302. struct __packed MXL_EAGLE_DEV_XTAL_T {
  303. u8 xtal_cap; /* accepted range is 1..31 pF. Default is 26 */
  304. u8 clk_out_enable;
  305. u8 clk_out_div_enable; /* clock out freq is xtal freq / 6 */
  306. u8 xtal_sharing_enable; /* if enabled set xtal_cap to 25 pF */
  307. u8 xtal_calibration_enable; /* enable for master, disable for slave */
  308. };
  309. /* GPIO direction struct, internally used in GPIO configuration API */
  310. struct __packed MXL_EAGLE_DEV_GPIO_DIRECTION_T {
  311. u8 gpio_number;
  312. u8 gpio_direction;
  313. };
  314. /* GPO level struct, internally used in GPIO configuration API */
  315. struct __packed MXL_EAGLE_DEV_GPO_LEVEL_T {
  316. u8 gpio_number;
  317. u8 gpo_level;
  318. };
  319. /* Device Status struct */
  320. struct MXL_EAGLE_DEV_STATUS_T {
  321. u8 temperature;
  322. u8 demod_type;
  323. u8 power_mode;
  324. u8 cpu_utilization_percent;
  325. };
  326. /* Device interrupt configuration struct */
  327. struct __packed MXL_EAGLE_DEV_INTR_CFG_T {
  328. u32 intr_mask;
  329. u8 edge_trigger;
  330. u8 positive_trigger;
  331. u8 global_enable_interrupt;
  332. };
  333. /* MPEG pad drive parameters, used on MPEG output configuration */
  334. /* See MXL_EAGLE_IO_MUX_DRIVE_MODE_E */
  335. struct MXL_EAGLE_MPEG_PAD_DRIVE_T {
  336. u8 pad_drv_mpeg_syn;
  337. u8 pad_drv_mpeg_dat;
  338. u8 pad_drv_mpeg_val;
  339. u8 pad_drv_mpeg_clk;
  340. };
  341. /* MPEGOUT parameter struct, used in MPEG output configuration */
  342. struct MXL_EAGLE_MPEGOUT_PARAMS_T {
  343. u8 mpeg_parallel;
  344. u8 msb_first;
  345. u8 mpeg_sync_pulse_width; /* See MXL_EAGLE_MPEG_DATA_FORMAT_E */
  346. u8 mpeg_valid_pol;
  347. u8 mpeg_sync_pol;
  348. u8 mpeg_clk_pol;
  349. u8 mpeg3wire_mode_enable;
  350. u8 mpeg_clk_freq;
  351. struct MXL_EAGLE_MPEG_PAD_DRIVE_T mpeg_pad_drv;
  352. };
  353. /* QAM Demodulator parameters struct, used in QAM params configuration */
  354. struct __packed MXL_EAGLE_QAM_DEMOD_PARAMS_T {
  355. u8 annex_type;
  356. u8 qam_type;
  357. u8 iq_flip;
  358. u8 search_range_idx;
  359. u8 spur_canceller_enable;
  360. u32 symbol_rate_hz;
  361. u32 symbol_rate_256qam_hz;
  362. };
  363. /* QAM Demodulator status */
  364. struct MXL_EAGLE_QAM_DEMOD_STATUS_T {
  365. u8 annex_type;
  366. u8 qam_type;
  367. u8 iq_flip;
  368. u8 interleaver_depth_i;
  369. u8 interleaver_depth_j;
  370. u8 qam_locked;
  371. u8 fec_locked;
  372. u8 mpeg_locked;
  373. u16 snr_db_tenths;
  374. s16 timing_offset;
  375. s32 carrier_offset_hz;
  376. };
  377. /* QAM Demodulator error counters */
  378. struct MXL_EAGLE_QAM_DEMOD_ERROR_COUNTERS_T {
  379. u32 corrected_code_words;
  380. u32 uncorrected_code_words;
  381. u32 total_code_words_received;
  382. u32 corrected_bits;
  383. u32 error_mpeg_frames;
  384. u32 mpeg_frames_received;
  385. u32 erasures;
  386. };
  387. /* QAM Demodulator constellation point */
  388. struct MXL_EAGLE_QAM_DEMOD_CONSTELLATION_VAL_T {
  389. s16 i_value[12];
  390. s16 q_value[12];
  391. };
  392. /* QAM Demodulator equalizer filter taps */
  393. struct MXL_EAGLE_QAM_DEMOD_EQU_FILTER_T {
  394. s16 ffe_taps[MXL_EAGLE_QAM_FFE_TAPS_LENGTH];
  395. s16 spur_taps[MXL_EAGLE_QAM_SPUR_TAPS_LENGTH];
  396. s16 dfe_taps[MXL_EAGLE_QAM_DFE_TAPS_LENGTH];
  397. u8 ffe_leading_tap_index;
  398. u8 dfe_taps_number;
  399. };
  400. /* OOB Demodulator parameters struct, used in OOB params configuration */
  401. struct __packed MXL_EAGLE_OOB_DEMOD_PARAMS_T {
  402. u8 symbol_rate;
  403. u8 iq_flip;
  404. u8 clk_pol;
  405. };
  406. /* OOB Demodulator error counters */
  407. struct MXL_EAGLE_OOB_DEMOD_ERROR_COUNTERS_T {
  408. u32 corrected_packets;
  409. u32 uncorrected_packets;
  410. u32 total_packets_received;
  411. };
  412. /* OOB status */
  413. struct __packed MXL_EAGLE_OOB_DEMOD_STATUS_T {
  414. u16 snr_db_tenths;
  415. s16 timing_offset;
  416. s32 carrier_offsetHz;
  417. u8 qam_locked;
  418. u8 fec_locked;
  419. u8 mpeg_locked;
  420. u8 retune_required;
  421. u8 iq_flip;
  422. };
  423. /* ATSC Demodulator status */
  424. struct __packed MXL_EAGLE_ATSC_DEMOD_STATUS_T {
  425. s16 snr_db_tenths;
  426. s16 timing_offset;
  427. s32 carrier_offset_hz;
  428. u8 frame_lock;
  429. u8 atsc_lock;
  430. u8 fec_lock;
  431. };
  432. /* ATSC Demodulator error counters */
  433. struct MXL_EAGLE_ATSC_DEMOD_ERROR_COUNTERS_T {
  434. u32 error_packets;
  435. u32 total_packets;
  436. u32 error_bytes;
  437. };
  438. /* ATSC Demodulator equalizers filter taps */
  439. struct __packed MXL_EAGLE_ATSC_DEMOD_EQU_FILTER_T {
  440. s16 ffe_taps[MXL_EAGLE_ATSC_FFE_TAPS_LENGTH];
  441. s8 dfe_taps[MXL_EAGLE_ATSC_DFE_TAPS_LENGTH];
  442. };
  443. /* Tuner AGC Status */
  444. struct __packed MXL_EAGLE_TUNER_AGC_STATUS_T {
  445. u8 locked;
  446. u16 raw_agc_gain; /* AGC gain [dB] = rawAgcGain / 2^6 */
  447. s16 rx_power_db_hundredths;
  448. };
  449. /* Tuner channel tune parameters */
  450. struct __packed MXL_EAGLE_TUNER_CHANNEL_PARAMS_T {
  451. u32 freq_hz;
  452. u8 tune_mode;
  453. u8 bandwidth;
  454. };
  455. /* Tuner channel lock indications */
  456. struct __packed MXL_EAGLE_TUNER_LOCK_STATUS_T {
  457. u8 rf_pll_locked;
  458. u8 ref_pll_locked;
  459. };
  460. /* Smart antenna parameters used in Smart antenna params configuration */
  461. struct __packed MXL_EAGLE_SMA_PARAMS_T {
  462. u8 full_duplex_enable;
  463. u8 rx_disable;
  464. u8 idle_logic_high;
  465. };
  466. /* Smart antenna message format */
  467. struct __packed MXL_EAGLE_SMA_MESSAGE_T {
  468. u32 payload_bits;
  469. u8 total_num_bits;
  470. };