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