540 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			540 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* SPDX-License-Identifier: GPL-2.0 */
 | 
						|
/*
 | 
						|
 * Driver for the MaxLinear MxL69x family of combo tuners/demods
 | 
						|
 *
 | 
						|
 * Copyright (C) 2020 Brad Love <brad@nextdimension.cc>
 | 
						|
 *
 | 
						|
 * based on code:
 | 
						|
 * Copyright (c) 2016 MaxLinear, Inc. All rights reserved
 | 
						|
 * which was released under GPL V2
 | 
						|
 */
 | 
						|
 | 
						|
/*****************************************************************************
 | 
						|
 *	Defines
 | 
						|
 *****************************************************************************
 | 
						|
 */
 | 
						|
#define MXL_EAGLE_HOST_MSG_HEADER_SIZE  8
 | 
						|
#define MXL_EAGLE_FW_MAX_SIZE_IN_KB     76
 | 
						|
#define MXL_EAGLE_QAM_FFE_TAPS_LENGTH   16
 | 
						|
#define MXL_EAGLE_QAM_SPUR_TAPS_LENGTH  32
 | 
						|
#define MXL_EAGLE_QAM_DFE_TAPS_LENGTH   72
 | 
						|
#define MXL_EAGLE_ATSC_FFE_TAPS_LENGTH  4096
 | 
						|
#define MXL_EAGLE_ATSC_DFE_TAPS_LENGTH  384
 | 
						|
#define MXL_EAGLE_VERSION_SIZE          5     /* A.B.C.D-RCx */
 | 
						|
#define MXL_EAGLE_FW_LOAD_TIME          50
 | 
						|
 | 
						|
#define MXL_EAGLE_FW_MAX_SIZE_IN_KB       76
 | 
						|
#define MXL_EAGLE_FW_HEADER_SIZE          16
 | 
						|
#define MXL_EAGLE_FW_SEGMENT_HEADER_SIZE  8
 | 
						|
#define MXL_EAGLE_MAX_I2C_PACKET_SIZE     58
 | 
						|
#define MXL_EAGLE_I2C_MHEADER_SIZE        6
 | 
						|
#define MXL_EAGLE_I2C_PHEADER_SIZE        2
 | 
						|
 | 
						|
/* Enum of Eagle family devices */
 | 
						|
enum MXL_EAGLE_DEVICE_E {
 | 
						|
	MXL_EAGLE_DEVICE_691 = 1,    /* Device Mxl691 */
 | 
						|
	MXL_EAGLE_DEVICE_248 = 2,    /* Device Mxl248 */
 | 
						|
	MXL_EAGLE_DEVICE_692 = 3,    /* Device Mxl692 */
 | 
						|
	MXL_EAGLE_DEVICE_MAX,        /* No such device */
 | 
						|
};
 | 
						|
 | 
						|
#define VER_A   1
 | 
						|
#define VER_B   1
 | 
						|
#define VER_C   1
 | 
						|
#define VER_D   3
 | 
						|
#define VER_E   6
 | 
						|
 | 
						|
/* Enum of Host to Eagle I2C protocol opcodes */
 | 
						|
enum MXL_EAGLE_OPCODE_E {
 | 
						|
	/* DEVICE */
 | 
						|
	MXL_EAGLE_OPCODE_DEVICE_DEMODULATOR_TYPE_SET,
 | 
						|
	MXL_EAGLE_OPCODE_DEVICE_MPEG_OUT_PARAMS_SET,
 | 
						|
	MXL_EAGLE_OPCODE_DEVICE_POWERMODE_SET,
 | 
						|
	MXL_EAGLE_OPCODE_DEVICE_GPIO_DIRECTION_SET,
 | 
						|
	MXL_EAGLE_OPCODE_DEVICE_GPO_LEVEL_SET,
 | 
						|
	MXL_EAGLE_OPCODE_DEVICE_INTR_MASK_SET,
 | 
						|
	MXL_EAGLE_OPCODE_DEVICE_IO_MUX_SET,
 | 
						|
	MXL_EAGLE_OPCODE_DEVICE_VERSION_GET,
 | 
						|
	MXL_EAGLE_OPCODE_DEVICE_STATUS_GET,
 | 
						|
	MXL_EAGLE_OPCODE_DEVICE_GPI_LEVEL_GET,
 | 
						|
 | 
						|
	/* TUNER */
 | 
						|
	MXL_EAGLE_OPCODE_TUNER_CHANNEL_TUNE_SET,
 | 
						|
	MXL_EAGLE_OPCODE_TUNER_LOCK_STATUS_GET,
 | 
						|
	MXL_EAGLE_OPCODE_TUNER_AGC_STATUS_GET,
 | 
						|
 | 
						|
	/* ATSC */
 | 
						|
	MXL_EAGLE_OPCODE_ATSC_INIT_SET,
 | 
						|
	MXL_EAGLE_OPCODE_ATSC_ACQUIRE_CARRIER_SET,
 | 
						|
	MXL_EAGLE_OPCODE_ATSC_STATUS_GET,
 | 
						|
	MXL_EAGLE_OPCODE_ATSC_ERROR_COUNTERS_GET,
 | 
						|
	MXL_EAGLE_OPCODE_ATSC_EQUALIZER_FILTER_DFE_TAPS_GET,
 | 
						|
	MXL_EAGLE_OPCODE_ATSC_EQUALIZER_FILTER_FFE_TAPS_GET,
 | 
						|
 | 
						|
	/* QAM */
 | 
						|
	MXL_EAGLE_OPCODE_QAM_PARAMS_SET,
 | 
						|
	MXL_EAGLE_OPCODE_QAM_RESTART_SET,
 | 
						|
	MXL_EAGLE_OPCODE_QAM_STATUS_GET,
 | 
						|
	MXL_EAGLE_OPCODE_QAM_ERROR_COUNTERS_GET,
 | 
						|
	MXL_EAGLE_OPCODE_QAM_CONSTELLATION_VALUE_GET,
 | 
						|
	MXL_EAGLE_OPCODE_QAM_EQUALIZER_FILTER_FFE_GET,
 | 
						|
	MXL_EAGLE_OPCODE_QAM_EQUALIZER_FILTER_SPUR_START_GET,
 | 
						|
	MXL_EAGLE_OPCODE_QAM_EQUALIZER_FILTER_SPUR_END_GET,
 | 
						|
	MXL_EAGLE_OPCODE_QAM_EQUALIZER_FILTER_DFE_TAPS_NUMBER_GET,
 | 
						|
	MXL_EAGLE_OPCODE_QAM_EQUALIZER_FILTER_DFE_START_GET,
 | 
						|
	MXL_EAGLE_OPCODE_QAM_EQUALIZER_FILTER_DFE_MIDDLE_GET,
 | 
						|
	MXL_EAGLE_OPCODE_QAM_EQUALIZER_FILTER_DFE_END_GET,
 | 
						|
 | 
						|
	/* OOB */
 | 
						|
	MXL_EAGLE_OPCODE_OOB_PARAMS_SET,
 | 
						|
	MXL_EAGLE_OPCODE_OOB_RESTART_SET,
 | 
						|
	MXL_EAGLE_OPCODE_OOB_ERROR_COUNTERS_GET,
 | 
						|
	MXL_EAGLE_OPCODE_OOB_STATUS_GET,
 | 
						|
 | 
						|
	/* SMA */
 | 
						|
	MXL_EAGLE_OPCODE_SMA_INIT_SET,
 | 
						|
	MXL_EAGLE_OPCODE_SMA_PARAMS_SET,
 | 
						|
	MXL_EAGLE_OPCODE_SMA_TRANSMIT_SET,
 | 
						|
	MXL_EAGLE_OPCODE_SMA_RECEIVE_GET,
 | 
						|
 | 
						|
	/* DEBUG */
 | 
						|
	MXL_EAGLE_OPCODE_INTERNAL,
 | 
						|
 | 
						|
	MXL_EAGLE_OPCODE_MAX = 70,
 | 
						|
};
 | 
						|
 | 
						|
/* Enum of Host to Eagle I2C protocol opcodes */
 | 
						|
static const char * const MXL_EAGLE_OPCODE_STRING[] = {
 | 
						|
	/* DEVICE */
 | 
						|
	"DEVICE_DEMODULATOR_TYPE_SET",
 | 
						|
	"DEVICE_MPEG_OUT_PARAMS_SET",
 | 
						|
	"DEVICE_POWERMODE_SET",
 | 
						|
	"DEVICE_GPIO_DIRECTION_SET",
 | 
						|
	"DEVICE_GPO_LEVEL_SET",
 | 
						|
	"DEVICE_INTR_MASK_SET",
 | 
						|
	"DEVICE_IO_MUX_SET",
 | 
						|
	"DEVICE_VERSION_GET",
 | 
						|
	"DEVICE_STATUS_GET",
 | 
						|
	"DEVICE_GPI_LEVEL_GET",
 | 
						|
 | 
						|
	/* TUNER */
 | 
						|
	"TUNER_CHANNEL_TUNE_SET",
 | 
						|
	"TUNER_LOCK_STATUS_GET",
 | 
						|
	"TUNER_AGC_STATUS_GET",
 | 
						|
 | 
						|
	/* ATSC */
 | 
						|
	"ATSC_INIT_SET",
 | 
						|
	"ATSC_ACQUIRE_CARRIER_SET",
 | 
						|
	"ATSC_STATUS_GET",
 | 
						|
	"ATSC_ERROR_COUNTERS_GET",
 | 
						|
	"ATSC_EQUALIZER_FILTER_DFE_TAPS_GET",
 | 
						|
	"ATSC_EQUALIZER_FILTER_FFE_TAPS_GET",
 | 
						|
 | 
						|
	/* QAM */
 | 
						|
	"QAM_PARAMS_SET",
 | 
						|
	"QAM_RESTART_SET",
 | 
						|
	"QAM_STATUS_GET",
 | 
						|
	"QAM_ERROR_COUNTERS_GET",
 | 
						|
	"QAM_CONSTELLATION_VALUE_GET",
 | 
						|
	"QAM_EQUALIZER_FILTER_FFE_GET",
 | 
						|
	"QAM_EQUALIZER_FILTER_SPUR_START_GET",
 | 
						|
	"QAM_EQUALIZER_FILTER_SPUR_END_GET",
 | 
						|
	"QAM_EQUALIZER_FILTER_DFE_TAPS_NUMBER_GET",
 | 
						|
	"QAM_EQUALIZER_FILTER_DFE_START_GET",
 | 
						|
	"QAM_EQUALIZER_FILTER_DFE_MIDDLE_GET",
 | 
						|
	"QAM_EQUALIZER_FILTER_DFE_END_GET",
 | 
						|
 | 
						|
	/* OOB */
 | 
						|
	"OOB_PARAMS_SET",
 | 
						|
	"OOB_RESTART_SET",
 | 
						|
	"OOB_ERROR_COUNTERS_GET",
 | 
						|
	"OOB_STATUS_GET",
 | 
						|
 | 
						|
	/* SMA */
 | 
						|
	"SMA_INIT_SET",
 | 
						|
	"SMA_PARAMS_SET",
 | 
						|
	"SMA_TRANSMIT_SET",
 | 
						|
	"SMA_RECEIVE_GET",
 | 
						|
 | 
						|
	/* DEBUG */
 | 
						|
	"INTERNAL",
 | 
						|
};
 | 
						|
 | 
						|
/* Enum of Callabck function types */
 | 
						|
enum MXL_EAGLE_CB_TYPE_E {
 | 
						|
	MXL_EAGLE_CB_FW_DOWNLOAD = 0,
 | 
						|
};
 | 
						|
 | 
						|
/* Enum of power supply types */
 | 
						|
enum MXL_EAGLE_POWER_SUPPLY_SOURCE_E {
 | 
						|
	MXL_EAGLE_POWER_SUPPLY_SOURCE_SINGLE,   /* Single supply of 3.3V */
 | 
						|
	MXL_EAGLE_POWER_SUPPLY_SOURCE_DUAL,     /* Dual supply, 1.8V & 3.3V */
 | 
						|
};
 | 
						|
 | 
						|
/* Enum of I/O pad drive modes */
 | 
						|
enum MXL_EAGLE_IO_MUX_DRIVE_MODE_E {
 | 
						|
	MXL_EAGLE_IO_MUX_DRIVE_MODE_1X,
 | 
						|
	MXL_EAGLE_IO_MUX_DRIVE_MODE_2X,
 | 
						|
	MXL_EAGLE_IO_MUX_DRIVE_MODE_3X,
 | 
						|
	MXL_EAGLE_IO_MUX_DRIVE_MODE_4X,
 | 
						|
	MXL_EAGLE_IO_MUX_DRIVE_MODE_5X,
 | 
						|
	MXL_EAGLE_IO_MUX_DRIVE_MODE_6X,
 | 
						|
	MXL_EAGLE_IO_MUX_DRIVE_MODE_7X,
 | 
						|
	MXL_EAGLE_IO_MUX_DRIVE_MODE_8X,
 | 
						|
};
 | 
						|
 | 
						|
/* Enum of demodulator types. Used for selection of demodulator
 | 
						|
 * type in relevant devices, e.g. ATSC vs. QAM in Mxl691
 | 
						|
 */
 | 
						|
enum MXL_EAGLE_DEMOD_TYPE_E {
 | 
						|
	MXL_EAGLE_DEMOD_TYPE_QAM,    /* Mxl248 or Mxl692 */
 | 
						|
	MXL_EAGLE_DEMOD_TYPE_OOB,    /* Mxl248 only */
 | 
						|
	MXL_EAGLE_DEMOD_TYPE_ATSC    /* Mxl691 or Mxl692 */
 | 
						|
};
 | 
						|
 | 
						|
/* Enum of power modes. Used for initial
 | 
						|
 * activation, or for activating sleep mode
 | 
						|
 */
 | 
						|
enum MXL_EAGLE_POWER_MODE_E {
 | 
						|
	MXL_EAGLE_POWER_MODE_SLEEP,
 | 
						|
	MXL_EAGLE_POWER_MODE_ACTIVE
 | 
						|
};
 | 
						|
 | 
						|
/* Enum of GPIOs, used in device GPIO APIs */
 | 
						|
enum MXL_EAGLE_GPIO_NUMBER_E {
 | 
						|
	MXL_EAGLE_GPIO_NUMBER_0,
 | 
						|
	MXL_EAGLE_GPIO_NUMBER_1,
 | 
						|
	MXL_EAGLE_GPIO_NUMBER_2,
 | 
						|
	MXL_EAGLE_GPIO_NUMBER_3,
 | 
						|
	MXL_EAGLE_GPIO_NUMBER_4,
 | 
						|
	MXL_EAGLE_GPIO_NUMBER_5,
 | 
						|
	MXL_EAGLE_GPIO_NUMBER_6
 | 
						|
};
 | 
						|
 | 
						|
/* Enum of GPIO directions, used in GPIO direction configuration API */
 | 
						|
enum MXL_EAGLE_GPIO_DIRECTION_E {
 | 
						|
	MXL_EAGLE_GPIO_DIRECTION_INPUT,
 | 
						|
	MXL_EAGLE_GPIO_DIRECTION_OUTPUT
 | 
						|
};
 | 
						|
 | 
						|
/* Enum of GPIO level, used in device GPIO APIs */
 | 
						|
enum MXL_EAGLE_GPIO_LEVEL_E {
 | 
						|
	MXL_EAGLE_GPIO_LEVEL_LOW,
 | 
						|
	MXL_EAGLE_GPIO_LEVEL_HIGH,
 | 
						|
};
 | 
						|
 | 
						|
/* Enum of I/O Mux function, used in device I/O mux configuration API */
 | 
						|
enum MXL_EAGLE_IOMUX_FUNCTION_E {
 | 
						|
	MXL_EAGLE_IOMUX_FUNC_FEC_LOCK,
 | 
						|
	MXL_EAGLE_IOMUX_FUNC_MERR,
 | 
						|
};
 | 
						|
 | 
						|
/* Enum of MPEG Data format, used in MPEG and OOB output configuration */
 | 
						|
enum MXL_EAGLE_MPEG_DATA_FORMAT_E {
 | 
						|
	MXL_EAGLE_DATA_SERIAL_LSB_1ST = 0,
 | 
						|
	MXL_EAGLE_DATA_SERIAL_MSB_1ST,
 | 
						|
 | 
						|
	MXL_EAGLE_DATA_SYNC_WIDTH_BIT = 0,
 | 
						|
	MXL_EAGLE_DATA_SYNC_WIDTH_BYTE
 | 
						|
};
 | 
						|
 | 
						|
/* Enum of MPEG Clock format, used in MPEG and OOB output configuration */
 | 
						|
enum MXL_EAGLE_MPEG_CLOCK_FORMAT_E {
 | 
						|
	MXL_EAGLE_CLOCK_ACTIVE_HIGH = 0,
 | 
						|
	MXL_EAGLE_CLOCK_ACTIVE_LOW,
 | 
						|
 | 
						|
	MXL_EAGLE_CLOCK_POSITIVE  = 0,
 | 
						|
	MXL_EAGLE_CLOCK_NEGATIVE,
 | 
						|
 | 
						|
	MXL_EAGLE_CLOCK_IN_PHASE = 0,
 | 
						|
	MXL_EAGLE_CLOCK_INVERTED,
 | 
						|
};
 | 
						|
 | 
						|
/* Enum of MPEG Clock speeds, used in MPEG output configuration */
 | 
						|
enum MXL_EAGLE_MPEG_CLOCK_RATE_E {
 | 
						|
	MXL_EAGLE_MPEG_CLOCK_54MHZ,
 | 
						|
	MXL_EAGLE_MPEG_CLOCK_40_5MHZ,
 | 
						|
	MXL_EAGLE_MPEG_CLOCK_27MHZ,
 | 
						|
	MXL_EAGLE_MPEG_CLOCK_13_5MHZ,
 | 
						|
};
 | 
						|
 | 
						|
/* Enum of Interrupt mask bit, used in host interrupt configuration */
 | 
						|
enum MXL_EAGLE_INTR_MASK_BITS_E {
 | 
						|
	MXL_EAGLE_INTR_MASK_DEMOD = 0,
 | 
						|
	MXL_EAGLE_INTR_MASK_SMA_RX = 1,
 | 
						|
	MXL_EAGLE_INTR_MASK_WDOG = 31
 | 
						|
};
 | 
						|
 | 
						|
/* Enum of QAM Demodulator type, used in QAM configuration */
 | 
						|
enum MXL_EAGLE_QAM_DEMOD_ANNEX_TYPE_E {
 | 
						|
	MXL_EAGLE_QAM_DEMOD_ANNEX_B,    /* J.83B */
 | 
						|
	MXL_EAGLE_QAM_DEMOD_ANNEX_A,    /* DVB-C */
 | 
						|
};
 | 
						|
 | 
						|
/* Enum of QAM Demodulator modulation, used in QAM configuration and status */
 | 
						|
enum MXL_EAGLE_QAM_DEMOD_QAM_TYPE_E {
 | 
						|
	MXL_EAGLE_QAM_DEMOD_QAM16,
 | 
						|
	MXL_EAGLE_QAM_DEMOD_QAM64,
 | 
						|
	MXL_EAGLE_QAM_DEMOD_QAM256,
 | 
						|
	MXL_EAGLE_QAM_DEMOD_QAM1024,
 | 
						|
	MXL_EAGLE_QAM_DEMOD_QAM32,
 | 
						|
	MXL_EAGLE_QAM_DEMOD_QAM128,
 | 
						|
	MXL_EAGLE_QAM_DEMOD_QPSK,
 | 
						|
	MXL_EAGLE_QAM_DEMOD_AUTO,
 | 
						|
};
 | 
						|
 | 
						|
/* Enum of Demodulator IQ setup, used in QAM, OOB configuration and status */
 | 
						|
enum MXL_EAGLE_IQ_FLIP_E {
 | 
						|
	MXL_EAGLE_DEMOD_IQ_NORMAL,
 | 
						|
	MXL_EAGLE_DEMOD_IQ_FLIPPED,
 | 
						|
	MXL_EAGLE_DEMOD_IQ_AUTO,
 | 
						|
};
 | 
						|
 | 
						|
/* Enum of OOB Demodulator symbol rates, used in OOB configuration */
 | 
						|
enum MXL_EAGLE_OOB_DEMOD_SYMB_RATE_E {
 | 
						|
	MXL_EAGLE_OOB_DEMOD_SYMB_RATE_0_772MHZ,  /* ANSI/SCTE 55-2 0.772 MHz */
 | 
						|
	MXL_EAGLE_OOB_DEMOD_SYMB_RATE_1_024MHZ,  /* ANSI/SCTE 55-1 1.024 MHz */
 | 
						|
	MXL_EAGLE_OOB_DEMOD_SYMB_RATE_1_544MHZ,  /* ANSI/SCTE 55-2 1.544 MHz */
 | 
						|
};
 | 
						|
 | 
						|
/* Enum of tuner channel tuning mode */
 | 
						|
enum MXL_EAGLE_TUNER_CHANNEL_TUNE_MODE_E {
 | 
						|
	MXL_EAGLE_TUNER_CHANNEL_TUNE_MODE_VIEW,    /* Normal "view" mode */
 | 
						|
	MXL_EAGLE_TUNER_CHANNEL_TUNE_MODE_SCAN,    /* Fast "scan" mode */
 | 
						|
};
 | 
						|
 | 
						|
/* Enum of tuner bandwidth */
 | 
						|
enum MXL_EAGLE_TUNER_BW_E {
 | 
						|
	MXL_EAGLE_TUNER_BW_6MHZ,
 | 
						|
	MXL_EAGLE_TUNER_BW_7MHZ,
 | 
						|
	MXL_EAGLE_TUNER_BW_8MHZ,
 | 
						|
};
 | 
						|
 | 
						|
/* Enum of tuner bandwidth */
 | 
						|
enum MXL_EAGLE_JUNCTION_TEMPERATURE_E {
 | 
						|
	MXL_EAGLE_JUNCTION_TEMPERATURE_BELOW_0_CELSIUS          = 0,
 | 
						|
	MXL_EAGLE_JUNCTION_TEMPERATURE_BETWEEN_0_TO_14_CELSIUS  = 1,
 | 
						|
	MXL_EAGLE_JUNCTION_TEMPERATURE_BETWEEN_14_TO_28_CELSIUS = 3,
 | 
						|
	MXL_EAGLE_JUNCTION_TEMPERATURE_BETWEEN_28_TO_42_CELSIUS = 2,
 | 
						|
	MXL_EAGLE_JUNCTION_TEMPERATURE_BETWEEN_42_TO_57_CELSIUS = 6,
 | 
						|
	MXL_EAGLE_JUNCTION_TEMPERATURE_BETWEEN_57_TO_71_CELSIUS = 7,
 | 
						|
	MXL_EAGLE_JUNCTION_TEMPERATURE_BETWEEN_71_TO_85_CELSIUS = 5,
 | 
						|
	MXL_EAGLE_JUNCTION_TEMPERATURE_ABOVE_85_CELSIUS         = 4,
 | 
						|
};
 | 
						|
 | 
						|
/* Struct passed in optional callback used during FW download */
 | 
						|
struct MXL_EAGLE_FW_DOWNLOAD_CB_PAYLOAD_T {
 | 
						|
	u32  total_len;
 | 
						|
	u32  downloaded_len;
 | 
						|
};
 | 
						|
 | 
						|
/* Struct used of I2C protocol between host and Eagle, internal use only */
 | 
						|
struct __packed MXL_EAGLE_HOST_MSG_HEADER_T {
 | 
						|
	u8   opcode;
 | 
						|
	u8   seqnum;
 | 
						|
	u8   payload_size;
 | 
						|
	u8   status;
 | 
						|
	u32  checksum;
 | 
						|
};
 | 
						|
 | 
						|
/* Device version information struct */
 | 
						|
struct __packed MXL_EAGLE_DEV_VER_T {
 | 
						|
	u8   chip_id;
 | 
						|
	u8   firmware_ver[MXL_EAGLE_VERSION_SIZE];
 | 
						|
	u8   mxlware_ver[MXL_EAGLE_VERSION_SIZE];
 | 
						|
};
 | 
						|
 | 
						|
/* Xtal configuration struct */
 | 
						|
struct __packed MXL_EAGLE_DEV_XTAL_T {
 | 
						|
	u8   xtal_cap;           /* accepted range is 1..31 pF. Default is 26 */
 | 
						|
	u8   clk_out_enable;
 | 
						|
	u8   clk_out_div_enable;   /* clock out freq is xtal freq / 6 */
 | 
						|
	u8   xtal_sharing_enable; /* if enabled set xtal_cap to 25 pF */
 | 
						|
	u8   xtal_calibration_enable;  /* enable for master, disable for slave */
 | 
						|
};
 | 
						|
 | 
						|
/* GPIO direction struct, internally used in GPIO configuration API */
 | 
						|
struct __packed MXL_EAGLE_DEV_GPIO_DIRECTION_T {
 | 
						|
	u8   gpio_number;
 | 
						|
	u8   gpio_direction;
 | 
						|
};
 | 
						|
 | 
						|
/* GPO level struct, internally used in GPIO configuration API */
 | 
						|
struct __packed MXL_EAGLE_DEV_GPO_LEVEL_T {
 | 
						|
	u8   gpio_number;
 | 
						|
	u8   gpo_level;
 | 
						|
};
 | 
						|
 | 
						|
/* Device Status struct */
 | 
						|
struct MXL_EAGLE_DEV_STATUS_T {
 | 
						|
	u8   temperature;
 | 
						|
	u8   demod_type;
 | 
						|
	u8   power_mode;
 | 
						|
	u8   cpu_utilization_percent;
 | 
						|
};
 | 
						|
 | 
						|
/* Device interrupt configuration struct */
 | 
						|
struct __packed MXL_EAGLE_DEV_INTR_CFG_T {
 | 
						|
	u32  intr_mask;
 | 
						|
	u8   edge_trigger;
 | 
						|
	u8   positive_trigger;
 | 
						|
	u8   global_enable_interrupt;
 | 
						|
};
 | 
						|
 | 
						|
/* MPEG pad drive parameters, used on MPEG output configuration */
 | 
						|
/* See MXL_EAGLE_IO_MUX_DRIVE_MODE_E */
 | 
						|
struct MXL_EAGLE_MPEG_PAD_DRIVE_T {
 | 
						|
	u8   pad_drv_mpeg_syn;
 | 
						|
	u8   pad_drv_mpeg_dat;
 | 
						|
	u8   pad_drv_mpeg_val;
 | 
						|
	u8   pad_drv_mpeg_clk;
 | 
						|
};
 | 
						|
 | 
						|
/* MPEGOUT parameter struct, used in MPEG output configuration */
 | 
						|
struct MXL_EAGLE_MPEGOUT_PARAMS_T {
 | 
						|
	u8   mpeg_parallel;
 | 
						|
	u8   msb_first;
 | 
						|
	u8   mpeg_sync_pulse_width;    /* See MXL_EAGLE_MPEG_DATA_FORMAT_E */
 | 
						|
	u8   mpeg_valid_pol;
 | 
						|
	u8   mpeg_sync_pol;
 | 
						|
	u8   mpeg_clk_pol;
 | 
						|
	u8   mpeg3wire_mode_enable;
 | 
						|
	u8   mpeg_clk_freq;
 | 
						|
	struct MXL_EAGLE_MPEG_PAD_DRIVE_T mpeg_pad_drv;
 | 
						|
};
 | 
						|
 | 
						|
/* QAM Demodulator parameters struct, used in QAM params configuration */
 | 
						|
struct __packed MXL_EAGLE_QAM_DEMOD_PARAMS_T {
 | 
						|
	u8   annex_type;
 | 
						|
	u8   qam_type;
 | 
						|
	u8   iq_flip;
 | 
						|
	u8   search_range_idx;
 | 
						|
	u8   spur_canceller_enable;
 | 
						|
	u32  symbol_rate_hz;
 | 
						|
	u32  symbol_rate_256qam_hz;
 | 
						|
};
 | 
						|
 | 
						|
/* QAM Demodulator status */
 | 
						|
struct MXL_EAGLE_QAM_DEMOD_STATUS_T {
 | 
						|
	u8   annex_type;
 | 
						|
	u8   qam_type;
 | 
						|
	u8   iq_flip;
 | 
						|
	u8   interleaver_depth_i;
 | 
						|
	u8   interleaver_depth_j;
 | 
						|
	u8   qam_locked;
 | 
						|
	u8   fec_locked;
 | 
						|
	u8   mpeg_locked;
 | 
						|
	u16  snr_db_tenths;
 | 
						|
	s16  timing_offset;
 | 
						|
	s32  carrier_offset_hz;
 | 
						|
};
 | 
						|
 | 
						|
/* QAM Demodulator error counters */
 | 
						|
struct MXL_EAGLE_QAM_DEMOD_ERROR_COUNTERS_T {
 | 
						|
	u32  corrected_code_words;
 | 
						|
	u32  uncorrected_code_words;
 | 
						|
	u32  total_code_words_received;
 | 
						|
	u32  corrected_bits;
 | 
						|
	u32  error_mpeg_frames;
 | 
						|
	u32  mpeg_frames_received;
 | 
						|
	u32  erasures;
 | 
						|
};
 | 
						|
 | 
						|
/* QAM Demodulator constellation point */
 | 
						|
struct MXL_EAGLE_QAM_DEMOD_CONSTELLATION_VAL_T {
 | 
						|
	s16  i_value[12];
 | 
						|
	s16  q_value[12];
 | 
						|
};
 | 
						|
 | 
						|
/* QAM Demodulator equalizer filter taps */
 | 
						|
struct MXL_EAGLE_QAM_DEMOD_EQU_FILTER_T {
 | 
						|
	s16  ffe_taps[MXL_EAGLE_QAM_FFE_TAPS_LENGTH];
 | 
						|
	s16  spur_taps[MXL_EAGLE_QAM_SPUR_TAPS_LENGTH];
 | 
						|
	s16  dfe_taps[MXL_EAGLE_QAM_DFE_TAPS_LENGTH];
 | 
						|
	u8   ffe_leading_tap_index;
 | 
						|
	u8   dfe_taps_number;
 | 
						|
};
 | 
						|
 | 
						|
/* OOB Demodulator parameters struct, used in OOB params configuration */
 | 
						|
struct __packed MXL_EAGLE_OOB_DEMOD_PARAMS_T {
 | 
						|
	u8   symbol_rate;
 | 
						|
	u8   iq_flip;
 | 
						|
	u8   clk_pol;
 | 
						|
};
 | 
						|
 | 
						|
/* OOB Demodulator error counters */
 | 
						|
struct MXL_EAGLE_OOB_DEMOD_ERROR_COUNTERS_T {
 | 
						|
	u32  corrected_packets;
 | 
						|
	u32  uncorrected_packets;
 | 
						|
	u32  total_packets_received;
 | 
						|
};
 | 
						|
 | 
						|
/* OOB status */
 | 
						|
struct __packed MXL_EAGLE_OOB_DEMOD_STATUS_T {
 | 
						|
	u16  snr_db_tenths;
 | 
						|
	s16  timing_offset;
 | 
						|
	s32  carrier_offsetHz;
 | 
						|
	u8   qam_locked;
 | 
						|
	u8   fec_locked;
 | 
						|
	u8   mpeg_locked;
 | 
						|
	u8   retune_required;
 | 
						|
	u8   iq_flip;
 | 
						|
};
 | 
						|
 | 
						|
/* ATSC Demodulator status */
 | 
						|
struct __packed MXL_EAGLE_ATSC_DEMOD_STATUS_T {
 | 
						|
	s16  snr_db_tenths;
 | 
						|
	s16  timing_offset;
 | 
						|
	s32  carrier_offset_hz;
 | 
						|
	u8   frame_lock;
 | 
						|
	u8   atsc_lock;
 | 
						|
	u8   fec_lock;
 | 
						|
};
 | 
						|
 | 
						|
/* ATSC Demodulator error counters */
 | 
						|
struct MXL_EAGLE_ATSC_DEMOD_ERROR_COUNTERS_T {
 | 
						|
	u32  error_packets;
 | 
						|
	u32  total_packets;
 | 
						|
	u32  error_bytes;
 | 
						|
};
 | 
						|
 | 
						|
/* ATSC Demodulator equalizers filter taps */
 | 
						|
struct __packed MXL_EAGLE_ATSC_DEMOD_EQU_FILTER_T {
 | 
						|
	s16  ffe_taps[MXL_EAGLE_ATSC_FFE_TAPS_LENGTH];
 | 
						|
	s8   dfe_taps[MXL_EAGLE_ATSC_DFE_TAPS_LENGTH];
 | 
						|
};
 | 
						|
 | 
						|
/* Tuner AGC Status */
 | 
						|
struct __packed MXL_EAGLE_TUNER_AGC_STATUS_T {
 | 
						|
	u8   locked;
 | 
						|
	u16  raw_agc_gain;    /* AGC gain [dB] = rawAgcGain / 2^6 */
 | 
						|
	s16  rx_power_db_hundredths;
 | 
						|
};
 | 
						|
 | 
						|
/* Tuner channel tune parameters */
 | 
						|
struct __packed MXL_EAGLE_TUNER_CHANNEL_PARAMS_T {
 | 
						|
	u32  freq_hz;
 | 
						|
	u8   tune_mode;
 | 
						|
	u8   bandwidth;
 | 
						|
};
 | 
						|
 | 
						|
/* Tuner channel lock indications */
 | 
						|
struct __packed MXL_EAGLE_TUNER_LOCK_STATUS_T {
 | 
						|
	u8   rf_pll_locked;
 | 
						|
	u8   ref_pll_locked;
 | 
						|
};
 | 
						|
 | 
						|
/* Smart antenna parameters  used in Smart antenna params configuration */
 | 
						|
struct __packed MXL_EAGLE_SMA_PARAMS_T {
 | 
						|
	u8   full_duplex_enable;
 | 
						|
	u8   rx_disable;
 | 
						|
	u8   idle_logic_high;
 | 
						|
};
 | 
						|
 | 
						|
/* Smart antenna message format */
 | 
						|
struct __packed MXL_EAGLE_SMA_MESSAGE_T {
 | 
						|
	u32  payload_bits;
 | 
						|
	u8   total_num_bits;
 | 
						|
};
 | 
						|
 |