1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Defines for the Maxlinear MX58x family of tuners/demods 4 * 5 * Copyright (C) 2014 Digital Devices GmbH 6 * 7 * based on code: 8 * Copyright (c) 2011-2013 MaxLinear, Inc. All rights reserved 9 * which was released under GPL V2 10 */ 11 12 enum MXL_BOOL_E { 13 MXL_DISABLE = 0, 14 MXL_ENABLE = 1, 15 16 MXL_FALSE = 0, 17 MXL_TRUE = 1, 18 19 MXL_INVALID = 0, 20 MXL_VALID = 1, 21 22 MXL_NO = 0, 23 MXL_YES = 1, 24 25 MXL_OFF = 0, 26 MXL_ON = 1 27 }; 28 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 */ 33 34 MXL_HYDRA_DEV_SET_POWER_MODE_CMD = 1, 35 MXL_HYDRA_DEV_SET_OVERWRITE_DEF_CMD = 2, 36 37 /* Host-used CMD, not used by firmware */ 38 MXL_HYDRA_DEV_FIRMWARE_DOWNLOAD_CMD = 3, 39 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, 43 44 /* --Tuner command IDs-- */ 45 MXL_HYDRA_TUNER_TUNE_CMD = 6, 46 MXL_HYDRA_TUNER_GET_STATUS_CMD = 7, 47 48 /* --Demod command IDs-- */ 49 MXL_HYDRA_DEMOD_SET_PARAM_CMD = 8, 50 MXL_HYDRA_DEMOD_GET_STATUS_CMD = 9, 51 52 MXL_HYDRA_DEMOD_RESET_FEC_COUNTER_CMD = 10, 53 54 MXL_HYDRA_DEMOD_SET_PKT_NUM_CMD = 11, 55 56 MXL_HYDRA_DEMOD_SET_IQ_SOURCE_CMD = 12, 57 MXL_HYDRA_DEMOD_GET_IQ_DATA_CMD = 13, 58 59 MXL_HYDRA_DEMOD_GET_M68HC05_VER_CMD = 14, 60 61 MXL_HYDRA_DEMOD_SET_ERROR_COUNTER_MODE_CMD = 15, 62 63 /* --- ABORT channel tune */ 64 MXL_HYDRA_ABORT_TUNE_CMD = 16, /* Abort current tune command. */ 65 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, 70 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, 75 76 /* --- FFT Debug Command IDs-- */ 77 MXL_HYDRA_REQ_FFT_SPECTRUM_CMD = 23, 78 79 /* -- Demod scramblle code */ 80 MXL_HYDRA_DEMOD_SCRAMBLE_CODE_CMD = 24, 81 82 /* ---For host to know how many commands in total */ 83 MXL_HYDRA_LAST_HOST_CMD = 25, 84 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, 98 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, 104 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 110 }; 111 112 #define MXL_ENABLE_BIG_ENDIAN (0) 113 114 #define MXL_HYDRA_OEM_MAX_BLOCK_WRITE_LENGTH 248 115 116 #define MXL_HYDRA_OEM_MAX_CMD_BUFF_LEN (248) 117 118 #define MXL_HYDRA_CAP_MIN 10 119 #define MXL_HYDRA_CAP_MAX 33 120 121 #define MXL_HYDRA_PLID_REG_READ 0xFB /* Read register PLID */ 122 #define MXL_HYDRA_PLID_REG_WRITE 0xFC /* Write register PLID */ 123 124 #define MXL_HYDRA_PLID_CMD_READ 0xFD /* Command Read PLID */ 125 #define MXL_HYDRA_PLID_CMD_WRITE 0xFE /* Command Write PLID */ 126 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) 130 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 138 139 /* macro for register write data buffer size 140 * (PLID + LEN (0xFF) + RegAddr + RegData) 141 */ 142 #define MXL_HYDRA_REG_WRITE_LEN (MXL_HYDRA_I2C_HDR_SIZE + (2 * MXL_HYDRA_REG_SIZE_IN_BYTES)) 143 144 /* macro to extract a single byte from 4-byte(32-bit) data */ 145 #define GET_BYTE(x, n) (((x) >> (8*(n))) & 0xFF) 146 147 #define MAX_CMD_DATA 512 148 149 #define MXL_GET_REG_MASK_32(lsb_loc, num_of_bits) ((0xFFFFFFFF >> (32 - (num_of_bits))) << (lsb_loc)) 150 151 #define FW_DL_SIGN (0xDEADBEEF) 152 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) 157 158 struct MBIN_FILE_HEADER_T { 159 u8 id; 160 u8 fmt_version; 161 u8 header_len; 162 u8 num_segments; 163 u8 entry_address[4]; 164 u8 image_size24[3]; 165 u8 image_checksum; 166 u8 reserved[4]; 167 }; 168 169 struct MBIN_FILE_T { 170 struct MBIN_FILE_HEADER_T header; 171 u8 data[]; 172 }; 173 174 struct MBIN_SEGMENT_HEADER_T { 175 u8 id; 176 u8 len24[3]; 177 u8 address[4]; 178 }; 179 180 struct MBIN_SEGMENT_T { 181 struct MBIN_SEGMENT_HEADER_T header; 182 u8 data[]; 183 }; 184 185 enum MXL_CMD_TYPE_E { MXL_CMD_WRITE = 0, MXL_CMD_READ }; 186 187 #define BUILD_HYDRA_CMD(cmd_id, req_type, size, data_ptr, cmd_buff) \ 188 do { \ 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); \ 197 } while (0) 198 199 struct MXL_REG_FIELD_T { 200 u32 reg_addr; 201 u8 lsb_pos; 202 u8 num_of_bits; 203 }; 204 205 struct MXL_DEV_CMD_DATA_T { 206 u32 data_size; 207 u8 data[MAX_CMD_DATA]; 208 }; 209 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, 226 }; 227 228 struct MXL_HYDRA_SKU_COMMAND_T { 229 enum MXL_HYDRA_SKU_TYPE_E sku_type; 230 }; 231 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, 241 MXL_HYDRA_DEMOD_MAX 242 }; 243 244 #define MXL_DEMOD_SCRAMBLE_SEQ_LEN 12 245 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 250 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 255 256 #define MXL_HYDRA_SPECTRUM_MIN_FREQ_KHZ 300000 257 #define MXL_HYDRA_SPECTRUM_MAX_FREQ_KHZ 2350000 258 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, 266 DMD_SNR_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, 273 DMD_DISPLAY_IQ_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, 281 DMD_TUNER_ID_ADDR, 282 DMD_DVBS2_PILOT_ON_OFF_ADDR, 283 DMD_FREQ_SEARCH_RANGE_IN_KHZ_ADDR, 284 285 MXL_DEMOD_CHAN_PARAMS_BUFF_SIZE, 286 }; 287 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, 293 MXL_HYDRA_TUNER_MAX 294 }; 295 296 enum MXL_HYDRA_BCAST_STD_E { 297 MXL_HYDRA_DSS = 0, 298 MXL_HYDRA_DVBS, 299 MXL_HYDRA_DVBS2, 300 }; 301 302 enum MXL_HYDRA_FEC_E { 303 MXL_HYDRA_FEC_AUTO = 0, 304 MXL_HYDRA_FEC_1_2, 305 MXL_HYDRA_FEC_3_5, 306 MXL_HYDRA_FEC_2_3, 307 MXL_HYDRA_FEC_3_4, 308 MXL_HYDRA_FEC_4_5, 309 MXL_HYDRA_FEC_5_6, 310 MXL_HYDRA_FEC_6_7, 311 MXL_HYDRA_FEC_7_8, 312 MXL_HYDRA_FEC_8_9, 313 MXL_HYDRA_FEC_9_10, 314 }; 315 316 enum MXL_HYDRA_MODULATION_E { 317 MXL_HYDRA_MOD_AUTO = 0, 318 MXL_HYDRA_MOD_QPSK, 319 MXL_HYDRA_MOD_8PSK 320 }; 321 322 enum MXL_HYDRA_SPECTRUM_E { 323 MXL_HYDRA_SPECTRUM_AUTO = 0, 324 MXL_HYDRA_SPECTRUM_INVERTED, 325 MXL_HYDRA_SPECTRUM_NON_INVERTED, 326 }; 327 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 333 }; 334 335 enum MXL_HYDRA_PILOTS_E { 336 MXL_HYDRA_PILOTS_OFF = 0, 337 MXL_HYDRA_PILOTS_ON, 338 MXL_HYDRA_PILOTS_AUTO 339 }; 340 341 enum MXL_HYDRA_CONSTELLATION_SRC_E { 342 MXL_HYDRA_FORMATTER = 0, 343 MXL_HYDRA_LEGACY_FEC, 344 MXL_HYDRA_FREQ_RECOVERY, 345 MXL_HYDRA_NBC, 346 MXL_HYDRA_CTL, 347 MXL_HYDRA_EQ, 348 }; 349 350 struct MXL_HYDRA_DEMOD_LOCK_T { 351 int agc_lock; /* AGC lock info */ 352 int fec_lock; /* Demod FEC block lock info */ 353 }; 354 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 */ 361 }; 362 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 */ 367 }; 368 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 */ 373 }; 374 375 struct MXL_HYDRA_DEMOD_STATUS_T { 376 enum MXL_HYDRA_BCAST_STD_E standard_mask; /* Standard DVB-S, DVB-S2 or DSS */ 377 378 union { 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 */ 382 } u; 383 }; 384 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 */ 388 }; 389 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 */ 393 }; 394 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 */ 400 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 */ 405 }; 406 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 */ 412 }; 413 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, 421 }; 422 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; 428 u32 total_steps; 429 enum MXL_HYDRA_SPECTRUM_RESOLUTION_E spectrum_division; 430 }; 431 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 */ 435 }; 436 437 struct MXL58X_CFG_FREQ_OFF_SEARCH_RANGE_T { 438 u32 demod_index; 439 enum MXL_HYDRA_SEARCH_FREQ_OFFSET_TYPE_E search_type; 440 }; 441 442 /* there are two slices 443 * slice0 - TS0, TS1, TS2 & TS3 444 * slice1 - TS4, TS5, TS6 & TS7 445 */ 446 #define MXL_HYDRA_TS_SLICE_MAX 2 447 448 #define MAX_FIXED_PID_NUM 32 449 450 #define MXL_HYDRA_NCO_CLK 418 /* 418 MHz */ 451 452 #define MXL_HYDRA_MAX_TS_CLOCK 139 /* 139 MHz */ 453 454 #define MXL_HYDRA_TS_FIXED_PID_FILT_SIZE 32 455 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 */ 459 460 enum MXL_HYDRA_PID_BANK_TYPE_E { 461 MXL_HYDRA_SOFTWARE_PID_BANK = 0, 462 MXL_HYDRA_HARDWARE_PID_BANK, 463 }; 464 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, 468 }; 469 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 */ 474 }; 475 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) */ 479 }; 480 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 */ 485 }; 486 487 enum MXL_HYDRA_TS_PID_TYPE_E { 488 MXL_HYDRA_TS_PID_FIXED = 0, 489 MXL_HYDRA_TS_PID_REGULAR, 490 }; 491 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 */ 500 }; 501 502 struct MXL_HYDRA_TS_MUX_PREFIX_HEADER_T { 503 enum MXL_BOOL_E enable; 504 u8 num_byte; 505 u8 header[12]; 506 }; 507 508 enum MXL_HYDRA_PID_FILTER_BANK_E { 509 MXL_HYDRA_PID_BANK_A = 0, 510 MXL_HYDRA_PID_BANK_B, 511 }; 512 513 enum MXL_HYDRA_MPEG_DATA_FMT_E { 514 MXL_HYDRA_MPEG_SERIAL_MSB_1ST = 0, 515 MXL_HYDRA_MPEG_SERIAL_LSB_1ST, 516 517 MXL_HYDRA_MPEG_SYNC_WIDTH_BIT = 0, 518 MXL_HYDRA_MPEG_SYNC_WIDTH_BYTE 519 }; 520 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 */ 526 }; 527 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 */ 531 }; 532 533 enum MXL_HYDRA_MPEG_CLK_FMT_E { 534 MXL_HYDRA_MPEG_ACTIVE_LOW = 0, 535 MXL_HYDRA_MPEG_ACTIVE_HIGH, 536 537 MXL_HYDRA_MPEG_CLK_NEGATIVE = 0, 538 MXL_HYDRA_MPEG_CLK_POSITIVE, 539 540 MXL_HYDRA_MPEG_CLK_IN_PHASE = 0, 541 MXL_HYDRA_MPEG_CLK_INVERTED, 542 }; 543 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 549 }; 550 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 555 }; 556 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 */ 569 }; 570 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 577 }; 578 579 enum MXL_HYDRA_TS_OUT_ID_E { 580 MXL_HYDRA_TS_OUT_0 = 0, 581 MXL_HYDRA_TS_OUT_1, 582 MXL_HYDRA_TS_OUT_2, 583 MXL_HYDRA_TS_OUT_3, 584 MXL_HYDRA_TS_OUT_4, 585 MXL_HYDRA_TS_OUT_5, 586 MXL_HYDRA_TS_OUT_6, 587 MXL_HYDRA_TS_OUT_7, 588 MXL_HYDRA_TS_OUT_MAX 589 }; 590 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 600 }; 601 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, 616 MXL_HYDRA_DEVICE_MAX 617 }; 618 619 /* Demod IQ data */ 620 struct MXL_HYDRA_DEMOD_IQ_SRC_T { 621 u32 demod_id; 622 u32 source_of_iq; /* == 0, it means I/Q comes from Formatter 623 * == 1, Legacy FEC 624 * == 2, Frequency Recovery 625 * == 3, NBC 626 * == 4, CTL 627 * == 5, EQ 628 * == 6, FPGA 629 */ 630 }; 631 632 struct MXL_HYDRA_DEMOD_ABORT_TUNE_T { 633 u32 demod_id; 634 }; 635 636 struct MXL_HYDRA_TUNER_CMD { 637 u8 tuner_id; 638 u8 enable; 639 }; 640 641 /* Demod Para for Channel Tune */ 642 struct MXL_HYDRA_DEMOD_PARAM_T { 643 u32 tuner_index; 644 u32 demod_index; 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. */ 654 }; 655 656 struct MXL_HYDRA_DEMOD_SCRAMBLE_CODE_T { 657 u32 demod_index; 658 u8 scramble_sequence[12]; /* scramble sequence */ 659 u32 scramble_code; /* scramble gold code */ 660 }; 661 662 struct MXL_INTR_CFG_T { 663 u32 intr_type; 664 u32 intr_duration_in_nano_secs; 665 u32 intr_mask; 666 }; 667 668 struct MXL_HYDRA_POWER_MODE_CMD { 669 u8 power_mode; /* enumeration values are defined in MXL_HYDRA_PWR_MODE_E (device API.h) */ 670 }; 671 672 struct MXL_HYDRA_RF_WAKEUP_PARAM_T { 673 u32 time_interval_in_seconds; /* in seconds */ 674 u32 tuner_index; 675 s32 rssi_threshold; 676 }; 677 678 struct MXL_HYDRA_RF_WAKEUP_CFG_T { 679 u32 tuner_count; 680 struct MXL_HYDRA_RF_WAKEUP_PARAM_T params; 681 }; 682 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 */ 686 }; 687 688 enum MXL_HYDRA_DISEQC_OPMODE_E { 689 MXL_HYDRA_DISEQC_ENVELOPE_MODE = 0, 690 MXL_HYDRA_DISEQC_TONE_MODE, 691 }; 692 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 */ 697 }; 698 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 */ 703 }; 704 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 710 }; 711 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 */ 716 }; 717 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 */ 723 }; 724 725 struct MXL_HYDRA_DISEQC_CFG_CONT_TONE_T { 726 u32 diseqc_id; 727 u32 cont_tone_flag; /* 1: Enable , 0: Disable */ 728 }; 729