162306a36Sopenharmony_ci 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci Copyright (c), 2004-2005,2007-2010 Trident Microsystems, Inc. 462306a36Sopenharmony_ci All rights reserved. 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci Redistribution and use in source and binary forms, with or without 762306a36Sopenharmony_ci modification, are permitted provided that the following conditions are met: 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci * Redistributions of source code must retain the above copyright notice, 1062306a36Sopenharmony_ci this list of conditions and the following disclaimer. 1162306a36Sopenharmony_ci * Redistributions in binary form must reproduce the above copyright notice, 1262306a36Sopenharmony_ci this list of conditions and the following disclaimer in the documentation 1362306a36Sopenharmony_ci and/or other materials provided with the distribution. 1462306a36Sopenharmony_ci * Neither the name of Trident Microsystems nor Hauppauge Computer Works 1562306a36Sopenharmony_ci nor the names of its contributors may be used to endorse or promote 1662306a36Sopenharmony_ci products derived from this software without specific prior written 1762306a36Sopenharmony_ci permission. 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 2062306a36Sopenharmony_ci AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2162306a36Sopenharmony_ci IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2262306a36Sopenharmony_ci ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 2362306a36Sopenharmony_ci LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2462306a36Sopenharmony_ci CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2562306a36Sopenharmony_ci SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2662306a36Sopenharmony_ci INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2762306a36Sopenharmony_ci CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2862306a36Sopenharmony_ci ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 2962306a36Sopenharmony_ci POSSIBILITY OF SUCH DAMAGE. 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci DRXJ specific header file 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci Authors: Dragan Savic, Milos Nikolic, Mihajlo Katona, Tao Ding, Paul Janssen 3462306a36Sopenharmony_ci*/ 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci#ifndef __DRXJ_H__ 3762306a36Sopenharmony_ci#define __DRXJ_H__ 3862306a36Sopenharmony_ci/*------------------------------------------------------------------------- 3962306a36Sopenharmony_ciINCLUDES 4062306a36Sopenharmony_ci-------------------------------------------------------------------------*/ 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci#include "drx_driver.h" 4362306a36Sopenharmony_ci#include "drx_dap_fasi.h" 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci/* Check DRX-J specific dap condition */ 4662306a36Sopenharmony_ci/* Multi master mode and short addr format only will not work. 4762306a36Sopenharmony_ci RMW, CRC reset, broadcast and switching back to single master mode 4862306a36Sopenharmony_ci cannot be done with short addr only in multi master mode. */ 4962306a36Sopenharmony_ci#if ((DRXDAP_SINGLE_MASTER == 0) && (DRXDAPFASI_LONG_ADDR_ALLOWED == 0)) 5062306a36Sopenharmony_ci#error "Multi master mode and short addressing only is an illegal combination" 5162306a36Sopenharmony_ci *; /* Generate a fatal compiler error to make sure it stops here, 5262306a36Sopenharmony_ci this is necessary because not all compilers stop after a #error. */ 5362306a36Sopenharmony_ci#endif 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci/*------------------------------------------------------------------------- 5662306a36Sopenharmony_ciTYPEDEFS 5762306a36Sopenharmony_ci-------------------------------------------------------------------------*/ 5862306a36Sopenharmony_ci/*============================================================================*/ 5962306a36Sopenharmony_ci/*============================================================================*/ 6062306a36Sopenharmony_ci/*== code support ============================================================*/ 6162306a36Sopenharmony_ci/*============================================================================*/ 6262306a36Sopenharmony_ci/*============================================================================*/ 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci/*============================================================================*/ 6562306a36Sopenharmony_ci/*============================================================================*/ 6662306a36Sopenharmony_ci/*== SCU cmd if =============================================================*/ 6762306a36Sopenharmony_ci/*============================================================================*/ 6862306a36Sopenharmony_ci/*============================================================================*/ 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci struct drxjscu_cmd { 7162306a36Sopenharmony_ci u16 command; 7262306a36Sopenharmony_ci /*< Command number */ 7362306a36Sopenharmony_ci u16 parameter_len; 7462306a36Sopenharmony_ci /*< Data length in byte */ 7562306a36Sopenharmony_ci u16 result_len; 7662306a36Sopenharmony_ci /*< result length in byte */ 7762306a36Sopenharmony_ci u16 *parameter; 7862306a36Sopenharmony_ci /*< General purpose param */ 7962306a36Sopenharmony_ci u16 *result; 8062306a36Sopenharmony_ci /*< General purpose param */}; 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci/*============================================================================*/ 8362306a36Sopenharmony_ci/*============================================================================*/ 8462306a36Sopenharmony_ci/*== CTRL CFG related data structures ========================================*/ 8562306a36Sopenharmony_ci/*============================================================================*/ 8662306a36Sopenharmony_ci/*============================================================================*/ 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci/* extra intermediate lock state for VSB,QAM,NTSC */ 8962306a36Sopenharmony_ci#define DRXJ_DEMOD_LOCK (DRX_LOCK_STATE_1) 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci/* OOB lock states */ 9262306a36Sopenharmony_ci#define DRXJ_OOB_AGC_LOCK (DRX_LOCK_STATE_1) /* analog gain control lock */ 9362306a36Sopenharmony_ci#define DRXJ_OOB_SYNC_LOCK (DRX_LOCK_STATE_2) /* digital gain control lock */ 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci/* Intermediate powermodes for DRXJ */ 9662306a36Sopenharmony_ci#define DRXJ_POWER_DOWN_MAIN_PATH DRX_POWER_MODE_8 9762306a36Sopenharmony_ci#define DRXJ_POWER_DOWN_CORE DRX_POWER_MODE_9 9862306a36Sopenharmony_ci#define DRXJ_POWER_DOWN_PLL DRX_POWER_MODE_10 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ci/* supstition for GPIO FNC mux */ 10162306a36Sopenharmony_ci#define APP_O (0x0000) 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci/*#define DRX_CTRL_BASE (0x0000)*/ 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci#define DRXJ_CTRL_CFG_BASE (0x1000) 10662306a36Sopenharmony_ci enum drxj_cfg_type { 10762306a36Sopenharmony_ci DRXJ_CFG_AGC_RF = DRXJ_CTRL_CFG_BASE, 10862306a36Sopenharmony_ci DRXJ_CFG_AGC_IF, 10962306a36Sopenharmony_ci DRXJ_CFG_AGC_INTERNAL, 11062306a36Sopenharmony_ci DRXJ_CFG_PRE_SAW, 11162306a36Sopenharmony_ci DRXJ_CFG_AFE_GAIN, 11262306a36Sopenharmony_ci DRXJ_CFG_SYMBOL_CLK_OFFSET, 11362306a36Sopenharmony_ci DRXJ_CFG_ACCUM_CR_RS_CW_ERR, 11462306a36Sopenharmony_ci DRXJ_CFG_FEC_MERS_SEQ_COUNT, 11562306a36Sopenharmony_ci DRXJ_CFG_OOB_MISC, 11662306a36Sopenharmony_ci DRXJ_CFG_SMART_ANT, 11762306a36Sopenharmony_ci DRXJ_CFG_OOB_PRE_SAW, 11862306a36Sopenharmony_ci DRXJ_CFG_VSB_MISC, 11962306a36Sopenharmony_ci DRXJ_CFG_RESET_PACKET_ERR, 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci /* ATV (FM) */ 12262306a36Sopenharmony_ci DRXJ_CFG_ATV_OUTPUT, /* also for FM (SIF control) but not likely */ 12362306a36Sopenharmony_ci DRXJ_CFG_ATV_MISC, 12462306a36Sopenharmony_ci DRXJ_CFG_ATV_EQU_COEF, 12562306a36Sopenharmony_ci DRXJ_CFG_ATV_AGC_STATUS, /* also for FM ( IF,RF, audioAGC ) */ 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_ci DRXJ_CFG_MPEG_OUTPUT_MISC, 12862306a36Sopenharmony_ci DRXJ_CFG_HW_CFG, 12962306a36Sopenharmony_ci DRXJ_CFG_OOB_LO_POW, 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_ci DRXJ_CFG_MAX /* dummy, never to be used */}; 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_ci/* 13462306a36Sopenharmony_ci* /enum drxj_cfg_smart_ant_io * smart antenna i/o. 13562306a36Sopenharmony_ci*/ 13662306a36Sopenharmony_cienum drxj_cfg_smart_ant_io { 13762306a36Sopenharmony_ci DRXJ_SMT_ANT_OUTPUT = 0, 13862306a36Sopenharmony_ci DRXJ_SMT_ANT_INPUT 13962306a36Sopenharmony_ci}; 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ci/* 14262306a36Sopenharmony_ci* /struct drxj_cfg_smart_ant * Set smart antenna. 14362306a36Sopenharmony_ci*/ 14462306a36Sopenharmony_ci struct drxj_cfg_smart_ant { 14562306a36Sopenharmony_ci enum drxj_cfg_smart_ant_io io; 14662306a36Sopenharmony_ci u16 ctrl_data; 14762306a36Sopenharmony_ci }; 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci/* 15062306a36Sopenharmony_ci* /struct DRXJAGCSTATUS_t 15162306a36Sopenharmony_ci* AGC status information from the DRXJ-IQM-AF. 15262306a36Sopenharmony_ci*/ 15362306a36Sopenharmony_cistruct drxj_agc_status { 15462306a36Sopenharmony_ci u16 IFAGC; 15562306a36Sopenharmony_ci u16 RFAGC; 15662306a36Sopenharmony_ci u16 digital_agc; 15762306a36Sopenharmony_ci}; 15862306a36Sopenharmony_ci 15962306a36Sopenharmony_ci/* DRXJ_CFG_AGC_RF, DRXJ_CFG_AGC_IF */ 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_ci/* 16262306a36Sopenharmony_ci* /enum drxj_agc_ctrl_mode * Available AGCs modes in the DRXJ. 16362306a36Sopenharmony_ci*/ 16462306a36Sopenharmony_ci enum drxj_agc_ctrl_mode { 16562306a36Sopenharmony_ci DRX_AGC_CTRL_AUTO = 0, 16662306a36Sopenharmony_ci DRX_AGC_CTRL_USER, 16762306a36Sopenharmony_ci DRX_AGC_CTRL_OFF}; 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_ci/* 17062306a36Sopenharmony_ci* /struct drxj_cfg_agc * Generic interface for all AGCs present on the DRXJ. 17162306a36Sopenharmony_ci*/ 17262306a36Sopenharmony_ci struct drxj_cfg_agc { 17362306a36Sopenharmony_ci enum drx_standard standard; /* standard for which these settings apply */ 17462306a36Sopenharmony_ci enum drxj_agc_ctrl_mode ctrl_mode; /* off, user, auto */ 17562306a36Sopenharmony_ci u16 output_level; /* range dependent on AGC */ 17662306a36Sopenharmony_ci u16 min_output_level; /* range dependent on AGC */ 17762306a36Sopenharmony_ci u16 max_output_level; /* range dependent on AGC */ 17862306a36Sopenharmony_ci u16 speed; /* range dependent on AGC */ 17962306a36Sopenharmony_ci u16 top; /* rf-agc take over point */ 18062306a36Sopenharmony_ci u16 cut_off_current; /* rf-agc is accelerated if output current 18162306a36Sopenharmony_ci is below cut-off current */}; 18262306a36Sopenharmony_ci 18362306a36Sopenharmony_ci/* DRXJ_CFG_PRE_SAW */ 18462306a36Sopenharmony_ci 18562306a36Sopenharmony_ci/* 18662306a36Sopenharmony_ci* /struct drxj_cfg_pre_saw * Interface to configure pre SAW sense. 18762306a36Sopenharmony_ci*/ 18862306a36Sopenharmony_ci struct drxj_cfg_pre_saw { 18962306a36Sopenharmony_ci enum drx_standard standard; /* standard to which these settings apply */ 19062306a36Sopenharmony_ci u16 reference; /* pre SAW reference value, range 0 .. 31 */ 19162306a36Sopenharmony_ci bool use_pre_saw; /* true algorithms must use pre SAW sense */}; 19262306a36Sopenharmony_ci 19362306a36Sopenharmony_ci/* DRXJ_CFG_AFE_GAIN */ 19462306a36Sopenharmony_ci 19562306a36Sopenharmony_ci/* 19662306a36Sopenharmony_ci* /struct drxj_cfg_afe_gain * Interface to configure gain of AFE (LNA + PGA). 19762306a36Sopenharmony_ci*/ 19862306a36Sopenharmony_ci struct drxj_cfg_afe_gain { 19962306a36Sopenharmony_ci enum drx_standard standard; /* standard to which these settings apply */ 20062306a36Sopenharmony_ci u16 gain; /* gain in 0.1 dB steps, DRXJ range 140 .. 335 */}; 20162306a36Sopenharmony_ci 20262306a36Sopenharmony_ci/* 20362306a36Sopenharmony_ci* /struct drxjrs_errors 20462306a36Sopenharmony_ci* Available failure information in DRXJ_FEC_RS. 20562306a36Sopenharmony_ci* 20662306a36Sopenharmony_ci* Container for errors that are received in the most recently finished measurement period 20762306a36Sopenharmony_ci* 20862306a36Sopenharmony_ci*/ 20962306a36Sopenharmony_ci struct drxjrs_errors { 21062306a36Sopenharmony_ci u16 nr_bit_errors; 21162306a36Sopenharmony_ci /*< no of pre RS bit errors */ 21262306a36Sopenharmony_ci u16 nr_symbol_errors; 21362306a36Sopenharmony_ci /*< no of pre RS symbol errors */ 21462306a36Sopenharmony_ci u16 nr_packet_errors; 21562306a36Sopenharmony_ci /*< no of pre RS packet errors */ 21662306a36Sopenharmony_ci u16 nr_failures; 21762306a36Sopenharmony_ci /*< no of post RS failures to decode */ 21862306a36Sopenharmony_ci u16 nr_snc_par_fail_count; 21962306a36Sopenharmony_ci /*< no of post RS bit erros */ 22062306a36Sopenharmony_ci }; 22162306a36Sopenharmony_ci 22262306a36Sopenharmony_ci/* 22362306a36Sopenharmony_ci* /struct drxj_cfg_vsb_misc * symbol error rate 22462306a36Sopenharmony_ci*/ 22562306a36Sopenharmony_ci struct drxj_cfg_vsb_misc { 22662306a36Sopenharmony_ci u32 symb_error; 22762306a36Sopenharmony_ci /*< symbol error rate sps */}; 22862306a36Sopenharmony_ci 22962306a36Sopenharmony_ci/* 23062306a36Sopenharmony_ci* /enum drxj_mpeg_output_clock_rate * Mpeg output clock rate. 23162306a36Sopenharmony_ci* 23262306a36Sopenharmony_ci*/ 23362306a36Sopenharmony_ci enum drxj_mpeg_start_width { 23462306a36Sopenharmony_ci DRXJ_MPEG_START_WIDTH_1CLKCYC, 23562306a36Sopenharmony_ci DRXJ_MPEG_START_WIDTH_8CLKCYC}; 23662306a36Sopenharmony_ci 23762306a36Sopenharmony_ci/* 23862306a36Sopenharmony_ci* /enum drxj_mpeg_output_clock_rate * Mpeg output clock rate. 23962306a36Sopenharmony_ci* 24062306a36Sopenharmony_ci*/ 24162306a36Sopenharmony_ci enum drxj_mpeg_output_clock_rate { 24262306a36Sopenharmony_ci DRXJ_MPEGOUTPUT_CLOCK_RATE_AUTO, 24362306a36Sopenharmony_ci DRXJ_MPEGOUTPUT_CLOCK_RATE_75973K, 24462306a36Sopenharmony_ci DRXJ_MPEGOUTPUT_CLOCK_RATE_50625K, 24562306a36Sopenharmony_ci DRXJ_MPEGOUTPUT_CLOCK_RATE_37968K, 24662306a36Sopenharmony_ci DRXJ_MPEGOUTPUT_CLOCK_RATE_30375K, 24762306a36Sopenharmony_ci DRXJ_MPEGOUTPUT_CLOCK_RATE_25313K, 24862306a36Sopenharmony_ci DRXJ_MPEGOUTPUT_CLOCK_RATE_21696K}; 24962306a36Sopenharmony_ci 25062306a36Sopenharmony_ci/* 25162306a36Sopenharmony_ci* /struct DRXJCfgMisc_t 25262306a36Sopenharmony_ci* Change TEI bit of MPEG output 25362306a36Sopenharmony_ci* reverse MPEG output bit order 25462306a36Sopenharmony_ci* set MPEG output clock rate 25562306a36Sopenharmony_ci*/ 25662306a36Sopenharmony_ci struct drxj_cfg_mpeg_output_misc { 25762306a36Sopenharmony_ci bool disable_tei_handling; /*< if true pass (not change) TEI bit */ 25862306a36Sopenharmony_ci bool bit_reverse_mpeg_outout; /*< if true, parallel: msb on MD0; serial: lsb out first */ 25962306a36Sopenharmony_ci enum drxj_mpeg_output_clock_rate mpeg_output_clock_rate; 26062306a36Sopenharmony_ci /*< set MPEG output clock rate that overwirtes the derived one from symbol rate */ 26162306a36Sopenharmony_ci enum drxj_mpeg_start_width mpeg_start_width; /*< set MPEG output start width */}; 26262306a36Sopenharmony_ci 26362306a36Sopenharmony_ci/* 26462306a36Sopenharmony_ci* /enum drxj_xtal_freq * Supported external crystal reference frequency. 26562306a36Sopenharmony_ci*/ 26662306a36Sopenharmony_ci enum drxj_xtal_freq { 26762306a36Sopenharmony_ci DRXJ_XTAL_FREQ_RSVD, 26862306a36Sopenharmony_ci DRXJ_XTAL_FREQ_27MHZ, 26962306a36Sopenharmony_ci DRXJ_XTAL_FREQ_20P25MHZ, 27062306a36Sopenharmony_ci DRXJ_XTAL_FREQ_4MHZ}; 27162306a36Sopenharmony_ci 27262306a36Sopenharmony_ci/* 27362306a36Sopenharmony_ci* /enum drxj_xtal_freq * Supported external crystal reference frequency. 27462306a36Sopenharmony_ci*/ 27562306a36Sopenharmony_ci enum drxji2c_speed { 27662306a36Sopenharmony_ci DRXJ_I2C_SPEED_400KBPS, 27762306a36Sopenharmony_ci DRXJ_I2C_SPEED_100KBPS}; 27862306a36Sopenharmony_ci 27962306a36Sopenharmony_ci/* 28062306a36Sopenharmony_ci* /struct drxj_cfg_hw_cfg * Get hw configuration, such as crystal 28162306a36Sopenharmony_ci* reference frequency, I2C speed, etc... 28262306a36Sopenharmony_ci*/ 28362306a36Sopenharmony_ci struct drxj_cfg_hw_cfg { 28462306a36Sopenharmony_ci enum drxj_xtal_freq xtal_freq; 28562306a36Sopenharmony_ci /*< crystal reference frequency */ 28662306a36Sopenharmony_ci enum drxji2c_speed i2c_speed; 28762306a36Sopenharmony_ci /*< 100 or 400 kbps */}; 28862306a36Sopenharmony_ci 28962306a36Sopenharmony_ci/* 29062306a36Sopenharmony_ci * DRXJ_CFG_ATV_MISC 29162306a36Sopenharmony_ci */ 29262306a36Sopenharmony_ci struct drxj_cfg_atv_misc { 29362306a36Sopenharmony_ci s16 peak_filter; /* -8 .. 15 */ 29462306a36Sopenharmony_ci u16 noise_filter; /* 0 .. 15 */}; 29562306a36Sopenharmony_ci 29662306a36Sopenharmony_ci/* 29762306a36Sopenharmony_ci * struct drxj_cfg_oob_misc */ 29862306a36Sopenharmony_ci#define DRXJ_OOB_STATE_RESET 0x0 29962306a36Sopenharmony_ci#define DRXJ_OOB_STATE_AGN_HUNT 0x1 30062306a36Sopenharmony_ci#define DRXJ_OOB_STATE_DGN_HUNT 0x2 30162306a36Sopenharmony_ci#define DRXJ_OOB_STATE_AGC_HUNT 0x3 30262306a36Sopenharmony_ci#define DRXJ_OOB_STATE_FRQ_HUNT 0x4 30362306a36Sopenharmony_ci#define DRXJ_OOB_STATE_PHA_HUNT 0x8 30462306a36Sopenharmony_ci#define DRXJ_OOB_STATE_TIM_HUNT 0x10 30562306a36Sopenharmony_ci#define DRXJ_OOB_STATE_EQU_HUNT 0x20 30662306a36Sopenharmony_ci#define DRXJ_OOB_STATE_EQT_HUNT 0x30 30762306a36Sopenharmony_ci#define DRXJ_OOB_STATE_SYNC 0x40 30862306a36Sopenharmony_ci 30962306a36Sopenharmony_cistruct drxj_cfg_oob_misc { 31062306a36Sopenharmony_ci struct drxj_agc_status agc; 31162306a36Sopenharmony_ci bool eq_lock; 31262306a36Sopenharmony_ci bool sym_timing_lock; 31362306a36Sopenharmony_ci bool phase_lock; 31462306a36Sopenharmony_ci bool freq_lock; 31562306a36Sopenharmony_ci bool dig_gain_lock; 31662306a36Sopenharmony_ci bool ana_gain_lock; 31762306a36Sopenharmony_ci u8 state; 31862306a36Sopenharmony_ci}; 31962306a36Sopenharmony_ci 32062306a36Sopenharmony_ci/* 32162306a36Sopenharmony_ci * Index of in array of coef 32262306a36Sopenharmony_ci */ 32362306a36Sopenharmony_ci enum drxj_cfg_oob_lo_power { 32462306a36Sopenharmony_ci DRXJ_OOB_LO_POW_MINUS0DB = 0, 32562306a36Sopenharmony_ci DRXJ_OOB_LO_POW_MINUS5DB, 32662306a36Sopenharmony_ci DRXJ_OOB_LO_POW_MINUS10DB, 32762306a36Sopenharmony_ci DRXJ_OOB_LO_POW_MINUS15DB, 32862306a36Sopenharmony_ci DRXJ_OOB_LO_POW_MAX}; 32962306a36Sopenharmony_ci 33062306a36Sopenharmony_ci/* 33162306a36Sopenharmony_ci * DRXJ_CFG_ATV_EQU_COEF 33262306a36Sopenharmony_ci */ 33362306a36Sopenharmony_ci struct drxj_cfg_atv_equ_coef { 33462306a36Sopenharmony_ci s16 coef0; /* -256 .. 255 */ 33562306a36Sopenharmony_ci s16 coef1; /* -256 .. 255 */ 33662306a36Sopenharmony_ci s16 coef2; /* -256 .. 255 */ 33762306a36Sopenharmony_ci s16 coef3; /* -256 .. 255 */}; 33862306a36Sopenharmony_ci 33962306a36Sopenharmony_ci/* 34062306a36Sopenharmony_ci * Index of in array of coef 34162306a36Sopenharmony_ci */ 34262306a36Sopenharmony_ci enum drxj_coef_array_index { 34362306a36Sopenharmony_ci DRXJ_COEF_IDX_MN = 0, 34462306a36Sopenharmony_ci DRXJ_COEF_IDX_FM, 34562306a36Sopenharmony_ci DRXJ_COEF_IDX_L, 34662306a36Sopenharmony_ci DRXJ_COEF_IDX_LP, 34762306a36Sopenharmony_ci DRXJ_COEF_IDX_BG, 34862306a36Sopenharmony_ci DRXJ_COEF_IDX_DK, 34962306a36Sopenharmony_ci DRXJ_COEF_IDX_I, 35062306a36Sopenharmony_ci DRXJ_COEF_IDX_MAX}; 35162306a36Sopenharmony_ci 35262306a36Sopenharmony_ci/* 35362306a36Sopenharmony_ci * DRXJ_CFG_ATV_OUTPUT 35462306a36Sopenharmony_ci */ 35562306a36Sopenharmony_ci 35662306a36Sopenharmony_ci/* 35762306a36Sopenharmony_ci* /enum DRXJAttenuation_t 35862306a36Sopenharmony_ci* Attenuation setting for SIF AGC. 35962306a36Sopenharmony_ci* 36062306a36Sopenharmony_ci*/ 36162306a36Sopenharmony_ci enum drxjsif_attenuation { 36262306a36Sopenharmony_ci DRXJ_SIF_ATTENUATION_0DB, 36362306a36Sopenharmony_ci DRXJ_SIF_ATTENUATION_3DB, 36462306a36Sopenharmony_ci DRXJ_SIF_ATTENUATION_6DB, 36562306a36Sopenharmony_ci DRXJ_SIF_ATTENUATION_9DB}; 36662306a36Sopenharmony_ci 36762306a36Sopenharmony_ci/* 36862306a36Sopenharmony_ci* /struct drxj_cfg_atv_output * SIF attenuation setting. 36962306a36Sopenharmony_ci* 37062306a36Sopenharmony_ci*/ 37162306a36Sopenharmony_cistruct drxj_cfg_atv_output { 37262306a36Sopenharmony_ci bool enable_cvbs_output; /* true= enabled */ 37362306a36Sopenharmony_ci bool enable_sif_output; /* true= enabled */ 37462306a36Sopenharmony_ci enum drxjsif_attenuation sif_attenuation; 37562306a36Sopenharmony_ci}; 37662306a36Sopenharmony_ci 37762306a36Sopenharmony_ci/* 37862306a36Sopenharmony_ci DRXJ_CFG_ATV_AGC_STATUS (get only) 37962306a36Sopenharmony_ci*/ 38062306a36Sopenharmony_ci/* TODO : AFE interface not yet finished, subject to change */ 38162306a36Sopenharmony_ci struct drxj_cfg_atv_agc_status { 38262306a36Sopenharmony_ci u16 rf_agc_gain; /* 0 .. 877 uA */ 38362306a36Sopenharmony_ci u16 if_agc_gain; /* 0 .. 877 uA */ 38462306a36Sopenharmony_ci s16 video_agc_gain; /* -75 .. 1972 in 0.1 dB steps */ 38562306a36Sopenharmony_ci s16 audio_agc_gain; /* -4 .. 1020 in 0.1 dB steps */ 38662306a36Sopenharmony_ci u16 rf_agc_loop_gain; /* 0 .. 7 */ 38762306a36Sopenharmony_ci u16 if_agc_loop_gain; /* 0 .. 7 */ 38862306a36Sopenharmony_ci u16 video_agc_loop_gain; /* 0 .. 7 */}; 38962306a36Sopenharmony_ci 39062306a36Sopenharmony_ci/*============================================================================*/ 39162306a36Sopenharmony_ci/*============================================================================*/ 39262306a36Sopenharmony_ci/*== CTRL related data structures ============================================*/ 39362306a36Sopenharmony_ci/*============================================================================*/ 39462306a36Sopenharmony_ci/*============================================================================*/ 39562306a36Sopenharmony_ci 39662306a36Sopenharmony_ci/* NONE */ 39762306a36Sopenharmony_ci 39862306a36Sopenharmony_ci/*============================================================================*/ 39962306a36Sopenharmony_ci/*============================================================================*/ 40062306a36Sopenharmony_ci 40162306a36Sopenharmony_ci/*========================================*/ 40262306a36Sopenharmony_ci/* 40362306a36Sopenharmony_ci* /struct struct drxj_data * DRXJ specific attributes. 40462306a36Sopenharmony_ci* 40562306a36Sopenharmony_ci* Global data container for DRXJ specific data. 40662306a36Sopenharmony_ci* 40762306a36Sopenharmony_ci*/ 40862306a36Sopenharmony_ci struct drxj_data { 40962306a36Sopenharmony_ci /* device capabilities (determined during drx_open()) */ 41062306a36Sopenharmony_ci bool has_lna; /*< true if LNA (aka PGA) present */ 41162306a36Sopenharmony_ci bool has_oob; /*< true if OOB supported */ 41262306a36Sopenharmony_ci bool has_ntsc; /*< true if NTSC supported */ 41362306a36Sopenharmony_ci bool has_btsc; /*< true if BTSC supported */ 41462306a36Sopenharmony_ci bool has_smatx; /*< true if mat_tx is available */ 41562306a36Sopenharmony_ci bool has_smarx; /*< true if mat_rx is available */ 41662306a36Sopenharmony_ci bool has_gpio; /*< true if GPIO is available */ 41762306a36Sopenharmony_ci bool has_irqn; /*< true if IRQN is available */ 41862306a36Sopenharmony_ci /* A1/A2/A... */ 41962306a36Sopenharmony_ci u8 mfx; /*< metal fix */ 42062306a36Sopenharmony_ci 42162306a36Sopenharmony_ci /* tuner settings */ 42262306a36Sopenharmony_ci bool mirror_freq_spect_oob;/*< tuner inversion (true = tuner mirrors the signal */ 42362306a36Sopenharmony_ci 42462306a36Sopenharmony_ci /* standard/channel settings */ 42562306a36Sopenharmony_ci enum drx_standard standard; /*< current standard information */ 42662306a36Sopenharmony_ci enum drx_modulation constellation; 42762306a36Sopenharmony_ci /*< current constellation */ 42862306a36Sopenharmony_ci s32 frequency; /*< center signal frequency in KHz */ 42962306a36Sopenharmony_ci enum drx_bandwidth curr_bandwidth; 43062306a36Sopenharmony_ci /*< current channel bandwidth */ 43162306a36Sopenharmony_ci enum drx_mirror mirror; /*< current channel mirror */ 43262306a36Sopenharmony_ci 43362306a36Sopenharmony_ci /* signal quality information */ 43462306a36Sopenharmony_ci u32 fec_bits_desired; /*< BER accounting period */ 43562306a36Sopenharmony_ci u16 fec_vd_plen; /*< no of trellis symbols: VD SER measurement period */ 43662306a36Sopenharmony_ci u16 qam_vd_prescale; /*< Viterbi Measurement Prescale */ 43762306a36Sopenharmony_ci u16 qam_vd_period; /*< Viterbi Measurement period */ 43862306a36Sopenharmony_ci u16 fec_rs_plen; /*< defines RS BER measurement period */ 43962306a36Sopenharmony_ci u16 fec_rs_prescale; /*< ReedSolomon Measurement Prescale */ 44062306a36Sopenharmony_ci u16 fec_rs_period; /*< ReedSolomon Measurement period */ 44162306a36Sopenharmony_ci bool reset_pkt_err_acc; /*< Set a flag to reset accumulated packet error */ 44262306a36Sopenharmony_ci u16 pkt_err_acc_start; /*< Set a flag to reset accumulated packet error */ 44362306a36Sopenharmony_ci 44462306a36Sopenharmony_ci /* HI configuration */ 44562306a36Sopenharmony_ci u16 hi_cfg_timing_div; /*< HI Configure() parameter 2 */ 44662306a36Sopenharmony_ci u16 hi_cfg_bridge_delay; /*< HI Configure() parameter 3 */ 44762306a36Sopenharmony_ci u16 hi_cfg_wake_up_key; /*< HI Configure() parameter 4 */ 44862306a36Sopenharmony_ci u16 hi_cfg_ctrl; /*< HI Configure() parameter 5 */ 44962306a36Sopenharmony_ci u16 hi_cfg_transmit; /*< HI Configure() parameter 6 */ 45062306a36Sopenharmony_ci 45162306a36Sopenharmony_ci /* UIO configuration */ 45262306a36Sopenharmony_ci enum drxuio_mode uio_sma_rx_mode;/*< current mode of SmaRx pin */ 45362306a36Sopenharmony_ci enum drxuio_mode uio_sma_tx_mode;/*< current mode of SmaTx pin */ 45462306a36Sopenharmony_ci enum drxuio_mode uio_gpio_mode; /*< current mode of ASEL pin */ 45562306a36Sopenharmony_ci enum drxuio_mode uio_irqn_mode; /*< current mode of IRQN pin */ 45662306a36Sopenharmony_ci 45762306a36Sopenharmony_ci /* IQM fs frequency shift and inversion */ 45862306a36Sopenharmony_ci u32 iqm_fs_rate_ofs; /*< frequency shifter setting after setchannel */ 45962306a36Sopenharmony_ci bool pos_image; /*< True: positive image */ 46062306a36Sopenharmony_ci /* IQM RC frequency shift */ 46162306a36Sopenharmony_ci u32 iqm_rc_rate_ofs; /*< frequency shifter setting after setchannel */ 46262306a36Sopenharmony_ci 46362306a36Sopenharmony_ci /* ATV configuration */ 46462306a36Sopenharmony_ci u32 atv_cfg_changed_flags; /*< flag: flags cfg changes */ 46562306a36Sopenharmony_ci s16 atv_top_equ0[DRXJ_COEF_IDX_MAX]; /*< shadow of ATV_TOP_EQU0__A */ 46662306a36Sopenharmony_ci s16 atv_top_equ1[DRXJ_COEF_IDX_MAX]; /*< shadow of ATV_TOP_EQU1__A */ 46762306a36Sopenharmony_ci s16 atv_top_equ2[DRXJ_COEF_IDX_MAX]; /*< shadow of ATV_TOP_EQU2__A */ 46862306a36Sopenharmony_ci s16 atv_top_equ3[DRXJ_COEF_IDX_MAX]; /*< shadow of ATV_TOP_EQU3__A */ 46962306a36Sopenharmony_ci bool phase_correction_bypass;/*< flag: true=bypass */ 47062306a36Sopenharmony_ci s16 atv_top_vid_peak; /*< shadow of ATV_TOP_VID_PEAK__A */ 47162306a36Sopenharmony_ci u16 atv_top_noise_th; /*< shadow of ATV_TOP_NOISE_TH__A */ 47262306a36Sopenharmony_ci bool enable_cvbs_output; /*< flag CVBS output enable */ 47362306a36Sopenharmony_ci bool enable_sif_output; /*< flag SIF output enable */ 47462306a36Sopenharmony_ci enum drxjsif_attenuation sif_attenuation; 47562306a36Sopenharmony_ci /*< current SIF att setting */ 47662306a36Sopenharmony_ci /* Agc configuration for QAM and VSB */ 47762306a36Sopenharmony_ci struct drxj_cfg_agc qam_rf_agc_cfg; /*< qam RF AGC config */ 47862306a36Sopenharmony_ci struct drxj_cfg_agc qam_if_agc_cfg; /*< qam IF AGC config */ 47962306a36Sopenharmony_ci struct drxj_cfg_agc vsb_rf_agc_cfg; /*< vsb RF AGC config */ 48062306a36Sopenharmony_ci struct drxj_cfg_agc vsb_if_agc_cfg; /*< vsb IF AGC config */ 48162306a36Sopenharmony_ci 48262306a36Sopenharmony_ci /* PGA gain configuration for QAM and VSB */ 48362306a36Sopenharmony_ci u16 qam_pga_cfg; /*< qam PGA config */ 48462306a36Sopenharmony_ci u16 vsb_pga_cfg; /*< vsb PGA config */ 48562306a36Sopenharmony_ci 48662306a36Sopenharmony_ci /* Pre SAW configuration for QAM and VSB */ 48762306a36Sopenharmony_ci struct drxj_cfg_pre_saw qam_pre_saw_cfg; 48862306a36Sopenharmony_ci /*< qam pre SAW config */ 48962306a36Sopenharmony_ci struct drxj_cfg_pre_saw vsb_pre_saw_cfg; 49062306a36Sopenharmony_ci /*< qam pre SAW config */ 49162306a36Sopenharmony_ci 49262306a36Sopenharmony_ci /* Version information */ 49362306a36Sopenharmony_ci char v_text[2][12]; /*< allocated text versions */ 49462306a36Sopenharmony_ci struct drx_version v_version[2]; /*< allocated versions structs */ 49562306a36Sopenharmony_ci struct drx_version_list v_list_elements[2]; 49662306a36Sopenharmony_ci /*< allocated version list */ 49762306a36Sopenharmony_ci 49862306a36Sopenharmony_ci /* smart antenna configuration */ 49962306a36Sopenharmony_ci bool smart_ant_inverted; 50062306a36Sopenharmony_ci 50162306a36Sopenharmony_ci /* Tracking filter setting for OOB */ 50262306a36Sopenharmony_ci u16 oob_trk_filter_cfg[8]; 50362306a36Sopenharmony_ci bool oob_power_on; 50462306a36Sopenharmony_ci 50562306a36Sopenharmony_ci /* MPEG static bitrate setting */ 50662306a36Sopenharmony_ci u32 mpeg_ts_static_bitrate; /*< bitrate static MPEG output */ 50762306a36Sopenharmony_ci bool disable_te_ihandling; /*< MPEG TS TEI handling */ 50862306a36Sopenharmony_ci bool bit_reverse_mpeg_outout;/*< MPEG output bit order */ 50962306a36Sopenharmony_ci enum drxj_mpeg_output_clock_rate mpeg_output_clock_rate; 51062306a36Sopenharmony_ci /*< MPEG output clock rate */ 51162306a36Sopenharmony_ci enum drxj_mpeg_start_width mpeg_start_width; 51262306a36Sopenharmony_ci /*< MPEG Start width */ 51362306a36Sopenharmony_ci 51462306a36Sopenharmony_ci /* Pre SAW & Agc configuration for ATV */ 51562306a36Sopenharmony_ci struct drxj_cfg_pre_saw atv_pre_saw_cfg; 51662306a36Sopenharmony_ci /*< atv pre SAW config */ 51762306a36Sopenharmony_ci struct drxj_cfg_agc atv_rf_agc_cfg; /*< atv RF AGC config */ 51862306a36Sopenharmony_ci struct drxj_cfg_agc atv_if_agc_cfg; /*< atv IF AGC config */ 51962306a36Sopenharmony_ci u16 atv_pga_cfg; /*< atv pga config */ 52062306a36Sopenharmony_ci 52162306a36Sopenharmony_ci u32 curr_symbol_rate; 52262306a36Sopenharmony_ci 52362306a36Sopenharmony_ci /* pin-safe mode */ 52462306a36Sopenharmony_ci bool pdr_safe_mode; /*< PDR safe mode activated */ 52562306a36Sopenharmony_ci u16 pdr_safe_restore_val_gpio; 52662306a36Sopenharmony_ci u16 pdr_safe_restore_val_v_sync; 52762306a36Sopenharmony_ci u16 pdr_safe_restore_val_sma_rx; 52862306a36Sopenharmony_ci u16 pdr_safe_restore_val_sma_tx; 52962306a36Sopenharmony_ci 53062306a36Sopenharmony_ci /* OOB pre-saw value */ 53162306a36Sopenharmony_ci u16 oob_pre_saw; 53262306a36Sopenharmony_ci enum drxj_cfg_oob_lo_power oob_lo_pow; 53362306a36Sopenharmony_ci 53462306a36Sopenharmony_ci struct drx_aud_data aud_data; 53562306a36Sopenharmony_ci /*< audio storage */}; 53662306a36Sopenharmony_ci 53762306a36Sopenharmony_ci/*------------------------------------------------------------------------- 53862306a36Sopenharmony_ciAccess MACROS 53962306a36Sopenharmony_ci-------------------------------------------------------------------------*/ 54062306a36Sopenharmony_ci/* 54162306a36Sopenharmony_ci* \brief Compilable references to attributes 54262306a36Sopenharmony_ci* \param d pointer to demod instance 54362306a36Sopenharmony_ci* 54462306a36Sopenharmony_ci* Used as main reference to an attribute field. 54562306a36Sopenharmony_ci* Can be used by both macro implementation and function implementation. 54662306a36Sopenharmony_ci* These macros are defined to avoid duplication of code in macro and function 54762306a36Sopenharmony_ci* definitions that handle access of demod common or extended attributes. 54862306a36Sopenharmony_ci* 54962306a36Sopenharmony_ci*/ 55062306a36Sopenharmony_ci 55162306a36Sopenharmony_ci#define DRXJ_ATTR_BTSC_DETECT(d) \ 55262306a36Sopenharmony_ci (((struct drxj_data *)(d)->my_ext_attr)->aud_data.btsc_detect) 55362306a36Sopenharmony_ci 55462306a36Sopenharmony_ci/*------------------------------------------------------------------------- 55562306a36Sopenharmony_ciDEFINES 55662306a36Sopenharmony_ci-------------------------------------------------------------------------*/ 55762306a36Sopenharmony_ci 55862306a36Sopenharmony_ci/* 55962306a36Sopenharmony_ci* \def DRXJ_NTSC_CARRIER_FREQ_OFFSET 56062306a36Sopenharmony_ci* \brief Offset from picture carrier to centre frequency in kHz, in RF domain 56162306a36Sopenharmony_ci* 56262306a36Sopenharmony_ci* For NTSC standard. 56362306a36Sopenharmony_ci* NTSC channels are listed by their picture carrier frequency (Fpc). 56462306a36Sopenharmony_ci* The function DRX_CTRL_SET_CHANNEL requires the centre frequency as input. 56562306a36Sopenharmony_ci* In case the tuner module is not used the DRX-J requires that the tuner is 56662306a36Sopenharmony_ci* tuned to the centre frequency of the channel: 56762306a36Sopenharmony_ci* 56862306a36Sopenharmony_ci* Fcentre = Fpc + DRXJ_NTSC_CARRIER_FREQ_OFFSET 56962306a36Sopenharmony_ci* 57062306a36Sopenharmony_ci*/ 57162306a36Sopenharmony_ci#define DRXJ_NTSC_CARRIER_FREQ_OFFSET ((s32)(1750)) 57262306a36Sopenharmony_ci 57362306a36Sopenharmony_ci/* 57462306a36Sopenharmony_ci* \def DRXJ_PAL_SECAM_BG_CARRIER_FREQ_OFFSET 57562306a36Sopenharmony_ci* \brief Offset from picture carrier to centre frequency in kHz, in RF domain 57662306a36Sopenharmony_ci* 57762306a36Sopenharmony_ci* For PAL/SECAM - BG standard. This define is needed in case the tuner module 57862306a36Sopenharmony_ci* is NOT used. PAL/SECAM channels are listed by their picture carrier frequency (Fpc). 57962306a36Sopenharmony_ci* The DRX-J requires that the tuner is tuned to: 58062306a36Sopenharmony_ci* Fpc + DRXJ_PAL_SECAM_BG_CARRIER_FREQ_OFFSET 58162306a36Sopenharmony_ci* 58262306a36Sopenharmony_ci* In case the tuner module is used the drxdriver takes care of this. 58362306a36Sopenharmony_ci* In case the tuner module is NOT used the application programmer must take 58462306a36Sopenharmony_ci* care of this. 58562306a36Sopenharmony_ci* 58662306a36Sopenharmony_ci*/ 58762306a36Sopenharmony_ci#define DRXJ_PAL_SECAM_BG_CARRIER_FREQ_OFFSET ((s32)(2375)) 58862306a36Sopenharmony_ci 58962306a36Sopenharmony_ci/* 59062306a36Sopenharmony_ci* \def DRXJ_PAL_SECAM_DKIL_CARRIER_FREQ_OFFSET 59162306a36Sopenharmony_ci* \brief Offset from picture carrier to centre frequency in kHz, in RF domain 59262306a36Sopenharmony_ci* 59362306a36Sopenharmony_ci* For PAL/SECAM - DK, I, L standards. This define is needed in case the tuner module 59462306a36Sopenharmony_ci* is NOT used. PAL/SECAM channels are listed by their picture carrier frequency (Fpc). 59562306a36Sopenharmony_ci* The DRX-J requires that the tuner is tuned to: 59662306a36Sopenharmony_ci* Fpc + DRXJ_PAL_SECAM_DKIL_CARRIER_FREQ_OFFSET 59762306a36Sopenharmony_ci* 59862306a36Sopenharmony_ci* In case the tuner module is used the drxdriver takes care of this. 59962306a36Sopenharmony_ci* In case the tuner module is NOT used the application programmer must take 60062306a36Sopenharmony_ci* care of this. 60162306a36Sopenharmony_ci* 60262306a36Sopenharmony_ci*/ 60362306a36Sopenharmony_ci#define DRXJ_PAL_SECAM_DKIL_CARRIER_FREQ_OFFSET ((s32)(2775)) 60462306a36Sopenharmony_ci 60562306a36Sopenharmony_ci/* 60662306a36Sopenharmony_ci* \def DRXJ_PAL_SECAM_LP_CARRIER_FREQ_OFFSET 60762306a36Sopenharmony_ci* \brief Offset from picture carrier to centre frequency in kHz, in RF domain 60862306a36Sopenharmony_ci* 60962306a36Sopenharmony_ci* For PAL/SECAM - LP standard. This define is needed in case the tuner module 61062306a36Sopenharmony_ci* is NOT used. PAL/SECAM channels are listed by their picture carrier frequency (Fpc). 61162306a36Sopenharmony_ci* The DRX-J requires that the tuner is tuned to: 61262306a36Sopenharmony_ci* Fpc + DRXJ_PAL_SECAM_LP_CARRIER_FREQ_OFFSET 61362306a36Sopenharmony_ci* 61462306a36Sopenharmony_ci* In case the tuner module is used the drxdriver takes care of this. 61562306a36Sopenharmony_ci* In case the tuner module is NOT used the application programmer must take 61662306a36Sopenharmony_ci* care of this. 61762306a36Sopenharmony_ci*/ 61862306a36Sopenharmony_ci#define DRXJ_PAL_SECAM_LP_CARRIER_FREQ_OFFSET ((s32)(-3255)) 61962306a36Sopenharmony_ci 62062306a36Sopenharmony_ci/* 62162306a36Sopenharmony_ci* \def DRXJ_FM_CARRIER_FREQ_OFFSET 62262306a36Sopenharmony_ci* \brief Offset from sound carrier to centre frequency in kHz, in RF domain 62362306a36Sopenharmony_ci* 62462306a36Sopenharmony_ci* For FM standard. 62562306a36Sopenharmony_ci* FM channels are listed by their sound carrier frequency (Fsc). 62662306a36Sopenharmony_ci* The function DRX_CTRL_SET_CHANNEL requires the Ffm frequency (see below) as 62762306a36Sopenharmony_ci* input. 62862306a36Sopenharmony_ci* In case the tuner module is not used the DRX-J requires that the tuner is 62962306a36Sopenharmony_ci* tuned to the Ffm frequency of the channel. 63062306a36Sopenharmony_ci* 63162306a36Sopenharmony_ci* Ffm = Fsc + DRXJ_FM_CARRIER_FREQ_OFFSET 63262306a36Sopenharmony_ci* 63362306a36Sopenharmony_ci*/ 63462306a36Sopenharmony_ci#define DRXJ_FM_CARRIER_FREQ_OFFSET ((s32)(-3000)) 63562306a36Sopenharmony_ci 63662306a36Sopenharmony_ci/* Revision types -------------------------------------------------------*/ 63762306a36Sopenharmony_ci 63862306a36Sopenharmony_ci#define DRXJ_TYPE_ID (0x3946000DUL) 63962306a36Sopenharmony_ci 64062306a36Sopenharmony_ci/* Macros ---------------------------------------------------------------*/ 64162306a36Sopenharmony_ci 64262306a36Sopenharmony_ci/* Convert OOB lock status to string */ 64362306a36Sopenharmony_ci#define DRXJ_STR_OOB_LOCKSTATUS(x) ( \ 64462306a36Sopenharmony_ci (x == DRX_NEVER_LOCK) ? "Never" : \ 64562306a36Sopenharmony_ci (x == DRX_NOT_LOCKED) ? "No" : \ 64662306a36Sopenharmony_ci (x == DRX_LOCKED) ? "Locked" : \ 64762306a36Sopenharmony_ci (x == DRX_LOCK_STATE_1) ? "AGC lock" : \ 64862306a36Sopenharmony_ci (x == DRX_LOCK_STATE_2) ? "sync lock" : \ 64962306a36Sopenharmony_ci "(Invalid)") 65062306a36Sopenharmony_ci 65162306a36Sopenharmony_ci#endif /* __DRXJ_H__ */ 652