1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Defines for the Maxlinear MX58x family of tuners/demods
5 * Copyright (C) 2014 Digital Devices GmbH
8 * Copyright (c) 2011-2013 MaxLinear, Inc. All rights reserved
9 * which was released under GPL V2
29 /* Firmware-Host Command IDs */
30 enum MXL_HYDRA_HOST_CMD_ID_E {
31 /* --Device command IDs-- */
32 MXL_HYDRA_DEV_NO_OP_CMD = 0, /* No OP */
34 MXL_HYDRA_DEV_SET_POWER_MODE_CMD = 1,
35 MXL_HYDRA_DEV_SET_OVERWRITE_DEF_CMD = 2,
37 /* Host-used CMD, not used by firmware */
38 MXL_HYDRA_DEV_FIRMWARE_DOWNLOAD_CMD = 3,
40 /* Additional CONTROL types from DTV */
41 MXL_HYDRA_DEV_SET_BROADCAST_PID_STB_ID_CMD = 4,
42 MXL_HYDRA_DEV_GET_PMM_SLEEP_CMD = 5,
44 /* --Tuner command IDs-- */
45 MXL_HYDRA_TUNER_TUNE_CMD = 6,
46 MXL_HYDRA_TUNER_GET_STATUS_CMD = 7,
48 /* --Demod command IDs-- */
49 MXL_HYDRA_DEMOD_SET_PARAM_CMD = 8,
50 MXL_HYDRA_DEMOD_GET_STATUS_CMD = 9,
52 MXL_HYDRA_DEMOD_RESET_FEC_COUNTER_CMD = 10,
54 MXL_HYDRA_DEMOD_SET_PKT_NUM_CMD = 11,
56 MXL_HYDRA_DEMOD_SET_IQ_SOURCE_CMD = 12,
57 MXL_HYDRA_DEMOD_GET_IQ_DATA_CMD = 13,
59 MXL_HYDRA_DEMOD_GET_M68HC05_VER_CMD = 14,
61 MXL_HYDRA_DEMOD_SET_ERROR_COUNTER_MODE_CMD = 15,
63 /* --- ABORT channel tune */
64 MXL_HYDRA_ABORT_TUNE_CMD = 16, /* Abort current tune command. */
66 /* --SWM/FSK command IDs-- */
67 MXL_HYDRA_FSK_RESET_CMD = 17,
68 MXL_HYDRA_FSK_MSG_CMD = 18,
69 MXL_HYDRA_FSK_SET_OP_MODE_CMD = 19,
71 /* --DiSeqC command IDs-- */
72 MXL_HYDRA_DISEQC_MSG_CMD = 20,
73 MXL_HYDRA_DISEQC_COPY_MSG_TO_MAILBOX = 21,
74 MXL_HYDRA_DISEQC_CFG_MSG_CMD = 22,
76 /* --- FFT Debug Command IDs-- */
77 MXL_HYDRA_REQ_FFT_SPECTRUM_CMD = 23,
79 /* -- Demod scramblle code */
80 MXL_HYDRA_DEMOD_SCRAMBLE_CODE_CMD = 24,
82 /* ---For host to know how many commands in total */
83 MXL_HYDRA_LAST_HOST_CMD = 25,
85 MXL_HYDRA_DEMOD_INTR_TYPE_CMD = 47,
86 MXL_HYDRA_DEV_INTR_CLEAR_CMD = 48,
87 MXL_HYDRA_TUNER_SPECTRUM_REQ_CMD = 53,
88 MXL_HYDRA_TUNER_ACTIVATE_CMD = 55,
89 MXL_HYDRA_DEV_CFG_POWER_MODE_CMD = 56,
90 MXL_HYDRA_DEV_XTAL_CAP_CMD = 57,
91 MXL_HYDRA_DEV_CFG_SKU_CMD = 58,
92 MXL_HYDRA_TUNER_SPECTRUM_MIN_GAIN_CMD = 59,
93 MXL_HYDRA_DISEQC_CONT_TONE_CFG = 60,
94 MXL_HYDRA_DEV_RF_WAKE_UP_CMD = 61,
95 MXL_HYDRA_DEMOD_CFG_EQ_CTRL_PARAM_CMD = 62,
96 MXL_HYDRA_DEMOD_FREQ_OFFSET_SEARCH_RANGE_CMD = 63,
97 MXL_HYDRA_DEV_REQ_PWR_FROM_ADCRSSI_CMD = 64,
99 MXL_XCPU_PID_FLT_CFG_CMD = 65,
100 MXL_XCPU_SHMEM_TEST_CMD = 66,
101 MXL_XCPU_ABORT_TUNE_CMD = 67,
102 MXL_XCPU_CHAN_TUNE_CMD = 68,
103 MXL_XCPU_FLT_BOND_HDRS_CMD = 69,
105 MXL_HYDRA_DEV_BROADCAST_WAKE_UP_CMD = 70,
106 MXL_HYDRA_FSK_CFG_FSK_FREQ_CMD = 71,
107 MXL_HYDRA_FSK_POWER_DOWN_CMD = 72,
108 MXL_XCPU_CLEAR_CB_STATS_CMD = 73,
109 MXL_XCPU_CHAN_BOND_RESTART_CMD = 74
112 #define MXL_ENABLE_BIG_ENDIAN (0)
114 #define MXL_HYDRA_OEM_MAX_BLOCK_WRITE_LENGTH 248
116 #define MXL_HYDRA_OEM_MAX_CMD_BUFF_LEN (248)
118 #define MXL_HYDRA_CAP_MIN 10
119 #define MXL_HYDRA_CAP_MAX 33
121 #define MXL_HYDRA_PLID_REG_READ 0xFB /* Read register PLID */
122 #define MXL_HYDRA_PLID_REG_WRITE 0xFC /* Write register PLID */
124 #define MXL_HYDRA_PLID_CMD_READ 0xFD /* Command Read PLID */
125 #define MXL_HYDRA_PLID_CMD_WRITE 0xFE /* Command Write PLID */
127 #define MXL_HYDRA_REG_SIZE_IN_BYTES 4 /* Hydra register size in bytes */
128 #define MXL_HYDRA_I2C_HDR_SIZE (2 * sizeof(u8)) /* PLID + LEN(0xFF) */
129 #define MXL_HYDRA_CMD_HEADER_SIZE (MXL_HYDRA_REG_SIZE_IN_BYTES + MXL_HYDRA_I2C_HDR_SIZE)
131 #define MXL_HYDRA_SKU_ID_581 0
132 #define MXL_HYDRA_SKU_ID_584 1
133 #define MXL_HYDRA_SKU_ID_585 2
134 #define MXL_HYDRA_SKU_ID_544 3
135 #define MXL_HYDRA_SKU_ID_561 4
136 #define MXL_HYDRA_SKU_ID_582 5
137 #define MXL_HYDRA_SKU_ID_568 6
139 /* macro for register write data buffer size
140 * (PLID + LEN (0xFF) + RegAddr + RegData)
142 #define MXL_HYDRA_REG_WRITE_LEN (MXL_HYDRA_I2C_HDR_SIZE + (2 * MXL_HYDRA_REG_SIZE_IN_BYTES))
144 /* macro to extract a single byte from 4-byte(32-bit) data */
145 #define GET_BYTE(x, n) (((x) >> (8*(n))) & 0xFF)
147 #define MAX_CMD_DATA 512
149 #define MXL_GET_REG_MASK_32(lsb_loc, num_of_bits) ((0xFFFFFFFF >> (32 - (num_of_bits))) << (lsb_loc))
151 #define FW_DL_SIGN (0xDEADBEEF)
153 #define MBIN_FORMAT_VERSION '1'
154 #define MBIN_FILE_HEADER_ID 'M'
155 #define MBIN_SEGMENT_HEADER_ID 'S'
156 #define MBIN_MAX_FILE_LENGTH (1<<23)
158 struct MBIN_FILE_HEADER_T {
170 struct MBIN_FILE_HEADER_T header;
174 struct MBIN_SEGMENT_HEADER_T {
180 struct MBIN_SEGMENT_T {
181 struct MBIN_SEGMENT_HEADER_T header;
185 enum MXL_CMD_TYPE_E { MXL_CMD_WRITE = 0, MXL_CMD_READ };
187 #define BUILD_HYDRA_CMD(cmd_id, req_type, size, data_ptr, cmd_buff) \
189 cmd_buff[0] = ((req_type == MXL_CMD_WRITE) ? MXL_HYDRA_PLID_CMD_WRITE : MXL_HYDRA_PLID_CMD_READ); \
190 cmd_buff[1] = (size > 251) ? 0xff : (u8) (size + 4); \
191 cmd_buff[2] = size; \
192 cmd_buff[3] = cmd_id; \
193 cmd_buff[4] = 0x00; \
194 cmd_buff[5] = 0x00; \
195 convert_endian(MXL_ENABLE_BIG_ENDIAN, size, (u8 *)data_ptr); \
196 memcpy((void *)&cmd_buff[6], data_ptr, size); \
199 struct MXL_REG_FIELD_T {
205 struct MXL_DEV_CMD_DATA_T {
207 u8 data[MAX_CMD_DATA];
210 enum MXL_HYDRA_SKU_TYPE_E {
211 MXL_HYDRA_SKU_TYPE_MIN = 0x00,
212 MXL_HYDRA_SKU_TYPE_581 = 0x00,
213 MXL_HYDRA_SKU_TYPE_584 = 0x01,
214 MXL_HYDRA_SKU_TYPE_585 = 0x02,
215 MXL_HYDRA_SKU_TYPE_544 = 0x03,
216 MXL_HYDRA_SKU_TYPE_561 = 0x04,
217 MXL_HYDRA_SKU_TYPE_5XX = 0x05,
218 MXL_HYDRA_SKU_TYPE_5YY = 0x06,
219 MXL_HYDRA_SKU_TYPE_511 = 0x07,
220 MXL_HYDRA_SKU_TYPE_561_DE = 0x08,
221 MXL_HYDRA_SKU_TYPE_582 = 0x09,
222 MXL_HYDRA_SKU_TYPE_541 = 0x0A,
223 MXL_HYDRA_SKU_TYPE_568 = 0x0B,
224 MXL_HYDRA_SKU_TYPE_542 = 0x0C,
225 MXL_HYDRA_SKU_TYPE_MAX = 0x0D,
228 struct MXL_HYDRA_SKU_COMMAND_T {
229 enum MXL_HYDRA_SKU_TYPE_E sku_type;
232 enum MXL_HYDRA_DEMOD_ID_E {
233 MXL_HYDRA_DEMOD_ID_0 = 0,
234 MXL_HYDRA_DEMOD_ID_1,
235 MXL_HYDRA_DEMOD_ID_2,
236 MXL_HYDRA_DEMOD_ID_3,
237 MXL_HYDRA_DEMOD_ID_4,
238 MXL_HYDRA_DEMOD_ID_5,
239 MXL_HYDRA_DEMOD_ID_6,
240 MXL_HYDRA_DEMOD_ID_7,
244 #define MXL_DEMOD_SCRAMBLE_SEQ_LEN 12
246 #define MAX_STEP_SIZE_24_XTAL_102_05_KHZ 195
247 #define MAX_STEP_SIZE_24_XTAL_204_10_KHZ 215
248 #define MAX_STEP_SIZE_24_XTAL_306_15_KHZ 203
249 #define MAX_STEP_SIZE_24_XTAL_408_20_KHZ 177
251 #define MAX_STEP_SIZE_27_XTAL_102_05_KHZ 195
252 #define MAX_STEP_SIZE_27_XTAL_204_10_KHZ 215
253 #define MAX_STEP_SIZE_27_XTAL_306_15_KHZ 203
254 #define MAX_STEP_SIZE_27_XTAL_408_20_KHZ 177
256 #define MXL_HYDRA_SPECTRUM_MIN_FREQ_KHZ 300000
257 #define MXL_HYDRA_SPECTRUM_MAX_FREQ_KHZ 2350000
259 enum MXL_DEMOD_CHAN_PARAMS_OFFSET_E {
260 DMD_STANDARD_ADDR = 0,
261 DMD_SPECTRUM_INVERSION_ADDR,
262 DMD_SPECTRUM_ROLL_OFF_ADDR,
263 DMD_SYMBOL_RATE_ADDR,
264 DMD_MODULATION_SCHEME_ADDR,
265 DMD_FEC_CODE_RATE_ADDR,
267 DMD_FREQ_OFFSET_ADDR,
268 DMD_CTL_FREQ_OFFSET_ADDR,
269 DMD_STR_FREQ_OFFSET_ADDR,
270 DMD_FTL_FREQ_OFFSET_ADDR,
271 DMD_STR_NBC_SYNC_LOCK_ADDR,
272 DMD_CYCLE_SLIP_COUNT_ADDR,
274 DMD_DVBS2_CRC_ERRORS_ADDR,
275 DMD_DVBS2_PER_COUNT_ADDR,
276 DMD_DVBS2_PER_WINDOW_ADDR,
277 DMD_DVBS_CORR_RS_ERRORS_ADDR,
278 DMD_DVBS_UNCORR_RS_ERRORS_ADDR,
279 DMD_DVBS_BER_COUNT_ADDR,
280 DMD_DVBS_BER_WINDOW_ADDR,
282 DMD_DVBS2_PILOT_ON_OFF_ADDR,
283 DMD_FREQ_SEARCH_RANGE_IN_KHZ_ADDR,
285 MXL_DEMOD_CHAN_PARAMS_BUFF_SIZE,
288 enum MXL_HYDRA_TUNER_ID_E {
289 MXL_HYDRA_TUNER_ID_0 = 0,
290 MXL_HYDRA_TUNER_ID_1,
291 MXL_HYDRA_TUNER_ID_2,
292 MXL_HYDRA_TUNER_ID_3,
296 enum MXL_HYDRA_BCAST_STD_E {
302 enum MXL_HYDRA_FEC_E {
303 MXL_HYDRA_FEC_AUTO = 0,
316 enum MXL_HYDRA_MODULATION_E {
317 MXL_HYDRA_MOD_AUTO = 0,
322 enum MXL_HYDRA_SPECTRUM_E {
323 MXL_HYDRA_SPECTRUM_AUTO = 0,
324 MXL_HYDRA_SPECTRUM_INVERTED,
325 MXL_HYDRA_SPECTRUM_NON_INVERTED,
328 enum MXL_HYDRA_ROLLOFF_E {
329 MXL_HYDRA_ROLLOFF_AUTO = 0,
330 MXL_HYDRA_ROLLOFF_0_20,
331 MXL_HYDRA_ROLLOFF_0_25,
332 MXL_HYDRA_ROLLOFF_0_35
335 enum MXL_HYDRA_PILOTS_E {
336 MXL_HYDRA_PILOTS_OFF = 0,
338 MXL_HYDRA_PILOTS_AUTO
341 enum MXL_HYDRA_CONSTELLATION_SRC_E {
342 MXL_HYDRA_FORMATTER = 0,
343 MXL_HYDRA_LEGACY_FEC,
344 MXL_HYDRA_FREQ_RECOVERY,
350 struct MXL_HYDRA_DEMOD_LOCK_T {
351 int agc_lock; /* AGC lock info */
352 int fec_lock; /* Demod FEC block lock info */
355 struct MXL_HYDRA_DEMOD_STATUS_DVBS_T {
356 u32 rs_errors; /* RS decoder err counter */
357 u32 ber_window; /* Ber Windows */
358 u32 ber_count; /* BER count */
359 u32 ber_window_iter1; /* Ber Windows - post viterbi */
360 u32 ber_count_iter1; /* BER count - post viterbi */
363 struct MXL_HYDRA_DEMOD_STATUS_DSS_T {
364 u32 rs_errors; /* RS decoder err counter */
365 u32 ber_window; /* Ber Windows */
366 u32 ber_count; /* BER count */
369 struct MXL_HYDRA_DEMOD_STATUS_DVBS2_T {
370 u32 crc_errors; /* CRC error counter */
371 u32 packet_error_count; /* Number of packet errors */
372 u32 total_packets; /* Total packets */
375 struct MXL_HYDRA_DEMOD_STATUS_T {
376 enum MXL_HYDRA_BCAST_STD_E standard_mask; /* Standard DVB-S, DVB-S2 or DSS */
379 struct MXL_HYDRA_DEMOD_STATUS_DVBS_T demod_status_dvbs; /* DVB-S demod status */
380 struct MXL_HYDRA_DEMOD_STATUS_DVBS2_T demod_status_dvbs2; /* DVB-S2 demod status */
381 struct MXL_HYDRA_DEMOD_STATUS_DSS_T demod_status_dss; /* DSS demod status */
385 struct MXL_HYDRA_DEMOD_SIG_OFFSET_INFO_T {
386 s32 carrier_offset_in_hz; /* CRL offset info */
387 s32 symbol_offset_in_symbol; /* SRL offset info */
390 struct MXL_HYDRA_DEMOD_SCRAMBLE_INFO_T {
391 u8 scramble_sequence[MXL_DEMOD_SCRAMBLE_SEQ_LEN]; /* scramble sequence */
392 u32 scramble_code; /* scramble gold code */
395 enum MXL_HYDRA_SPECTRUM_STEP_SIZE_E {
396 MXL_HYDRA_STEP_SIZE_24_XTAL_102_05KHZ, /* 102.05 KHz for 24 MHz XTAL */
397 MXL_HYDRA_STEP_SIZE_24_XTAL_204_10KHZ, /* 204.10 KHz for 24 MHz XTAL */
398 MXL_HYDRA_STEP_SIZE_24_XTAL_306_15KHZ, /* 306.15 KHz for 24 MHz XTAL */
399 MXL_HYDRA_STEP_SIZE_24_XTAL_408_20KHZ, /* 408.20 KHz for 24 MHz XTAL */
401 MXL_HYDRA_STEP_SIZE_27_XTAL_102_05KHZ, /* 102.05 KHz for 27 MHz XTAL */
402 MXL_HYDRA_STEP_SIZE_27_XTAL_204_35KHZ, /* 204.35 KHz for 27 MHz XTAL */
403 MXL_HYDRA_STEP_SIZE_27_XTAL_306_52KHZ, /* 306.52 KHz for 27 MHz XTAL */
404 MXL_HYDRA_STEP_SIZE_27_XTAL_408_69KHZ, /* 408.69 KHz for 27 MHz XTAL */
407 enum MXL_HYDRA_SPECTRUM_RESOLUTION_E {
408 MXL_HYDRA_SPECTRUM_RESOLUTION_00_1_DB, /* 0.1 dB */
409 MXL_HYDRA_SPECTRUM_RESOLUTION_01_0_DB, /* 1.0 dB */
410 MXL_HYDRA_SPECTRUM_RESOLUTION_05_0_DB, /* 5.0 dB */
411 MXL_HYDRA_SPECTRUM_RESOLUTION_10_0_DB, /* 10 dB */
414 enum MXL_HYDRA_SPECTRUM_ERROR_CODE_E {
415 MXL_SPECTRUM_NO_ERROR,
416 MXL_SPECTRUM_INVALID_PARAMETER,
417 MXL_SPECTRUM_INVALID_STEP_SIZE,
418 MXL_SPECTRUM_BW_CANNOT_BE_COVERED,
419 MXL_SPECTRUM_DEMOD_BUSY,
420 MXL_SPECTRUM_TUNER_NOT_ENABLED,
423 struct MXL_HYDRA_SPECTRUM_REQ_T {
424 u32 tuner_index; /* TUNER Ctrl: one of MXL58x_TUNER_ID_E */
425 u32 demod_index; /* DEMOD Ctrl: one of MXL58x_DEMOD_ID_E */
426 enum MXL_HYDRA_SPECTRUM_STEP_SIZE_E step_size_in_khz;
427 u32 starting_freq_ink_hz;
429 enum MXL_HYDRA_SPECTRUM_RESOLUTION_E spectrum_division;
432 enum MXL_HYDRA_SEARCH_FREQ_OFFSET_TYPE_E {
433 MXL_HYDRA_SEARCH_MAX_OFFSET = 0, /* DMD searches for max freq offset (i.e. 5MHz) */
434 MXL_HYDRA_SEARCH_BW_PLUS_ROLLOFF, /* DMD searches for BW + ROLLOFF/2 */
437 struct MXL58X_CFG_FREQ_OFF_SEARCH_RANGE_T {
439 enum MXL_HYDRA_SEARCH_FREQ_OFFSET_TYPE_E search_type;
442 /* there are two slices
443 * slice0 - TS0, TS1, TS2 & TS3
444 * slice1 - TS4, TS5, TS6 & TS7
446 #define MXL_HYDRA_TS_SLICE_MAX 2
448 #define MAX_FIXED_PID_NUM 32
450 #define MXL_HYDRA_NCO_CLK 418 /* 418 MHz */
452 #define MXL_HYDRA_MAX_TS_CLOCK 139 /* 139 MHz */
454 #define MXL_HYDRA_TS_FIXED_PID_FILT_SIZE 32
456 #define MXL_HYDRA_SHARED_PID_FILT_SIZE_DEFAULT 33 /* Shared PID filter size in 1-1 mux mode */
457 #define MXL_HYDRA_SHARED_PID_FILT_SIZE_2_TO_1 66 /* Shared PID filter size in 2-1 mux mode */
458 #define MXL_HYDRA_SHARED_PID_FILT_SIZE_4_TO_1 132 /* Shared PID filter size in 4-1 mux mode */
460 enum MXL_HYDRA_PID_BANK_TYPE_E {
461 MXL_HYDRA_SOFTWARE_PID_BANK = 0,
462 MXL_HYDRA_HARDWARE_PID_BANK,
465 enum MXL_HYDRA_TS_MUX_MODE_E {
466 MXL_HYDRA_TS_MUX_PID_REMAP = 0,
467 MXL_HYDRA_TS_MUX_PREFIX_EXTRA_HEADER = 1,
470 enum MXL_HYDRA_TS_MUX_TYPE_E {
471 MXL_HYDRA_TS_MUX_DISABLE = 0, /* No Mux ( 1 TSIF to 1 TSIF) */
472 MXL_HYDRA_TS_MUX_2_TO_1, /* Mux 2 TSIF to 1 TSIF */
473 MXL_HYDRA_TS_MUX_4_TO_1, /* Mux 4 TSIF to 1 TSIF */
476 enum MXL_HYDRA_TS_GROUP_E {
477 MXL_HYDRA_TS_GROUP_0_3 = 0, /* TS group 0 to 3 (TS0, TS1, TS2 & TS3) */
478 MXL_HYDRA_TS_GROUP_4_7, /* TS group 0 to 3 (TS4, TS5, TS6 & TS7) */
481 enum MXL_HYDRA_TS_PID_FLT_CTRL_E {
482 MXL_HYDRA_TS_PIDS_ALLOW_ALL = 0, /* Allow all pids */
483 MXL_HYDRA_TS_PIDS_DROP_ALL, /* Drop all pids */
484 MXL_HYDRA_TS_INVALIDATE_PID_FILTER, /* Delete current PD filter in the device */
487 enum MXL_HYDRA_TS_PID_TYPE_E {
488 MXL_HYDRA_TS_PID_FIXED = 0,
489 MXL_HYDRA_TS_PID_REGULAR,
492 struct MXL_HYDRA_TS_PID_T {
493 u16 original_pid; /* pid from TS */
494 u16 remapped_pid; /* remapped pid */
495 enum MXL_BOOL_E enable; /* enable or disable pid */
496 enum MXL_BOOL_E allow_or_drop; /* allow or drop pid */
497 enum MXL_BOOL_E enable_pid_remap; /* enable or disable pid remap */
498 u8 bond_id; /* Bond ID in A0 always 0 - Only for 568 Sku */
499 u8 dest_id; /* Output port ID for the PID - Only for 568 Sku */
502 struct MXL_HYDRA_TS_MUX_PREFIX_HEADER_T {
503 enum MXL_BOOL_E enable;
508 enum MXL_HYDRA_PID_FILTER_BANK_E {
509 MXL_HYDRA_PID_BANK_A = 0,
510 MXL_HYDRA_PID_BANK_B,
513 enum MXL_HYDRA_MPEG_DATA_FMT_E {
514 MXL_HYDRA_MPEG_SERIAL_MSB_1ST = 0,
515 MXL_HYDRA_MPEG_SERIAL_LSB_1ST,
517 MXL_HYDRA_MPEG_SYNC_WIDTH_BIT = 0,
518 MXL_HYDRA_MPEG_SYNC_WIDTH_BYTE
521 enum MXL_HYDRA_MPEG_MODE_E {
522 MXL_HYDRA_MPEG_MODE_SERIAL_4_WIRE = 0, /* MPEG 4 Wire serial mode */
523 MXL_HYDRA_MPEG_MODE_SERIAL_3_WIRE, /* MPEG 3 Wire serial mode */
524 MXL_HYDRA_MPEG_MODE_SERIAL_2_WIRE, /* MPEG 2 Wire serial mode */
525 MXL_HYDRA_MPEG_MODE_PARALLEL /* MPEG parallel mode - valid only for MxL581 */
528 enum MXL_HYDRA_MPEG_CLK_TYPE_E {
529 MXL_HYDRA_MPEG_CLK_CONTINUOUS = 0, /* Continuous MPEG clock */
530 MXL_HYDRA_MPEG_CLK_GAPPED, /* Gapped (gated) MPEG clock */
533 enum MXL_HYDRA_MPEG_CLK_FMT_E {
534 MXL_HYDRA_MPEG_ACTIVE_LOW = 0,
535 MXL_HYDRA_MPEG_ACTIVE_HIGH,
537 MXL_HYDRA_MPEG_CLK_NEGATIVE = 0,
538 MXL_HYDRA_MPEG_CLK_POSITIVE,
540 MXL_HYDRA_MPEG_CLK_IN_PHASE = 0,
541 MXL_HYDRA_MPEG_CLK_INVERTED,
544 enum MXL_HYDRA_MPEG_CLK_PHASE_E {
545 MXL_HYDRA_MPEG_CLK_PHASE_SHIFT_0_DEG = 0,
546 MXL_HYDRA_MPEG_CLK_PHASE_SHIFT_90_DEG,
547 MXL_HYDRA_MPEG_CLK_PHASE_SHIFT_180_DEG,
548 MXL_HYDRA_MPEG_CLK_PHASE_SHIFT_270_DEG
551 enum MXL_HYDRA_MPEG_ERR_INDICATION_E {
552 MXL_HYDRA_MPEG_ERR_REPLACE_SYNC = 0,
553 MXL_HYDRA_MPEG_ERR_REPLACE_VALID,
554 MXL_HYDRA_MPEG_ERR_INDICATION_DISABLED
557 struct MXL_HYDRA_MPEGOUT_PARAM_T {
558 int enable; /* Enable or Disable MPEG OUT */
559 enum MXL_HYDRA_MPEG_CLK_TYPE_E mpeg_clk_type; /* Continuous or gapped */
560 enum MXL_HYDRA_MPEG_CLK_FMT_E mpeg_clk_pol; /* MPEG Clk polarity */
561 u8 max_mpeg_clk_rate; /* Max MPEG Clk rate (0 - 104 MHz, 139 MHz) */
562 enum MXL_HYDRA_MPEG_CLK_PHASE_E mpeg_clk_phase; /* MPEG Clk phase */
563 enum MXL_HYDRA_MPEG_DATA_FMT_E lsb_or_msb_first; /* LSB first or MSB first in TS transmission */
564 enum MXL_HYDRA_MPEG_DATA_FMT_E mpeg_sync_pulse_width; /* MPEG SYNC pulse width (1-bit or 1-byte) */
565 enum MXL_HYDRA_MPEG_CLK_FMT_E mpeg_valid_pol; /* MPEG VALID polarity */
566 enum MXL_HYDRA_MPEG_CLK_FMT_E mpeg_sync_pol; /* MPEG SYNC polarity */
567 enum MXL_HYDRA_MPEG_MODE_E mpeg_mode; /* config 4/3/2-wire serial or parallel TS out */
568 enum MXL_HYDRA_MPEG_ERR_INDICATION_E mpeg_error_indication; /* Enable or Disable MPEG error indication */
571 enum MXL_HYDRA_EXT_TS_IN_ID_E {
572 MXL_HYDRA_EXT_TS_IN_0 = 0,
573 MXL_HYDRA_EXT_TS_IN_1,
574 MXL_HYDRA_EXT_TS_IN_2,
575 MXL_HYDRA_EXT_TS_IN_3,
576 MXL_HYDRA_EXT_TS_IN_MAX
579 enum MXL_HYDRA_TS_OUT_ID_E {
580 MXL_HYDRA_TS_OUT_0 = 0,
591 enum MXL_HYDRA_TS_DRIVE_STRENGTH_E {
592 MXL_HYDRA_TS_DRIVE_STRENGTH_1X = 0,
593 MXL_HYDRA_TS_DRIVE_STRENGTH_2X,
594 MXL_HYDRA_TS_DRIVE_STRENGTH_3X,
595 MXL_HYDRA_TS_DRIVE_STRENGTH_4X,
596 MXL_HYDRA_TS_DRIVE_STRENGTH_5X,
597 MXL_HYDRA_TS_DRIVE_STRENGTH_6X,
598 MXL_HYDRA_TS_DRIVE_STRENGTH_7X,
599 MXL_HYDRA_TS_DRIVE_STRENGTH_8X
602 enum MXL_HYDRA_DEVICE_E {
603 MXL_HYDRA_DEVICE_581 = 0,
604 MXL_HYDRA_DEVICE_584,
605 MXL_HYDRA_DEVICE_585,
606 MXL_HYDRA_DEVICE_544,
607 MXL_HYDRA_DEVICE_561,
608 MXL_HYDRA_DEVICE_TEST,
609 MXL_HYDRA_DEVICE_582,
610 MXL_HYDRA_DEVICE_541,
611 MXL_HYDRA_DEVICE_568,
612 MXL_HYDRA_DEVICE_542,
613 MXL_HYDRA_DEVICE_541S,
614 MXL_HYDRA_DEVICE_561S,
615 MXL_HYDRA_DEVICE_581S,
620 struct MXL_HYDRA_DEMOD_IQ_SRC_T {
622 u32 source_of_iq; /* == 0, it means I/Q comes from Formatter
624 * == 2, Frequency Recovery
632 struct MXL_HYDRA_DEMOD_ABORT_TUNE_T {
636 struct MXL_HYDRA_TUNER_CMD {
641 /* Demod Para for Channel Tune */
642 struct MXL_HYDRA_DEMOD_PARAM_T {
645 u32 frequency_in_hz; /* Frequency */
646 u32 standard; /* one of MXL_HYDRA_BCAST_STD_E */
647 u32 spectrum_inversion; /* Input : Spectrum inversion. */
648 u32 roll_off; /* rollOff (alpha) factor */
649 u32 symbol_rate_in_hz; /* Symbol rate */
650 u32 pilots; /* TRUE = pilots enabled */
651 u32 modulation_scheme; /* Input : Modulation Scheme is one of MXL_HYDRA_MODULATION_E */
652 u32 fec_code_rate; /* Input : Forward error correction rate. Is one of MXL_HYDRA_FEC_E */
653 u32 max_carrier_offset_in_mhz; /* Maximum carrier freq offset in MHz. Same as freqSearchRangeKHz, but in unit of MHz. */
656 struct MXL_HYDRA_DEMOD_SCRAMBLE_CODE_T {
658 u8 scramble_sequence[12]; /* scramble sequence */
659 u32 scramble_code; /* scramble gold code */
662 struct MXL_INTR_CFG_T {
664 u32 intr_duration_in_nano_secs;
668 struct MXL_HYDRA_POWER_MODE_CMD {
669 u8 power_mode; /* enumeration values are defined in MXL_HYDRA_PWR_MODE_E (device API.h) */
672 struct MXL_HYDRA_RF_WAKEUP_PARAM_T {
673 u32 time_interval_in_seconds; /* in seconds */
678 struct MXL_HYDRA_RF_WAKEUP_CFG_T {
680 struct MXL_HYDRA_RF_WAKEUP_PARAM_T params;
683 enum MXL_HYDRA_AUX_CTRL_MODE_E {
684 MXL_HYDRA_AUX_CTRL_MODE_FSK = 0, /* Select FSK controller */
685 MXL_HYDRA_AUX_CTRL_MODE_DISEQC, /* Select DiSEqC controller */
688 enum MXL_HYDRA_DISEQC_OPMODE_E {
689 MXL_HYDRA_DISEQC_ENVELOPE_MODE = 0,
690 MXL_HYDRA_DISEQC_TONE_MODE,
693 enum MXL_HYDRA_DISEQC_VER_E {
694 MXL_HYDRA_DISEQC_1_X = 0, /* Config DiSEqC 1.x mode */
695 MXL_HYDRA_DISEQC_2_X, /* Config DiSEqC 2.x mode */
696 MXL_HYDRA_DISEQC_DISABLE /* Disable DiSEqC */
699 enum MXL_HYDRA_DISEQC_CARRIER_FREQ_E {
700 MXL_HYDRA_DISEQC_CARRIER_FREQ_22KHZ = 0, /* DiSEqC signal frequency of 22 KHz */
701 MXL_HYDRA_DISEQC_CARRIER_FREQ_33KHZ, /* DiSEqC signal frequency of 33 KHz */
702 MXL_HYDRA_DISEQC_CARRIER_FREQ_44KHZ /* DiSEqC signal frequency of 44 KHz */
705 enum MXL_HYDRA_DISEQC_ID_E {
706 MXL_HYDRA_DISEQC_ID_0 = 0,
707 MXL_HYDRA_DISEQC_ID_1,
708 MXL_HYDRA_DISEQC_ID_2,
709 MXL_HYDRA_DISEQC_ID_3
712 enum MXL_HYDRA_FSK_OP_MODE_E {
713 MXL_HYDRA_FSK_CFG_TYPE_39KPBS = 0, /* 39.0kbps */
714 MXL_HYDRA_FSK_CFG_TYPE_39_017KPBS, /* 39.017kbps */
715 MXL_HYDRA_FSK_CFG_TYPE_115_2KPBS /* 115.2kbps */
718 struct MXL58X_DSQ_OP_MODE_T {
719 u32 diseqc_id; /* DSQ 0, 1, 2 or 3 */
720 u32 op_mode; /* Envelope mode (0) or internal tone mode (1) */
721 u32 version; /* 0: 1.0, 1: 1.1, 2: Disable */
722 u32 center_freq; /* 0: 22KHz, 1: 33KHz and 2: 44 KHz */
725 struct MXL_HYDRA_DISEQC_CFG_CONT_TONE_T {
727 u32 cont_tone_flag; /* 1: Enable , 0: Disable */