xref: /OK3568_Linux_fs/kernel/drivers/media/dvb-frontends/mxl5xx_defs.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Defines for the Maxlinear MX58x family of tuners/demods
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (C) 2014 Digital Devices GmbH
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * based on code:
8*4882a593Smuzhiyun  * Copyright (c) 2011-2013 MaxLinear, Inc. All rights reserved
9*4882a593Smuzhiyun  * which was released under GPL V2
10*4882a593Smuzhiyun  *
11*4882a593Smuzhiyun  * This program is free software; you can redistribute it and/or
12*4882a593Smuzhiyun  * modify it under the terms of the GNU General Public License
13*4882a593Smuzhiyun  * version 2, as published by the Free Software Foundation.
14*4882a593Smuzhiyun  */
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun enum MXL_BOOL_E {
17*4882a593Smuzhiyun 	MXL_DISABLE = 0,
18*4882a593Smuzhiyun 	MXL_ENABLE  = 1,
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun 	MXL_FALSE = 0,
21*4882a593Smuzhiyun 	MXL_TRUE  = 1,
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun 	MXL_INVALID = 0,
24*4882a593Smuzhiyun 	MXL_VALID   = 1,
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun 	MXL_NO      = 0,
27*4882a593Smuzhiyun 	MXL_YES     = 1,
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun 	MXL_OFF     = 0,
30*4882a593Smuzhiyun 	MXL_ON      = 1
31*4882a593Smuzhiyun };
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun /* Firmware-Host Command IDs */
34*4882a593Smuzhiyun enum MXL_HYDRA_HOST_CMD_ID_E {
35*4882a593Smuzhiyun 	/* --Device command IDs-- */
36*4882a593Smuzhiyun 	MXL_HYDRA_DEV_NO_OP_CMD = 0, /* No OP */
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun 	MXL_HYDRA_DEV_SET_POWER_MODE_CMD = 1,
39*4882a593Smuzhiyun 	MXL_HYDRA_DEV_SET_OVERWRITE_DEF_CMD = 2,
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun 	/* Host-used CMD, not used by firmware */
42*4882a593Smuzhiyun 	MXL_HYDRA_DEV_FIRMWARE_DOWNLOAD_CMD = 3,
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun 	/* Additional CONTROL types from DTV */
45*4882a593Smuzhiyun 	MXL_HYDRA_DEV_SET_BROADCAST_PID_STB_ID_CMD = 4,
46*4882a593Smuzhiyun 	MXL_HYDRA_DEV_GET_PMM_SLEEP_CMD = 5,
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun 	/* --Tuner command IDs-- */
49*4882a593Smuzhiyun 	MXL_HYDRA_TUNER_TUNE_CMD = 6,
50*4882a593Smuzhiyun 	MXL_HYDRA_TUNER_GET_STATUS_CMD = 7,
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun 	/* --Demod command IDs-- */
53*4882a593Smuzhiyun 	MXL_HYDRA_DEMOD_SET_PARAM_CMD = 8,
54*4882a593Smuzhiyun 	MXL_HYDRA_DEMOD_GET_STATUS_CMD = 9,
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun 	MXL_HYDRA_DEMOD_RESET_FEC_COUNTER_CMD = 10,
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun 	MXL_HYDRA_DEMOD_SET_PKT_NUM_CMD = 11,
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun 	MXL_HYDRA_DEMOD_SET_IQ_SOURCE_CMD = 12,
61*4882a593Smuzhiyun 	MXL_HYDRA_DEMOD_GET_IQ_DATA_CMD = 13,
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun 	MXL_HYDRA_DEMOD_GET_M68HC05_VER_CMD = 14,
64*4882a593Smuzhiyun 
65*4882a593Smuzhiyun 	MXL_HYDRA_DEMOD_SET_ERROR_COUNTER_MODE_CMD = 15,
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun 	/* --- ABORT channel tune */
68*4882a593Smuzhiyun 	MXL_HYDRA_ABORT_TUNE_CMD = 16, /* Abort current tune command. */
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun 	/* --SWM/FSK command IDs-- */
71*4882a593Smuzhiyun 	MXL_HYDRA_FSK_RESET_CMD = 17,
72*4882a593Smuzhiyun 	MXL_HYDRA_FSK_MSG_CMD = 18,
73*4882a593Smuzhiyun 	MXL_HYDRA_FSK_SET_OP_MODE_CMD = 19,
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun 	/* --DiSeqC command IDs-- */
76*4882a593Smuzhiyun 	MXL_HYDRA_DISEQC_MSG_CMD = 20,
77*4882a593Smuzhiyun 	MXL_HYDRA_DISEQC_COPY_MSG_TO_MAILBOX = 21,
78*4882a593Smuzhiyun 	MXL_HYDRA_DISEQC_CFG_MSG_CMD = 22,
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun 	/* --- FFT Debug Command IDs-- */
81*4882a593Smuzhiyun 	MXL_HYDRA_REQ_FFT_SPECTRUM_CMD = 23,
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun 	/* -- Demod scramblle code */
84*4882a593Smuzhiyun 	MXL_HYDRA_DEMOD_SCRAMBLE_CODE_CMD = 24,
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun 	/* ---For host to know how many commands in total */
87*4882a593Smuzhiyun 	MXL_HYDRA_LAST_HOST_CMD = 25,
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun 	MXL_HYDRA_DEMOD_INTR_TYPE_CMD = 47,
90*4882a593Smuzhiyun 	MXL_HYDRA_DEV_INTR_CLEAR_CMD = 48,
91*4882a593Smuzhiyun 	MXL_HYDRA_TUNER_SPECTRUM_REQ_CMD = 53,
92*4882a593Smuzhiyun 	MXL_HYDRA_TUNER_ACTIVATE_CMD = 55,
93*4882a593Smuzhiyun 	MXL_HYDRA_DEV_CFG_POWER_MODE_CMD = 56,
94*4882a593Smuzhiyun 	MXL_HYDRA_DEV_XTAL_CAP_CMD = 57,
95*4882a593Smuzhiyun 	MXL_HYDRA_DEV_CFG_SKU_CMD = 58,
96*4882a593Smuzhiyun 	MXL_HYDRA_TUNER_SPECTRUM_MIN_GAIN_CMD = 59,
97*4882a593Smuzhiyun 	MXL_HYDRA_DISEQC_CONT_TONE_CFG = 60,
98*4882a593Smuzhiyun 	MXL_HYDRA_DEV_RF_WAKE_UP_CMD = 61,
99*4882a593Smuzhiyun 	MXL_HYDRA_DEMOD_CFG_EQ_CTRL_PARAM_CMD = 62,
100*4882a593Smuzhiyun 	MXL_HYDRA_DEMOD_FREQ_OFFSET_SEARCH_RANGE_CMD = 63,
101*4882a593Smuzhiyun 	MXL_HYDRA_DEV_REQ_PWR_FROM_ADCRSSI_CMD = 64,
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun 	MXL_XCPU_PID_FLT_CFG_CMD = 65,
104*4882a593Smuzhiyun 	MXL_XCPU_SHMEM_TEST_CMD = 66,
105*4882a593Smuzhiyun 	MXL_XCPU_ABORT_TUNE_CMD = 67,
106*4882a593Smuzhiyun 	MXL_XCPU_CHAN_TUNE_CMD = 68,
107*4882a593Smuzhiyun 	MXL_XCPU_FLT_BOND_HDRS_CMD = 69,
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun 	MXL_HYDRA_DEV_BROADCAST_WAKE_UP_CMD = 70,
110*4882a593Smuzhiyun 	MXL_HYDRA_FSK_CFG_FSK_FREQ_CMD = 71,
111*4882a593Smuzhiyun 	MXL_HYDRA_FSK_POWER_DOWN_CMD = 72,
112*4882a593Smuzhiyun 	MXL_XCPU_CLEAR_CB_STATS_CMD = 73,
113*4882a593Smuzhiyun 	MXL_XCPU_CHAN_BOND_RESTART_CMD = 74
114*4882a593Smuzhiyun };
115*4882a593Smuzhiyun 
116*4882a593Smuzhiyun #define MXL_ENABLE_BIG_ENDIAN        (0)
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun #define MXL_HYDRA_OEM_MAX_BLOCK_WRITE_LENGTH   248
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun #define MXL_HYDRA_OEM_MAX_CMD_BUFF_LEN        (248)
121*4882a593Smuzhiyun 
122*4882a593Smuzhiyun #define MXL_HYDRA_CAP_MIN     10
123*4882a593Smuzhiyun #define MXL_HYDRA_CAP_MAX     33
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun #define MXL_HYDRA_PLID_REG_READ       0xFB   /* Read register PLID */
126*4882a593Smuzhiyun #define MXL_HYDRA_PLID_REG_WRITE      0xFC   /* Write register PLID */
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun #define MXL_HYDRA_PLID_CMD_READ       0xFD   /* Command Read PLID */
129*4882a593Smuzhiyun #define MXL_HYDRA_PLID_CMD_WRITE      0xFE   /* Command Write PLID */
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun #define MXL_HYDRA_REG_SIZE_IN_BYTES   4      /* Hydra register size in bytes */
132*4882a593Smuzhiyun #define MXL_HYDRA_I2C_HDR_SIZE        (2 * sizeof(u8)) /* PLID + LEN(0xFF) */
133*4882a593Smuzhiyun #define MXL_HYDRA_CMD_HEADER_SIZE     (MXL_HYDRA_REG_SIZE_IN_BYTES + MXL_HYDRA_I2C_HDR_SIZE)
134*4882a593Smuzhiyun 
135*4882a593Smuzhiyun #define MXL_HYDRA_SKU_ID_581 0
136*4882a593Smuzhiyun #define MXL_HYDRA_SKU_ID_584 1
137*4882a593Smuzhiyun #define MXL_HYDRA_SKU_ID_585 2
138*4882a593Smuzhiyun #define MXL_HYDRA_SKU_ID_544 3
139*4882a593Smuzhiyun #define MXL_HYDRA_SKU_ID_561 4
140*4882a593Smuzhiyun #define MXL_HYDRA_SKU_ID_582 5
141*4882a593Smuzhiyun #define MXL_HYDRA_SKU_ID_568 6
142*4882a593Smuzhiyun 
143*4882a593Smuzhiyun /* macro for register write data buffer size
144*4882a593Smuzhiyun  * (PLID + LEN (0xFF) + RegAddr + RegData)
145*4882a593Smuzhiyun  */
146*4882a593Smuzhiyun #define MXL_HYDRA_REG_WRITE_LEN       (MXL_HYDRA_I2C_HDR_SIZE + (2 * MXL_HYDRA_REG_SIZE_IN_BYTES))
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun /* macro to extract a single byte from 4-byte(32-bit) data */
149*4882a593Smuzhiyun #define GET_BYTE(x, n)  (((x) >> (8*(n))) & 0xFF)
150*4882a593Smuzhiyun 
151*4882a593Smuzhiyun #define MAX_CMD_DATA 512
152*4882a593Smuzhiyun 
153*4882a593Smuzhiyun #define MXL_GET_REG_MASK_32(lsb_loc, num_of_bits) ((0xFFFFFFFF >> (32 - (num_of_bits))) << (lsb_loc))
154*4882a593Smuzhiyun 
155*4882a593Smuzhiyun #define FW_DL_SIGN (0xDEADBEEF)
156*4882a593Smuzhiyun 
157*4882a593Smuzhiyun #define MBIN_FORMAT_VERSION               '1'
158*4882a593Smuzhiyun #define MBIN_FILE_HEADER_ID               'M'
159*4882a593Smuzhiyun #define MBIN_SEGMENT_HEADER_ID            'S'
160*4882a593Smuzhiyun #define MBIN_MAX_FILE_LENGTH              (1<<23)
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun struct MBIN_FILE_HEADER_T {
163*4882a593Smuzhiyun 	u8 id;
164*4882a593Smuzhiyun 	u8 fmt_version;
165*4882a593Smuzhiyun 	u8 header_len;
166*4882a593Smuzhiyun 	u8 num_segments;
167*4882a593Smuzhiyun 	u8 entry_address[4];
168*4882a593Smuzhiyun 	u8 image_size24[3];
169*4882a593Smuzhiyun 	u8 image_checksum;
170*4882a593Smuzhiyun 	u8 reserved[4];
171*4882a593Smuzhiyun };
172*4882a593Smuzhiyun 
173*4882a593Smuzhiyun struct MBIN_FILE_T {
174*4882a593Smuzhiyun 	struct MBIN_FILE_HEADER_T header;
175*4882a593Smuzhiyun 	u8 data[1];
176*4882a593Smuzhiyun };
177*4882a593Smuzhiyun 
178*4882a593Smuzhiyun struct MBIN_SEGMENT_HEADER_T {
179*4882a593Smuzhiyun 	u8 id;
180*4882a593Smuzhiyun 	u8 len24[3];
181*4882a593Smuzhiyun 	u8 address[4];
182*4882a593Smuzhiyun };
183*4882a593Smuzhiyun 
184*4882a593Smuzhiyun struct MBIN_SEGMENT_T {
185*4882a593Smuzhiyun 	struct MBIN_SEGMENT_HEADER_T header;
186*4882a593Smuzhiyun 	u8 data[1];
187*4882a593Smuzhiyun };
188*4882a593Smuzhiyun 
189*4882a593Smuzhiyun enum MXL_CMD_TYPE_E { MXL_CMD_WRITE = 0, MXL_CMD_READ };
190*4882a593Smuzhiyun 
191*4882a593Smuzhiyun #define BUILD_HYDRA_CMD(cmd_id, req_type, size, data_ptr, cmd_buff)		\
192*4882a593Smuzhiyun 	do {								\
193*4882a593Smuzhiyun 		cmd_buff[0] = ((req_type == MXL_CMD_WRITE) ? MXL_HYDRA_PLID_CMD_WRITE : MXL_HYDRA_PLID_CMD_READ); \
194*4882a593Smuzhiyun 		cmd_buff[1] = (size > 251) ? 0xff : (u8) (size + 4);	\
195*4882a593Smuzhiyun 		cmd_buff[2] = size;					\
196*4882a593Smuzhiyun 		cmd_buff[3] = cmd_id;					\
197*4882a593Smuzhiyun 		cmd_buff[4] = 0x00;					\
198*4882a593Smuzhiyun 		cmd_buff[5] = 0x00;					\
199*4882a593Smuzhiyun 		convert_endian(MXL_ENABLE_BIG_ENDIAN, size, (u8 *)data_ptr); \
200*4882a593Smuzhiyun 		memcpy((void *)&cmd_buff[6], data_ptr, size);		\
201*4882a593Smuzhiyun 	} while (0)
202*4882a593Smuzhiyun 
203*4882a593Smuzhiyun struct MXL_REG_FIELD_T {
204*4882a593Smuzhiyun 	u32 reg_addr;
205*4882a593Smuzhiyun 	u8 lsb_pos;
206*4882a593Smuzhiyun 	u8 num_of_bits;
207*4882a593Smuzhiyun };
208*4882a593Smuzhiyun 
209*4882a593Smuzhiyun struct MXL_DEV_CMD_DATA_T {
210*4882a593Smuzhiyun 	u32 data_size;
211*4882a593Smuzhiyun 	u8 data[MAX_CMD_DATA];
212*4882a593Smuzhiyun };
213*4882a593Smuzhiyun 
214*4882a593Smuzhiyun enum MXL_HYDRA_SKU_TYPE_E {
215*4882a593Smuzhiyun 	MXL_HYDRA_SKU_TYPE_MIN = 0x00,
216*4882a593Smuzhiyun 	MXL_HYDRA_SKU_TYPE_581 = 0x00,
217*4882a593Smuzhiyun 	MXL_HYDRA_SKU_TYPE_584 = 0x01,
218*4882a593Smuzhiyun 	MXL_HYDRA_SKU_TYPE_585 = 0x02,
219*4882a593Smuzhiyun 	MXL_HYDRA_SKU_TYPE_544 = 0x03,
220*4882a593Smuzhiyun 	MXL_HYDRA_SKU_TYPE_561 = 0x04,
221*4882a593Smuzhiyun 	MXL_HYDRA_SKU_TYPE_5XX = 0x05,
222*4882a593Smuzhiyun 	MXL_HYDRA_SKU_TYPE_5YY = 0x06,
223*4882a593Smuzhiyun 	MXL_HYDRA_SKU_TYPE_511 = 0x07,
224*4882a593Smuzhiyun 	MXL_HYDRA_SKU_TYPE_561_DE = 0x08,
225*4882a593Smuzhiyun 	MXL_HYDRA_SKU_TYPE_582 = 0x09,
226*4882a593Smuzhiyun 	MXL_HYDRA_SKU_TYPE_541 = 0x0A,
227*4882a593Smuzhiyun 	MXL_HYDRA_SKU_TYPE_568 = 0x0B,
228*4882a593Smuzhiyun 	MXL_HYDRA_SKU_TYPE_542 = 0x0C,
229*4882a593Smuzhiyun 	MXL_HYDRA_SKU_TYPE_MAX = 0x0D,
230*4882a593Smuzhiyun };
231*4882a593Smuzhiyun 
232*4882a593Smuzhiyun struct MXL_HYDRA_SKU_COMMAND_T {
233*4882a593Smuzhiyun 	enum MXL_HYDRA_SKU_TYPE_E sku_type;
234*4882a593Smuzhiyun };
235*4882a593Smuzhiyun 
236*4882a593Smuzhiyun enum MXL_HYDRA_DEMOD_ID_E {
237*4882a593Smuzhiyun 	MXL_HYDRA_DEMOD_ID_0 = 0,
238*4882a593Smuzhiyun 	MXL_HYDRA_DEMOD_ID_1,
239*4882a593Smuzhiyun 	MXL_HYDRA_DEMOD_ID_2,
240*4882a593Smuzhiyun 	MXL_HYDRA_DEMOD_ID_3,
241*4882a593Smuzhiyun 	MXL_HYDRA_DEMOD_ID_4,
242*4882a593Smuzhiyun 	MXL_HYDRA_DEMOD_ID_5,
243*4882a593Smuzhiyun 	MXL_HYDRA_DEMOD_ID_6,
244*4882a593Smuzhiyun 	MXL_HYDRA_DEMOD_ID_7,
245*4882a593Smuzhiyun 	MXL_HYDRA_DEMOD_MAX
246*4882a593Smuzhiyun };
247*4882a593Smuzhiyun 
248*4882a593Smuzhiyun #define MXL_DEMOD_SCRAMBLE_SEQ_LEN  12
249*4882a593Smuzhiyun 
250*4882a593Smuzhiyun #define MAX_STEP_SIZE_24_XTAL_102_05_KHZ  195
251*4882a593Smuzhiyun #define MAX_STEP_SIZE_24_XTAL_204_10_KHZ  215
252*4882a593Smuzhiyun #define MAX_STEP_SIZE_24_XTAL_306_15_KHZ  203
253*4882a593Smuzhiyun #define MAX_STEP_SIZE_24_XTAL_408_20_KHZ  177
254*4882a593Smuzhiyun 
255*4882a593Smuzhiyun #define MAX_STEP_SIZE_27_XTAL_102_05_KHZ  195
256*4882a593Smuzhiyun #define MAX_STEP_SIZE_27_XTAL_204_10_KHZ  215
257*4882a593Smuzhiyun #define MAX_STEP_SIZE_27_XTAL_306_15_KHZ  203
258*4882a593Smuzhiyun #define MAX_STEP_SIZE_27_XTAL_408_20_KHZ  177
259*4882a593Smuzhiyun 
260*4882a593Smuzhiyun #define MXL_HYDRA_SPECTRUM_MIN_FREQ_KHZ  300000
261*4882a593Smuzhiyun #define MXL_HYDRA_SPECTRUM_MAX_FREQ_KHZ 2350000
262*4882a593Smuzhiyun 
263*4882a593Smuzhiyun enum MXL_DEMOD_CHAN_PARAMS_OFFSET_E {
264*4882a593Smuzhiyun 	DMD_STANDARD_ADDR = 0,
265*4882a593Smuzhiyun 	DMD_SPECTRUM_INVERSION_ADDR,
266*4882a593Smuzhiyun 	DMD_SPECTRUM_ROLL_OFF_ADDR,
267*4882a593Smuzhiyun 	DMD_SYMBOL_RATE_ADDR,
268*4882a593Smuzhiyun 	DMD_MODULATION_SCHEME_ADDR,
269*4882a593Smuzhiyun 	DMD_FEC_CODE_RATE_ADDR,
270*4882a593Smuzhiyun 	DMD_SNR_ADDR,
271*4882a593Smuzhiyun 	DMD_FREQ_OFFSET_ADDR,
272*4882a593Smuzhiyun 	DMD_CTL_FREQ_OFFSET_ADDR,
273*4882a593Smuzhiyun 	DMD_STR_FREQ_OFFSET_ADDR,
274*4882a593Smuzhiyun 	DMD_FTL_FREQ_OFFSET_ADDR,
275*4882a593Smuzhiyun 	DMD_STR_NBC_SYNC_LOCK_ADDR,
276*4882a593Smuzhiyun 	DMD_CYCLE_SLIP_COUNT_ADDR,
277*4882a593Smuzhiyun 	DMD_DISPLAY_IQ_ADDR,
278*4882a593Smuzhiyun 	DMD_DVBS2_CRC_ERRORS_ADDR,
279*4882a593Smuzhiyun 	DMD_DVBS2_PER_COUNT_ADDR,
280*4882a593Smuzhiyun 	DMD_DVBS2_PER_WINDOW_ADDR,
281*4882a593Smuzhiyun 	DMD_DVBS_CORR_RS_ERRORS_ADDR,
282*4882a593Smuzhiyun 	DMD_DVBS_UNCORR_RS_ERRORS_ADDR,
283*4882a593Smuzhiyun 	DMD_DVBS_BER_COUNT_ADDR,
284*4882a593Smuzhiyun 	DMD_DVBS_BER_WINDOW_ADDR,
285*4882a593Smuzhiyun 	DMD_TUNER_ID_ADDR,
286*4882a593Smuzhiyun 	DMD_DVBS2_PILOT_ON_OFF_ADDR,
287*4882a593Smuzhiyun 	DMD_FREQ_SEARCH_RANGE_IN_KHZ_ADDR,
288*4882a593Smuzhiyun 
289*4882a593Smuzhiyun 	MXL_DEMOD_CHAN_PARAMS_BUFF_SIZE,
290*4882a593Smuzhiyun };
291*4882a593Smuzhiyun 
292*4882a593Smuzhiyun enum MXL_HYDRA_TUNER_ID_E {
293*4882a593Smuzhiyun 	MXL_HYDRA_TUNER_ID_0 = 0,
294*4882a593Smuzhiyun 	MXL_HYDRA_TUNER_ID_1,
295*4882a593Smuzhiyun 	MXL_HYDRA_TUNER_ID_2,
296*4882a593Smuzhiyun 	MXL_HYDRA_TUNER_ID_3,
297*4882a593Smuzhiyun 	MXL_HYDRA_TUNER_MAX
298*4882a593Smuzhiyun };
299*4882a593Smuzhiyun 
300*4882a593Smuzhiyun enum MXL_HYDRA_BCAST_STD_E {
301*4882a593Smuzhiyun 	MXL_HYDRA_DSS = 0,
302*4882a593Smuzhiyun 	MXL_HYDRA_DVBS,
303*4882a593Smuzhiyun 	MXL_HYDRA_DVBS2,
304*4882a593Smuzhiyun };
305*4882a593Smuzhiyun 
306*4882a593Smuzhiyun enum MXL_HYDRA_FEC_E {
307*4882a593Smuzhiyun 	MXL_HYDRA_FEC_AUTO = 0,
308*4882a593Smuzhiyun 	MXL_HYDRA_FEC_1_2,
309*4882a593Smuzhiyun 	MXL_HYDRA_FEC_3_5,
310*4882a593Smuzhiyun 	MXL_HYDRA_FEC_2_3,
311*4882a593Smuzhiyun 	MXL_HYDRA_FEC_3_4,
312*4882a593Smuzhiyun 	MXL_HYDRA_FEC_4_5,
313*4882a593Smuzhiyun 	MXL_HYDRA_FEC_5_6,
314*4882a593Smuzhiyun 	MXL_HYDRA_FEC_6_7,
315*4882a593Smuzhiyun 	MXL_HYDRA_FEC_7_8,
316*4882a593Smuzhiyun 	MXL_HYDRA_FEC_8_9,
317*4882a593Smuzhiyun 	MXL_HYDRA_FEC_9_10,
318*4882a593Smuzhiyun };
319*4882a593Smuzhiyun 
320*4882a593Smuzhiyun enum MXL_HYDRA_MODULATION_E {
321*4882a593Smuzhiyun 	MXL_HYDRA_MOD_AUTO = 0,
322*4882a593Smuzhiyun 	MXL_HYDRA_MOD_QPSK,
323*4882a593Smuzhiyun 	MXL_HYDRA_MOD_8PSK
324*4882a593Smuzhiyun };
325*4882a593Smuzhiyun 
326*4882a593Smuzhiyun enum MXL_HYDRA_SPECTRUM_E {
327*4882a593Smuzhiyun 	MXL_HYDRA_SPECTRUM_AUTO = 0,
328*4882a593Smuzhiyun 	MXL_HYDRA_SPECTRUM_INVERTED,
329*4882a593Smuzhiyun 	MXL_HYDRA_SPECTRUM_NON_INVERTED,
330*4882a593Smuzhiyun };
331*4882a593Smuzhiyun 
332*4882a593Smuzhiyun enum MXL_HYDRA_ROLLOFF_E {
333*4882a593Smuzhiyun 	MXL_HYDRA_ROLLOFF_AUTO  = 0,
334*4882a593Smuzhiyun 	MXL_HYDRA_ROLLOFF_0_20,
335*4882a593Smuzhiyun 	MXL_HYDRA_ROLLOFF_0_25,
336*4882a593Smuzhiyun 	MXL_HYDRA_ROLLOFF_0_35
337*4882a593Smuzhiyun };
338*4882a593Smuzhiyun 
339*4882a593Smuzhiyun enum MXL_HYDRA_PILOTS_E {
340*4882a593Smuzhiyun 	MXL_HYDRA_PILOTS_OFF  = 0,
341*4882a593Smuzhiyun 	MXL_HYDRA_PILOTS_ON,
342*4882a593Smuzhiyun 	MXL_HYDRA_PILOTS_AUTO
343*4882a593Smuzhiyun };
344*4882a593Smuzhiyun 
345*4882a593Smuzhiyun enum MXL_HYDRA_CONSTELLATION_SRC_E {
346*4882a593Smuzhiyun 	MXL_HYDRA_FORMATTER = 0,
347*4882a593Smuzhiyun 	MXL_HYDRA_LEGACY_FEC,
348*4882a593Smuzhiyun 	MXL_HYDRA_FREQ_RECOVERY,
349*4882a593Smuzhiyun 	MXL_HYDRA_NBC,
350*4882a593Smuzhiyun 	MXL_HYDRA_CTL,
351*4882a593Smuzhiyun 	MXL_HYDRA_EQ,
352*4882a593Smuzhiyun };
353*4882a593Smuzhiyun 
354*4882a593Smuzhiyun struct MXL_HYDRA_DEMOD_LOCK_T {
355*4882a593Smuzhiyun 	int agc_lock; /* AGC lock info */
356*4882a593Smuzhiyun 	int fec_lock; /* Demod FEC block lock info */
357*4882a593Smuzhiyun };
358*4882a593Smuzhiyun 
359*4882a593Smuzhiyun struct MXL_HYDRA_DEMOD_STATUS_DVBS_T {
360*4882a593Smuzhiyun 	u32 rs_errors;        /* RS decoder err counter */
361*4882a593Smuzhiyun 	u32 ber_window;       /* Ber Windows */
362*4882a593Smuzhiyun 	u32 ber_count;        /* BER count */
363*4882a593Smuzhiyun 	u32 ber_window_iter1; /* Ber Windows - post viterbi */
364*4882a593Smuzhiyun 	u32 ber_count_iter1;  /* BER count - post viterbi */
365*4882a593Smuzhiyun };
366*4882a593Smuzhiyun 
367*4882a593Smuzhiyun struct MXL_HYDRA_DEMOD_STATUS_DSS_T {
368*4882a593Smuzhiyun 	u32 rs_errors;  /* RS decoder err counter */
369*4882a593Smuzhiyun 	u32 ber_window; /* Ber Windows */
370*4882a593Smuzhiyun 	u32 ber_count;  /* BER count */
371*4882a593Smuzhiyun };
372*4882a593Smuzhiyun 
373*4882a593Smuzhiyun struct MXL_HYDRA_DEMOD_STATUS_DVBS2_T {
374*4882a593Smuzhiyun 	u32 crc_errors;        /* CRC error counter */
375*4882a593Smuzhiyun 	u32 packet_error_count; /* Number of packet errors */
376*4882a593Smuzhiyun 	u32 total_packets;     /* Total packets */
377*4882a593Smuzhiyun };
378*4882a593Smuzhiyun 
379*4882a593Smuzhiyun struct MXL_HYDRA_DEMOD_STATUS_T {
380*4882a593Smuzhiyun 	enum MXL_HYDRA_BCAST_STD_E standard_mask; /* Standard DVB-S, DVB-S2 or DSS */
381*4882a593Smuzhiyun 
382*4882a593Smuzhiyun 	union {
383*4882a593Smuzhiyun 		struct MXL_HYDRA_DEMOD_STATUS_DVBS_T demod_status_dvbs;   /* DVB-S demod status */
384*4882a593Smuzhiyun 		struct MXL_HYDRA_DEMOD_STATUS_DVBS2_T demod_status_dvbs2; /* DVB-S2 demod status */
385*4882a593Smuzhiyun 		struct MXL_HYDRA_DEMOD_STATUS_DSS_T demod_status_dss;     /* DSS demod status */
386*4882a593Smuzhiyun 	} u;
387*4882a593Smuzhiyun };
388*4882a593Smuzhiyun 
389*4882a593Smuzhiyun struct MXL_HYDRA_DEMOD_SIG_OFFSET_INFO_T {
390*4882a593Smuzhiyun 	s32 carrier_offset_in_hz; /* CRL offset info */
391*4882a593Smuzhiyun 	s32 symbol_offset_in_symbol; /* SRL offset info */
392*4882a593Smuzhiyun };
393*4882a593Smuzhiyun 
394*4882a593Smuzhiyun struct MXL_HYDRA_DEMOD_SCRAMBLE_INFO_T {
395*4882a593Smuzhiyun 	u8 scramble_sequence[MXL_DEMOD_SCRAMBLE_SEQ_LEN]; /* scramble sequence */
396*4882a593Smuzhiyun 	u32 scramble_code; /* scramble gold code */
397*4882a593Smuzhiyun };
398*4882a593Smuzhiyun 
399*4882a593Smuzhiyun enum MXL_HYDRA_SPECTRUM_STEP_SIZE_E {
400*4882a593Smuzhiyun 	MXL_HYDRA_STEP_SIZE_24_XTAL_102_05KHZ, /* 102.05 KHz for 24 MHz XTAL */
401*4882a593Smuzhiyun 	MXL_HYDRA_STEP_SIZE_24_XTAL_204_10KHZ, /* 204.10 KHz for 24 MHz XTAL */
402*4882a593Smuzhiyun 	MXL_HYDRA_STEP_SIZE_24_XTAL_306_15KHZ, /* 306.15 KHz for 24 MHz XTAL */
403*4882a593Smuzhiyun 	MXL_HYDRA_STEP_SIZE_24_XTAL_408_20KHZ, /* 408.20 KHz for 24 MHz XTAL */
404*4882a593Smuzhiyun 
405*4882a593Smuzhiyun 	MXL_HYDRA_STEP_SIZE_27_XTAL_102_05KHZ, /* 102.05 KHz for 27 MHz XTAL */
406*4882a593Smuzhiyun 	MXL_HYDRA_STEP_SIZE_27_XTAL_204_35KHZ, /* 204.35 KHz for 27 MHz XTAL */
407*4882a593Smuzhiyun 	MXL_HYDRA_STEP_SIZE_27_XTAL_306_52KHZ, /* 306.52 KHz for 27 MHz XTAL */
408*4882a593Smuzhiyun 	MXL_HYDRA_STEP_SIZE_27_XTAL_408_69KHZ, /* 408.69 KHz for 27 MHz XTAL */
409*4882a593Smuzhiyun };
410*4882a593Smuzhiyun 
411*4882a593Smuzhiyun enum MXL_HYDRA_SPECTRUM_RESOLUTION_E {
412*4882a593Smuzhiyun 	MXL_HYDRA_SPECTRUM_RESOLUTION_00_1_DB, /* 0.1 dB */
413*4882a593Smuzhiyun 	MXL_HYDRA_SPECTRUM_RESOLUTION_01_0_DB, /* 1.0 dB */
414*4882a593Smuzhiyun 	MXL_HYDRA_SPECTRUM_RESOLUTION_05_0_DB, /* 5.0 dB */
415*4882a593Smuzhiyun 	MXL_HYDRA_SPECTRUM_RESOLUTION_10_0_DB, /* 10 dB */
416*4882a593Smuzhiyun };
417*4882a593Smuzhiyun 
418*4882a593Smuzhiyun enum MXL_HYDRA_SPECTRUM_ERROR_CODE_E {
419*4882a593Smuzhiyun 	MXL_SPECTRUM_NO_ERROR,
420*4882a593Smuzhiyun 	MXL_SPECTRUM_INVALID_PARAMETER,
421*4882a593Smuzhiyun 	MXL_SPECTRUM_INVALID_STEP_SIZE,
422*4882a593Smuzhiyun 	MXL_SPECTRUM_BW_CANNOT_BE_COVERED,
423*4882a593Smuzhiyun 	MXL_SPECTRUM_DEMOD_BUSY,
424*4882a593Smuzhiyun 	MXL_SPECTRUM_TUNER_NOT_ENABLED,
425*4882a593Smuzhiyun };
426*4882a593Smuzhiyun 
427*4882a593Smuzhiyun struct MXL_HYDRA_SPECTRUM_REQ_T {
428*4882a593Smuzhiyun 	u32 tuner_index; /* TUNER Ctrl: one of MXL58x_TUNER_ID_E */
429*4882a593Smuzhiyun 	u32 demod_index; /* DEMOD Ctrl: one of MXL58x_DEMOD_ID_E */
430*4882a593Smuzhiyun 	enum MXL_HYDRA_SPECTRUM_STEP_SIZE_E step_size_in_khz;
431*4882a593Smuzhiyun 	u32 starting_freq_ink_hz;
432*4882a593Smuzhiyun 	u32 total_steps;
433*4882a593Smuzhiyun 	enum MXL_HYDRA_SPECTRUM_RESOLUTION_E spectrum_division;
434*4882a593Smuzhiyun };
435*4882a593Smuzhiyun 
436*4882a593Smuzhiyun enum MXL_HYDRA_SEARCH_FREQ_OFFSET_TYPE_E {
437*4882a593Smuzhiyun 	MXL_HYDRA_SEARCH_MAX_OFFSET = 0, /* DMD searches for max freq offset (i.e. 5MHz) */
438*4882a593Smuzhiyun 	MXL_HYDRA_SEARCH_BW_PLUS_ROLLOFF, /* DMD searches for BW + ROLLOFF/2 */
439*4882a593Smuzhiyun };
440*4882a593Smuzhiyun 
441*4882a593Smuzhiyun struct MXL58X_CFG_FREQ_OFF_SEARCH_RANGE_T {
442*4882a593Smuzhiyun 	u32 demod_index;
443*4882a593Smuzhiyun 	enum MXL_HYDRA_SEARCH_FREQ_OFFSET_TYPE_E search_type;
444*4882a593Smuzhiyun };
445*4882a593Smuzhiyun 
446*4882a593Smuzhiyun /* there are two slices
447*4882a593Smuzhiyun  * slice0 - TS0, TS1, TS2 & TS3
448*4882a593Smuzhiyun  * slice1 - TS4, TS5, TS6 & TS7
449*4882a593Smuzhiyun  */
450*4882a593Smuzhiyun #define MXL_HYDRA_TS_SLICE_MAX  2
451*4882a593Smuzhiyun 
452*4882a593Smuzhiyun #define MAX_FIXED_PID_NUM   32
453*4882a593Smuzhiyun 
454*4882a593Smuzhiyun #define MXL_HYDRA_NCO_CLK   418 /* 418 MHz */
455*4882a593Smuzhiyun 
456*4882a593Smuzhiyun #define MXL_HYDRA_MAX_TS_CLOCK  139 /* 139 MHz */
457*4882a593Smuzhiyun 
458*4882a593Smuzhiyun #define MXL_HYDRA_TS_FIXED_PID_FILT_SIZE          32
459*4882a593Smuzhiyun 
460*4882a593Smuzhiyun #define MXL_HYDRA_SHARED_PID_FILT_SIZE_DEFAULT    33   /* Shared PID filter size in 1-1 mux mode */
461*4882a593Smuzhiyun #define MXL_HYDRA_SHARED_PID_FILT_SIZE_2_TO_1     66   /* Shared PID filter size in 2-1 mux mode */
462*4882a593Smuzhiyun #define MXL_HYDRA_SHARED_PID_FILT_SIZE_4_TO_1     132  /* Shared PID filter size in 4-1 mux mode */
463*4882a593Smuzhiyun 
464*4882a593Smuzhiyun enum MXL_HYDRA_PID_BANK_TYPE_E {
465*4882a593Smuzhiyun 	MXL_HYDRA_SOFTWARE_PID_BANK = 0,
466*4882a593Smuzhiyun 	MXL_HYDRA_HARDWARE_PID_BANK,
467*4882a593Smuzhiyun };
468*4882a593Smuzhiyun 
469*4882a593Smuzhiyun enum MXL_HYDRA_TS_MUX_MODE_E {
470*4882a593Smuzhiyun 	MXL_HYDRA_TS_MUX_PID_REMAP = 0,
471*4882a593Smuzhiyun 	MXL_HYDRA_TS_MUX_PREFIX_EXTRA_HEADER = 1,
472*4882a593Smuzhiyun };
473*4882a593Smuzhiyun 
474*4882a593Smuzhiyun enum MXL_HYDRA_TS_MUX_TYPE_E {
475*4882a593Smuzhiyun 	MXL_HYDRA_TS_MUX_DISABLE = 0, /* No Mux ( 1 TSIF to 1 TSIF) */
476*4882a593Smuzhiyun 	MXL_HYDRA_TS_MUX_2_TO_1, /* Mux 2 TSIF to 1 TSIF */
477*4882a593Smuzhiyun 	MXL_HYDRA_TS_MUX_4_TO_1, /* Mux 4 TSIF to 1 TSIF */
478*4882a593Smuzhiyun };
479*4882a593Smuzhiyun 
480*4882a593Smuzhiyun enum MXL_HYDRA_TS_GROUP_E {
481*4882a593Smuzhiyun 	MXL_HYDRA_TS_GROUP_0_3 = 0, /* TS group 0 to 3 (TS0, TS1, TS2 & TS3) */
482*4882a593Smuzhiyun 	MXL_HYDRA_TS_GROUP_4_7,     /* TS group 0 to 3 (TS4, TS5, TS6 & TS7) */
483*4882a593Smuzhiyun };
484*4882a593Smuzhiyun 
485*4882a593Smuzhiyun enum MXL_HYDRA_TS_PID_FLT_CTRL_E {
486*4882a593Smuzhiyun 	MXL_HYDRA_TS_PIDS_ALLOW_ALL = 0, /* Allow all pids */
487*4882a593Smuzhiyun 	MXL_HYDRA_TS_PIDS_DROP_ALL,	 /* Drop all pids */
488*4882a593Smuzhiyun 	MXL_HYDRA_TS_INVALIDATE_PID_FILTER, /* Delete current PD filter in the device */
489*4882a593Smuzhiyun };
490*4882a593Smuzhiyun 
491*4882a593Smuzhiyun enum MXL_HYDRA_TS_PID_TYPE_E {
492*4882a593Smuzhiyun 	MXL_HYDRA_TS_PID_FIXED = 0,
493*4882a593Smuzhiyun 	MXL_HYDRA_TS_PID_REGULAR,
494*4882a593Smuzhiyun };
495*4882a593Smuzhiyun 
496*4882a593Smuzhiyun struct MXL_HYDRA_TS_PID_T {
497*4882a593Smuzhiyun 	u16 original_pid;           /* pid from TS */
498*4882a593Smuzhiyun 	u16 remapped_pid;           /* remapped pid */
499*4882a593Smuzhiyun 	enum MXL_BOOL_E enable;         /* enable or disable pid */
500*4882a593Smuzhiyun 	enum MXL_BOOL_E allow_or_drop;    /* allow or drop pid */
501*4882a593Smuzhiyun 	enum MXL_BOOL_E enable_pid_remap; /* enable or disable pid remap */
502*4882a593Smuzhiyun 	u8 bond_id;                 /* Bond ID in A0 always 0 - Only for 568 Sku */
503*4882a593Smuzhiyun 	u8 dest_id;                 /* Output port ID for the PID - Only for 568 Sku */
504*4882a593Smuzhiyun };
505*4882a593Smuzhiyun 
506*4882a593Smuzhiyun struct MXL_HYDRA_TS_MUX_PREFIX_HEADER_T {
507*4882a593Smuzhiyun 	enum MXL_BOOL_E enable;
508*4882a593Smuzhiyun 	u8 num_byte;
509*4882a593Smuzhiyun 	u8 header[12];
510*4882a593Smuzhiyun };
511*4882a593Smuzhiyun 
512*4882a593Smuzhiyun enum MXL_HYDRA_PID_FILTER_BANK_E {
513*4882a593Smuzhiyun 	MXL_HYDRA_PID_BANK_A = 0,
514*4882a593Smuzhiyun 	MXL_HYDRA_PID_BANK_B,
515*4882a593Smuzhiyun };
516*4882a593Smuzhiyun 
517*4882a593Smuzhiyun enum MXL_HYDRA_MPEG_DATA_FMT_E {
518*4882a593Smuzhiyun 	MXL_HYDRA_MPEG_SERIAL_MSB_1ST = 0,
519*4882a593Smuzhiyun 	MXL_HYDRA_MPEG_SERIAL_LSB_1ST,
520*4882a593Smuzhiyun 
521*4882a593Smuzhiyun 	MXL_HYDRA_MPEG_SYNC_WIDTH_BIT = 0,
522*4882a593Smuzhiyun 	MXL_HYDRA_MPEG_SYNC_WIDTH_BYTE
523*4882a593Smuzhiyun };
524*4882a593Smuzhiyun 
525*4882a593Smuzhiyun enum MXL_HYDRA_MPEG_MODE_E {
526*4882a593Smuzhiyun 	MXL_HYDRA_MPEG_MODE_SERIAL_4_WIRE = 0, /* MPEG 4 Wire serial mode */
527*4882a593Smuzhiyun 	MXL_HYDRA_MPEG_MODE_SERIAL_3_WIRE,     /* MPEG 3 Wire serial mode */
528*4882a593Smuzhiyun 	MXL_HYDRA_MPEG_MODE_SERIAL_2_WIRE,     /* MPEG 2 Wire serial mode */
529*4882a593Smuzhiyun 	MXL_HYDRA_MPEG_MODE_PARALLEL           /* MPEG parallel mode - valid only for MxL581 */
530*4882a593Smuzhiyun };
531*4882a593Smuzhiyun 
532*4882a593Smuzhiyun enum MXL_HYDRA_MPEG_CLK_TYPE_E {
533*4882a593Smuzhiyun 	MXL_HYDRA_MPEG_CLK_CONTINUOUS = 0, /* Continuous MPEG clock */
534*4882a593Smuzhiyun 	MXL_HYDRA_MPEG_CLK_GAPPED,         /* Gapped (gated) MPEG clock */
535*4882a593Smuzhiyun };
536*4882a593Smuzhiyun 
537*4882a593Smuzhiyun enum MXL_HYDRA_MPEG_CLK_FMT_E {
538*4882a593Smuzhiyun 	MXL_HYDRA_MPEG_ACTIVE_LOW = 0,
539*4882a593Smuzhiyun 	MXL_HYDRA_MPEG_ACTIVE_HIGH,
540*4882a593Smuzhiyun 
541*4882a593Smuzhiyun 	MXL_HYDRA_MPEG_CLK_NEGATIVE = 0,
542*4882a593Smuzhiyun 	MXL_HYDRA_MPEG_CLK_POSITIVE,
543*4882a593Smuzhiyun 
544*4882a593Smuzhiyun 	MXL_HYDRA_MPEG_CLK_IN_PHASE = 0,
545*4882a593Smuzhiyun 	MXL_HYDRA_MPEG_CLK_INVERTED,
546*4882a593Smuzhiyun };
547*4882a593Smuzhiyun 
548*4882a593Smuzhiyun enum MXL_HYDRA_MPEG_CLK_PHASE_E {
549*4882a593Smuzhiyun 	MXL_HYDRA_MPEG_CLK_PHASE_SHIFT_0_DEG = 0,
550*4882a593Smuzhiyun 	MXL_HYDRA_MPEG_CLK_PHASE_SHIFT_90_DEG,
551*4882a593Smuzhiyun 	MXL_HYDRA_MPEG_CLK_PHASE_SHIFT_180_DEG,
552*4882a593Smuzhiyun 	MXL_HYDRA_MPEG_CLK_PHASE_SHIFT_270_DEG
553*4882a593Smuzhiyun };
554*4882a593Smuzhiyun 
555*4882a593Smuzhiyun enum MXL_HYDRA_MPEG_ERR_INDICATION_E {
556*4882a593Smuzhiyun 	MXL_HYDRA_MPEG_ERR_REPLACE_SYNC = 0,
557*4882a593Smuzhiyun 	MXL_HYDRA_MPEG_ERR_REPLACE_VALID,
558*4882a593Smuzhiyun 	MXL_HYDRA_MPEG_ERR_INDICATION_DISABLED
559*4882a593Smuzhiyun };
560*4882a593Smuzhiyun 
561*4882a593Smuzhiyun struct MXL_HYDRA_MPEGOUT_PARAM_T {
562*4882a593Smuzhiyun 	int                                  enable;               /* Enable or Disable MPEG OUT */
563*4882a593Smuzhiyun 	enum MXL_HYDRA_MPEG_CLK_TYPE_E       mpeg_clk_type;          /* Continuous or gapped */
564*4882a593Smuzhiyun 	enum MXL_HYDRA_MPEG_CLK_FMT_E        mpeg_clk_pol;           /* MPEG Clk polarity */
565*4882a593Smuzhiyun 	u8                                   max_mpeg_clk_rate;       /* Max MPEG Clk rate (0 - 104 MHz, 139 MHz) */
566*4882a593Smuzhiyun 	enum MXL_HYDRA_MPEG_CLK_PHASE_E      mpeg_clk_phase;         /* MPEG Clk phase */
567*4882a593Smuzhiyun 	enum MXL_HYDRA_MPEG_DATA_FMT_E       lsb_or_msb_first;        /* LSB first or MSB first in TS transmission */
568*4882a593Smuzhiyun 	enum MXL_HYDRA_MPEG_DATA_FMT_E       mpeg_sync_pulse_width;   /* MPEG SYNC pulse width (1-bit or 1-byte) */
569*4882a593Smuzhiyun 	enum MXL_HYDRA_MPEG_CLK_FMT_E        mpeg_valid_pol;         /* MPEG VALID polarity */
570*4882a593Smuzhiyun 	enum MXL_HYDRA_MPEG_CLK_FMT_E        mpeg_sync_pol;          /* MPEG SYNC polarity */
571*4882a593Smuzhiyun 	enum MXL_HYDRA_MPEG_MODE_E           mpeg_mode;             /* config 4/3/2-wire serial or parallel TS out */
572*4882a593Smuzhiyun 	enum MXL_HYDRA_MPEG_ERR_INDICATION_E mpeg_error_indication;  /* Enable or Disable MPEG error indication */
573*4882a593Smuzhiyun };
574*4882a593Smuzhiyun 
575*4882a593Smuzhiyun enum MXL_HYDRA_EXT_TS_IN_ID_E {
576*4882a593Smuzhiyun 	MXL_HYDRA_EXT_TS_IN_0 = 0,
577*4882a593Smuzhiyun 	MXL_HYDRA_EXT_TS_IN_1,
578*4882a593Smuzhiyun 	MXL_HYDRA_EXT_TS_IN_2,
579*4882a593Smuzhiyun 	MXL_HYDRA_EXT_TS_IN_3,
580*4882a593Smuzhiyun 	MXL_HYDRA_EXT_TS_IN_MAX
581*4882a593Smuzhiyun };
582*4882a593Smuzhiyun 
583*4882a593Smuzhiyun enum MXL_HYDRA_TS_OUT_ID_E {
584*4882a593Smuzhiyun 	MXL_HYDRA_TS_OUT_0 = 0,
585*4882a593Smuzhiyun 	MXL_HYDRA_TS_OUT_1,
586*4882a593Smuzhiyun 	MXL_HYDRA_TS_OUT_2,
587*4882a593Smuzhiyun 	MXL_HYDRA_TS_OUT_3,
588*4882a593Smuzhiyun 	MXL_HYDRA_TS_OUT_4,
589*4882a593Smuzhiyun 	MXL_HYDRA_TS_OUT_5,
590*4882a593Smuzhiyun 	MXL_HYDRA_TS_OUT_6,
591*4882a593Smuzhiyun 	MXL_HYDRA_TS_OUT_7,
592*4882a593Smuzhiyun 	MXL_HYDRA_TS_OUT_MAX
593*4882a593Smuzhiyun };
594*4882a593Smuzhiyun 
595*4882a593Smuzhiyun enum MXL_HYDRA_TS_DRIVE_STRENGTH_E {
596*4882a593Smuzhiyun 	MXL_HYDRA_TS_DRIVE_STRENGTH_1X = 0,
597*4882a593Smuzhiyun 	MXL_HYDRA_TS_DRIVE_STRENGTH_2X,
598*4882a593Smuzhiyun 	MXL_HYDRA_TS_DRIVE_STRENGTH_3X,
599*4882a593Smuzhiyun 	MXL_HYDRA_TS_DRIVE_STRENGTH_4X,
600*4882a593Smuzhiyun 	MXL_HYDRA_TS_DRIVE_STRENGTH_5X,
601*4882a593Smuzhiyun 	MXL_HYDRA_TS_DRIVE_STRENGTH_6X,
602*4882a593Smuzhiyun 	MXL_HYDRA_TS_DRIVE_STRENGTH_7X,
603*4882a593Smuzhiyun 	MXL_HYDRA_TS_DRIVE_STRENGTH_8X
604*4882a593Smuzhiyun };
605*4882a593Smuzhiyun 
606*4882a593Smuzhiyun enum MXL_HYDRA_DEVICE_E {
607*4882a593Smuzhiyun 	MXL_HYDRA_DEVICE_581 = 0,
608*4882a593Smuzhiyun 	MXL_HYDRA_DEVICE_584,
609*4882a593Smuzhiyun 	MXL_HYDRA_DEVICE_585,
610*4882a593Smuzhiyun 	MXL_HYDRA_DEVICE_544,
611*4882a593Smuzhiyun 	MXL_HYDRA_DEVICE_561,
612*4882a593Smuzhiyun 	MXL_HYDRA_DEVICE_TEST,
613*4882a593Smuzhiyun 	MXL_HYDRA_DEVICE_582,
614*4882a593Smuzhiyun 	MXL_HYDRA_DEVICE_541,
615*4882a593Smuzhiyun 	MXL_HYDRA_DEVICE_568,
616*4882a593Smuzhiyun 	MXL_HYDRA_DEVICE_542,
617*4882a593Smuzhiyun 	MXL_HYDRA_DEVICE_541S,
618*4882a593Smuzhiyun 	MXL_HYDRA_DEVICE_561S,
619*4882a593Smuzhiyun 	MXL_HYDRA_DEVICE_581S,
620*4882a593Smuzhiyun 	MXL_HYDRA_DEVICE_MAX
621*4882a593Smuzhiyun };
622*4882a593Smuzhiyun 
623*4882a593Smuzhiyun /* Demod IQ data */
624*4882a593Smuzhiyun struct MXL_HYDRA_DEMOD_IQ_SRC_T {
625*4882a593Smuzhiyun 	u32 demod_id;
626*4882a593Smuzhiyun 	u32 source_of_iq; /* == 0, it means I/Q comes from Formatter
627*4882a593Smuzhiyun 			 * == 1, Legacy FEC
628*4882a593Smuzhiyun 			 * == 2, Frequency Recovery
629*4882a593Smuzhiyun 			 * == 3, NBC
630*4882a593Smuzhiyun 			 * == 4, CTL
631*4882a593Smuzhiyun 			 * == 5, EQ
632*4882a593Smuzhiyun 			 * == 6, FPGA
633*4882a593Smuzhiyun 			 */
634*4882a593Smuzhiyun };
635*4882a593Smuzhiyun 
636*4882a593Smuzhiyun struct MXL_HYDRA_DEMOD_ABORT_TUNE_T {
637*4882a593Smuzhiyun 	u32 demod_id;
638*4882a593Smuzhiyun };
639*4882a593Smuzhiyun 
640*4882a593Smuzhiyun struct MXL_HYDRA_TUNER_CMD {
641*4882a593Smuzhiyun 	u8 tuner_id;
642*4882a593Smuzhiyun 	u8 enable;
643*4882a593Smuzhiyun };
644*4882a593Smuzhiyun 
645*4882a593Smuzhiyun /* Demod Para for Channel Tune */
646*4882a593Smuzhiyun struct MXL_HYDRA_DEMOD_PARAM_T {
647*4882a593Smuzhiyun 	u32 tuner_index;
648*4882a593Smuzhiyun 	u32 demod_index;
649*4882a593Smuzhiyun 	u32 frequency_in_hz;     /* Frequency */
650*4882a593Smuzhiyun 	u32 standard;          /* one of MXL_HYDRA_BCAST_STD_E */
651*4882a593Smuzhiyun 	u32 spectrum_inversion; /* Input : Spectrum inversion. */
652*4882a593Smuzhiyun 	u32 roll_off;           /* rollOff (alpha) factor */
653*4882a593Smuzhiyun 	u32 symbol_rate_in_hz;    /* Symbol rate */
654*4882a593Smuzhiyun 	u32 pilots;            /* TRUE = pilots enabled */
655*4882a593Smuzhiyun 	u32 modulation_scheme;  /* Input : Modulation Scheme is one of MXL_HYDRA_MODULATION_E */
656*4882a593Smuzhiyun 	u32 fec_code_rate;       /* Input : Forward error correction rate. Is one of MXL_HYDRA_FEC_E */
657*4882a593Smuzhiyun 	u32 max_carrier_offset_in_mhz; /* Maximum carrier freq offset in MHz. Same as freqSearchRangeKHz, but in unit of MHz. */
658*4882a593Smuzhiyun };
659*4882a593Smuzhiyun 
660*4882a593Smuzhiyun struct MXL_HYDRA_DEMOD_SCRAMBLE_CODE_T {
661*4882a593Smuzhiyun 	u32 demod_index;
662*4882a593Smuzhiyun 	u8 scramble_sequence[12]; /* scramble sequence */
663*4882a593Smuzhiyun 	u32 scramble_code; /* scramble gold code */
664*4882a593Smuzhiyun };
665*4882a593Smuzhiyun 
666*4882a593Smuzhiyun struct MXL_INTR_CFG_T {
667*4882a593Smuzhiyun 	u32 intr_type;
668*4882a593Smuzhiyun 	u32 intr_duration_in_nano_secs;
669*4882a593Smuzhiyun 	u32 intr_mask;
670*4882a593Smuzhiyun };
671*4882a593Smuzhiyun 
672*4882a593Smuzhiyun struct MXL_HYDRA_POWER_MODE_CMD {
673*4882a593Smuzhiyun 	u8 power_mode; /* enumeration values are defined in MXL_HYDRA_PWR_MODE_E (device API.h) */
674*4882a593Smuzhiyun };
675*4882a593Smuzhiyun 
676*4882a593Smuzhiyun struct MXL_HYDRA_RF_WAKEUP_PARAM_T {
677*4882a593Smuzhiyun 	u32 time_interval_in_seconds; /* in seconds */
678*4882a593Smuzhiyun 	u32 tuner_index;
679*4882a593Smuzhiyun 	s32 rssi_threshold;
680*4882a593Smuzhiyun };
681*4882a593Smuzhiyun 
682*4882a593Smuzhiyun struct MXL_HYDRA_RF_WAKEUP_CFG_T {
683*4882a593Smuzhiyun 	u32 tuner_count;
684*4882a593Smuzhiyun 	struct MXL_HYDRA_RF_WAKEUP_PARAM_T params;
685*4882a593Smuzhiyun };
686*4882a593Smuzhiyun 
687*4882a593Smuzhiyun enum MXL_HYDRA_AUX_CTRL_MODE_E {
688*4882a593Smuzhiyun 	MXL_HYDRA_AUX_CTRL_MODE_FSK = 0, /* Select FSK controller */
689*4882a593Smuzhiyun 	MXL_HYDRA_AUX_CTRL_MODE_DISEQC,  /* Select DiSEqC controller */
690*4882a593Smuzhiyun };
691*4882a593Smuzhiyun 
692*4882a593Smuzhiyun enum MXL_HYDRA_DISEQC_OPMODE_E {
693*4882a593Smuzhiyun 	MXL_HYDRA_DISEQC_ENVELOPE_MODE = 0,
694*4882a593Smuzhiyun 	MXL_HYDRA_DISEQC_TONE_MODE,
695*4882a593Smuzhiyun };
696*4882a593Smuzhiyun 
697*4882a593Smuzhiyun enum MXL_HYDRA_DISEQC_VER_E {
698*4882a593Smuzhiyun 	MXL_HYDRA_DISEQC_1_X = 0, /* Config DiSEqC 1.x mode */
699*4882a593Smuzhiyun 	MXL_HYDRA_DISEQC_2_X, /* Config DiSEqC 2.x mode */
700*4882a593Smuzhiyun 	MXL_HYDRA_DISEQC_DISABLE /* Disable DiSEqC */
701*4882a593Smuzhiyun };
702*4882a593Smuzhiyun 
703*4882a593Smuzhiyun enum MXL_HYDRA_DISEQC_CARRIER_FREQ_E {
704*4882a593Smuzhiyun 	MXL_HYDRA_DISEQC_CARRIER_FREQ_22KHZ = 0, /* DiSEqC signal frequency of 22 KHz */
705*4882a593Smuzhiyun 	MXL_HYDRA_DISEQC_CARRIER_FREQ_33KHZ,     /* DiSEqC signal frequency of 33 KHz */
706*4882a593Smuzhiyun 	MXL_HYDRA_DISEQC_CARRIER_FREQ_44KHZ      /* DiSEqC signal frequency of 44 KHz */
707*4882a593Smuzhiyun };
708*4882a593Smuzhiyun 
709*4882a593Smuzhiyun enum MXL_HYDRA_DISEQC_ID_E {
710*4882a593Smuzhiyun 	MXL_HYDRA_DISEQC_ID_0 = 0,
711*4882a593Smuzhiyun 	MXL_HYDRA_DISEQC_ID_1,
712*4882a593Smuzhiyun 	MXL_HYDRA_DISEQC_ID_2,
713*4882a593Smuzhiyun 	MXL_HYDRA_DISEQC_ID_3
714*4882a593Smuzhiyun };
715*4882a593Smuzhiyun 
716*4882a593Smuzhiyun enum MXL_HYDRA_FSK_OP_MODE_E {
717*4882a593Smuzhiyun 	MXL_HYDRA_FSK_CFG_TYPE_39KPBS = 0, /* 39.0kbps */
718*4882a593Smuzhiyun 	MXL_HYDRA_FSK_CFG_TYPE_39_017KPBS, /* 39.017kbps */
719*4882a593Smuzhiyun 	MXL_HYDRA_FSK_CFG_TYPE_115_2KPBS   /* 115.2kbps */
720*4882a593Smuzhiyun };
721*4882a593Smuzhiyun 
722*4882a593Smuzhiyun struct MXL58X_DSQ_OP_MODE_T {
723*4882a593Smuzhiyun 	u32 diseqc_id; /* DSQ 0, 1, 2 or 3 */
724*4882a593Smuzhiyun 	u32 op_mode; /* Envelope mode (0) or internal tone mode (1) */
725*4882a593Smuzhiyun 	u32 version; /* 0: 1.0, 1: 1.1, 2: Disable */
726*4882a593Smuzhiyun 	u32 center_freq; /* 0: 22KHz, 1: 33KHz and 2: 44 KHz */
727*4882a593Smuzhiyun };
728*4882a593Smuzhiyun 
729*4882a593Smuzhiyun struct MXL_HYDRA_DISEQC_CFG_CONT_TONE_T {
730*4882a593Smuzhiyun 	u32 diseqc_id;
731*4882a593Smuzhiyun 	u32 cont_tone_flag; /* 1: Enable , 0: Disable */
732*4882a593Smuzhiyun };
733