18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Defines for the Maxlinear MX58x family of tuners/demods
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (C) 2014 Digital Devices GmbH
68c2ecf20Sopenharmony_ci *
78c2ecf20Sopenharmony_ci * based on code:
88c2ecf20Sopenharmony_ci * Copyright (c) 2011-2013 MaxLinear, Inc. All rights reserved
98c2ecf20Sopenharmony_ci * which was released under GPL V2
108c2ecf20Sopenharmony_ci *
118c2ecf20Sopenharmony_ci * This program is free software; you can redistribute it and/or
128c2ecf20Sopenharmony_ci * modify it under the terms of the GNU General Public License
138c2ecf20Sopenharmony_ci * version 2, as published by the Free Software Foundation.
148c2ecf20Sopenharmony_ci */
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_cienum MXL_BOOL_E {
178c2ecf20Sopenharmony_ci	MXL_DISABLE = 0,
188c2ecf20Sopenharmony_ci	MXL_ENABLE  = 1,
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ci	MXL_FALSE = 0,
218c2ecf20Sopenharmony_ci	MXL_TRUE  = 1,
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_ci	MXL_INVALID = 0,
248c2ecf20Sopenharmony_ci	MXL_VALID   = 1,
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_ci	MXL_NO      = 0,
278c2ecf20Sopenharmony_ci	MXL_YES     = 1,
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ci	MXL_OFF     = 0,
308c2ecf20Sopenharmony_ci	MXL_ON      = 1
318c2ecf20Sopenharmony_ci};
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_ci/* Firmware-Host Command IDs */
348c2ecf20Sopenharmony_cienum MXL_HYDRA_HOST_CMD_ID_E {
358c2ecf20Sopenharmony_ci	/* --Device command IDs-- */
368c2ecf20Sopenharmony_ci	MXL_HYDRA_DEV_NO_OP_CMD = 0, /* No OP */
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_ci	MXL_HYDRA_DEV_SET_POWER_MODE_CMD = 1,
398c2ecf20Sopenharmony_ci	MXL_HYDRA_DEV_SET_OVERWRITE_DEF_CMD = 2,
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ci	/* Host-used CMD, not used by firmware */
428c2ecf20Sopenharmony_ci	MXL_HYDRA_DEV_FIRMWARE_DOWNLOAD_CMD = 3,
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ci	/* Additional CONTROL types from DTV */
458c2ecf20Sopenharmony_ci	MXL_HYDRA_DEV_SET_BROADCAST_PID_STB_ID_CMD = 4,
468c2ecf20Sopenharmony_ci	MXL_HYDRA_DEV_GET_PMM_SLEEP_CMD = 5,
478c2ecf20Sopenharmony_ci
488c2ecf20Sopenharmony_ci	/* --Tuner command IDs-- */
498c2ecf20Sopenharmony_ci	MXL_HYDRA_TUNER_TUNE_CMD = 6,
508c2ecf20Sopenharmony_ci	MXL_HYDRA_TUNER_GET_STATUS_CMD = 7,
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ci	/* --Demod command IDs-- */
538c2ecf20Sopenharmony_ci	MXL_HYDRA_DEMOD_SET_PARAM_CMD = 8,
548c2ecf20Sopenharmony_ci	MXL_HYDRA_DEMOD_GET_STATUS_CMD = 9,
558c2ecf20Sopenharmony_ci
568c2ecf20Sopenharmony_ci	MXL_HYDRA_DEMOD_RESET_FEC_COUNTER_CMD = 10,
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_ci	MXL_HYDRA_DEMOD_SET_PKT_NUM_CMD = 11,
598c2ecf20Sopenharmony_ci
608c2ecf20Sopenharmony_ci	MXL_HYDRA_DEMOD_SET_IQ_SOURCE_CMD = 12,
618c2ecf20Sopenharmony_ci	MXL_HYDRA_DEMOD_GET_IQ_DATA_CMD = 13,
628c2ecf20Sopenharmony_ci
638c2ecf20Sopenharmony_ci	MXL_HYDRA_DEMOD_GET_M68HC05_VER_CMD = 14,
648c2ecf20Sopenharmony_ci
658c2ecf20Sopenharmony_ci	MXL_HYDRA_DEMOD_SET_ERROR_COUNTER_MODE_CMD = 15,
668c2ecf20Sopenharmony_ci
678c2ecf20Sopenharmony_ci	/* --- ABORT channel tune */
688c2ecf20Sopenharmony_ci	MXL_HYDRA_ABORT_TUNE_CMD = 16, /* Abort current tune command. */
698c2ecf20Sopenharmony_ci
708c2ecf20Sopenharmony_ci	/* --SWM/FSK command IDs-- */
718c2ecf20Sopenharmony_ci	MXL_HYDRA_FSK_RESET_CMD = 17,
728c2ecf20Sopenharmony_ci	MXL_HYDRA_FSK_MSG_CMD = 18,
738c2ecf20Sopenharmony_ci	MXL_HYDRA_FSK_SET_OP_MODE_CMD = 19,
748c2ecf20Sopenharmony_ci
758c2ecf20Sopenharmony_ci	/* --DiSeqC command IDs-- */
768c2ecf20Sopenharmony_ci	MXL_HYDRA_DISEQC_MSG_CMD = 20,
778c2ecf20Sopenharmony_ci	MXL_HYDRA_DISEQC_COPY_MSG_TO_MAILBOX = 21,
788c2ecf20Sopenharmony_ci	MXL_HYDRA_DISEQC_CFG_MSG_CMD = 22,
798c2ecf20Sopenharmony_ci
808c2ecf20Sopenharmony_ci	/* --- FFT Debug Command IDs-- */
818c2ecf20Sopenharmony_ci	MXL_HYDRA_REQ_FFT_SPECTRUM_CMD = 23,
828c2ecf20Sopenharmony_ci
838c2ecf20Sopenharmony_ci	/* -- Demod scramblle code */
848c2ecf20Sopenharmony_ci	MXL_HYDRA_DEMOD_SCRAMBLE_CODE_CMD = 24,
858c2ecf20Sopenharmony_ci
868c2ecf20Sopenharmony_ci	/* ---For host to know how many commands in total */
878c2ecf20Sopenharmony_ci	MXL_HYDRA_LAST_HOST_CMD = 25,
888c2ecf20Sopenharmony_ci
898c2ecf20Sopenharmony_ci	MXL_HYDRA_DEMOD_INTR_TYPE_CMD = 47,
908c2ecf20Sopenharmony_ci	MXL_HYDRA_DEV_INTR_CLEAR_CMD = 48,
918c2ecf20Sopenharmony_ci	MXL_HYDRA_TUNER_SPECTRUM_REQ_CMD = 53,
928c2ecf20Sopenharmony_ci	MXL_HYDRA_TUNER_ACTIVATE_CMD = 55,
938c2ecf20Sopenharmony_ci	MXL_HYDRA_DEV_CFG_POWER_MODE_CMD = 56,
948c2ecf20Sopenharmony_ci	MXL_HYDRA_DEV_XTAL_CAP_CMD = 57,
958c2ecf20Sopenharmony_ci	MXL_HYDRA_DEV_CFG_SKU_CMD = 58,
968c2ecf20Sopenharmony_ci	MXL_HYDRA_TUNER_SPECTRUM_MIN_GAIN_CMD = 59,
978c2ecf20Sopenharmony_ci	MXL_HYDRA_DISEQC_CONT_TONE_CFG = 60,
988c2ecf20Sopenharmony_ci	MXL_HYDRA_DEV_RF_WAKE_UP_CMD = 61,
998c2ecf20Sopenharmony_ci	MXL_HYDRA_DEMOD_CFG_EQ_CTRL_PARAM_CMD = 62,
1008c2ecf20Sopenharmony_ci	MXL_HYDRA_DEMOD_FREQ_OFFSET_SEARCH_RANGE_CMD = 63,
1018c2ecf20Sopenharmony_ci	MXL_HYDRA_DEV_REQ_PWR_FROM_ADCRSSI_CMD = 64,
1028c2ecf20Sopenharmony_ci
1038c2ecf20Sopenharmony_ci	MXL_XCPU_PID_FLT_CFG_CMD = 65,
1048c2ecf20Sopenharmony_ci	MXL_XCPU_SHMEM_TEST_CMD = 66,
1058c2ecf20Sopenharmony_ci	MXL_XCPU_ABORT_TUNE_CMD = 67,
1068c2ecf20Sopenharmony_ci	MXL_XCPU_CHAN_TUNE_CMD = 68,
1078c2ecf20Sopenharmony_ci	MXL_XCPU_FLT_BOND_HDRS_CMD = 69,
1088c2ecf20Sopenharmony_ci
1098c2ecf20Sopenharmony_ci	MXL_HYDRA_DEV_BROADCAST_WAKE_UP_CMD = 70,
1108c2ecf20Sopenharmony_ci	MXL_HYDRA_FSK_CFG_FSK_FREQ_CMD = 71,
1118c2ecf20Sopenharmony_ci	MXL_HYDRA_FSK_POWER_DOWN_CMD = 72,
1128c2ecf20Sopenharmony_ci	MXL_XCPU_CLEAR_CB_STATS_CMD = 73,
1138c2ecf20Sopenharmony_ci	MXL_XCPU_CHAN_BOND_RESTART_CMD = 74
1148c2ecf20Sopenharmony_ci};
1158c2ecf20Sopenharmony_ci
1168c2ecf20Sopenharmony_ci#define MXL_ENABLE_BIG_ENDIAN        (0)
1178c2ecf20Sopenharmony_ci
1188c2ecf20Sopenharmony_ci#define MXL_HYDRA_OEM_MAX_BLOCK_WRITE_LENGTH   248
1198c2ecf20Sopenharmony_ci
1208c2ecf20Sopenharmony_ci#define MXL_HYDRA_OEM_MAX_CMD_BUFF_LEN        (248)
1218c2ecf20Sopenharmony_ci
1228c2ecf20Sopenharmony_ci#define MXL_HYDRA_CAP_MIN     10
1238c2ecf20Sopenharmony_ci#define MXL_HYDRA_CAP_MAX     33
1248c2ecf20Sopenharmony_ci
1258c2ecf20Sopenharmony_ci#define MXL_HYDRA_PLID_REG_READ       0xFB   /* Read register PLID */
1268c2ecf20Sopenharmony_ci#define MXL_HYDRA_PLID_REG_WRITE      0xFC   /* Write register PLID */
1278c2ecf20Sopenharmony_ci
1288c2ecf20Sopenharmony_ci#define MXL_HYDRA_PLID_CMD_READ       0xFD   /* Command Read PLID */
1298c2ecf20Sopenharmony_ci#define MXL_HYDRA_PLID_CMD_WRITE      0xFE   /* Command Write PLID */
1308c2ecf20Sopenharmony_ci
1318c2ecf20Sopenharmony_ci#define MXL_HYDRA_REG_SIZE_IN_BYTES   4      /* Hydra register size in bytes */
1328c2ecf20Sopenharmony_ci#define MXL_HYDRA_I2C_HDR_SIZE        (2 * sizeof(u8)) /* PLID + LEN(0xFF) */
1338c2ecf20Sopenharmony_ci#define MXL_HYDRA_CMD_HEADER_SIZE     (MXL_HYDRA_REG_SIZE_IN_BYTES + MXL_HYDRA_I2C_HDR_SIZE)
1348c2ecf20Sopenharmony_ci
1358c2ecf20Sopenharmony_ci#define MXL_HYDRA_SKU_ID_581 0
1368c2ecf20Sopenharmony_ci#define MXL_HYDRA_SKU_ID_584 1
1378c2ecf20Sopenharmony_ci#define MXL_HYDRA_SKU_ID_585 2
1388c2ecf20Sopenharmony_ci#define MXL_HYDRA_SKU_ID_544 3
1398c2ecf20Sopenharmony_ci#define MXL_HYDRA_SKU_ID_561 4
1408c2ecf20Sopenharmony_ci#define MXL_HYDRA_SKU_ID_582 5
1418c2ecf20Sopenharmony_ci#define MXL_HYDRA_SKU_ID_568 6
1428c2ecf20Sopenharmony_ci
1438c2ecf20Sopenharmony_ci/* macro for register write data buffer size
1448c2ecf20Sopenharmony_ci * (PLID + LEN (0xFF) + RegAddr + RegData)
1458c2ecf20Sopenharmony_ci */
1468c2ecf20Sopenharmony_ci#define MXL_HYDRA_REG_WRITE_LEN       (MXL_HYDRA_I2C_HDR_SIZE + (2 * MXL_HYDRA_REG_SIZE_IN_BYTES))
1478c2ecf20Sopenharmony_ci
1488c2ecf20Sopenharmony_ci/* macro to extract a single byte from 4-byte(32-bit) data */
1498c2ecf20Sopenharmony_ci#define GET_BYTE(x, n)  (((x) >> (8*(n))) & 0xFF)
1508c2ecf20Sopenharmony_ci
1518c2ecf20Sopenharmony_ci#define MAX_CMD_DATA 512
1528c2ecf20Sopenharmony_ci
1538c2ecf20Sopenharmony_ci#define MXL_GET_REG_MASK_32(lsb_loc, num_of_bits) ((0xFFFFFFFF >> (32 - (num_of_bits))) << (lsb_loc))
1548c2ecf20Sopenharmony_ci
1558c2ecf20Sopenharmony_ci#define FW_DL_SIGN (0xDEADBEEF)
1568c2ecf20Sopenharmony_ci
1578c2ecf20Sopenharmony_ci#define MBIN_FORMAT_VERSION               '1'
1588c2ecf20Sopenharmony_ci#define MBIN_FILE_HEADER_ID               'M'
1598c2ecf20Sopenharmony_ci#define MBIN_SEGMENT_HEADER_ID            'S'
1608c2ecf20Sopenharmony_ci#define MBIN_MAX_FILE_LENGTH              (1<<23)
1618c2ecf20Sopenharmony_ci
1628c2ecf20Sopenharmony_cistruct MBIN_FILE_HEADER_T {
1638c2ecf20Sopenharmony_ci	u8 id;
1648c2ecf20Sopenharmony_ci	u8 fmt_version;
1658c2ecf20Sopenharmony_ci	u8 header_len;
1668c2ecf20Sopenharmony_ci	u8 num_segments;
1678c2ecf20Sopenharmony_ci	u8 entry_address[4];
1688c2ecf20Sopenharmony_ci	u8 image_size24[3];
1698c2ecf20Sopenharmony_ci	u8 image_checksum;
1708c2ecf20Sopenharmony_ci	u8 reserved[4];
1718c2ecf20Sopenharmony_ci};
1728c2ecf20Sopenharmony_ci
1738c2ecf20Sopenharmony_cistruct MBIN_FILE_T {
1748c2ecf20Sopenharmony_ci	struct MBIN_FILE_HEADER_T header;
1758c2ecf20Sopenharmony_ci	u8 data[1];
1768c2ecf20Sopenharmony_ci};
1778c2ecf20Sopenharmony_ci
1788c2ecf20Sopenharmony_cistruct MBIN_SEGMENT_HEADER_T {
1798c2ecf20Sopenharmony_ci	u8 id;
1808c2ecf20Sopenharmony_ci	u8 len24[3];
1818c2ecf20Sopenharmony_ci	u8 address[4];
1828c2ecf20Sopenharmony_ci};
1838c2ecf20Sopenharmony_ci
1848c2ecf20Sopenharmony_cistruct MBIN_SEGMENT_T {
1858c2ecf20Sopenharmony_ci	struct MBIN_SEGMENT_HEADER_T header;
1868c2ecf20Sopenharmony_ci	u8 data[1];
1878c2ecf20Sopenharmony_ci};
1888c2ecf20Sopenharmony_ci
1898c2ecf20Sopenharmony_cienum MXL_CMD_TYPE_E { MXL_CMD_WRITE = 0, MXL_CMD_READ };
1908c2ecf20Sopenharmony_ci
1918c2ecf20Sopenharmony_ci#define BUILD_HYDRA_CMD(cmd_id, req_type, size, data_ptr, cmd_buff)		\
1928c2ecf20Sopenharmony_ci	do {								\
1938c2ecf20Sopenharmony_ci		cmd_buff[0] = ((req_type == MXL_CMD_WRITE) ? MXL_HYDRA_PLID_CMD_WRITE : MXL_HYDRA_PLID_CMD_READ); \
1948c2ecf20Sopenharmony_ci		cmd_buff[1] = (size > 251) ? 0xff : (u8) (size + 4);	\
1958c2ecf20Sopenharmony_ci		cmd_buff[2] = size;					\
1968c2ecf20Sopenharmony_ci		cmd_buff[3] = cmd_id;					\
1978c2ecf20Sopenharmony_ci		cmd_buff[4] = 0x00;					\
1988c2ecf20Sopenharmony_ci		cmd_buff[5] = 0x00;					\
1998c2ecf20Sopenharmony_ci		convert_endian(MXL_ENABLE_BIG_ENDIAN, size, (u8 *)data_ptr); \
2008c2ecf20Sopenharmony_ci		memcpy((void *)&cmd_buff[6], data_ptr, size);		\
2018c2ecf20Sopenharmony_ci	} while (0)
2028c2ecf20Sopenharmony_ci
2038c2ecf20Sopenharmony_cistruct MXL_REG_FIELD_T {
2048c2ecf20Sopenharmony_ci	u32 reg_addr;
2058c2ecf20Sopenharmony_ci	u8 lsb_pos;
2068c2ecf20Sopenharmony_ci	u8 num_of_bits;
2078c2ecf20Sopenharmony_ci};
2088c2ecf20Sopenharmony_ci
2098c2ecf20Sopenharmony_cistruct MXL_DEV_CMD_DATA_T {
2108c2ecf20Sopenharmony_ci	u32 data_size;
2118c2ecf20Sopenharmony_ci	u8 data[MAX_CMD_DATA];
2128c2ecf20Sopenharmony_ci};
2138c2ecf20Sopenharmony_ci
2148c2ecf20Sopenharmony_cienum MXL_HYDRA_SKU_TYPE_E {
2158c2ecf20Sopenharmony_ci	MXL_HYDRA_SKU_TYPE_MIN = 0x00,
2168c2ecf20Sopenharmony_ci	MXL_HYDRA_SKU_TYPE_581 = 0x00,
2178c2ecf20Sopenharmony_ci	MXL_HYDRA_SKU_TYPE_584 = 0x01,
2188c2ecf20Sopenharmony_ci	MXL_HYDRA_SKU_TYPE_585 = 0x02,
2198c2ecf20Sopenharmony_ci	MXL_HYDRA_SKU_TYPE_544 = 0x03,
2208c2ecf20Sopenharmony_ci	MXL_HYDRA_SKU_TYPE_561 = 0x04,
2218c2ecf20Sopenharmony_ci	MXL_HYDRA_SKU_TYPE_5XX = 0x05,
2228c2ecf20Sopenharmony_ci	MXL_HYDRA_SKU_TYPE_5YY = 0x06,
2238c2ecf20Sopenharmony_ci	MXL_HYDRA_SKU_TYPE_511 = 0x07,
2248c2ecf20Sopenharmony_ci	MXL_HYDRA_SKU_TYPE_561_DE = 0x08,
2258c2ecf20Sopenharmony_ci	MXL_HYDRA_SKU_TYPE_582 = 0x09,
2268c2ecf20Sopenharmony_ci	MXL_HYDRA_SKU_TYPE_541 = 0x0A,
2278c2ecf20Sopenharmony_ci	MXL_HYDRA_SKU_TYPE_568 = 0x0B,
2288c2ecf20Sopenharmony_ci	MXL_HYDRA_SKU_TYPE_542 = 0x0C,
2298c2ecf20Sopenharmony_ci	MXL_HYDRA_SKU_TYPE_MAX = 0x0D,
2308c2ecf20Sopenharmony_ci};
2318c2ecf20Sopenharmony_ci
2328c2ecf20Sopenharmony_cistruct MXL_HYDRA_SKU_COMMAND_T {
2338c2ecf20Sopenharmony_ci	enum MXL_HYDRA_SKU_TYPE_E sku_type;
2348c2ecf20Sopenharmony_ci};
2358c2ecf20Sopenharmony_ci
2368c2ecf20Sopenharmony_cienum MXL_HYDRA_DEMOD_ID_E {
2378c2ecf20Sopenharmony_ci	MXL_HYDRA_DEMOD_ID_0 = 0,
2388c2ecf20Sopenharmony_ci	MXL_HYDRA_DEMOD_ID_1,
2398c2ecf20Sopenharmony_ci	MXL_HYDRA_DEMOD_ID_2,
2408c2ecf20Sopenharmony_ci	MXL_HYDRA_DEMOD_ID_3,
2418c2ecf20Sopenharmony_ci	MXL_HYDRA_DEMOD_ID_4,
2428c2ecf20Sopenharmony_ci	MXL_HYDRA_DEMOD_ID_5,
2438c2ecf20Sopenharmony_ci	MXL_HYDRA_DEMOD_ID_6,
2448c2ecf20Sopenharmony_ci	MXL_HYDRA_DEMOD_ID_7,
2458c2ecf20Sopenharmony_ci	MXL_HYDRA_DEMOD_MAX
2468c2ecf20Sopenharmony_ci};
2478c2ecf20Sopenharmony_ci
2488c2ecf20Sopenharmony_ci#define MXL_DEMOD_SCRAMBLE_SEQ_LEN  12
2498c2ecf20Sopenharmony_ci
2508c2ecf20Sopenharmony_ci#define MAX_STEP_SIZE_24_XTAL_102_05_KHZ  195
2518c2ecf20Sopenharmony_ci#define MAX_STEP_SIZE_24_XTAL_204_10_KHZ  215
2528c2ecf20Sopenharmony_ci#define MAX_STEP_SIZE_24_XTAL_306_15_KHZ  203
2538c2ecf20Sopenharmony_ci#define MAX_STEP_SIZE_24_XTAL_408_20_KHZ  177
2548c2ecf20Sopenharmony_ci
2558c2ecf20Sopenharmony_ci#define MAX_STEP_SIZE_27_XTAL_102_05_KHZ  195
2568c2ecf20Sopenharmony_ci#define MAX_STEP_SIZE_27_XTAL_204_10_KHZ  215
2578c2ecf20Sopenharmony_ci#define MAX_STEP_SIZE_27_XTAL_306_15_KHZ  203
2588c2ecf20Sopenharmony_ci#define MAX_STEP_SIZE_27_XTAL_408_20_KHZ  177
2598c2ecf20Sopenharmony_ci
2608c2ecf20Sopenharmony_ci#define MXL_HYDRA_SPECTRUM_MIN_FREQ_KHZ  300000
2618c2ecf20Sopenharmony_ci#define MXL_HYDRA_SPECTRUM_MAX_FREQ_KHZ 2350000
2628c2ecf20Sopenharmony_ci
2638c2ecf20Sopenharmony_cienum MXL_DEMOD_CHAN_PARAMS_OFFSET_E {
2648c2ecf20Sopenharmony_ci	DMD_STANDARD_ADDR = 0,
2658c2ecf20Sopenharmony_ci	DMD_SPECTRUM_INVERSION_ADDR,
2668c2ecf20Sopenharmony_ci	DMD_SPECTRUM_ROLL_OFF_ADDR,
2678c2ecf20Sopenharmony_ci	DMD_SYMBOL_RATE_ADDR,
2688c2ecf20Sopenharmony_ci	DMD_MODULATION_SCHEME_ADDR,
2698c2ecf20Sopenharmony_ci	DMD_FEC_CODE_RATE_ADDR,
2708c2ecf20Sopenharmony_ci	DMD_SNR_ADDR,
2718c2ecf20Sopenharmony_ci	DMD_FREQ_OFFSET_ADDR,
2728c2ecf20Sopenharmony_ci	DMD_CTL_FREQ_OFFSET_ADDR,
2738c2ecf20Sopenharmony_ci	DMD_STR_FREQ_OFFSET_ADDR,
2748c2ecf20Sopenharmony_ci	DMD_FTL_FREQ_OFFSET_ADDR,
2758c2ecf20Sopenharmony_ci	DMD_STR_NBC_SYNC_LOCK_ADDR,
2768c2ecf20Sopenharmony_ci	DMD_CYCLE_SLIP_COUNT_ADDR,
2778c2ecf20Sopenharmony_ci	DMD_DISPLAY_IQ_ADDR,
2788c2ecf20Sopenharmony_ci	DMD_DVBS2_CRC_ERRORS_ADDR,
2798c2ecf20Sopenharmony_ci	DMD_DVBS2_PER_COUNT_ADDR,
2808c2ecf20Sopenharmony_ci	DMD_DVBS2_PER_WINDOW_ADDR,
2818c2ecf20Sopenharmony_ci	DMD_DVBS_CORR_RS_ERRORS_ADDR,
2828c2ecf20Sopenharmony_ci	DMD_DVBS_UNCORR_RS_ERRORS_ADDR,
2838c2ecf20Sopenharmony_ci	DMD_DVBS_BER_COUNT_ADDR,
2848c2ecf20Sopenharmony_ci	DMD_DVBS_BER_WINDOW_ADDR,
2858c2ecf20Sopenharmony_ci	DMD_TUNER_ID_ADDR,
2868c2ecf20Sopenharmony_ci	DMD_DVBS2_PILOT_ON_OFF_ADDR,
2878c2ecf20Sopenharmony_ci	DMD_FREQ_SEARCH_RANGE_IN_KHZ_ADDR,
2888c2ecf20Sopenharmony_ci
2898c2ecf20Sopenharmony_ci	MXL_DEMOD_CHAN_PARAMS_BUFF_SIZE,
2908c2ecf20Sopenharmony_ci};
2918c2ecf20Sopenharmony_ci
2928c2ecf20Sopenharmony_cienum MXL_HYDRA_TUNER_ID_E {
2938c2ecf20Sopenharmony_ci	MXL_HYDRA_TUNER_ID_0 = 0,
2948c2ecf20Sopenharmony_ci	MXL_HYDRA_TUNER_ID_1,
2958c2ecf20Sopenharmony_ci	MXL_HYDRA_TUNER_ID_2,
2968c2ecf20Sopenharmony_ci	MXL_HYDRA_TUNER_ID_3,
2978c2ecf20Sopenharmony_ci	MXL_HYDRA_TUNER_MAX
2988c2ecf20Sopenharmony_ci};
2998c2ecf20Sopenharmony_ci
3008c2ecf20Sopenharmony_cienum MXL_HYDRA_BCAST_STD_E {
3018c2ecf20Sopenharmony_ci	MXL_HYDRA_DSS = 0,
3028c2ecf20Sopenharmony_ci	MXL_HYDRA_DVBS,
3038c2ecf20Sopenharmony_ci	MXL_HYDRA_DVBS2,
3048c2ecf20Sopenharmony_ci};
3058c2ecf20Sopenharmony_ci
3068c2ecf20Sopenharmony_cienum MXL_HYDRA_FEC_E {
3078c2ecf20Sopenharmony_ci	MXL_HYDRA_FEC_AUTO = 0,
3088c2ecf20Sopenharmony_ci	MXL_HYDRA_FEC_1_2,
3098c2ecf20Sopenharmony_ci	MXL_HYDRA_FEC_3_5,
3108c2ecf20Sopenharmony_ci	MXL_HYDRA_FEC_2_3,
3118c2ecf20Sopenharmony_ci	MXL_HYDRA_FEC_3_4,
3128c2ecf20Sopenharmony_ci	MXL_HYDRA_FEC_4_5,
3138c2ecf20Sopenharmony_ci	MXL_HYDRA_FEC_5_6,
3148c2ecf20Sopenharmony_ci	MXL_HYDRA_FEC_6_7,
3158c2ecf20Sopenharmony_ci	MXL_HYDRA_FEC_7_8,
3168c2ecf20Sopenharmony_ci	MXL_HYDRA_FEC_8_9,
3178c2ecf20Sopenharmony_ci	MXL_HYDRA_FEC_9_10,
3188c2ecf20Sopenharmony_ci};
3198c2ecf20Sopenharmony_ci
3208c2ecf20Sopenharmony_cienum MXL_HYDRA_MODULATION_E {
3218c2ecf20Sopenharmony_ci	MXL_HYDRA_MOD_AUTO = 0,
3228c2ecf20Sopenharmony_ci	MXL_HYDRA_MOD_QPSK,
3238c2ecf20Sopenharmony_ci	MXL_HYDRA_MOD_8PSK
3248c2ecf20Sopenharmony_ci};
3258c2ecf20Sopenharmony_ci
3268c2ecf20Sopenharmony_cienum MXL_HYDRA_SPECTRUM_E {
3278c2ecf20Sopenharmony_ci	MXL_HYDRA_SPECTRUM_AUTO = 0,
3288c2ecf20Sopenharmony_ci	MXL_HYDRA_SPECTRUM_INVERTED,
3298c2ecf20Sopenharmony_ci	MXL_HYDRA_SPECTRUM_NON_INVERTED,
3308c2ecf20Sopenharmony_ci};
3318c2ecf20Sopenharmony_ci
3328c2ecf20Sopenharmony_cienum MXL_HYDRA_ROLLOFF_E {
3338c2ecf20Sopenharmony_ci	MXL_HYDRA_ROLLOFF_AUTO  = 0,
3348c2ecf20Sopenharmony_ci	MXL_HYDRA_ROLLOFF_0_20,
3358c2ecf20Sopenharmony_ci	MXL_HYDRA_ROLLOFF_0_25,
3368c2ecf20Sopenharmony_ci	MXL_HYDRA_ROLLOFF_0_35
3378c2ecf20Sopenharmony_ci};
3388c2ecf20Sopenharmony_ci
3398c2ecf20Sopenharmony_cienum MXL_HYDRA_PILOTS_E {
3408c2ecf20Sopenharmony_ci	MXL_HYDRA_PILOTS_OFF  = 0,
3418c2ecf20Sopenharmony_ci	MXL_HYDRA_PILOTS_ON,
3428c2ecf20Sopenharmony_ci	MXL_HYDRA_PILOTS_AUTO
3438c2ecf20Sopenharmony_ci};
3448c2ecf20Sopenharmony_ci
3458c2ecf20Sopenharmony_cienum MXL_HYDRA_CONSTELLATION_SRC_E {
3468c2ecf20Sopenharmony_ci	MXL_HYDRA_FORMATTER = 0,
3478c2ecf20Sopenharmony_ci	MXL_HYDRA_LEGACY_FEC,
3488c2ecf20Sopenharmony_ci	MXL_HYDRA_FREQ_RECOVERY,
3498c2ecf20Sopenharmony_ci	MXL_HYDRA_NBC,
3508c2ecf20Sopenharmony_ci	MXL_HYDRA_CTL,
3518c2ecf20Sopenharmony_ci	MXL_HYDRA_EQ,
3528c2ecf20Sopenharmony_ci};
3538c2ecf20Sopenharmony_ci
3548c2ecf20Sopenharmony_cistruct MXL_HYDRA_DEMOD_LOCK_T {
3558c2ecf20Sopenharmony_ci	int agc_lock; /* AGC lock info */
3568c2ecf20Sopenharmony_ci	int fec_lock; /* Demod FEC block lock info */
3578c2ecf20Sopenharmony_ci};
3588c2ecf20Sopenharmony_ci
3598c2ecf20Sopenharmony_cistruct MXL_HYDRA_DEMOD_STATUS_DVBS_T {
3608c2ecf20Sopenharmony_ci	u32 rs_errors;        /* RS decoder err counter */
3618c2ecf20Sopenharmony_ci	u32 ber_window;       /* Ber Windows */
3628c2ecf20Sopenharmony_ci	u32 ber_count;        /* BER count */
3638c2ecf20Sopenharmony_ci	u32 ber_window_iter1; /* Ber Windows - post viterbi */
3648c2ecf20Sopenharmony_ci	u32 ber_count_iter1;  /* BER count - post viterbi */
3658c2ecf20Sopenharmony_ci};
3668c2ecf20Sopenharmony_ci
3678c2ecf20Sopenharmony_cistruct MXL_HYDRA_DEMOD_STATUS_DSS_T {
3688c2ecf20Sopenharmony_ci	u32 rs_errors;  /* RS decoder err counter */
3698c2ecf20Sopenharmony_ci	u32 ber_window; /* Ber Windows */
3708c2ecf20Sopenharmony_ci	u32 ber_count;  /* BER count */
3718c2ecf20Sopenharmony_ci};
3728c2ecf20Sopenharmony_ci
3738c2ecf20Sopenharmony_cistruct MXL_HYDRA_DEMOD_STATUS_DVBS2_T {
3748c2ecf20Sopenharmony_ci	u32 crc_errors;        /* CRC error counter */
3758c2ecf20Sopenharmony_ci	u32 packet_error_count; /* Number of packet errors */
3768c2ecf20Sopenharmony_ci	u32 total_packets;     /* Total packets */
3778c2ecf20Sopenharmony_ci};
3788c2ecf20Sopenharmony_ci
3798c2ecf20Sopenharmony_cistruct MXL_HYDRA_DEMOD_STATUS_T {
3808c2ecf20Sopenharmony_ci	enum MXL_HYDRA_BCAST_STD_E standard_mask; /* Standard DVB-S, DVB-S2 or DSS */
3818c2ecf20Sopenharmony_ci
3828c2ecf20Sopenharmony_ci	union {
3838c2ecf20Sopenharmony_ci		struct MXL_HYDRA_DEMOD_STATUS_DVBS_T demod_status_dvbs;   /* DVB-S demod status */
3848c2ecf20Sopenharmony_ci		struct MXL_HYDRA_DEMOD_STATUS_DVBS2_T demod_status_dvbs2; /* DVB-S2 demod status */
3858c2ecf20Sopenharmony_ci		struct MXL_HYDRA_DEMOD_STATUS_DSS_T demod_status_dss;     /* DSS demod status */
3868c2ecf20Sopenharmony_ci	} u;
3878c2ecf20Sopenharmony_ci};
3888c2ecf20Sopenharmony_ci
3898c2ecf20Sopenharmony_cistruct MXL_HYDRA_DEMOD_SIG_OFFSET_INFO_T {
3908c2ecf20Sopenharmony_ci	s32 carrier_offset_in_hz; /* CRL offset info */
3918c2ecf20Sopenharmony_ci	s32 symbol_offset_in_symbol; /* SRL offset info */
3928c2ecf20Sopenharmony_ci};
3938c2ecf20Sopenharmony_ci
3948c2ecf20Sopenharmony_cistruct MXL_HYDRA_DEMOD_SCRAMBLE_INFO_T {
3958c2ecf20Sopenharmony_ci	u8 scramble_sequence[MXL_DEMOD_SCRAMBLE_SEQ_LEN]; /* scramble sequence */
3968c2ecf20Sopenharmony_ci	u32 scramble_code; /* scramble gold code */
3978c2ecf20Sopenharmony_ci};
3988c2ecf20Sopenharmony_ci
3998c2ecf20Sopenharmony_cienum MXL_HYDRA_SPECTRUM_STEP_SIZE_E {
4008c2ecf20Sopenharmony_ci	MXL_HYDRA_STEP_SIZE_24_XTAL_102_05KHZ, /* 102.05 KHz for 24 MHz XTAL */
4018c2ecf20Sopenharmony_ci	MXL_HYDRA_STEP_SIZE_24_XTAL_204_10KHZ, /* 204.10 KHz for 24 MHz XTAL */
4028c2ecf20Sopenharmony_ci	MXL_HYDRA_STEP_SIZE_24_XTAL_306_15KHZ, /* 306.15 KHz for 24 MHz XTAL */
4038c2ecf20Sopenharmony_ci	MXL_HYDRA_STEP_SIZE_24_XTAL_408_20KHZ, /* 408.20 KHz for 24 MHz XTAL */
4048c2ecf20Sopenharmony_ci
4058c2ecf20Sopenharmony_ci	MXL_HYDRA_STEP_SIZE_27_XTAL_102_05KHZ, /* 102.05 KHz for 27 MHz XTAL */
4068c2ecf20Sopenharmony_ci	MXL_HYDRA_STEP_SIZE_27_XTAL_204_35KHZ, /* 204.35 KHz for 27 MHz XTAL */
4078c2ecf20Sopenharmony_ci	MXL_HYDRA_STEP_SIZE_27_XTAL_306_52KHZ, /* 306.52 KHz for 27 MHz XTAL */
4088c2ecf20Sopenharmony_ci	MXL_HYDRA_STEP_SIZE_27_XTAL_408_69KHZ, /* 408.69 KHz for 27 MHz XTAL */
4098c2ecf20Sopenharmony_ci};
4108c2ecf20Sopenharmony_ci
4118c2ecf20Sopenharmony_cienum MXL_HYDRA_SPECTRUM_RESOLUTION_E {
4128c2ecf20Sopenharmony_ci	MXL_HYDRA_SPECTRUM_RESOLUTION_00_1_DB, /* 0.1 dB */
4138c2ecf20Sopenharmony_ci	MXL_HYDRA_SPECTRUM_RESOLUTION_01_0_DB, /* 1.0 dB */
4148c2ecf20Sopenharmony_ci	MXL_HYDRA_SPECTRUM_RESOLUTION_05_0_DB, /* 5.0 dB */
4158c2ecf20Sopenharmony_ci	MXL_HYDRA_SPECTRUM_RESOLUTION_10_0_DB, /* 10 dB */
4168c2ecf20Sopenharmony_ci};
4178c2ecf20Sopenharmony_ci
4188c2ecf20Sopenharmony_cienum MXL_HYDRA_SPECTRUM_ERROR_CODE_E {
4198c2ecf20Sopenharmony_ci	MXL_SPECTRUM_NO_ERROR,
4208c2ecf20Sopenharmony_ci	MXL_SPECTRUM_INVALID_PARAMETER,
4218c2ecf20Sopenharmony_ci	MXL_SPECTRUM_INVALID_STEP_SIZE,
4228c2ecf20Sopenharmony_ci	MXL_SPECTRUM_BW_CANNOT_BE_COVERED,
4238c2ecf20Sopenharmony_ci	MXL_SPECTRUM_DEMOD_BUSY,
4248c2ecf20Sopenharmony_ci	MXL_SPECTRUM_TUNER_NOT_ENABLED,
4258c2ecf20Sopenharmony_ci};
4268c2ecf20Sopenharmony_ci
4278c2ecf20Sopenharmony_cistruct MXL_HYDRA_SPECTRUM_REQ_T {
4288c2ecf20Sopenharmony_ci	u32 tuner_index; /* TUNER Ctrl: one of MXL58x_TUNER_ID_E */
4298c2ecf20Sopenharmony_ci	u32 demod_index; /* DEMOD Ctrl: one of MXL58x_DEMOD_ID_E */
4308c2ecf20Sopenharmony_ci	enum MXL_HYDRA_SPECTRUM_STEP_SIZE_E step_size_in_khz;
4318c2ecf20Sopenharmony_ci	u32 starting_freq_ink_hz;
4328c2ecf20Sopenharmony_ci	u32 total_steps;
4338c2ecf20Sopenharmony_ci	enum MXL_HYDRA_SPECTRUM_RESOLUTION_E spectrum_division;
4348c2ecf20Sopenharmony_ci};
4358c2ecf20Sopenharmony_ci
4368c2ecf20Sopenharmony_cienum MXL_HYDRA_SEARCH_FREQ_OFFSET_TYPE_E {
4378c2ecf20Sopenharmony_ci	MXL_HYDRA_SEARCH_MAX_OFFSET = 0, /* DMD searches for max freq offset (i.e. 5MHz) */
4388c2ecf20Sopenharmony_ci	MXL_HYDRA_SEARCH_BW_PLUS_ROLLOFF, /* DMD searches for BW + ROLLOFF/2 */
4398c2ecf20Sopenharmony_ci};
4408c2ecf20Sopenharmony_ci
4418c2ecf20Sopenharmony_cistruct MXL58X_CFG_FREQ_OFF_SEARCH_RANGE_T {
4428c2ecf20Sopenharmony_ci	u32 demod_index;
4438c2ecf20Sopenharmony_ci	enum MXL_HYDRA_SEARCH_FREQ_OFFSET_TYPE_E search_type;
4448c2ecf20Sopenharmony_ci};
4458c2ecf20Sopenharmony_ci
4468c2ecf20Sopenharmony_ci/* there are two slices
4478c2ecf20Sopenharmony_ci * slice0 - TS0, TS1, TS2 & TS3
4488c2ecf20Sopenharmony_ci * slice1 - TS4, TS5, TS6 & TS7
4498c2ecf20Sopenharmony_ci */
4508c2ecf20Sopenharmony_ci#define MXL_HYDRA_TS_SLICE_MAX  2
4518c2ecf20Sopenharmony_ci
4528c2ecf20Sopenharmony_ci#define MAX_FIXED_PID_NUM   32
4538c2ecf20Sopenharmony_ci
4548c2ecf20Sopenharmony_ci#define MXL_HYDRA_NCO_CLK   418 /* 418 MHz */
4558c2ecf20Sopenharmony_ci
4568c2ecf20Sopenharmony_ci#define MXL_HYDRA_MAX_TS_CLOCK  139 /* 139 MHz */
4578c2ecf20Sopenharmony_ci
4588c2ecf20Sopenharmony_ci#define MXL_HYDRA_TS_FIXED_PID_FILT_SIZE          32
4598c2ecf20Sopenharmony_ci
4608c2ecf20Sopenharmony_ci#define MXL_HYDRA_SHARED_PID_FILT_SIZE_DEFAULT    33   /* Shared PID filter size in 1-1 mux mode */
4618c2ecf20Sopenharmony_ci#define MXL_HYDRA_SHARED_PID_FILT_SIZE_2_TO_1     66   /* Shared PID filter size in 2-1 mux mode */
4628c2ecf20Sopenharmony_ci#define MXL_HYDRA_SHARED_PID_FILT_SIZE_4_TO_1     132  /* Shared PID filter size in 4-1 mux mode */
4638c2ecf20Sopenharmony_ci
4648c2ecf20Sopenharmony_cienum MXL_HYDRA_PID_BANK_TYPE_E {
4658c2ecf20Sopenharmony_ci	MXL_HYDRA_SOFTWARE_PID_BANK = 0,
4668c2ecf20Sopenharmony_ci	MXL_HYDRA_HARDWARE_PID_BANK,
4678c2ecf20Sopenharmony_ci};
4688c2ecf20Sopenharmony_ci
4698c2ecf20Sopenharmony_cienum MXL_HYDRA_TS_MUX_MODE_E {
4708c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_MUX_PID_REMAP = 0,
4718c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_MUX_PREFIX_EXTRA_HEADER = 1,
4728c2ecf20Sopenharmony_ci};
4738c2ecf20Sopenharmony_ci
4748c2ecf20Sopenharmony_cienum MXL_HYDRA_TS_MUX_TYPE_E {
4758c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_MUX_DISABLE = 0, /* No Mux ( 1 TSIF to 1 TSIF) */
4768c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_MUX_2_TO_1, /* Mux 2 TSIF to 1 TSIF */
4778c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_MUX_4_TO_1, /* Mux 4 TSIF to 1 TSIF */
4788c2ecf20Sopenharmony_ci};
4798c2ecf20Sopenharmony_ci
4808c2ecf20Sopenharmony_cienum MXL_HYDRA_TS_GROUP_E {
4818c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_GROUP_0_3 = 0, /* TS group 0 to 3 (TS0, TS1, TS2 & TS3) */
4828c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_GROUP_4_7,     /* TS group 0 to 3 (TS4, TS5, TS6 & TS7) */
4838c2ecf20Sopenharmony_ci};
4848c2ecf20Sopenharmony_ci
4858c2ecf20Sopenharmony_cienum MXL_HYDRA_TS_PID_FLT_CTRL_E {
4868c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_PIDS_ALLOW_ALL = 0, /* Allow all pids */
4878c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_PIDS_DROP_ALL,	 /* Drop all pids */
4888c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_INVALIDATE_PID_FILTER, /* Delete current PD filter in the device */
4898c2ecf20Sopenharmony_ci};
4908c2ecf20Sopenharmony_ci
4918c2ecf20Sopenharmony_cienum MXL_HYDRA_TS_PID_TYPE_E {
4928c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_PID_FIXED = 0,
4938c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_PID_REGULAR,
4948c2ecf20Sopenharmony_ci};
4958c2ecf20Sopenharmony_ci
4968c2ecf20Sopenharmony_cistruct MXL_HYDRA_TS_PID_T {
4978c2ecf20Sopenharmony_ci	u16 original_pid;           /* pid from TS */
4988c2ecf20Sopenharmony_ci	u16 remapped_pid;           /* remapped pid */
4998c2ecf20Sopenharmony_ci	enum MXL_BOOL_E enable;         /* enable or disable pid */
5008c2ecf20Sopenharmony_ci	enum MXL_BOOL_E allow_or_drop;    /* allow or drop pid */
5018c2ecf20Sopenharmony_ci	enum MXL_BOOL_E enable_pid_remap; /* enable or disable pid remap */
5028c2ecf20Sopenharmony_ci	u8 bond_id;                 /* Bond ID in A0 always 0 - Only for 568 Sku */
5038c2ecf20Sopenharmony_ci	u8 dest_id;                 /* Output port ID for the PID - Only for 568 Sku */
5048c2ecf20Sopenharmony_ci};
5058c2ecf20Sopenharmony_ci
5068c2ecf20Sopenharmony_cistruct MXL_HYDRA_TS_MUX_PREFIX_HEADER_T {
5078c2ecf20Sopenharmony_ci	enum MXL_BOOL_E enable;
5088c2ecf20Sopenharmony_ci	u8 num_byte;
5098c2ecf20Sopenharmony_ci	u8 header[12];
5108c2ecf20Sopenharmony_ci};
5118c2ecf20Sopenharmony_ci
5128c2ecf20Sopenharmony_cienum MXL_HYDRA_PID_FILTER_BANK_E {
5138c2ecf20Sopenharmony_ci	MXL_HYDRA_PID_BANK_A = 0,
5148c2ecf20Sopenharmony_ci	MXL_HYDRA_PID_BANK_B,
5158c2ecf20Sopenharmony_ci};
5168c2ecf20Sopenharmony_ci
5178c2ecf20Sopenharmony_cienum MXL_HYDRA_MPEG_DATA_FMT_E {
5188c2ecf20Sopenharmony_ci	MXL_HYDRA_MPEG_SERIAL_MSB_1ST = 0,
5198c2ecf20Sopenharmony_ci	MXL_HYDRA_MPEG_SERIAL_LSB_1ST,
5208c2ecf20Sopenharmony_ci
5218c2ecf20Sopenharmony_ci	MXL_HYDRA_MPEG_SYNC_WIDTH_BIT = 0,
5228c2ecf20Sopenharmony_ci	MXL_HYDRA_MPEG_SYNC_WIDTH_BYTE
5238c2ecf20Sopenharmony_ci};
5248c2ecf20Sopenharmony_ci
5258c2ecf20Sopenharmony_cienum MXL_HYDRA_MPEG_MODE_E {
5268c2ecf20Sopenharmony_ci	MXL_HYDRA_MPEG_MODE_SERIAL_4_WIRE = 0, /* MPEG 4 Wire serial mode */
5278c2ecf20Sopenharmony_ci	MXL_HYDRA_MPEG_MODE_SERIAL_3_WIRE,     /* MPEG 3 Wire serial mode */
5288c2ecf20Sopenharmony_ci	MXL_HYDRA_MPEG_MODE_SERIAL_2_WIRE,     /* MPEG 2 Wire serial mode */
5298c2ecf20Sopenharmony_ci	MXL_HYDRA_MPEG_MODE_PARALLEL           /* MPEG parallel mode - valid only for MxL581 */
5308c2ecf20Sopenharmony_ci};
5318c2ecf20Sopenharmony_ci
5328c2ecf20Sopenharmony_cienum MXL_HYDRA_MPEG_CLK_TYPE_E {
5338c2ecf20Sopenharmony_ci	MXL_HYDRA_MPEG_CLK_CONTINUOUS = 0, /* Continuous MPEG clock */
5348c2ecf20Sopenharmony_ci	MXL_HYDRA_MPEG_CLK_GAPPED,         /* Gapped (gated) MPEG clock */
5358c2ecf20Sopenharmony_ci};
5368c2ecf20Sopenharmony_ci
5378c2ecf20Sopenharmony_cienum MXL_HYDRA_MPEG_CLK_FMT_E {
5388c2ecf20Sopenharmony_ci	MXL_HYDRA_MPEG_ACTIVE_LOW = 0,
5398c2ecf20Sopenharmony_ci	MXL_HYDRA_MPEG_ACTIVE_HIGH,
5408c2ecf20Sopenharmony_ci
5418c2ecf20Sopenharmony_ci	MXL_HYDRA_MPEG_CLK_NEGATIVE = 0,
5428c2ecf20Sopenharmony_ci	MXL_HYDRA_MPEG_CLK_POSITIVE,
5438c2ecf20Sopenharmony_ci
5448c2ecf20Sopenharmony_ci	MXL_HYDRA_MPEG_CLK_IN_PHASE = 0,
5458c2ecf20Sopenharmony_ci	MXL_HYDRA_MPEG_CLK_INVERTED,
5468c2ecf20Sopenharmony_ci};
5478c2ecf20Sopenharmony_ci
5488c2ecf20Sopenharmony_cienum MXL_HYDRA_MPEG_CLK_PHASE_E {
5498c2ecf20Sopenharmony_ci	MXL_HYDRA_MPEG_CLK_PHASE_SHIFT_0_DEG = 0,
5508c2ecf20Sopenharmony_ci	MXL_HYDRA_MPEG_CLK_PHASE_SHIFT_90_DEG,
5518c2ecf20Sopenharmony_ci	MXL_HYDRA_MPEG_CLK_PHASE_SHIFT_180_DEG,
5528c2ecf20Sopenharmony_ci	MXL_HYDRA_MPEG_CLK_PHASE_SHIFT_270_DEG
5538c2ecf20Sopenharmony_ci};
5548c2ecf20Sopenharmony_ci
5558c2ecf20Sopenharmony_cienum MXL_HYDRA_MPEG_ERR_INDICATION_E {
5568c2ecf20Sopenharmony_ci	MXL_HYDRA_MPEG_ERR_REPLACE_SYNC = 0,
5578c2ecf20Sopenharmony_ci	MXL_HYDRA_MPEG_ERR_REPLACE_VALID,
5588c2ecf20Sopenharmony_ci	MXL_HYDRA_MPEG_ERR_INDICATION_DISABLED
5598c2ecf20Sopenharmony_ci};
5608c2ecf20Sopenharmony_ci
5618c2ecf20Sopenharmony_cistruct MXL_HYDRA_MPEGOUT_PARAM_T {
5628c2ecf20Sopenharmony_ci	int                                  enable;               /* Enable or Disable MPEG OUT */
5638c2ecf20Sopenharmony_ci	enum MXL_HYDRA_MPEG_CLK_TYPE_E       mpeg_clk_type;          /* Continuous or gapped */
5648c2ecf20Sopenharmony_ci	enum MXL_HYDRA_MPEG_CLK_FMT_E        mpeg_clk_pol;           /* MPEG Clk polarity */
5658c2ecf20Sopenharmony_ci	u8                                   max_mpeg_clk_rate;       /* Max MPEG Clk rate (0 - 104 MHz, 139 MHz) */
5668c2ecf20Sopenharmony_ci	enum MXL_HYDRA_MPEG_CLK_PHASE_E      mpeg_clk_phase;         /* MPEG Clk phase */
5678c2ecf20Sopenharmony_ci	enum MXL_HYDRA_MPEG_DATA_FMT_E       lsb_or_msb_first;        /* LSB first or MSB first in TS transmission */
5688c2ecf20Sopenharmony_ci	enum MXL_HYDRA_MPEG_DATA_FMT_E       mpeg_sync_pulse_width;   /* MPEG SYNC pulse width (1-bit or 1-byte) */
5698c2ecf20Sopenharmony_ci	enum MXL_HYDRA_MPEG_CLK_FMT_E        mpeg_valid_pol;         /* MPEG VALID polarity */
5708c2ecf20Sopenharmony_ci	enum MXL_HYDRA_MPEG_CLK_FMT_E        mpeg_sync_pol;          /* MPEG SYNC polarity */
5718c2ecf20Sopenharmony_ci	enum MXL_HYDRA_MPEG_MODE_E           mpeg_mode;             /* config 4/3/2-wire serial or parallel TS out */
5728c2ecf20Sopenharmony_ci	enum MXL_HYDRA_MPEG_ERR_INDICATION_E mpeg_error_indication;  /* Enable or Disable MPEG error indication */
5738c2ecf20Sopenharmony_ci};
5748c2ecf20Sopenharmony_ci
5758c2ecf20Sopenharmony_cienum MXL_HYDRA_EXT_TS_IN_ID_E {
5768c2ecf20Sopenharmony_ci	MXL_HYDRA_EXT_TS_IN_0 = 0,
5778c2ecf20Sopenharmony_ci	MXL_HYDRA_EXT_TS_IN_1,
5788c2ecf20Sopenharmony_ci	MXL_HYDRA_EXT_TS_IN_2,
5798c2ecf20Sopenharmony_ci	MXL_HYDRA_EXT_TS_IN_3,
5808c2ecf20Sopenharmony_ci	MXL_HYDRA_EXT_TS_IN_MAX
5818c2ecf20Sopenharmony_ci};
5828c2ecf20Sopenharmony_ci
5838c2ecf20Sopenharmony_cienum MXL_HYDRA_TS_OUT_ID_E {
5848c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_OUT_0 = 0,
5858c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_OUT_1,
5868c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_OUT_2,
5878c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_OUT_3,
5888c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_OUT_4,
5898c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_OUT_5,
5908c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_OUT_6,
5918c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_OUT_7,
5928c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_OUT_MAX
5938c2ecf20Sopenharmony_ci};
5948c2ecf20Sopenharmony_ci
5958c2ecf20Sopenharmony_cienum MXL_HYDRA_TS_DRIVE_STRENGTH_E {
5968c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_DRIVE_STRENGTH_1X = 0,
5978c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_DRIVE_STRENGTH_2X,
5988c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_DRIVE_STRENGTH_3X,
5998c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_DRIVE_STRENGTH_4X,
6008c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_DRIVE_STRENGTH_5X,
6018c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_DRIVE_STRENGTH_6X,
6028c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_DRIVE_STRENGTH_7X,
6038c2ecf20Sopenharmony_ci	MXL_HYDRA_TS_DRIVE_STRENGTH_8X
6048c2ecf20Sopenharmony_ci};
6058c2ecf20Sopenharmony_ci
6068c2ecf20Sopenharmony_cienum MXL_HYDRA_DEVICE_E {
6078c2ecf20Sopenharmony_ci	MXL_HYDRA_DEVICE_581 = 0,
6088c2ecf20Sopenharmony_ci	MXL_HYDRA_DEVICE_584,
6098c2ecf20Sopenharmony_ci	MXL_HYDRA_DEVICE_585,
6108c2ecf20Sopenharmony_ci	MXL_HYDRA_DEVICE_544,
6118c2ecf20Sopenharmony_ci	MXL_HYDRA_DEVICE_561,
6128c2ecf20Sopenharmony_ci	MXL_HYDRA_DEVICE_TEST,
6138c2ecf20Sopenharmony_ci	MXL_HYDRA_DEVICE_582,
6148c2ecf20Sopenharmony_ci	MXL_HYDRA_DEVICE_541,
6158c2ecf20Sopenharmony_ci	MXL_HYDRA_DEVICE_568,
6168c2ecf20Sopenharmony_ci	MXL_HYDRA_DEVICE_542,
6178c2ecf20Sopenharmony_ci	MXL_HYDRA_DEVICE_541S,
6188c2ecf20Sopenharmony_ci	MXL_HYDRA_DEVICE_561S,
6198c2ecf20Sopenharmony_ci	MXL_HYDRA_DEVICE_581S,
6208c2ecf20Sopenharmony_ci	MXL_HYDRA_DEVICE_MAX
6218c2ecf20Sopenharmony_ci};
6228c2ecf20Sopenharmony_ci
6238c2ecf20Sopenharmony_ci/* Demod IQ data */
6248c2ecf20Sopenharmony_cistruct MXL_HYDRA_DEMOD_IQ_SRC_T {
6258c2ecf20Sopenharmony_ci	u32 demod_id;
6268c2ecf20Sopenharmony_ci	u32 source_of_iq; /* == 0, it means I/Q comes from Formatter
6278c2ecf20Sopenharmony_ci			 * == 1, Legacy FEC
6288c2ecf20Sopenharmony_ci			 * == 2, Frequency Recovery
6298c2ecf20Sopenharmony_ci			 * == 3, NBC
6308c2ecf20Sopenharmony_ci			 * == 4, CTL
6318c2ecf20Sopenharmony_ci			 * == 5, EQ
6328c2ecf20Sopenharmony_ci			 * == 6, FPGA
6338c2ecf20Sopenharmony_ci			 */
6348c2ecf20Sopenharmony_ci};
6358c2ecf20Sopenharmony_ci
6368c2ecf20Sopenharmony_cistruct MXL_HYDRA_DEMOD_ABORT_TUNE_T {
6378c2ecf20Sopenharmony_ci	u32 demod_id;
6388c2ecf20Sopenharmony_ci};
6398c2ecf20Sopenharmony_ci
6408c2ecf20Sopenharmony_cistruct MXL_HYDRA_TUNER_CMD {
6418c2ecf20Sopenharmony_ci	u8 tuner_id;
6428c2ecf20Sopenharmony_ci	u8 enable;
6438c2ecf20Sopenharmony_ci};
6448c2ecf20Sopenharmony_ci
6458c2ecf20Sopenharmony_ci/* Demod Para for Channel Tune */
6468c2ecf20Sopenharmony_cistruct MXL_HYDRA_DEMOD_PARAM_T {
6478c2ecf20Sopenharmony_ci	u32 tuner_index;
6488c2ecf20Sopenharmony_ci	u32 demod_index;
6498c2ecf20Sopenharmony_ci	u32 frequency_in_hz;     /* Frequency */
6508c2ecf20Sopenharmony_ci	u32 standard;          /* one of MXL_HYDRA_BCAST_STD_E */
6518c2ecf20Sopenharmony_ci	u32 spectrum_inversion; /* Input : Spectrum inversion. */
6528c2ecf20Sopenharmony_ci	u32 roll_off;           /* rollOff (alpha) factor */
6538c2ecf20Sopenharmony_ci	u32 symbol_rate_in_hz;    /* Symbol rate */
6548c2ecf20Sopenharmony_ci	u32 pilots;            /* TRUE = pilots enabled */
6558c2ecf20Sopenharmony_ci	u32 modulation_scheme;  /* Input : Modulation Scheme is one of MXL_HYDRA_MODULATION_E */
6568c2ecf20Sopenharmony_ci	u32 fec_code_rate;       /* Input : Forward error correction rate. Is one of MXL_HYDRA_FEC_E */
6578c2ecf20Sopenharmony_ci	u32 max_carrier_offset_in_mhz; /* Maximum carrier freq offset in MHz. Same as freqSearchRangeKHz, but in unit of MHz. */
6588c2ecf20Sopenharmony_ci};
6598c2ecf20Sopenharmony_ci
6608c2ecf20Sopenharmony_cistruct MXL_HYDRA_DEMOD_SCRAMBLE_CODE_T {
6618c2ecf20Sopenharmony_ci	u32 demod_index;
6628c2ecf20Sopenharmony_ci	u8 scramble_sequence[12]; /* scramble sequence */
6638c2ecf20Sopenharmony_ci	u32 scramble_code; /* scramble gold code */
6648c2ecf20Sopenharmony_ci};
6658c2ecf20Sopenharmony_ci
6668c2ecf20Sopenharmony_cistruct MXL_INTR_CFG_T {
6678c2ecf20Sopenharmony_ci	u32 intr_type;
6688c2ecf20Sopenharmony_ci	u32 intr_duration_in_nano_secs;
6698c2ecf20Sopenharmony_ci	u32 intr_mask;
6708c2ecf20Sopenharmony_ci};
6718c2ecf20Sopenharmony_ci
6728c2ecf20Sopenharmony_cistruct MXL_HYDRA_POWER_MODE_CMD {
6738c2ecf20Sopenharmony_ci	u8 power_mode; /* enumeration values are defined in MXL_HYDRA_PWR_MODE_E (device API.h) */
6748c2ecf20Sopenharmony_ci};
6758c2ecf20Sopenharmony_ci
6768c2ecf20Sopenharmony_cistruct MXL_HYDRA_RF_WAKEUP_PARAM_T {
6778c2ecf20Sopenharmony_ci	u32 time_interval_in_seconds; /* in seconds */
6788c2ecf20Sopenharmony_ci	u32 tuner_index;
6798c2ecf20Sopenharmony_ci	s32 rssi_threshold;
6808c2ecf20Sopenharmony_ci};
6818c2ecf20Sopenharmony_ci
6828c2ecf20Sopenharmony_cistruct MXL_HYDRA_RF_WAKEUP_CFG_T {
6838c2ecf20Sopenharmony_ci	u32 tuner_count;
6848c2ecf20Sopenharmony_ci	struct MXL_HYDRA_RF_WAKEUP_PARAM_T params;
6858c2ecf20Sopenharmony_ci};
6868c2ecf20Sopenharmony_ci
6878c2ecf20Sopenharmony_cienum MXL_HYDRA_AUX_CTRL_MODE_E {
6888c2ecf20Sopenharmony_ci	MXL_HYDRA_AUX_CTRL_MODE_FSK = 0, /* Select FSK controller */
6898c2ecf20Sopenharmony_ci	MXL_HYDRA_AUX_CTRL_MODE_DISEQC,  /* Select DiSEqC controller */
6908c2ecf20Sopenharmony_ci};
6918c2ecf20Sopenharmony_ci
6928c2ecf20Sopenharmony_cienum MXL_HYDRA_DISEQC_OPMODE_E {
6938c2ecf20Sopenharmony_ci	MXL_HYDRA_DISEQC_ENVELOPE_MODE = 0,
6948c2ecf20Sopenharmony_ci	MXL_HYDRA_DISEQC_TONE_MODE,
6958c2ecf20Sopenharmony_ci};
6968c2ecf20Sopenharmony_ci
6978c2ecf20Sopenharmony_cienum MXL_HYDRA_DISEQC_VER_E {
6988c2ecf20Sopenharmony_ci	MXL_HYDRA_DISEQC_1_X = 0, /* Config DiSEqC 1.x mode */
6998c2ecf20Sopenharmony_ci	MXL_HYDRA_DISEQC_2_X, /* Config DiSEqC 2.x mode */
7008c2ecf20Sopenharmony_ci	MXL_HYDRA_DISEQC_DISABLE /* Disable DiSEqC */
7018c2ecf20Sopenharmony_ci};
7028c2ecf20Sopenharmony_ci
7038c2ecf20Sopenharmony_cienum MXL_HYDRA_DISEQC_CARRIER_FREQ_E {
7048c2ecf20Sopenharmony_ci	MXL_HYDRA_DISEQC_CARRIER_FREQ_22KHZ = 0, /* DiSEqC signal frequency of 22 KHz */
7058c2ecf20Sopenharmony_ci	MXL_HYDRA_DISEQC_CARRIER_FREQ_33KHZ,     /* DiSEqC signal frequency of 33 KHz */
7068c2ecf20Sopenharmony_ci	MXL_HYDRA_DISEQC_CARRIER_FREQ_44KHZ      /* DiSEqC signal frequency of 44 KHz */
7078c2ecf20Sopenharmony_ci};
7088c2ecf20Sopenharmony_ci
7098c2ecf20Sopenharmony_cienum MXL_HYDRA_DISEQC_ID_E {
7108c2ecf20Sopenharmony_ci	MXL_HYDRA_DISEQC_ID_0 = 0,
7118c2ecf20Sopenharmony_ci	MXL_HYDRA_DISEQC_ID_1,
7128c2ecf20Sopenharmony_ci	MXL_HYDRA_DISEQC_ID_2,
7138c2ecf20Sopenharmony_ci	MXL_HYDRA_DISEQC_ID_3
7148c2ecf20Sopenharmony_ci};
7158c2ecf20Sopenharmony_ci
7168c2ecf20Sopenharmony_cienum MXL_HYDRA_FSK_OP_MODE_E {
7178c2ecf20Sopenharmony_ci	MXL_HYDRA_FSK_CFG_TYPE_39KPBS = 0, /* 39.0kbps */
7188c2ecf20Sopenharmony_ci	MXL_HYDRA_FSK_CFG_TYPE_39_017KPBS, /* 39.017kbps */
7198c2ecf20Sopenharmony_ci	MXL_HYDRA_FSK_CFG_TYPE_115_2KPBS   /* 115.2kbps */
7208c2ecf20Sopenharmony_ci};
7218c2ecf20Sopenharmony_ci
7228c2ecf20Sopenharmony_cistruct MXL58X_DSQ_OP_MODE_T {
7238c2ecf20Sopenharmony_ci	u32 diseqc_id; /* DSQ 0, 1, 2 or 3 */
7248c2ecf20Sopenharmony_ci	u32 op_mode; /* Envelope mode (0) or internal tone mode (1) */
7258c2ecf20Sopenharmony_ci	u32 version; /* 0: 1.0, 1: 1.1, 2: Disable */
7268c2ecf20Sopenharmony_ci	u32 center_freq; /* 0: 22KHz, 1: 33KHz and 2: 44 KHz */
7278c2ecf20Sopenharmony_ci};
7288c2ecf20Sopenharmony_ci
7298c2ecf20Sopenharmony_cistruct MXL_HYDRA_DISEQC_CFG_CONT_TONE_T {
7308c2ecf20Sopenharmony_ci	u32 diseqc_id;
7318c2ecf20Sopenharmony_ci	u32 cont_tone_flag; /* 1: Enable , 0: Disable */
7328c2ecf20Sopenharmony_ci};
733