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