brintos

brintos / linux-shallow public Read only

0
0
Text · 14.5 KiB · c603f3d Raw
540 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 * Driver for the MaxLinear MxL69x family of combo tuners/demods4 *5 * Copyright (C) 2020 Brad Love <brad@nextdimension.cc>6 *7 * based on code:8 * Copyright (c) 2016 MaxLinear, Inc. All rights reserved9 * which was released under GPL V210 */11 12/*****************************************************************************13 *	Defines14 *****************************************************************************15 */16#define MXL_EAGLE_HOST_MSG_HEADER_SIZE  817#define MXL_EAGLE_FW_MAX_SIZE_IN_KB     7618#define MXL_EAGLE_QAM_FFE_TAPS_LENGTH   1619#define MXL_EAGLE_QAM_SPUR_TAPS_LENGTH  3220#define MXL_EAGLE_QAM_DFE_TAPS_LENGTH   7221#define MXL_EAGLE_ATSC_FFE_TAPS_LENGTH  409622#define MXL_EAGLE_ATSC_DFE_TAPS_LENGTH  38423#define MXL_EAGLE_VERSION_SIZE          5     /* A.B.C.D-RCx */24#define MXL_EAGLE_FW_LOAD_TIME          5025 26#define MXL_EAGLE_FW_MAX_SIZE_IN_KB       7627#define MXL_EAGLE_FW_HEADER_SIZE          1628#define MXL_EAGLE_FW_SEGMENT_HEADER_SIZE  829#define MXL_EAGLE_MAX_I2C_PACKET_SIZE     5830#define MXL_EAGLE_I2C_MHEADER_SIZE        631#define MXL_EAGLE_I2C_PHEADER_SIZE        232 33/* Enum of Eagle family devices */34enum MXL_EAGLE_DEVICE_E {35	MXL_EAGLE_DEVICE_691 = 1,    /* Device Mxl691 */36	MXL_EAGLE_DEVICE_248 = 2,    /* Device Mxl248 */37	MXL_EAGLE_DEVICE_692 = 3,    /* Device Mxl692 */38	MXL_EAGLE_DEVICE_MAX,        /* No such device */39};40 41#define VER_A   142#define VER_B   143#define VER_C   144#define VER_D   345#define VER_E   646 47/* Enum of Host to Eagle I2C protocol opcodes */48enum MXL_EAGLE_OPCODE_E {49	/* DEVICE */50	MXL_EAGLE_OPCODE_DEVICE_DEMODULATOR_TYPE_SET,51	MXL_EAGLE_OPCODE_DEVICE_MPEG_OUT_PARAMS_SET,52	MXL_EAGLE_OPCODE_DEVICE_POWERMODE_SET,53	MXL_EAGLE_OPCODE_DEVICE_GPIO_DIRECTION_SET,54	MXL_EAGLE_OPCODE_DEVICE_GPO_LEVEL_SET,55	MXL_EAGLE_OPCODE_DEVICE_INTR_MASK_SET,56	MXL_EAGLE_OPCODE_DEVICE_IO_MUX_SET,57	MXL_EAGLE_OPCODE_DEVICE_VERSION_GET,58	MXL_EAGLE_OPCODE_DEVICE_STATUS_GET,59	MXL_EAGLE_OPCODE_DEVICE_GPI_LEVEL_GET,60 61	/* TUNER */62	MXL_EAGLE_OPCODE_TUNER_CHANNEL_TUNE_SET,63	MXL_EAGLE_OPCODE_TUNER_LOCK_STATUS_GET,64	MXL_EAGLE_OPCODE_TUNER_AGC_STATUS_GET,65 66	/* ATSC */67	MXL_EAGLE_OPCODE_ATSC_INIT_SET,68	MXL_EAGLE_OPCODE_ATSC_ACQUIRE_CARRIER_SET,69	MXL_EAGLE_OPCODE_ATSC_STATUS_GET,70	MXL_EAGLE_OPCODE_ATSC_ERROR_COUNTERS_GET,71	MXL_EAGLE_OPCODE_ATSC_EQUALIZER_FILTER_DFE_TAPS_GET,72	MXL_EAGLE_OPCODE_ATSC_EQUALIZER_FILTER_FFE_TAPS_GET,73 74	/* QAM */75	MXL_EAGLE_OPCODE_QAM_PARAMS_SET,76	MXL_EAGLE_OPCODE_QAM_RESTART_SET,77	MXL_EAGLE_OPCODE_QAM_STATUS_GET,78	MXL_EAGLE_OPCODE_QAM_ERROR_COUNTERS_GET,79	MXL_EAGLE_OPCODE_QAM_CONSTELLATION_VALUE_GET,80	MXL_EAGLE_OPCODE_QAM_EQUALIZER_FILTER_FFE_GET,81	MXL_EAGLE_OPCODE_QAM_EQUALIZER_FILTER_SPUR_START_GET,82	MXL_EAGLE_OPCODE_QAM_EQUALIZER_FILTER_SPUR_END_GET,83	MXL_EAGLE_OPCODE_QAM_EQUALIZER_FILTER_DFE_TAPS_NUMBER_GET,84	MXL_EAGLE_OPCODE_QAM_EQUALIZER_FILTER_DFE_START_GET,85	MXL_EAGLE_OPCODE_QAM_EQUALIZER_FILTER_DFE_MIDDLE_GET,86	MXL_EAGLE_OPCODE_QAM_EQUALIZER_FILTER_DFE_END_GET,87 88	/* OOB */89	MXL_EAGLE_OPCODE_OOB_PARAMS_SET,90	MXL_EAGLE_OPCODE_OOB_RESTART_SET,91	MXL_EAGLE_OPCODE_OOB_ERROR_COUNTERS_GET,92	MXL_EAGLE_OPCODE_OOB_STATUS_GET,93 94	/* SMA */95	MXL_EAGLE_OPCODE_SMA_INIT_SET,96	MXL_EAGLE_OPCODE_SMA_PARAMS_SET,97	MXL_EAGLE_OPCODE_SMA_TRANSMIT_SET,98	MXL_EAGLE_OPCODE_SMA_RECEIVE_GET,99 100	/* DEBUG */101	MXL_EAGLE_OPCODE_INTERNAL,102 103	MXL_EAGLE_OPCODE_MAX = 70,104};105 106/* Enum of Host to Eagle I2C protocol opcodes */107static const char * const MXL_EAGLE_OPCODE_STRING[] = {108	/* DEVICE */109	"DEVICE_DEMODULATOR_TYPE_SET",110	"DEVICE_MPEG_OUT_PARAMS_SET",111	"DEVICE_POWERMODE_SET",112	"DEVICE_GPIO_DIRECTION_SET",113	"DEVICE_GPO_LEVEL_SET",114	"DEVICE_INTR_MASK_SET",115	"DEVICE_IO_MUX_SET",116	"DEVICE_VERSION_GET",117	"DEVICE_STATUS_GET",118	"DEVICE_GPI_LEVEL_GET",119 120	/* TUNER */121	"TUNER_CHANNEL_TUNE_SET",122	"TUNER_LOCK_STATUS_GET",123	"TUNER_AGC_STATUS_GET",124 125	/* ATSC */126	"ATSC_INIT_SET",127	"ATSC_ACQUIRE_CARRIER_SET",128	"ATSC_STATUS_GET",129	"ATSC_ERROR_COUNTERS_GET",130	"ATSC_EQUALIZER_FILTER_DFE_TAPS_GET",131	"ATSC_EQUALIZER_FILTER_FFE_TAPS_GET",132 133	/* QAM */134	"QAM_PARAMS_SET",135	"QAM_RESTART_SET",136	"QAM_STATUS_GET",137	"QAM_ERROR_COUNTERS_GET",138	"QAM_CONSTELLATION_VALUE_GET",139	"QAM_EQUALIZER_FILTER_FFE_GET",140	"QAM_EQUALIZER_FILTER_SPUR_START_GET",141	"QAM_EQUALIZER_FILTER_SPUR_END_GET",142	"QAM_EQUALIZER_FILTER_DFE_TAPS_NUMBER_GET",143	"QAM_EQUALIZER_FILTER_DFE_START_GET",144	"QAM_EQUALIZER_FILTER_DFE_MIDDLE_GET",145	"QAM_EQUALIZER_FILTER_DFE_END_GET",146 147	/* OOB */148	"OOB_PARAMS_SET",149	"OOB_RESTART_SET",150	"OOB_ERROR_COUNTERS_GET",151	"OOB_STATUS_GET",152 153	/* SMA */154	"SMA_INIT_SET",155	"SMA_PARAMS_SET",156	"SMA_TRANSMIT_SET",157	"SMA_RECEIVE_GET",158 159	/* DEBUG */160	"INTERNAL",161};162 163/* Enum of Callabck function types */164enum MXL_EAGLE_CB_TYPE_E {165	MXL_EAGLE_CB_FW_DOWNLOAD = 0,166};167 168/* Enum of power supply types */169enum MXL_EAGLE_POWER_SUPPLY_SOURCE_E {170	MXL_EAGLE_POWER_SUPPLY_SOURCE_SINGLE,   /* Single supply of 3.3V */171	MXL_EAGLE_POWER_SUPPLY_SOURCE_DUAL,     /* Dual supply, 1.8V & 3.3V */172};173 174/* Enum of I/O pad drive modes */175enum MXL_EAGLE_IO_MUX_DRIVE_MODE_E {176	MXL_EAGLE_IO_MUX_DRIVE_MODE_1X,177	MXL_EAGLE_IO_MUX_DRIVE_MODE_2X,178	MXL_EAGLE_IO_MUX_DRIVE_MODE_3X,179	MXL_EAGLE_IO_MUX_DRIVE_MODE_4X,180	MXL_EAGLE_IO_MUX_DRIVE_MODE_5X,181	MXL_EAGLE_IO_MUX_DRIVE_MODE_6X,182	MXL_EAGLE_IO_MUX_DRIVE_MODE_7X,183	MXL_EAGLE_IO_MUX_DRIVE_MODE_8X,184};185 186/* Enum of demodulator types. Used for selection of demodulator187 * type in relevant devices, e.g. ATSC vs. QAM in Mxl691188 */189enum MXL_EAGLE_DEMOD_TYPE_E {190	MXL_EAGLE_DEMOD_TYPE_QAM,    /* Mxl248 or Mxl692 */191	MXL_EAGLE_DEMOD_TYPE_OOB,    /* Mxl248 only */192	MXL_EAGLE_DEMOD_TYPE_ATSC    /* Mxl691 or Mxl692 */193};194 195/* Enum of power modes. Used for initial196 * activation, or for activating sleep mode197 */198enum MXL_EAGLE_POWER_MODE_E {199	MXL_EAGLE_POWER_MODE_SLEEP,200	MXL_EAGLE_POWER_MODE_ACTIVE201};202 203/* Enum of GPIOs, used in device GPIO APIs */204enum MXL_EAGLE_GPIO_NUMBER_E {205	MXL_EAGLE_GPIO_NUMBER_0,206	MXL_EAGLE_GPIO_NUMBER_1,207	MXL_EAGLE_GPIO_NUMBER_2,208	MXL_EAGLE_GPIO_NUMBER_3,209	MXL_EAGLE_GPIO_NUMBER_4,210	MXL_EAGLE_GPIO_NUMBER_5,211	MXL_EAGLE_GPIO_NUMBER_6212};213 214/* Enum of GPIO directions, used in GPIO direction configuration API */215enum MXL_EAGLE_GPIO_DIRECTION_E {216	MXL_EAGLE_GPIO_DIRECTION_INPUT,217	MXL_EAGLE_GPIO_DIRECTION_OUTPUT218};219 220/* Enum of GPIO level, used in device GPIO APIs */221enum MXL_EAGLE_GPIO_LEVEL_E {222	MXL_EAGLE_GPIO_LEVEL_LOW,223	MXL_EAGLE_GPIO_LEVEL_HIGH,224};225 226/* Enum of I/O Mux function, used in device I/O mux configuration API */227enum MXL_EAGLE_IOMUX_FUNCTION_E {228	MXL_EAGLE_IOMUX_FUNC_FEC_LOCK,229	MXL_EAGLE_IOMUX_FUNC_MERR,230};231 232/* Enum of MPEG Data format, used in MPEG and OOB output configuration */233enum MXL_EAGLE_MPEG_DATA_FORMAT_E {234	MXL_EAGLE_DATA_SERIAL_LSB_1ST = 0,235	MXL_EAGLE_DATA_SERIAL_MSB_1ST,236 237	MXL_EAGLE_DATA_SYNC_WIDTH_BIT = 0,238	MXL_EAGLE_DATA_SYNC_WIDTH_BYTE239};240 241/* Enum of MPEG Clock format, used in MPEG and OOB output configuration */242enum MXL_EAGLE_MPEG_CLOCK_FORMAT_E {243	MXL_EAGLE_CLOCK_ACTIVE_HIGH = 0,244	MXL_EAGLE_CLOCK_ACTIVE_LOW,245 246	MXL_EAGLE_CLOCK_POSITIVE  = 0,247	MXL_EAGLE_CLOCK_NEGATIVE,248 249	MXL_EAGLE_CLOCK_IN_PHASE = 0,250	MXL_EAGLE_CLOCK_INVERTED,251};252 253/* Enum of MPEG Clock speeds, used in MPEG output configuration */254enum MXL_EAGLE_MPEG_CLOCK_RATE_E {255	MXL_EAGLE_MPEG_CLOCK_54MHZ,256	MXL_EAGLE_MPEG_CLOCK_40_5MHZ,257	MXL_EAGLE_MPEG_CLOCK_27MHZ,258	MXL_EAGLE_MPEG_CLOCK_13_5MHZ,259};260 261/* Enum of Interrupt mask bit, used in host interrupt configuration */262enum MXL_EAGLE_INTR_MASK_BITS_E {263	MXL_EAGLE_INTR_MASK_DEMOD = 0,264	MXL_EAGLE_INTR_MASK_SMA_RX = 1,265	MXL_EAGLE_INTR_MASK_WDOG = 31266};267 268/* Enum of QAM Demodulator type, used in QAM configuration */269enum MXL_EAGLE_QAM_DEMOD_ANNEX_TYPE_E {270	MXL_EAGLE_QAM_DEMOD_ANNEX_B,    /* J.83B */271	MXL_EAGLE_QAM_DEMOD_ANNEX_A,    /* DVB-C */272};273 274/* Enum of QAM Demodulator modulation, used in QAM configuration and status */275enum MXL_EAGLE_QAM_DEMOD_QAM_TYPE_E {276	MXL_EAGLE_QAM_DEMOD_QAM16,277	MXL_EAGLE_QAM_DEMOD_QAM64,278	MXL_EAGLE_QAM_DEMOD_QAM256,279	MXL_EAGLE_QAM_DEMOD_QAM1024,280	MXL_EAGLE_QAM_DEMOD_QAM32,281	MXL_EAGLE_QAM_DEMOD_QAM128,282	MXL_EAGLE_QAM_DEMOD_QPSK,283	MXL_EAGLE_QAM_DEMOD_AUTO,284};285 286/* Enum of Demodulator IQ setup, used in QAM, OOB configuration and status */287enum MXL_EAGLE_IQ_FLIP_E {288	MXL_EAGLE_DEMOD_IQ_NORMAL,289	MXL_EAGLE_DEMOD_IQ_FLIPPED,290	MXL_EAGLE_DEMOD_IQ_AUTO,291};292 293/* Enum of OOB Demodulator symbol rates, used in OOB configuration */294enum MXL_EAGLE_OOB_DEMOD_SYMB_RATE_E {295	MXL_EAGLE_OOB_DEMOD_SYMB_RATE_0_772MHZ,  /* ANSI/SCTE 55-2 0.772 MHz */296	MXL_EAGLE_OOB_DEMOD_SYMB_RATE_1_024MHZ,  /* ANSI/SCTE 55-1 1.024 MHz */297	MXL_EAGLE_OOB_DEMOD_SYMB_RATE_1_544MHZ,  /* ANSI/SCTE 55-2 1.544 MHz */298};299 300/* Enum of tuner channel tuning mode */301enum MXL_EAGLE_TUNER_CHANNEL_TUNE_MODE_E {302	MXL_EAGLE_TUNER_CHANNEL_TUNE_MODE_VIEW,    /* Normal "view" mode */303	MXL_EAGLE_TUNER_CHANNEL_TUNE_MODE_SCAN,    /* Fast "scan" mode */304};305 306/* Enum of tuner bandwidth */307enum MXL_EAGLE_TUNER_BW_E {308	MXL_EAGLE_TUNER_BW_6MHZ,309	MXL_EAGLE_TUNER_BW_7MHZ,310	MXL_EAGLE_TUNER_BW_8MHZ,311};312 313/* Enum of tuner bandwidth */314enum MXL_EAGLE_JUNCTION_TEMPERATURE_E {315	MXL_EAGLE_JUNCTION_TEMPERATURE_BELOW_0_CELSIUS          = 0,316	MXL_EAGLE_JUNCTION_TEMPERATURE_BETWEEN_0_TO_14_CELSIUS  = 1,317	MXL_EAGLE_JUNCTION_TEMPERATURE_BETWEEN_14_TO_28_CELSIUS = 3,318	MXL_EAGLE_JUNCTION_TEMPERATURE_BETWEEN_28_TO_42_CELSIUS = 2,319	MXL_EAGLE_JUNCTION_TEMPERATURE_BETWEEN_42_TO_57_CELSIUS = 6,320	MXL_EAGLE_JUNCTION_TEMPERATURE_BETWEEN_57_TO_71_CELSIUS = 7,321	MXL_EAGLE_JUNCTION_TEMPERATURE_BETWEEN_71_TO_85_CELSIUS = 5,322	MXL_EAGLE_JUNCTION_TEMPERATURE_ABOVE_85_CELSIUS         = 4,323};324 325/* Struct passed in optional callback used during FW download */326struct MXL_EAGLE_FW_DOWNLOAD_CB_PAYLOAD_T {327	u32  total_len;328	u32  downloaded_len;329};330 331/* Struct used of I2C protocol between host and Eagle, internal use only */332struct __packed MXL_EAGLE_HOST_MSG_HEADER_T {333	u8   opcode;334	u8   seqnum;335	u8   payload_size;336	u8   status;337	u32  checksum;338};339 340/* Device version information struct */341struct __packed MXL_EAGLE_DEV_VER_T {342	u8   chip_id;343	u8   firmware_ver[MXL_EAGLE_VERSION_SIZE];344	u8   mxlware_ver[MXL_EAGLE_VERSION_SIZE];345};346 347/* Xtal configuration struct */348struct __packed MXL_EAGLE_DEV_XTAL_T {349	u8   xtal_cap;           /* accepted range is 1..31 pF. Default is 26 */350	u8   clk_out_enable;351	u8   clk_out_div_enable;   /* clock out freq is xtal freq / 6 */352	u8   xtal_sharing_enable; /* if enabled set xtal_cap to 25 pF */353	u8   xtal_calibration_enable;  /* enable for master, disable for slave */354};355 356/* GPIO direction struct, internally used in GPIO configuration API */357struct __packed MXL_EAGLE_DEV_GPIO_DIRECTION_T {358	u8   gpio_number;359	u8   gpio_direction;360};361 362/* GPO level struct, internally used in GPIO configuration API */363struct __packed MXL_EAGLE_DEV_GPO_LEVEL_T {364	u8   gpio_number;365	u8   gpo_level;366};367 368/* Device Status struct */369struct MXL_EAGLE_DEV_STATUS_T {370	u8   temperature;371	u8   demod_type;372	u8   power_mode;373	u8   cpu_utilization_percent;374};375 376/* Device interrupt configuration struct */377struct __packed MXL_EAGLE_DEV_INTR_CFG_T {378	u32  intr_mask;379	u8   edge_trigger;380	u8   positive_trigger;381	u8   global_enable_interrupt;382};383 384/* MPEG pad drive parameters, used on MPEG output configuration */385/* See MXL_EAGLE_IO_MUX_DRIVE_MODE_E */386struct MXL_EAGLE_MPEG_PAD_DRIVE_T {387	u8   pad_drv_mpeg_syn;388	u8   pad_drv_mpeg_dat;389	u8   pad_drv_mpeg_val;390	u8   pad_drv_mpeg_clk;391};392 393/* MPEGOUT parameter struct, used in MPEG output configuration */394struct MXL_EAGLE_MPEGOUT_PARAMS_T {395	u8   mpeg_parallel;396	u8   msb_first;397	u8   mpeg_sync_pulse_width;    /* See MXL_EAGLE_MPEG_DATA_FORMAT_E */398	u8   mpeg_valid_pol;399	u8   mpeg_sync_pol;400	u8   mpeg_clk_pol;401	u8   mpeg3wire_mode_enable;402	u8   mpeg_clk_freq;403	struct MXL_EAGLE_MPEG_PAD_DRIVE_T mpeg_pad_drv;404};405 406/* QAM Demodulator parameters struct, used in QAM params configuration */407struct __packed MXL_EAGLE_QAM_DEMOD_PARAMS_T {408	u8   annex_type;409	u8   qam_type;410	u8   iq_flip;411	u8   search_range_idx;412	u8   spur_canceller_enable;413	u32  symbol_rate_hz;414	u32  symbol_rate_256qam_hz;415};416 417/* QAM Demodulator status */418struct MXL_EAGLE_QAM_DEMOD_STATUS_T {419	u8   annex_type;420	u8   qam_type;421	u8   iq_flip;422	u8   interleaver_depth_i;423	u8   interleaver_depth_j;424	u8   qam_locked;425	u8   fec_locked;426	u8   mpeg_locked;427	u16  snr_db_tenths;428	s16  timing_offset;429	s32  carrier_offset_hz;430};431 432/* QAM Demodulator error counters */433struct MXL_EAGLE_QAM_DEMOD_ERROR_COUNTERS_T {434	u32  corrected_code_words;435	u32  uncorrected_code_words;436	u32  total_code_words_received;437	u32  corrected_bits;438	u32  error_mpeg_frames;439	u32  mpeg_frames_received;440	u32  erasures;441};442 443/* QAM Demodulator constellation point */444struct MXL_EAGLE_QAM_DEMOD_CONSTELLATION_VAL_T {445	s16  i_value[12];446	s16  q_value[12];447};448 449/* QAM Demodulator equalizer filter taps */450struct MXL_EAGLE_QAM_DEMOD_EQU_FILTER_T {451	s16  ffe_taps[MXL_EAGLE_QAM_FFE_TAPS_LENGTH];452	s16  spur_taps[MXL_EAGLE_QAM_SPUR_TAPS_LENGTH];453	s16  dfe_taps[MXL_EAGLE_QAM_DFE_TAPS_LENGTH];454	u8   ffe_leading_tap_index;455	u8   dfe_taps_number;456};457 458/* OOB Demodulator parameters struct, used in OOB params configuration */459struct __packed MXL_EAGLE_OOB_DEMOD_PARAMS_T {460	u8   symbol_rate;461	u8   iq_flip;462	u8   clk_pol;463};464 465/* OOB Demodulator error counters */466struct MXL_EAGLE_OOB_DEMOD_ERROR_COUNTERS_T {467	u32  corrected_packets;468	u32  uncorrected_packets;469	u32  total_packets_received;470};471 472/* OOB status */473struct __packed MXL_EAGLE_OOB_DEMOD_STATUS_T {474	u16  snr_db_tenths;475	s16  timing_offset;476	s32  carrier_offsetHz;477	u8   qam_locked;478	u8   fec_locked;479	u8   mpeg_locked;480	u8   retune_required;481	u8   iq_flip;482};483 484/* ATSC Demodulator status */485struct __packed MXL_EAGLE_ATSC_DEMOD_STATUS_T {486	s16  snr_db_tenths;487	s16  timing_offset;488	s32  carrier_offset_hz;489	u8   frame_lock;490	u8   atsc_lock;491	u8   fec_lock;492};493 494/* ATSC Demodulator error counters */495struct MXL_EAGLE_ATSC_DEMOD_ERROR_COUNTERS_T {496	u32  error_packets;497	u32  total_packets;498	u32  error_bytes;499};500 501/* ATSC Demodulator equalizers filter taps */502struct __packed MXL_EAGLE_ATSC_DEMOD_EQU_FILTER_T {503	s16  ffe_taps[MXL_EAGLE_ATSC_FFE_TAPS_LENGTH];504	s8   dfe_taps[MXL_EAGLE_ATSC_DFE_TAPS_LENGTH];505};506 507/* Tuner AGC Status */508struct __packed MXL_EAGLE_TUNER_AGC_STATUS_T {509	u8   locked;510	u16  raw_agc_gain;    /* AGC gain [dB] = rawAgcGain / 2^6 */511	s16  rx_power_db_hundredths;512};513 514/* Tuner channel tune parameters */515struct __packed MXL_EAGLE_TUNER_CHANNEL_PARAMS_T {516	u32  freq_hz;517	u8   tune_mode;518	u8   bandwidth;519};520 521/* Tuner channel lock indications */522struct __packed MXL_EAGLE_TUNER_LOCK_STATUS_T {523	u8   rf_pll_locked;524	u8   ref_pll_locked;525};526 527/* Smart antenna parameters  used in Smart antenna params configuration */528struct __packed MXL_EAGLE_SMA_PARAMS_T {529	u8   full_duplex_enable;530	u8   rx_disable;531	u8   idle_logic_high;532};533 534/* Smart antenna message format */535struct __packed MXL_EAGLE_SMA_MESSAGE_T {536	u32  payload_bits;537	u8   total_num_bits;538};539 540