2329 lines
		
	
	
		
			77 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			2329 lines
		
	
	
		
			77 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|   Copyright (c), 2004-2005,2007-2010 Trident Microsystems, Inc.
 | |
|   All rights reserved.
 | |
| 
 | |
|   Redistribution and use in source and binary forms, with or without
 | |
|   modification, are permitted provided that the following conditions are met:
 | |
| 
 | |
|   * Redistributions of source code must retain the above copyright notice,
 | |
|     this list of conditions and the following disclaimer.
 | |
|   * Redistributions in binary form must reproduce the above copyright notice,
 | |
|     this list of conditions and the following disclaimer in the documentation
 | |
| 	and/or other materials provided with the distribution.
 | |
|   * Neither the name of Trident Microsystems nor Hauppauge Computer Works
 | |
|     nor the names of its contributors may be used to endorse or promote
 | |
| 	products derived from this software without specific prior written
 | |
| 	permission.
 | |
| 
 | |
|   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | |
|   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | |
|   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | |
|   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 | |
|   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | |
|   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | |
|   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | |
|   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | |
|   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | |
|   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | |
|   POSSIBILITY OF SUCH DAMAGE.
 | |
| */
 | |
| 
 | |
| #ifndef __DRXDRIVER_H__
 | |
| #define __DRXDRIVER_H__
 | |
| 
 | |
| #include <linux/kernel.h>
 | |
| #include <linux/errno.h>
 | |
| #include <linux/firmware.h>
 | |
| #include <linux/i2c.h>
 | |
| 
 | |
| /*
 | |
|  * This structure contains the I2C address, the device ID and a user_data pointer.
 | |
|  * The user_data pointer can be used for application specific purposes.
 | |
|  */
 | |
| struct i2c_device_addr {
 | |
| 	u16 i2c_addr;		/* The I2C address of the device. */
 | |
| 	u16 i2c_dev_id;		/* The device identifier. */
 | |
| 	void *user_data;		/* User data pointer */
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \def IS_I2C_10BIT( addr )
 | |
| * \brief Determine if I2C address 'addr' is a 10 bits address or not.
 | |
| * \param addr The I2C address.
 | |
| * \return int.
 | |
| * \retval 0 if address is not a 10 bits I2C address.
 | |
| * \retval 1 if address is a 10 bits I2C address.
 | |
| */
 | |
| #define IS_I2C_10BIT(addr) \
 | |
| 	 (((addr) & 0xF8) == 0xF0)
 | |
| 
 | |
| /*------------------------------------------------------------------------------
 | |
| Exported FUNCTIONS
 | |
| ------------------------------------------------------------------------------*/
 | |
| 
 | |
| /*
 | |
| * \fn drxbsp_i2c_init()
 | |
| * \brief Initialize I2C communication module.
 | |
| * \return int Return status.
 | |
| * \retval 0 Initialization successful.
 | |
| * \retval -EIO Initialization failed.
 | |
| */
 | |
| int drxbsp_i2c_init(void);
 | |
| 
 | |
| /*
 | |
| * \fn drxbsp_i2c_term()
 | |
| * \brief Terminate I2C communication module.
 | |
| * \return int Return status.
 | |
| * \retval 0 Termination successful.
 | |
| * \retval -EIO Termination failed.
 | |
| */
 | |
| int drxbsp_i2c_term(void);
 | |
| 
 | |
| /*
 | |
| * \fn int drxbsp_i2c_write_read( struct i2c_device_addr *w_dev_addr,
 | |
| *                                       u16 w_count,
 | |
| *                                       u8 * wData,
 | |
| *                                       struct i2c_device_addr *r_dev_addr,
 | |
| *                                       u16 r_count,
 | |
| *                                       u8 * r_data)
 | |
| * \brief Read and/or write count bytes from I2C bus, store them in data[].
 | |
| * \param w_dev_addr The device i2c address and the device ID to write to
 | |
| * \param w_count   The number of bytes to write
 | |
| * \param wData    The array to write the data to
 | |
| * \param r_dev_addr The device i2c address and the device ID to read from
 | |
| * \param r_count   The number of bytes to read
 | |
| * \param r_data    The array to read the data from
 | |
| * \return int Return status.
 | |
| * \retval 0 Success.
 | |
| * \retval -EIO Failure.
 | |
| * \retval -EINVAL Parameter 'wcount' is not zero but parameter
 | |
| *                                       'wdata' contains NULL.
 | |
| *                                       Idem for 'rcount' and 'rdata'.
 | |
| *                                       Both w_dev_addr and r_dev_addr are NULL.
 | |
| *
 | |
| * This function must implement an atomic write and/or read action on the I2C bus
 | |
| * No other process may use the I2C bus when this function is executing.
 | |
| * The critical section of this function runs from and including the I2C
 | |
| * write, up to and including the I2C read action.
 | |
| *
 | |
| * The device ID can be useful if several devices share an I2C address.
 | |
| * It can be used to control a "switch" on the I2C bus to the correct device.
 | |
| */
 | |
| int drxbsp_i2c_write_read(struct i2c_device_addr *w_dev_addr,
 | |
| 					u16 w_count,
 | |
| 					u8 *wData,
 | |
| 					struct i2c_device_addr *r_dev_addr,
 | |
| 					u16 r_count, u8 *r_data);
 | |
| 
 | |
| /*
 | |
| * \fn drxbsp_i2c_error_text()
 | |
| * \brief Returns a human readable error.
 | |
| * Counter part of numerical drx_i2c_error_g.
 | |
| *
 | |
| * \return char* Pointer to human readable error text.
 | |
| */
 | |
| char *drxbsp_i2c_error_text(void);
 | |
| 
 | |
| /*
 | |
| * \var drx_i2c_error_g;
 | |
| * \brief I2C specific error codes, platform dependent.
 | |
| */
 | |
| extern int drx_i2c_error_g;
 | |
| 
 | |
| #define TUNER_MODE_SUB0    0x0001	/* for sub-mode (e.g. RF-AGC setting) */
 | |
| #define TUNER_MODE_SUB1    0x0002	/* for sub-mode (e.g. RF-AGC setting) */
 | |
| #define TUNER_MODE_SUB2    0x0004	/* for sub-mode (e.g. RF-AGC setting) */
 | |
| #define TUNER_MODE_SUB3    0x0008	/* for sub-mode (e.g. RF-AGC setting) */
 | |
| #define TUNER_MODE_SUB4    0x0010	/* for sub-mode (e.g. RF-AGC setting) */
 | |
| #define TUNER_MODE_SUB5    0x0020	/* for sub-mode (e.g. RF-AGC setting) */
 | |
| #define TUNER_MODE_SUB6    0x0040	/* for sub-mode (e.g. RF-AGC setting) */
 | |
| #define TUNER_MODE_SUB7    0x0080	/* for sub-mode (e.g. RF-AGC setting) */
 | |
| 
 | |
| #define TUNER_MODE_DIGITAL 0x0100	/* for digital channel (e.g. DVB-T)   */
 | |
| #define TUNER_MODE_ANALOG  0x0200	/* for analog channel  (e.g. PAL)     */
 | |
| #define TUNER_MODE_SWITCH  0x0400	/* during channel switch & scanning   */
 | |
| #define TUNER_MODE_LOCK    0x0800	/* after tuner has locked             */
 | |
| #define TUNER_MODE_6MHZ    0x1000	/* for 6MHz bandwidth channels        */
 | |
| #define TUNER_MODE_7MHZ    0x2000	/* for 7MHz bandwidth channels        */
 | |
| #define TUNER_MODE_8MHZ    0x4000	/* for 8MHz bandwidth channels        */
 | |
| 
 | |
| #define TUNER_MODE_SUB_MAX 8
 | |
| #define TUNER_MODE_SUBALL  (TUNER_MODE_SUB0 | TUNER_MODE_SUB1 | \
 | |
| 			      TUNER_MODE_SUB2 | TUNER_MODE_SUB3 | \
 | |
| 			      TUNER_MODE_SUB4 | TUNER_MODE_SUB5 | \
 | |
| 			      TUNER_MODE_SUB6 | TUNER_MODE_SUB7)
 | |
| 
 | |
| 
 | |
| enum tuner_lock_status {
 | |
| 	TUNER_LOCKED,
 | |
| 	TUNER_NOT_LOCKED
 | |
| };
 | |
| 
 | |
| struct tuner_common {
 | |
| 	char *name;	/* Tuner brand & type name */
 | |
| 	s32 min_freq_rf;	/* Lowest  RF input frequency, in kHz */
 | |
| 	s32 max_freq_rf;	/* Highest RF input frequency, in kHz */
 | |
| 
 | |
| 	u8 sub_mode;	/* Index to sub-mode in use */
 | |
| 	char ***sub_mode_descriptions;	/* Pointer to description of sub-modes */
 | |
| 	u8 sub_modes;	/* Number of available sub-modes      */
 | |
| 
 | |
| 	/* The following fields will be either 0, NULL or false and do not need
 | |
| 		initialisation */
 | |
| 	void *self_check;	/* gives proof of initialization  */
 | |
| 	bool programmed;	/* only valid if self_check is OK  */
 | |
| 	s32 r_ffrequency;	/* only valid if programmed       */
 | |
| 	s32 i_ffrequency;	/* only valid if programmed       */
 | |
| 
 | |
| 	void *my_user_data;	/* pointer to associated demod instance */
 | |
| 	u16 my_capabilities;	/* value for storing application flags  */
 | |
| };
 | |
| 
 | |
| struct tuner_instance;
 | |
| 
 | |
| typedef int(*tuner_open_func_t) (struct tuner_instance *tuner);
 | |
| typedef int(*tuner_close_func_t) (struct tuner_instance *tuner);
 | |
| 
 | |
| typedef int(*tuner_set_frequency_func_t) (struct tuner_instance *tuner,
 | |
| 						u32 mode,
 | |
| 						s32
 | |
| 						frequency);
 | |
| 
 | |
| typedef int(*tuner_get_frequency_func_t) (struct tuner_instance *tuner,
 | |
| 						u32 mode,
 | |
| 						s32 *
 | |
| 						r_ffrequency,
 | |
| 						s32 *
 | |
| 						i_ffrequency);
 | |
| 
 | |
| typedef int(*tuner_lock_status_func_t) (struct tuner_instance *tuner,
 | |
| 						enum tuner_lock_status *
 | |
| 						lock_stat);
 | |
| 
 | |
| typedef int(*tune_ri2c_write_read_func_t) (struct tuner_instance *tuner,
 | |
| 						struct i2c_device_addr *
 | |
| 						w_dev_addr, u16 w_count,
 | |
| 						u8 *wData,
 | |
| 						struct i2c_device_addr *
 | |
| 						r_dev_addr, u16 r_count,
 | |
| 						u8 *r_data);
 | |
| 
 | |
| struct tuner_ops {
 | |
| 	tuner_open_func_t open_func;
 | |
| 	tuner_close_func_t close_func;
 | |
| 	tuner_set_frequency_func_t set_frequency_func;
 | |
| 	tuner_get_frequency_func_t get_frequency_func;
 | |
| 	tuner_lock_status_func_t lock_status_func;
 | |
| 	tune_ri2c_write_read_func_t i2c_write_read_func;
 | |
| 
 | |
| };
 | |
| 
 | |
| struct tuner_instance {
 | |
| 	struct i2c_device_addr my_i2c_dev_addr;
 | |
| 	struct tuner_common *my_common_attr;
 | |
| 	void *my_ext_attr;
 | |
| 	struct tuner_ops *my_funct;
 | |
| };
 | |
| 
 | |
| int drxbsp_tuner_set_frequency(struct tuner_instance *tuner,
 | |
| 					u32 mode,
 | |
| 					s32 frequency);
 | |
| 
 | |
| int drxbsp_tuner_get_frequency(struct tuner_instance *tuner,
 | |
| 					u32 mode,
 | |
| 					s32 *r_ffrequency,
 | |
| 					s32 *i_ffrequency);
 | |
| 
 | |
| int drxbsp_tuner_default_i2c_write_read(struct tuner_instance *tuner,
 | |
| 						struct i2c_device_addr *w_dev_addr,
 | |
| 						u16 w_count,
 | |
| 						u8 *wData,
 | |
| 						struct i2c_device_addr *r_dev_addr,
 | |
| 						u16 r_count, u8 *r_data);
 | |
| 
 | |
| /*************
 | |
| *
 | |
| * This section configures the DRX Data Access Protocols (DAPs).
 | |
| *
 | |
| **************/
 | |
| 
 | |
| /*
 | |
| * \def DRXDAP_SINGLE_MASTER
 | |
| * \brief Enable I2C single or I2C multimaster mode on host.
 | |
| *
 | |
| * Set to 1 to enable single master mode
 | |
| * Set to 0 to enable multi master mode
 | |
| *
 | |
| * The actual DAP implementation may be restricted to only one of the modes.
 | |
| * A compiler warning or error will be generated if the DAP implementation
 | |
| * overrides or cannot handle the mode defined below.
 | |
| */
 | |
| #ifndef DRXDAP_SINGLE_MASTER
 | |
| #define DRXDAP_SINGLE_MASTER 1
 | |
| #endif
 | |
| 
 | |
| /*
 | |
| * \def DRXDAP_MAX_WCHUNKSIZE
 | |
| * \brief Defines maximum chunksize of an i2c write action by host.
 | |
| *
 | |
| * This indicates the maximum size of data the I2C device driver is able to
 | |
| * write at a time. This includes I2C device address and register addressing.
 | |
| *
 | |
| * This maximum size may be restricted by the actual DAP implementation.
 | |
| * A compiler warning or error will be generated if the DAP implementation
 | |
| * overrides or cannot handle the chunksize defined below.
 | |
| *
 | |
| * Beware that the DAP uses  DRXDAP_MAX_WCHUNKSIZE to create a temporary data
 | |
| * buffer. Do not undefine or choose too large, unless your system is able to
 | |
| * handle a stack buffer of that size.
 | |
| *
 | |
| */
 | |
| #ifndef DRXDAP_MAX_WCHUNKSIZE
 | |
| #define  DRXDAP_MAX_WCHUNKSIZE 60
 | |
| #endif
 | |
| 
 | |
| /*
 | |
| * \def DRXDAP_MAX_RCHUNKSIZE
 | |
| * \brief Defines maximum chunksize of an i2c read action by host.
 | |
| *
 | |
| * This indicates the maximum size of data the I2C device driver is able to read
 | |
| * at a time. Minimum value is 2. Also, the read chunk size must be even.
 | |
| *
 | |
| * This maximum size may be restricted by the actual DAP implementation.
 | |
| * A compiler warning or error will be generated if the DAP implementation
 | |
| * overrides or cannot handle the chunksize defined below.
 | |
| */
 | |
| #ifndef DRXDAP_MAX_RCHUNKSIZE
 | |
| #define  DRXDAP_MAX_RCHUNKSIZE 60
 | |
| #endif
 | |
| 
 | |
| /*************
 | |
| *
 | |
| * This section describes drxdriver defines.
 | |
| *
 | |
| **************/
 | |
| 
 | |
| /*
 | |
| * \def DRX_UNKNOWN
 | |
| * \brief Generic UNKNOWN value for DRX enumerated types.
 | |
| *
 | |
| * Used to indicate that the parameter value is unknown or not yet initialized.
 | |
| */
 | |
| #ifndef DRX_UNKNOWN
 | |
| #define DRX_UNKNOWN (254)
 | |
| #endif
 | |
| 
 | |
| /*
 | |
| * \def DRX_AUTO
 | |
| * \brief Generic AUTO value for DRX enumerated types.
 | |
| *
 | |
| * Used to instruct the driver to automatically determine the value of the
 | |
| * parameter.
 | |
| */
 | |
| #ifndef DRX_AUTO
 | |
| #define DRX_AUTO    (255)
 | |
| #endif
 | |
| 
 | |
| /*************
 | |
| *
 | |
| * This section describes flag definitions for the device capbilities.
 | |
| *
 | |
| **************/
 | |
| 
 | |
| /*
 | |
| * \brief LNA capability flag
 | |
| *
 | |
| * Device has a Low Noise Amplifier
 | |
| *
 | |
| */
 | |
| #define DRX_CAPABILITY_HAS_LNA           (1UL <<  0)
 | |
| /*
 | |
| * \brief OOB-RX capability flag
 | |
| *
 | |
| * Device has OOB-RX
 | |
| *
 | |
| */
 | |
| #define DRX_CAPABILITY_HAS_OOBRX         (1UL <<  1)
 | |
| /*
 | |
| * \brief ATV capability flag
 | |
| *
 | |
| * Device has ATV
 | |
| *
 | |
| */
 | |
| #define DRX_CAPABILITY_HAS_ATV           (1UL <<  2)
 | |
| /*
 | |
| * \brief DVB-T capability flag
 | |
| *
 | |
| * Device has DVB-T
 | |
| *
 | |
| */
 | |
| #define DRX_CAPABILITY_HAS_DVBT          (1UL <<  3)
 | |
| /*
 | |
| * \brief  ITU-B capability flag
 | |
| *
 | |
| * Device has ITU-B
 | |
| *
 | |
| */
 | |
| #define DRX_CAPABILITY_HAS_ITUB          (1UL <<  4)
 | |
| /*
 | |
| * \brief  Audio capability flag
 | |
| *
 | |
| * Device has Audio
 | |
| *
 | |
| */
 | |
| #define DRX_CAPABILITY_HAS_AUD           (1UL <<  5)
 | |
| /*
 | |
| * \brief  SAW switch capability flag
 | |
| *
 | |
| * Device has SAW switch
 | |
| *
 | |
| */
 | |
| #define DRX_CAPABILITY_HAS_SAWSW         (1UL <<  6)
 | |
| /*
 | |
| * \brief  GPIO1 capability flag
 | |
| *
 | |
| * Device has GPIO1
 | |
| *
 | |
| */
 | |
| #define DRX_CAPABILITY_HAS_GPIO1         (1UL <<  7)
 | |
| /*
 | |
| * \brief  GPIO2 capability flag
 | |
| *
 | |
| * Device has GPIO2
 | |
| *
 | |
| */
 | |
| #define DRX_CAPABILITY_HAS_GPIO2         (1UL <<  8)
 | |
| /*
 | |
| * \brief  IRQN capability flag
 | |
| *
 | |
| * Device has IRQN
 | |
| *
 | |
| */
 | |
| #define DRX_CAPABILITY_HAS_IRQN          (1UL <<  9)
 | |
| /*
 | |
| * \brief  8VSB capability flag
 | |
| *
 | |
| * Device has 8VSB
 | |
| *
 | |
| */
 | |
| #define DRX_CAPABILITY_HAS_8VSB          (1UL << 10)
 | |
| /*
 | |
| * \brief  SMA-TX capability flag
 | |
| *
 | |
| * Device has SMATX
 | |
| *
 | |
| */
 | |
| #define DRX_CAPABILITY_HAS_SMATX         (1UL << 11)
 | |
| /*
 | |
| * \brief  SMA-RX capability flag
 | |
| *
 | |
| * Device has SMARX
 | |
| *
 | |
| */
 | |
| #define DRX_CAPABILITY_HAS_SMARX         (1UL << 12)
 | |
| /*
 | |
| * \brief  ITU-A/C capability flag
 | |
| *
 | |
| * Device has ITU-A/C
 | |
| *
 | |
| */
 | |
| #define DRX_CAPABILITY_HAS_ITUAC         (1UL << 13)
 | |
| 
 | |
| /*-------------------------------------------------------------------------
 | |
| MACROS
 | |
| -------------------------------------------------------------------------*/
 | |
| /* Macros to stringify the version number */
 | |
| #define DRX_VERSIONSTRING(MAJOR, MINOR, PATCH) \
 | |
| 	 DRX_VERSIONSTRING_HELP(MAJOR)"." \
 | |
| 	 DRX_VERSIONSTRING_HELP(MINOR)"." \
 | |
| 	 DRX_VERSIONSTRING_HELP(PATCH)
 | |
| #define DRX_VERSIONSTRING_HELP(NUM) #NUM
 | |
| 
 | |
| /*
 | |
| * \brief Macro to create byte array elements from 16 bit integers.
 | |
| * This macro is used to create byte arrays for block writes.
 | |
| * Block writes speed up I2C traffic between host and demod.
 | |
| * The macro takes care of the required byte order in a 16 bits word.
 | |
| * x->lowbyte(x), highbyte(x)
 | |
| */
 | |
| #define DRX_16TO8(x) ((u8) (((u16)x) & 0xFF)), \
 | |
| 			((u8)((((u16)x)>>8)&0xFF))
 | |
| 
 | |
| /*
 | |
| * \brief Macro to convert 16 bit register value to a s32
 | |
| */
 | |
| #define DRX_U16TODRXFREQ(x)   ((x & 0x8000) ? \
 | |
| 				 ((s32) \
 | |
| 				    (((u32) x) | 0xFFFF0000)) : \
 | |
| 				 ((s32) x))
 | |
| 
 | |
| /*-------------------------------------------------------------------------
 | |
| ENUM
 | |
| -------------------------------------------------------------------------*/
 | |
| 
 | |
| /*
 | |
| * \enum enum drx_standard
 | |
| * \brief Modulation standards.
 | |
| */
 | |
| enum drx_standard {
 | |
| 	DRX_STANDARD_DVBT = 0, /*< Terrestrial DVB-T.               */
 | |
| 	DRX_STANDARD_8VSB,     /*< Terrestrial 8VSB.                */
 | |
| 	DRX_STANDARD_NTSC,     /*< Terrestrial\Cable analog NTSC.   */
 | |
| 	DRX_STANDARD_PAL_SECAM_BG,
 | |
| 				/*< Terrestrial analog PAL/SECAM B/G */
 | |
| 	DRX_STANDARD_PAL_SECAM_DK,
 | |
| 				/*< Terrestrial analog PAL/SECAM D/K */
 | |
| 	DRX_STANDARD_PAL_SECAM_I,
 | |
| 				/*< Terrestrial analog PAL/SECAM I   */
 | |
| 	DRX_STANDARD_PAL_SECAM_L,
 | |
| 				/*< Terrestrial analog PAL/SECAM L
 | |
| 					with negative modulation        */
 | |
| 	DRX_STANDARD_PAL_SECAM_LP,
 | |
| 				/*< Terrestrial analog PAL/SECAM L
 | |
| 					with positive modulation        */
 | |
| 	DRX_STANDARD_ITU_A,    /*< Cable ITU ANNEX A.               */
 | |
| 	DRX_STANDARD_ITU_B,    /*< Cable ITU ANNEX B.               */
 | |
| 	DRX_STANDARD_ITU_C,    /*< Cable ITU ANNEX C.               */
 | |
| 	DRX_STANDARD_ITU_D,    /*< Cable ITU ANNEX D.               */
 | |
| 	DRX_STANDARD_FM,       /*< Terrestrial\Cable FM radio       */
 | |
| 	DRX_STANDARD_DTMB,     /*< Terrestrial DTMB standard (China)*/
 | |
| 	DRX_STANDARD_UNKNOWN = DRX_UNKNOWN,
 | |
| 				/*< Standard unknown.                */
 | |
| 	DRX_STANDARD_AUTO = DRX_AUTO
 | |
| 				/*< Autodetect standard.             */
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \enum enum drx_standard
 | |
| * \brief Modulation sub-standards.
 | |
| */
 | |
| enum drx_substandard {
 | |
| 	DRX_SUBSTANDARD_MAIN = 0, /*< Main subvariant of standard   */
 | |
| 	DRX_SUBSTANDARD_ATV_BG_SCANDINAVIA,
 | |
| 	DRX_SUBSTANDARD_ATV_DK_POLAND,
 | |
| 	DRX_SUBSTANDARD_ATV_DK_CHINA,
 | |
| 	DRX_SUBSTANDARD_UNKNOWN = DRX_UNKNOWN,
 | |
| 					/*< Sub-standard unknown.         */
 | |
| 	DRX_SUBSTANDARD_AUTO = DRX_AUTO
 | |
| 					/*< Auto (default) sub-standard   */
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \enum enum drx_bandwidth
 | |
| * \brief Channel bandwidth or channel spacing.
 | |
| */
 | |
| enum drx_bandwidth {
 | |
| 	DRX_BANDWIDTH_8MHZ = 0,	 /*< Bandwidth 8 MHz.   */
 | |
| 	DRX_BANDWIDTH_7MHZ,	 /*< Bandwidth 7 MHz.   */
 | |
| 	DRX_BANDWIDTH_6MHZ,	 /*< Bandwidth 6 MHz.   */
 | |
| 	DRX_BANDWIDTH_UNKNOWN = DRX_UNKNOWN,
 | |
| 					/*< Bandwidth unknown. */
 | |
| 	DRX_BANDWIDTH_AUTO = DRX_AUTO
 | |
| 					/*< Auto Set Bandwidth */
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \enum enum drx_mirror
 | |
| * \brief Indicate if channel spectrum is mirrored or not.
 | |
| */
 | |
| enum drx_mirror {
 | |
| 	DRX_MIRROR_NO = 0,   /*< Spectrum is not mirrored.           */
 | |
| 	DRX_MIRROR_YES,	     /*< Spectrum is mirrored.               */
 | |
| 	DRX_MIRROR_UNKNOWN = DRX_UNKNOWN,
 | |
| 				/*< Unknown if spectrum is mirrored.    */
 | |
| 	DRX_MIRROR_AUTO = DRX_AUTO
 | |
| 				/*< Autodetect if spectrum is mirrored. */
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \enum enum drx_modulation
 | |
| * \brief Constellation type of the channel.
 | |
| */
 | |
| enum drx_modulation {
 | |
| 	DRX_CONSTELLATION_BPSK = 0,  /*< Modulation is BPSK.       */
 | |
| 	DRX_CONSTELLATION_QPSK,	     /*< Constellation is QPSK.    */
 | |
| 	DRX_CONSTELLATION_PSK8,	     /*< Constellation is PSK8.    */
 | |
| 	DRX_CONSTELLATION_QAM16,     /*< Constellation is QAM16.   */
 | |
| 	DRX_CONSTELLATION_QAM32,     /*< Constellation is QAM32.   */
 | |
| 	DRX_CONSTELLATION_QAM64,     /*< Constellation is QAM64.   */
 | |
| 	DRX_CONSTELLATION_QAM128,    /*< Constellation is QAM128.  */
 | |
| 	DRX_CONSTELLATION_QAM256,    /*< Constellation is QAM256.  */
 | |
| 	DRX_CONSTELLATION_QAM512,    /*< Constellation is QAM512.  */
 | |
| 	DRX_CONSTELLATION_QAM1024,   /*< Constellation is QAM1024. */
 | |
| 	DRX_CONSTELLATION_QPSK_NR,   /*< Constellation is QPSK_NR  */
 | |
| 	DRX_CONSTELLATION_UNKNOWN = DRX_UNKNOWN,
 | |
| 					/*< Constellation unknown.    */
 | |
| 	DRX_CONSTELLATION_AUTO = DRX_AUTO
 | |
| 					/*< Autodetect constellation. */
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \enum enum drx_hierarchy
 | |
| * \brief Hierarchy of the channel.
 | |
| */
 | |
| enum drx_hierarchy {
 | |
| 	DRX_HIERARCHY_NONE = 0,	/*< None hierarchical channel.     */
 | |
| 	DRX_HIERARCHY_ALPHA1,	/*< Hierarchical channel, alpha=1. */
 | |
| 	DRX_HIERARCHY_ALPHA2,	/*< Hierarchical channel, alpha=2. */
 | |
| 	DRX_HIERARCHY_ALPHA4,	/*< Hierarchical channel, alpha=4. */
 | |
| 	DRX_HIERARCHY_UNKNOWN = DRX_UNKNOWN,
 | |
| 				/*< Hierarchy unknown.             */
 | |
| 	DRX_HIERARCHY_AUTO = DRX_AUTO
 | |
| 				/*< Autodetect hierarchy.          */
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \enum enum drx_priority
 | |
| * \brief Channel priority in case of hierarchical transmission.
 | |
| */
 | |
| enum drx_priority {
 | |
| 	DRX_PRIORITY_LOW = 0,  /*< Low priority channel.  */
 | |
| 	DRX_PRIORITY_HIGH,     /*< High priority channel. */
 | |
| 	DRX_PRIORITY_UNKNOWN = DRX_UNKNOWN
 | |
| 				/*< Priority unknown.      */
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \enum enum drx_coderate
 | |
| * \brief Channel priority in case of hierarchical transmission.
 | |
| */
 | |
| enum drx_coderate {
 | |
| 		DRX_CODERATE_1DIV2 = 0,	/*< Code rate 1/2nd.      */
 | |
| 		DRX_CODERATE_2DIV3,	/*< Code rate 2/3nd.      */
 | |
| 		DRX_CODERATE_3DIV4,	/*< Code rate 3/4nd.      */
 | |
| 		DRX_CODERATE_5DIV6,	/*< Code rate 5/6nd.      */
 | |
| 		DRX_CODERATE_7DIV8,	/*< Code rate 7/8nd.      */
 | |
| 		DRX_CODERATE_UNKNOWN = DRX_UNKNOWN,
 | |
| 					/*< Code rate unknown.    */
 | |
| 		DRX_CODERATE_AUTO = DRX_AUTO
 | |
| 					/*< Autodetect code rate. */
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \enum enum drx_guard
 | |
| * \brief Guard interval of a channel.
 | |
| */
 | |
| enum drx_guard {
 | |
| 	DRX_GUARD_1DIV32 = 0, /*< Guard interval 1/32nd.     */
 | |
| 	DRX_GUARD_1DIV16,     /*< Guard interval 1/16th.     */
 | |
| 	DRX_GUARD_1DIV8,      /*< Guard interval 1/8th.      */
 | |
| 	DRX_GUARD_1DIV4,      /*< Guard interval 1/4th.      */
 | |
| 	DRX_GUARD_UNKNOWN = DRX_UNKNOWN,
 | |
| 				/*< Guard interval unknown.    */
 | |
| 	DRX_GUARD_AUTO = DRX_AUTO
 | |
| 				/*< Autodetect guard interval. */
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \enum enum drx_fft_mode
 | |
| * \brief FFT mode.
 | |
| */
 | |
| enum drx_fft_mode {
 | |
| 	DRX_FFTMODE_2K = 0,    /*< 2K FFT mode.         */
 | |
| 	DRX_FFTMODE_4K,	       /*< 4K FFT mode.         */
 | |
| 	DRX_FFTMODE_8K,	       /*< 8K FFT mode.         */
 | |
| 	DRX_FFTMODE_UNKNOWN = DRX_UNKNOWN,
 | |
| 				/*< FFT mode unknown.    */
 | |
| 	DRX_FFTMODE_AUTO = DRX_AUTO
 | |
| 				/*< Autodetect FFT mode. */
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \enum enum drx_classification
 | |
| * \brief Channel classification.
 | |
| */
 | |
| enum drx_classification {
 | |
| 	DRX_CLASSIFICATION_GAUSS = 0, /*< Gaussion noise.            */
 | |
| 	DRX_CLASSIFICATION_HVY_GAUSS, /*< Heavy Gaussion noise.      */
 | |
| 	DRX_CLASSIFICATION_COCHANNEL, /*< Co-channel.                */
 | |
| 	DRX_CLASSIFICATION_STATIC,    /*< Static echo.               */
 | |
| 	DRX_CLASSIFICATION_MOVING,    /*< Moving echo.               */
 | |
| 	DRX_CLASSIFICATION_ZERODB,    /*< Zero dB echo.              */
 | |
| 	DRX_CLASSIFICATION_UNKNOWN = DRX_UNKNOWN,
 | |
| 					/*< Unknown classification     */
 | |
| 	DRX_CLASSIFICATION_AUTO = DRX_AUTO
 | |
| 					/*< Autodetect classification. */
 | |
| };
 | |
| 
 | |
| /*
 | |
| * /enum enum drx_interleave_mode
 | |
| * /brief Interleave modes
 | |
| */
 | |
| enum drx_interleave_mode {
 | |
| 	DRX_INTERLEAVEMODE_I128_J1 = 0,
 | |
| 	DRX_INTERLEAVEMODE_I128_J1_V2,
 | |
| 	DRX_INTERLEAVEMODE_I128_J2,
 | |
| 	DRX_INTERLEAVEMODE_I64_J2,
 | |
| 	DRX_INTERLEAVEMODE_I128_J3,
 | |
| 	DRX_INTERLEAVEMODE_I32_J4,
 | |
| 	DRX_INTERLEAVEMODE_I128_J4,
 | |
| 	DRX_INTERLEAVEMODE_I16_J8,
 | |
| 	DRX_INTERLEAVEMODE_I128_J5,
 | |
| 	DRX_INTERLEAVEMODE_I8_J16,
 | |
| 	DRX_INTERLEAVEMODE_I128_J6,
 | |
| 	DRX_INTERLEAVEMODE_RESERVED_11,
 | |
| 	DRX_INTERLEAVEMODE_I128_J7,
 | |
| 	DRX_INTERLEAVEMODE_RESERVED_13,
 | |
| 	DRX_INTERLEAVEMODE_I128_J8,
 | |
| 	DRX_INTERLEAVEMODE_RESERVED_15,
 | |
| 	DRX_INTERLEAVEMODE_I12_J17,
 | |
| 	DRX_INTERLEAVEMODE_I5_J4,
 | |
| 	DRX_INTERLEAVEMODE_B52_M240,
 | |
| 	DRX_INTERLEAVEMODE_B52_M720,
 | |
| 	DRX_INTERLEAVEMODE_B52_M48,
 | |
| 	DRX_INTERLEAVEMODE_B52_M0,
 | |
| 	DRX_INTERLEAVEMODE_UNKNOWN = DRX_UNKNOWN,
 | |
| 					/*< Unknown interleave mode    */
 | |
| 	DRX_INTERLEAVEMODE_AUTO = DRX_AUTO
 | |
| 					/*< Autodetect interleave mode */
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \enum enum drx_carrier_mode
 | |
| * \brief Channel Carrier Mode.
 | |
| */
 | |
| enum drx_carrier_mode {
 | |
| 	DRX_CARRIER_MULTI = 0,		/*< Multi carrier mode       */
 | |
| 	DRX_CARRIER_SINGLE,		/*< Single carrier mode      */
 | |
| 	DRX_CARRIER_UNKNOWN = DRX_UNKNOWN,
 | |
| 					/*< Carrier mode unknown.    */
 | |
| 	DRX_CARRIER_AUTO = DRX_AUTO	/*< Autodetect carrier mode  */
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \enum enum drx_frame_mode
 | |
| * \brief Channel Frame Mode.
 | |
| */
 | |
| enum drx_frame_mode {
 | |
| 	DRX_FRAMEMODE_420 = 0,	 /*< 420 with variable PN  */
 | |
| 	DRX_FRAMEMODE_595,	 /*< 595                   */
 | |
| 	DRX_FRAMEMODE_945,	 /*< 945 with variable PN  */
 | |
| 	DRX_FRAMEMODE_420_FIXED_PN,
 | |
| 					/*< 420 with fixed PN     */
 | |
| 	DRX_FRAMEMODE_945_FIXED_PN,
 | |
| 					/*< 945 with fixed PN     */
 | |
| 	DRX_FRAMEMODE_UNKNOWN = DRX_UNKNOWN,
 | |
| 					/*< Frame mode unknown.   */
 | |
| 	DRX_FRAMEMODE_AUTO = DRX_AUTO
 | |
| 					/*< Autodetect frame mode */
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \enum enum drx_tps_frame
 | |
| * \brief Frame number in current super-frame.
 | |
| */
 | |
| enum drx_tps_frame {
 | |
| 	DRX_TPS_FRAME1 = 0,	  /*< TPS frame 1.       */
 | |
| 	DRX_TPS_FRAME2,		  /*< TPS frame 2.       */
 | |
| 	DRX_TPS_FRAME3,		  /*< TPS frame 3.       */
 | |
| 	DRX_TPS_FRAME4,		  /*< TPS frame 4.       */
 | |
| 	DRX_TPS_FRAME_UNKNOWN = DRX_UNKNOWN
 | |
| 					/*< TPS frame unknown. */
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \enum enum drx_ldpc
 | |
| * \brief TPS LDPC .
 | |
| */
 | |
| enum drx_ldpc {
 | |
| 	DRX_LDPC_0_4 = 0,	  /*< LDPC 0.4           */
 | |
| 	DRX_LDPC_0_6,		  /*< LDPC 0.6           */
 | |
| 	DRX_LDPC_0_8,		  /*< LDPC 0.8           */
 | |
| 	DRX_LDPC_UNKNOWN = DRX_UNKNOWN,
 | |
| 					/*< LDPC unknown.      */
 | |
| 	DRX_LDPC_AUTO = DRX_AUTO  /*< Autodetect LDPC    */
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \enum enum drx_pilot_mode
 | |
| * \brief Pilot modes in DTMB.
 | |
| */
 | |
| enum drx_pilot_mode {
 | |
| 	DRX_PILOT_ON = 0,	  /*< Pilot On             */
 | |
| 	DRX_PILOT_OFF,		  /*< Pilot Off            */
 | |
| 	DRX_PILOT_UNKNOWN = DRX_UNKNOWN,
 | |
| 					/*< Pilot unknown.       */
 | |
| 	DRX_PILOT_AUTO = DRX_AUTO /*< Autodetect Pilot     */
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * enum drxu_code_action - indicate if firmware has to be uploaded or verified.
 | |
|  * @UCODE_UPLOAD:	Upload the microcode image to device
 | |
|  * @UCODE_VERIFY:	Compare microcode image with code on device
 | |
|  */
 | |
| enum drxu_code_action {
 | |
| 	UCODE_UPLOAD,
 | |
| 	UCODE_VERIFY
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \enum enum drx_lock_status * \brief Used to reflect current lock status of demodulator.
 | |
| *
 | |
| * The generic lock states have device dependent semantics.
 | |
| 
 | |
| 		DRX_NEVER_LOCK = 0,
 | |
| 			      **< Device will never lock on this signal *
 | |
| 		DRX_NOT_LOCKED,
 | |
| 			      **< Device has no lock at all             *
 | |
| 		DRX_LOCK_STATE_1,
 | |
| 			      **< Generic lock state                    *
 | |
| 		DRX_LOCK_STATE_2,
 | |
| 			      **< Generic lock state                    *
 | |
| 		DRX_LOCK_STATE_3,
 | |
| 			      **< Generic lock state                    *
 | |
| 		DRX_LOCK_STATE_4,
 | |
| 			      **< Generic lock state                    *
 | |
| 		DRX_LOCK_STATE_5,
 | |
| 			      **< Generic lock state                    *
 | |
| 		DRX_LOCK_STATE_6,
 | |
| 			      **< Generic lock state                    *
 | |
| 		DRX_LOCK_STATE_7,
 | |
| 			      **< Generic lock state                    *
 | |
| 		DRX_LOCK_STATE_8,
 | |
| 			      **< Generic lock state                    *
 | |
| 		DRX_LOCK_STATE_9,
 | |
| 			      **< Generic lock state                    *
 | |
| 		DRX_LOCKED    **< Device is in lock                     *
 | |
| */
 | |
| 
 | |
| enum drx_lock_status {
 | |
| 	DRX_NEVER_LOCK = 0,
 | |
| 	DRX_NOT_LOCKED,
 | |
| 	DRX_LOCK_STATE_1,
 | |
| 	DRX_LOCK_STATE_2,
 | |
| 	DRX_LOCK_STATE_3,
 | |
| 	DRX_LOCK_STATE_4,
 | |
| 	DRX_LOCK_STATE_5,
 | |
| 	DRX_LOCK_STATE_6,
 | |
| 	DRX_LOCK_STATE_7,
 | |
| 	DRX_LOCK_STATE_8,
 | |
| 	DRX_LOCK_STATE_9,
 | |
| 	DRX_LOCKED
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \enum enum drx_uio* \brief Used to address a User IO (UIO).
 | |
| */
 | |
| enum drx_uio {
 | |
| 	DRX_UIO1,
 | |
| 	DRX_UIO2,
 | |
| 	DRX_UIO3,
 | |
| 	DRX_UIO4,
 | |
| 	DRX_UIO5,
 | |
| 	DRX_UIO6,
 | |
| 	DRX_UIO7,
 | |
| 	DRX_UIO8,
 | |
| 	DRX_UIO9,
 | |
| 	DRX_UIO10,
 | |
| 	DRX_UIO11,
 | |
| 	DRX_UIO12,
 | |
| 	DRX_UIO13,
 | |
| 	DRX_UIO14,
 | |
| 	DRX_UIO15,
 | |
| 	DRX_UIO16,
 | |
| 	DRX_UIO17,
 | |
| 	DRX_UIO18,
 | |
| 	DRX_UIO19,
 | |
| 	DRX_UIO20,
 | |
| 	DRX_UIO21,
 | |
| 	DRX_UIO22,
 | |
| 	DRX_UIO23,
 | |
| 	DRX_UIO24,
 | |
| 	DRX_UIO25,
 | |
| 	DRX_UIO26,
 | |
| 	DRX_UIO27,
 | |
| 	DRX_UIO28,
 | |
| 	DRX_UIO29,
 | |
| 	DRX_UIO30,
 | |
| 	DRX_UIO31,
 | |
| 	DRX_UIO32,
 | |
| 	DRX_UIO_MAX = DRX_UIO32
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \enum enum drxuio_mode * \brief Used to configure the modus oprandi of a UIO.
 | |
| *
 | |
| * DRX_UIO_MODE_FIRMWARE is an old uio mode.
 | |
| * It is replaced by the modes DRX_UIO_MODE_FIRMWARE0 .. DRX_UIO_MODE_FIRMWARE9.
 | |
| * To be backward compatible DRX_UIO_MODE_FIRMWARE is equivalent to
 | |
| * DRX_UIO_MODE_FIRMWARE0.
 | |
| */
 | |
| enum drxuio_mode {
 | |
| 	DRX_UIO_MODE_DISABLE = 0x01,
 | |
| 			    /*< not used, pin is configured as input */
 | |
| 	DRX_UIO_MODE_READWRITE = 0x02,
 | |
| 			    /*< used for read/write by application   */
 | |
| 	DRX_UIO_MODE_FIRMWARE = 0x04,
 | |
| 			    /*< controlled by firmware, function 0   */
 | |
| 	DRX_UIO_MODE_FIRMWARE0 = DRX_UIO_MODE_FIRMWARE,
 | |
| 					    /*< same as above        */
 | |
| 	DRX_UIO_MODE_FIRMWARE1 = 0x08,
 | |
| 			    /*< controlled by firmware, function 1   */
 | |
| 	DRX_UIO_MODE_FIRMWARE2 = 0x10,
 | |
| 			    /*< controlled by firmware, function 2   */
 | |
| 	DRX_UIO_MODE_FIRMWARE3 = 0x20,
 | |
| 			    /*< controlled by firmware, function 3   */
 | |
| 	DRX_UIO_MODE_FIRMWARE4 = 0x40,
 | |
| 			    /*< controlled by firmware, function 4   */
 | |
| 	DRX_UIO_MODE_FIRMWARE5 = 0x80
 | |
| 			    /*< controlled by firmware, function 5   */
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \enum enum drxoob_downstream_standard * \brief Used to select OOB standard.
 | |
| *
 | |
| * Based on ANSI 55-1 and 55-2
 | |
| */
 | |
| enum drxoob_downstream_standard {
 | |
| 	DRX_OOB_MODE_A = 0,
 | |
| 		       /*< ANSI 55-1   */
 | |
| 	DRX_OOB_MODE_B_GRADE_A,
 | |
| 		       /*< ANSI 55-2 A */
 | |
| 	DRX_OOB_MODE_B_GRADE_B
 | |
| 		       /*< ANSI 55-2 B */
 | |
| };
 | |
| 
 | |
| /*-------------------------------------------------------------------------
 | |
| STRUCTS
 | |
| -------------------------------------------------------------------------*/
 | |
| 
 | |
| /*============================================================================*/
 | |
| /*============================================================================*/
 | |
| /*== CTRL CFG related data structures ========================================*/
 | |
| /*============================================================================*/
 | |
| /*============================================================================*/
 | |
| 
 | |
| #ifndef DRX_CFG_BASE
 | |
| #define DRX_CFG_BASE          0
 | |
| #endif
 | |
| 
 | |
| #define DRX_CFG_MPEG_OUTPUT         (DRX_CFG_BASE +  0)	/* MPEG TS output    */
 | |
| #define DRX_CFG_PKTERR              (DRX_CFG_BASE +  1)	/* Packet Error      */
 | |
| #define DRX_CFG_SYMCLK_OFFS         (DRX_CFG_BASE +  2)	/* Symbol Clk Offset */
 | |
| #define DRX_CFG_SMA                 (DRX_CFG_BASE +  3)	/* Smart Antenna     */
 | |
| #define DRX_CFG_PINSAFE             (DRX_CFG_BASE +  4)	/* Pin safe mode     */
 | |
| #define DRX_CFG_SUBSTANDARD         (DRX_CFG_BASE +  5)	/* substandard       */
 | |
| #define DRX_CFG_AUD_VOLUME          (DRX_CFG_BASE +  6)	/* volume            */
 | |
| #define DRX_CFG_AUD_RDS             (DRX_CFG_BASE +  7)	/* rds               */
 | |
| #define DRX_CFG_AUD_AUTOSOUND       (DRX_CFG_BASE +  8)	/* ASS & ASC         */
 | |
| #define DRX_CFG_AUD_ASS_THRES       (DRX_CFG_BASE +  9)	/* ASS Thresholds    */
 | |
| #define DRX_CFG_AUD_DEVIATION       (DRX_CFG_BASE + 10)	/* Deviation         */
 | |
| #define DRX_CFG_AUD_PRESCALE        (DRX_CFG_BASE + 11)	/* Prescale          */
 | |
| #define DRX_CFG_AUD_MIXER           (DRX_CFG_BASE + 12)	/* Mixer             */
 | |
| #define DRX_CFG_AUD_AVSYNC          (DRX_CFG_BASE + 13)	/* AVSync            */
 | |
| #define DRX_CFG_AUD_CARRIER         (DRX_CFG_BASE + 14)	/* Audio carriers    */
 | |
| #define DRX_CFG_I2S_OUTPUT          (DRX_CFG_BASE + 15)	/* I2S output        */
 | |
| #define DRX_CFG_ATV_STANDARD        (DRX_CFG_BASE + 16)	/* ATV standard      */
 | |
| #define DRX_CFG_SQI_SPEED           (DRX_CFG_BASE + 17)	/* SQI speed         */
 | |
| #define DRX_CTRL_CFG_MAX            (DRX_CFG_BASE + 18)	/* never to be used  */
 | |
| 
 | |
| #define DRX_CFG_PINS_SAFE_MODE      DRX_CFG_PINSAFE
 | |
| /*============================================================================*/
 | |
| /*============================================================================*/
 | |
| /*== CTRL related data structures ============================================*/
 | |
| /*============================================================================*/
 | |
| /*============================================================================*/
 | |
| 
 | |
| /*
 | |
|  * struct drxu_code_info	Parameters for microcode upload and verfiy.
 | |
|  *
 | |
|  * @mc_file:	microcode file name
 | |
|  *
 | |
|  * Used by DRX_CTRL_LOAD_UCODE and DRX_CTRL_VERIFY_UCODE
 | |
|  */
 | |
| struct drxu_code_info {
 | |
| 	char			*mc_file;
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \struct drx_mc_version_rec_t
 | |
| * \brief Microcode version record
 | |
| * Version numbers are stored in BCD format, as usual:
 | |
| *   o major number = bits 31-20 (first three nibbles of MSW)
 | |
| *   o minor number = bits 19-16 (fourth nibble of MSW)
 | |
| *   o patch number = bits 15-0  (remaining nibbles in LSW)
 | |
| *
 | |
| * The device type indicates for which the device is meant. It is based on the
 | |
| * JTAG ID, using everything except the bond ID and the metal fix.
 | |
| *
 | |
| * Special values:
 | |
| * - mc_dev_type == 0         => any device allowed
 | |
| * - mc_base_version == 0.0.0 => full microcode (mc_version is the version)
 | |
| * - mc_base_version != 0.0.0 => patch microcode, the base microcode version
 | |
| *                             (mc_version is the version)
 | |
| */
 | |
| #define AUX_VER_RECORD 0x8000
 | |
| 
 | |
| struct drx_mc_version_rec {
 | |
| 	u16 aux_type;	/* type of aux data - 0x8000 for version record     */
 | |
| 	u32 mc_dev_type;	/* device type, based on JTAG ID                    */
 | |
| 	u32 mc_version;	/* version of microcode                             */
 | |
| 	u32 mc_base_version;	/* in case of patch: the original microcode version */
 | |
| };
 | |
| 
 | |
| /*========================================*/
 | |
| 
 | |
| /*
 | |
| * \struct drx_filter_info_t
 | |
| * \brief Parameters for loading filter coefficients
 | |
| *
 | |
| * Used by DRX_CTRL_LOAD_FILTER
 | |
| */
 | |
| struct drx_filter_info {
 | |
| 	u8 *data_re;
 | |
| 	      /*< pointer to coefficients for RE */
 | |
| 	u8 *data_im;
 | |
| 	      /*< pointer to coefficients for IM */
 | |
| 	u16 size_re;
 | |
| 	      /*< size of coefficients for RE    */
 | |
| 	u16 size_im;
 | |
| 	      /*< size of coefficients for IM    */
 | |
| };
 | |
| 
 | |
| /*========================================*/
 | |
| 
 | |
| /*
 | |
| * \struct struct drx_channel * \brief The set of parameters describing a single channel.
 | |
| *
 | |
| * Used by DRX_CTRL_SET_CHANNEL and DRX_CTRL_GET_CHANNEL.
 | |
| * Only certain fields need to be used for a specific standard.
 | |
| *
 | |
| */
 | |
| struct drx_channel {
 | |
| 	s32 frequency;
 | |
| 				/*< frequency in kHz                 */
 | |
| 	enum drx_bandwidth bandwidth;
 | |
| 				/*< bandwidth                        */
 | |
| 	enum drx_mirror mirror;	/*< mirrored or not on RF            */
 | |
| 	enum drx_modulation constellation;
 | |
| 				/*< constellation                    */
 | |
| 	enum drx_hierarchy hierarchy;
 | |
| 				/*< hierarchy                        */
 | |
| 	enum drx_priority priority;	/*< priority                         */
 | |
| 	enum drx_coderate coderate;	/*< coderate                         */
 | |
| 	enum drx_guard guard;	/*< guard interval                   */
 | |
| 	enum drx_fft_mode fftmode;	/*< fftmode                          */
 | |
| 	enum drx_classification classification;
 | |
| 				/*< classification                   */
 | |
| 	u32 symbolrate;
 | |
| 				/*< symbolrate in symbols/sec        */
 | |
| 	enum drx_interleave_mode interleavemode;
 | |
| 				/*< interleaveMode QAM               */
 | |
| 	enum drx_ldpc ldpc;		/*< ldpc                             */
 | |
| 	enum drx_carrier_mode carrier;	/*< carrier                          */
 | |
| 	enum drx_frame_mode framemode;
 | |
| 				/*< frame mode                       */
 | |
| 	enum drx_pilot_mode pilot;	/*< pilot mode                       */
 | |
| };
 | |
| 
 | |
| /*========================================*/
 | |
| 
 | |
| enum drx_cfg_sqi_speed {
 | |
| 	DRX_SQI_SPEED_FAST = 0,
 | |
| 	DRX_SQI_SPEED_MEDIUM,
 | |
| 	DRX_SQI_SPEED_SLOW,
 | |
| 	DRX_SQI_SPEED_UNKNOWN = DRX_UNKNOWN
 | |
| };
 | |
| 
 | |
| /*========================================*/
 | |
| 
 | |
| /*
 | |
| * \struct struct drx_complex * A complex number.
 | |
| *
 | |
| * Used by DRX_CTRL_CONSTEL.
 | |
| */
 | |
| struct drx_complex {
 | |
| 	s16 im;
 | |
|      /*< Imaginary part. */
 | |
| 	s16 re;
 | |
|      /*< Real part.      */
 | |
| };
 | |
| 
 | |
| /*========================================*/
 | |
| 
 | |
| /*
 | |
| * \struct struct drx_frequency_plan * Array element of a frequency plan.
 | |
| *
 | |
| * Used by DRX_CTRL_SCAN_INIT.
 | |
| */
 | |
| struct drx_frequency_plan {
 | |
| 	s32 first;
 | |
| 		     /*< First centre frequency in this band        */
 | |
| 	s32 last;
 | |
| 		     /*< Last centre frequency in this band         */
 | |
| 	s32 step;
 | |
| 		     /*< Stepping frequency in this band            */
 | |
| 	enum drx_bandwidth bandwidth;
 | |
| 		     /*< Bandwidth within this frequency band       */
 | |
| 	u16 ch_number;
 | |
| 		     /*< First channel number in this band, or first
 | |
| 			    index in ch_names                         */
 | |
| 	char **ch_names;
 | |
| 		     /*< Optional list of channel names in this
 | |
| 			    band                                     */
 | |
| };
 | |
| 
 | |
| /*========================================*/
 | |
| 
 | |
| /*
 | |
| * \struct struct drx_scan_param * Parameters for channel scan.
 | |
| *
 | |
| * Used by DRX_CTRL_SCAN_INIT.
 | |
| */
 | |
| struct drx_scan_param {
 | |
| 	struct drx_frequency_plan *frequency_plan;
 | |
| 				  /*< Frequency plan (array)*/
 | |
| 	u16 frequency_plan_size;  /*< Number of bands       */
 | |
| 	u32 num_tries;		  /*< Max channels tried    */
 | |
| 	s32 skip;	  /*< Minimum frequency step to take
 | |
| 					after a channel is found */
 | |
| 	void *ext_params;	  /*< Standard specific params */
 | |
| };
 | |
| 
 | |
| /*========================================*/
 | |
| 
 | |
| /*
 | |
| * \brief Scan commands.
 | |
| * Used by scanning algorithms.
 | |
| */
 | |
| enum drx_scan_command {
 | |
| 		DRX_SCAN_COMMAND_INIT = 0,/*< Initialize scanning */
 | |
| 		DRX_SCAN_COMMAND_NEXT,	  /*< Next scan           */
 | |
| 		DRX_SCAN_COMMAND_STOP	  /*< Stop scanning       */
 | |
| };
 | |
| 
 | |
| /*========================================*/
 | |
| 
 | |
| /*
 | |
| * \brief Inner scan function prototype.
 | |
| */
 | |
| typedef int(*drx_scan_func_t) (void *scan_context,
 | |
| 				     enum drx_scan_command scan_command,
 | |
| 				     struct drx_channel *scan_channel,
 | |
| 				     bool *get_next_channel);
 | |
| 
 | |
| /*========================================*/
 | |
| 
 | |
| /*
 | |
| * \struct struct drxtps_info * TPS information, DVB-T specific.
 | |
| *
 | |
| * Used by DRX_CTRL_TPS_INFO.
 | |
| */
 | |
| 	struct drxtps_info {
 | |
| 		enum drx_fft_mode fftmode;	/*< Fft mode       */
 | |
| 		enum drx_guard guard;	/*< Guard interval */
 | |
| 		enum drx_modulation constellation;
 | |
| 					/*< Constellation  */
 | |
| 		enum drx_hierarchy hierarchy;
 | |
| 					/*< Hierarchy      */
 | |
| 		enum drx_coderate high_coderate;
 | |
| 					/*< High code rate */
 | |
| 		enum drx_coderate low_coderate;
 | |
| 					/*< Low cod rate   */
 | |
| 		enum drx_tps_frame frame;	/*< Tps frame      */
 | |
| 		u8 length;		/*< Length         */
 | |
| 		u16 cell_id;		/*< Cell id        */
 | |
| 	};
 | |
| 
 | |
| /*========================================*/
 | |
| 
 | |
| /*
 | |
| * \brief Power mode of device.
 | |
| *
 | |
| * Used by DRX_CTRL_SET_POWER_MODE.
 | |
| */
 | |
| 	enum drx_power_mode {
 | |
| 		DRX_POWER_UP = 0,
 | |
| 			 /*< Generic         , Power Up Mode   */
 | |
| 		DRX_POWER_MODE_1,
 | |
| 			 /*< Device specific , Power Up Mode   */
 | |
| 		DRX_POWER_MODE_2,
 | |
| 			 /*< Device specific , Power Up Mode   */
 | |
| 		DRX_POWER_MODE_3,
 | |
| 			 /*< Device specific , Power Up Mode   */
 | |
| 		DRX_POWER_MODE_4,
 | |
| 			 /*< Device specific , Power Up Mode   */
 | |
| 		DRX_POWER_MODE_5,
 | |
| 			 /*< Device specific , Power Up Mode   */
 | |
| 		DRX_POWER_MODE_6,
 | |
| 			 /*< Device specific , Power Up Mode   */
 | |
| 		DRX_POWER_MODE_7,
 | |
| 			 /*< Device specific , Power Up Mode   */
 | |
| 		DRX_POWER_MODE_8,
 | |
| 			 /*< Device specific , Power Up Mode   */
 | |
| 
 | |
| 		DRX_POWER_MODE_9,
 | |
| 			 /*< Device specific , Power Down Mode */
 | |
| 		DRX_POWER_MODE_10,
 | |
| 			 /*< Device specific , Power Down Mode */
 | |
| 		DRX_POWER_MODE_11,
 | |
| 			 /*< Device specific , Power Down Mode */
 | |
| 		DRX_POWER_MODE_12,
 | |
| 			 /*< Device specific , Power Down Mode */
 | |
| 		DRX_POWER_MODE_13,
 | |
| 			 /*< Device specific , Power Down Mode */
 | |
| 		DRX_POWER_MODE_14,
 | |
| 			 /*< Device specific , Power Down Mode */
 | |
| 		DRX_POWER_MODE_15,
 | |
| 			 /*< Device specific , Power Down Mode */
 | |
| 		DRX_POWER_MODE_16,
 | |
| 			 /*< Device specific , Power Down Mode */
 | |
| 		DRX_POWER_DOWN = 255
 | |
| 			 /*< Generic         , Power Down Mode */
 | |
| 	};
 | |
| 
 | |
| /*========================================*/
 | |
| 
 | |
| /*
 | |
| * \enum enum drx_module * \brief Software module identification.
 | |
| *
 | |
| * Used by DRX_CTRL_VERSION.
 | |
| */
 | |
| 	enum drx_module {
 | |
| 		DRX_MODULE_DEVICE,
 | |
| 		DRX_MODULE_MICROCODE,
 | |
| 		DRX_MODULE_DRIVERCORE,
 | |
| 		DRX_MODULE_DEVICEDRIVER,
 | |
| 		DRX_MODULE_DAP,
 | |
| 		DRX_MODULE_BSP_I2C,
 | |
| 		DRX_MODULE_BSP_TUNER,
 | |
| 		DRX_MODULE_BSP_HOST,
 | |
| 		DRX_MODULE_UNKNOWN
 | |
| 	};
 | |
| 
 | |
| /*
 | |
| * \enum struct drx_version * \brief Version information of one software module.
 | |
| *
 | |
| * Used by DRX_CTRL_VERSION.
 | |
| */
 | |
| 	struct drx_version {
 | |
| 		enum drx_module module_type;
 | |
| 			       /*< Type identifier of the module */
 | |
| 		char *module_name;
 | |
| 			       /*< Name or description of module */
 | |
| 		u16 v_major;  /*< Major version number          */
 | |
| 		u16 v_minor;  /*< Minor version number          */
 | |
| 		u16 v_patch;  /*< Patch version number          */
 | |
| 		char *v_string; /*< Version as text string        */
 | |
| 	};
 | |
| 
 | |
| /*
 | |
| * \enum struct drx_version_list * \brief List element of NULL terminated, linked list for version information.
 | |
| *
 | |
| * Used by DRX_CTRL_VERSION.
 | |
| */
 | |
| struct drx_version_list {
 | |
| 	struct drx_version *version;/*< Version information */
 | |
| 	struct drx_version_list *next;
 | |
| 			      /*< Next list element   */
 | |
| };
 | |
| 
 | |
| /*========================================*/
 | |
| 
 | |
| /*
 | |
| * \brief Parameters needed to confiugure a UIO.
 | |
| *
 | |
| * Used by DRX_CTRL_UIO_CFG.
 | |
| */
 | |
| 	struct drxuio_cfg {
 | |
| 		enum drx_uio uio;
 | |
| 		       /*< UIO identifier       */
 | |
| 		enum drxuio_mode mode;
 | |
| 		       /*< UIO operational mode */
 | |
| 	};
 | |
| 
 | |
| /*========================================*/
 | |
| 
 | |
| /*
 | |
| * \brief Parameters needed to read from or write to a UIO.
 | |
| *
 | |
| * Used by DRX_CTRL_UIO_READ and DRX_CTRL_UIO_WRITE.
 | |
| */
 | |
| 	struct drxuio_data {
 | |
| 		enum drx_uio uio;
 | |
| 		   /*< UIO identifier              */
 | |
| 		bool value;
 | |
| 		   /*< UIO value (true=1, false=0) */
 | |
| 	};
 | |
| 
 | |
| /*========================================*/
 | |
| 
 | |
| /*
 | |
| * \brief Parameters needed to configure OOB.
 | |
| *
 | |
| * Used by DRX_CTRL_SET_OOB.
 | |
| */
 | |
| 	struct drxoob {
 | |
| 		s32 frequency;	   /*< Frequency in kHz      */
 | |
| 		enum drxoob_downstream_standard standard;
 | |
| 						   /*< OOB standard          */
 | |
| 		bool spectrum_inverted;	   /*< If true, then spectrum
 | |
| 							 is inverted          */
 | |
| 	};
 | |
| 
 | |
| /*========================================*/
 | |
| 
 | |
| /*
 | |
| * \brief Metrics from OOB.
 | |
| *
 | |
| * Used by DRX_CTRL_GET_OOB.
 | |
| */
 | |
| 	struct drxoob_status {
 | |
| 		s32 frequency; /*< Frequency in Khz         */
 | |
| 		enum drx_lock_status lock;	  /*< Lock status              */
 | |
| 		u32 mer;		  /*< MER                      */
 | |
| 		s32 symbol_rate_offset;	  /*< Symbolrate offset in ppm */
 | |
| 	};
 | |
| 
 | |
| /*========================================*/
 | |
| 
 | |
| /*
 | |
| * \brief Device dependent configuration data.
 | |
| *
 | |
| * Used by DRX_CTRL_SET_CFG and DRX_CTRL_GET_CFG.
 | |
| * A sort of nested drx_ctrl() functionality for device specific controls.
 | |
| */
 | |
| 	struct drx_cfg {
 | |
| 		u32 cfg_type;
 | |
| 			  /*< Function identifier */
 | |
| 		void *cfg_data;
 | |
| 			  /*< Function data */
 | |
| 	};
 | |
| 
 | |
| /*========================================*/
 | |
| 
 | |
| /*
 | |
| * /struct DRXMpegStartWidth_t
 | |
| * MStart width [nr MCLK cycles] for serial MPEG output.
 | |
| */
 | |
| 
 | |
| 	enum drxmpeg_str_width {
 | |
| 		DRX_MPEG_STR_WIDTH_1,
 | |
| 		DRX_MPEG_STR_WIDTH_8
 | |
| 	};
 | |
| 
 | |
| /* CTRL CFG MPEG output */
 | |
| /*
 | |
| * \struct struct drx_cfg_mpeg_output * \brief Configuration parameters for MPEG output control.
 | |
| *
 | |
| * Used by DRX_CFG_MPEG_OUTPUT, in combination with DRX_CTRL_SET_CFG and
 | |
| * DRX_CTRL_GET_CFG.
 | |
| */
 | |
| 
 | |
| 	struct drx_cfg_mpeg_output {
 | |
| 		bool enable_mpeg_output;/*< If true, enable MPEG output      */
 | |
| 		bool insert_rs_byte;	/*< If true, insert RS byte          */
 | |
| 		bool enable_parallel;	/*< If true, parallel out otherwise
 | |
| 								     serial   */
 | |
| 		bool invert_data;	/*< If true, invert DATA signals     */
 | |
| 		bool invert_err;	/*< If true, invert ERR signal       */
 | |
| 		bool invert_str;	/*< If true, invert STR signals      */
 | |
| 		bool invert_val;	/*< If true, invert VAL signals      */
 | |
| 		bool invert_clk;	/*< If true, invert CLK signals      */
 | |
| 		bool static_clk;	/*< If true, static MPEG clockrate
 | |
| 					     will be used, otherwise clockrate
 | |
| 					     will adapt to the bitrate of the
 | |
| 					     TS                               */
 | |
| 		u32 bitrate;		/*< Maximum bitrate in b/s in case
 | |
| 					     static clockrate is selected     */
 | |
| 		enum drxmpeg_str_width width_str;
 | |
| 					/*< MPEG start width                 */
 | |
| 	};
 | |
| 
 | |
| 
 | |
| /*========================================*/
 | |
| 
 | |
| /*
 | |
| * \struct struct drxi2c_data * \brief Data for I2C via 2nd or 3rd or etc I2C port.
 | |
| *
 | |
| * Used by DRX_CTRL_I2C_READWRITE.
 | |
| * If port_nr is equal to primairy port_nr BSPI2C will be used.
 | |
| *
 | |
| */
 | |
| 	struct drxi2c_data {
 | |
| 		u16 port_nr;	/*< I2C port number               */
 | |
| 		struct i2c_device_addr *w_dev_addr;
 | |
| 				/*< Write device address          */
 | |
| 		u16 w_count;	/*< Size of write data in bytes   */
 | |
| 		u8 *wData;	/*< Pointer to write data         */
 | |
| 		struct i2c_device_addr *r_dev_addr;
 | |
| 				/*< Read device address           */
 | |
| 		u16 r_count;	/*< Size of data to read in bytes */
 | |
| 		u8 *r_data;	/*< Pointer to read buffer        */
 | |
| 	};
 | |
| 
 | |
| /*========================================*/
 | |
| 
 | |
| /*
 | |
| * \enum enum drx_aud_standard * \brief Audio standard identifier.
 | |
| *
 | |
| * Used by DRX_CTRL_SET_AUD.
 | |
| */
 | |
| 	enum drx_aud_standard {
 | |
| 		DRX_AUD_STANDARD_BTSC,	   /*< set BTSC standard (USA)       */
 | |
| 		DRX_AUD_STANDARD_A2,	   /*< set A2-Korea FM Stereo        */
 | |
| 		DRX_AUD_STANDARD_EIAJ,	   /*< set to Japanese FM Stereo     */
 | |
| 		DRX_AUD_STANDARD_FM_STEREO,/*< set to FM-Stereo Radio        */
 | |
| 		DRX_AUD_STANDARD_M_MONO,   /*< for 4.5 MHz mono detected     */
 | |
| 		DRX_AUD_STANDARD_D_K_MONO, /*< for 6.5 MHz mono detected     */
 | |
| 		DRX_AUD_STANDARD_BG_FM,	   /*< set BG_FM standard            */
 | |
| 		DRX_AUD_STANDARD_D_K1,	   /*< set D_K1 standard             */
 | |
| 		DRX_AUD_STANDARD_D_K2,	   /*< set D_K2 standard             */
 | |
| 		DRX_AUD_STANDARD_D_K3,	   /*< set D_K3 standard             */
 | |
| 		DRX_AUD_STANDARD_BG_NICAM_FM,
 | |
| 					   /*< set BG_NICAM_FM standard      */
 | |
| 		DRX_AUD_STANDARD_L_NICAM_AM,
 | |
| 					   /*< set L_NICAM_AM standard       */
 | |
| 		DRX_AUD_STANDARD_I_NICAM_FM,
 | |
| 					   /*< set I_NICAM_FM standard       */
 | |
| 		DRX_AUD_STANDARD_D_K_NICAM_FM,
 | |
| 					   /*< set D_K_NICAM_FM standard     */
 | |
| 		DRX_AUD_STANDARD_NOT_READY,/*< used to detect audio standard */
 | |
| 		DRX_AUD_STANDARD_AUTO = DRX_AUTO,
 | |
| 					   /*< Automatic Standard Detection  */
 | |
| 		DRX_AUD_STANDARD_UNKNOWN = DRX_UNKNOWN
 | |
| 					   /*< used as auto and for readback */
 | |
| 	};
 | |
| 
 | |
| /* CTRL_AUD_GET_STATUS    - struct drx_aud_status */
 | |
| /*
 | |
| * \enum enum drx_aud_nicam_status * \brief Status of NICAM carrier.
 | |
| */
 | |
| 	enum drx_aud_nicam_status {
 | |
| 		DRX_AUD_NICAM_DETECTED = 0,
 | |
| 					  /*< NICAM carrier detected         */
 | |
| 		DRX_AUD_NICAM_NOT_DETECTED,
 | |
| 					  /*< NICAM carrier not detected     */
 | |
| 		DRX_AUD_NICAM_BAD	  /*< NICAM carrier bad quality      */
 | |
| 	};
 | |
| 
 | |
| /*
 | |
| * \struct struct drx_aud_status * \brief Audio status characteristics.
 | |
| */
 | |
| 	struct drx_aud_status {
 | |
| 		bool stereo;		  /*< stereo detection               */
 | |
| 		bool carrier_a;	  /*< carrier A detected             */
 | |
| 		bool carrier_b;	  /*< carrier B detected             */
 | |
| 		bool sap;		  /*< sap / bilingual detection      */
 | |
| 		bool rds;		  /*< RDS data array present         */
 | |
| 		enum drx_aud_nicam_status nicam_status;
 | |
| 					  /*< status of NICAM carrier        */
 | |
| 		s8 fm_ident;		  /*< FM Identification value        */
 | |
| 	};
 | |
| 
 | |
| /* CTRL_AUD_READ_RDS       - DRXRDSdata_t */
 | |
| 
 | |
| /*
 | |
| * \struct DRXRDSdata_t
 | |
| * \brief Raw RDS data array.
 | |
| */
 | |
| 	struct drx_cfg_aud_rds {
 | |
| 		bool valid;		  /*< RDS data validation            */
 | |
| 		u16 data[18];		  /*< data from one RDS data array   */
 | |
| 	};
 | |
| 
 | |
| /* DRX_CFG_AUD_VOLUME      - struct drx_cfg_aud_volume - set/get */
 | |
| /*
 | |
| * \enum DRXAudAVCDecayTime_t
 | |
| * \brief Automatic volume control configuration.
 | |
| */
 | |
| 	enum drx_aud_avc_mode {
 | |
| 		DRX_AUD_AVC_OFF,	  /*< Automatic volume control off   */
 | |
| 		DRX_AUD_AVC_DECAYTIME_8S, /*< level volume in  8 seconds     */
 | |
| 		DRX_AUD_AVC_DECAYTIME_4S, /*< level volume in  4 seconds     */
 | |
| 		DRX_AUD_AVC_DECAYTIME_2S, /*< level volume in  2 seconds     */
 | |
| 		DRX_AUD_AVC_DECAYTIME_20MS/*< level volume in 20 millisec    */
 | |
| 	};
 | |
| 
 | |
| /*
 | |
| * /enum DRXAudMaxAVCGain_t
 | |
| * /brief Automatic volume control max gain in audio baseband.
 | |
| */
 | |
| 	enum drx_aud_avc_max_gain {
 | |
| 		DRX_AUD_AVC_MAX_GAIN_0DB, /*< maximum AVC gain  0 dB         */
 | |
| 		DRX_AUD_AVC_MAX_GAIN_6DB, /*< maximum AVC gain  6 dB         */
 | |
| 		DRX_AUD_AVC_MAX_GAIN_12DB /*< maximum AVC gain 12 dB         */
 | |
| 	};
 | |
| 
 | |
| /*
 | |
| * /enum DRXAudMaxAVCAtten_t
 | |
| * /brief Automatic volume control max attenuation in audio baseband.
 | |
| */
 | |
| 	enum drx_aud_avc_max_atten {
 | |
| 		DRX_AUD_AVC_MAX_ATTEN_12DB,
 | |
| 					  /*< maximum AVC attenuation 12 dB  */
 | |
| 		DRX_AUD_AVC_MAX_ATTEN_18DB,
 | |
| 					  /*< maximum AVC attenuation 18 dB  */
 | |
| 		DRX_AUD_AVC_MAX_ATTEN_24DB/*< maximum AVC attenuation 24 dB  */
 | |
| 	};
 | |
| /*
 | |
| * \struct struct drx_cfg_aud_volume * \brief Audio volume configuration.
 | |
| */
 | |
| 	struct drx_cfg_aud_volume {
 | |
| 		bool mute;		  /*< mute overrides volume setting  */
 | |
| 		s16 volume;		  /*< volume, range -114 to 12 dB    */
 | |
| 		enum drx_aud_avc_mode avc_mode;  /*< AVC auto volume control mode   */
 | |
| 		u16 avc_ref_level;	  /*< AVC reference level            */
 | |
| 		enum drx_aud_avc_max_gain avc_max_gain;
 | |
| 					  /*< AVC max gain selection         */
 | |
| 		enum drx_aud_avc_max_atten avc_max_atten;
 | |
| 					  /*< AVC max attenuation selection  */
 | |
| 		s16 strength_left;	  /*< quasi-peak, left speaker       */
 | |
| 		s16 strength_right;	  /*< quasi-peak, right speaker      */
 | |
| 	};
 | |
| 
 | |
| /* DRX_CFG_I2S_OUTPUT      - struct drx_cfg_i2s_output - set/get */
 | |
| /*
 | |
| * \enum enum drxi2s_mode * \brief I2S output mode.
 | |
| */
 | |
| 	enum drxi2s_mode {
 | |
| 		DRX_I2S_MODE_MASTER,	  /*< I2S is in master mode          */
 | |
| 		DRX_I2S_MODE_SLAVE	  /*< I2S is in slave mode           */
 | |
| 	};
 | |
| 
 | |
| /*
 | |
| * \enum enum drxi2s_word_length * \brief Width of I2S data.
 | |
| */
 | |
| 	enum drxi2s_word_length {
 | |
| 		DRX_I2S_WORDLENGTH_32 = 0,/*< I2S data is 32 bit wide        */
 | |
| 		DRX_I2S_WORDLENGTH_16 = 1 /*< I2S data is 16 bit wide        */
 | |
| 	};
 | |
| 
 | |
| /*
 | |
| * \enum enum drxi2s_format * \brief Data wordstrobe alignment for I2S.
 | |
| */
 | |
| 	enum drxi2s_format {
 | |
| 		DRX_I2S_FORMAT_WS_WITH_DATA,
 | |
| 				    /*< I2S data and wordstrobe are aligned  */
 | |
| 		DRX_I2S_FORMAT_WS_ADVANCED
 | |
| 				    /*< I2S data one cycle after wordstrobe  */
 | |
| 	};
 | |
| 
 | |
| /*
 | |
| * \enum enum drxi2s_polarity * \brief Polarity of I2S data.
 | |
| */
 | |
| 	enum drxi2s_polarity {
 | |
| 		DRX_I2S_POLARITY_RIGHT,/*< wordstrobe - right high, left low */
 | |
| 		DRX_I2S_POLARITY_LEFT  /*< wordstrobe - right low, left high */
 | |
| 	};
 | |
| 
 | |
| /*
 | |
| * \struct struct drx_cfg_i2s_output * \brief I2S output configuration.
 | |
| */
 | |
| 	struct drx_cfg_i2s_output {
 | |
| 		bool output_enable;	  /*< I2S output enable              */
 | |
| 		u32 frequency;	  /*< range from 8000-48000 Hz       */
 | |
| 		enum drxi2s_mode mode;	  /*< I2S mode, master or slave      */
 | |
| 		enum drxi2s_word_length word_length;
 | |
| 					  /*< I2S wordlength, 16 or 32 bits  */
 | |
| 		enum drxi2s_polarity polarity;/*< I2S wordstrobe polarity        */
 | |
| 		enum drxi2s_format format;	  /*< I2S wordstrobe delay to data   */
 | |
| 	};
 | |
| 
 | |
| /* ------------------------------expert interface-----------------------------*/
 | |
| /*
 | |
| * /enum enum drx_aud_fm_deemphasis * setting for FM-Deemphasis in audio demodulator.
 | |
| *
 | |
| */
 | |
| 	enum drx_aud_fm_deemphasis {
 | |
| 		DRX_AUD_FM_DEEMPH_50US,
 | |
| 		DRX_AUD_FM_DEEMPH_75US,
 | |
| 		DRX_AUD_FM_DEEMPH_OFF
 | |
| 	};
 | |
| 
 | |
| /*
 | |
| * /enum DRXAudDeviation_t
 | |
| * setting for deviation mode in audio demodulator.
 | |
| *
 | |
| */
 | |
| 	enum drx_cfg_aud_deviation {
 | |
| 		DRX_AUD_DEVIATION_NORMAL,
 | |
| 		DRX_AUD_DEVIATION_HIGH
 | |
| 	};
 | |
| 
 | |
| /*
 | |
| * /enum enum drx_no_carrier_option * setting for carrier, mute/noise.
 | |
| *
 | |
| */
 | |
| 	enum drx_no_carrier_option {
 | |
| 		DRX_NO_CARRIER_MUTE,
 | |
| 		DRX_NO_CARRIER_NOISE
 | |
| 	};
 | |
| 
 | |
| /*
 | |
| * \enum DRXAudAutoSound_t
 | |
| * \brief Automatic Sound
 | |
| */
 | |
| 	enum drx_cfg_aud_auto_sound {
 | |
| 		DRX_AUD_AUTO_SOUND_OFF = 0,
 | |
| 		DRX_AUD_AUTO_SOUND_SELECT_ON_CHANGE_ON,
 | |
| 		DRX_AUD_AUTO_SOUND_SELECT_ON_CHANGE_OFF
 | |
| 	};
 | |
| 
 | |
| /*
 | |
| * \enum DRXAudASSThres_t
 | |
| * \brief Automatic Sound Select Thresholds
 | |
| */
 | |
| 	struct drx_cfg_aud_ass_thres {
 | |
| 		u16 a2;	/* A2 Threshold for ASS configuration */
 | |
| 		u16 btsc;	/* BTSC Threshold for ASS configuration */
 | |
| 		u16 nicam;	/* Nicam Threshold for ASS configuration */
 | |
| 	};
 | |
| 
 | |
| /*
 | |
| * \struct struct drx_aud_carrier * \brief Carrier detection related parameters
 | |
| */
 | |
| 	struct drx_aud_carrier {
 | |
| 		u16 thres;	/* carrier detetcion threshold for primary carrier (A) */
 | |
| 		enum drx_no_carrier_option opt;	/* Mute or noise at no carrier detection (A) */
 | |
| 		s32 shift;	/* DC level of incoming signal (A) */
 | |
| 		s32 dco;	/* frequency adjustment (A) */
 | |
| 	};
 | |
| 
 | |
| /*
 | |
| * \struct struct drx_cfg_aud_carriers * \brief combining carrier A & B to one struct
 | |
| */
 | |
| 	struct drx_cfg_aud_carriers {
 | |
| 		struct drx_aud_carrier a;
 | |
| 		struct drx_aud_carrier b;
 | |
| 	};
 | |
| 
 | |
| /*
 | |
| * /enum enum drx_aud_i2s_src * Selection of audio source
 | |
| */
 | |
| 	enum drx_aud_i2s_src {
 | |
| 		DRX_AUD_SRC_MONO,
 | |
| 		DRX_AUD_SRC_STEREO_OR_AB,
 | |
| 		DRX_AUD_SRC_STEREO_OR_A,
 | |
| 		DRX_AUD_SRC_STEREO_OR_B};
 | |
| 
 | |
| /*
 | |
| * \enum enum drx_aud_i2s_matrix * \brief Used for selecting I2S output.
 | |
| */
 | |
| 	enum drx_aud_i2s_matrix {
 | |
| 		DRX_AUD_I2S_MATRIX_A_MONO,
 | |
| 					/*< A sound only, stereo or mono     */
 | |
| 		DRX_AUD_I2S_MATRIX_B_MONO,
 | |
| 					/*< B sound only, stereo or mono     */
 | |
| 		DRX_AUD_I2S_MATRIX_STEREO,
 | |
| 					/*< A+B sound, transparent           */
 | |
| 		DRX_AUD_I2S_MATRIX_MONO	/*< A+B mixed to mono sum, (L+R)/2   */};
 | |
| 
 | |
| /*
 | |
| * /enum enum drx_aud_fm_matrix * setting for FM-Matrix in audio demodulator.
 | |
| *
 | |
| */
 | |
| 	enum drx_aud_fm_matrix {
 | |
| 		DRX_AUD_FM_MATRIX_NO_MATRIX,
 | |
| 		DRX_AUD_FM_MATRIX_GERMAN,
 | |
| 		DRX_AUD_FM_MATRIX_KOREAN,
 | |
| 		DRX_AUD_FM_MATRIX_SOUND_A,
 | |
| 		DRX_AUD_FM_MATRIX_SOUND_B};
 | |
| 
 | |
| /*
 | |
| * \struct DRXAudMatrices_t
 | |
| * \brief Mixer settings
 | |
| */
 | |
| struct drx_cfg_aud_mixer {
 | |
| 	enum drx_aud_i2s_src source_i2s;
 | |
| 	enum drx_aud_i2s_matrix matrix_i2s;
 | |
| 	enum drx_aud_fm_matrix matrix_fm;
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \enum DRXI2SVidSync_t
 | |
| * \brief Audio/video synchronization, interacts with I2S mode.
 | |
| * AUTO_1 and AUTO_2 are for automatic video standard detection with preference
 | |
| * for NTSC or Monochrome, because the frequencies are too close (59.94 & 60 Hz)
 | |
| */
 | |
| 	enum drx_cfg_aud_av_sync {
 | |
| 		DRX_AUD_AVSYNC_OFF,/*< audio/video synchronization is off   */
 | |
| 		DRX_AUD_AVSYNC_NTSC,
 | |
| 				   /*< it is an NTSC system                 */
 | |
| 		DRX_AUD_AVSYNC_MONOCHROME,
 | |
| 				   /*< it is a MONOCHROME system            */
 | |
| 		DRX_AUD_AVSYNC_PAL_SECAM
 | |
| 				   /*< it is a PAL/SECAM system             */};
 | |
| 
 | |
| /*
 | |
| * \struct struct drx_cfg_aud_prescale * \brief Prescalers
 | |
| */
 | |
| struct drx_cfg_aud_prescale {
 | |
| 	u16 fm_deviation;
 | |
| 	s16 nicam_gain;
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \struct struct drx_aud_beep * \brief Beep
 | |
| */
 | |
| struct drx_aud_beep {
 | |
| 	s16 volume;	/* dB */
 | |
| 	u16 frequency;	/* Hz */
 | |
| 	bool mute;
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \enum enum drx_aud_btsc_detect * \brief BTSC detetcion mode
 | |
| */
 | |
| 	enum drx_aud_btsc_detect {
 | |
| 		DRX_BTSC_STEREO,
 | |
| 		DRX_BTSC_MONO_AND_SAP};
 | |
| 
 | |
| /*
 | |
| * \struct struct drx_aud_data * \brief Audio data structure
 | |
| */
 | |
| struct drx_aud_data {
 | |
| 	/* audio storage */
 | |
| 	bool audio_is_active;
 | |
| 	enum drx_aud_standard audio_standard;
 | |
| 	struct drx_cfg_i2s_output i2sdata;
 | |
| 	struct drx_cfg_aud_volume volume;
 | |
| 	enum drx_cfg_aud_auto_sound auto_sound;
 | |
| 	struct drx_cfg_aud_ass_thres ass_thresholds;
 | |
| 	struct drx_cfg_aud_carriers carriers;
 | |
| 	struct drx_cfg_aud_mixer mixer;
 | |
| 	enum drx_cfg_aud_deviation deviation;
 | |
| 	enum drx_cfg_aud_av_sync av_sync;
 | |
| 	struct drx_cfg_aud_prescale prescale;
 | |
| 	enum drx_aud_fm_deemphasis deemph;
 | |
| 	enum drx_aud_btsc_detect btsc_detect;
 | |
| 	/* rds */
 | |
| 	u16 rds_data_counter;
 | |
| 	bool rds_data_present;
 | |
| };
 | |
| 
 | |
| /*
 | |
| * \enum enum drx_qam_lock_range * \brief QAM lock range mode
 | |
| */
 | |
| 	enum drx_qam_lock_range {
 | |
| 		DRX_QAM_LOCKRANGE_NORMAL,
 | |
| 		DRX_QAM_LOCKRANGE_EXTENDED};
 | |
| 
 | |
| /*============================================================================*/
 | |
| /*============================================================================*/
 | |
| /*== Data access structures ==================================================*/
 | |
| /*============================================================================*/
 | |
| /*============================================================================*/
 | |
| 
 | |
| /* Address on device */
 | |
| 	typedef u32 dr_xaddr_t, *pdr_xaddr_t;
 | |
| 
 | |
| /* Protocol specific flags */
 | |
| 	typedef u32 dr_xflags_t, *pdr_xflags_t;
 | |
| 
 | |
| /* Write block of data to device */
 | |
| 	typedef int(*drx_write_block_func_t) (struct i2c_device_addr *dev_addr,	/* address of I2C device        */
 | |
| 						   u32 addr,	/* address of register/memory   */
 | |
| 						   u16 datasize,	/* size of data in bytes        */
 | |
| 						   u8 *data,	/* data to send                 */
 | |
| 						   u32 flags);
 | |
| 
 | |
| /* Read block of data from device */
 | |
| 	typedef int(*drx_read_block_func_t) (struct i2c_device_addr *dev_addr,	/* address of I2C device        */
 | |
| 						  u32 addr,	/* address of register/memory   */
 | |
| 						  u16 datasize,	/* size of data in bytes        */
 | |
| 						  u8 *data,	/* receive buffer               */
 | |
| 						  u32 flags);
 | |
| 
 | |
| /* Write 8-bits value to device */
 | |
| 	typedef int(*drx_write_reg8func_t) (struct i2c_device_addr *dev_addr,	/* address of I2C device        */
 | |
| 						  u32 addr,	/* address of register/memory   */
 | |
| 						  u8 data,	/* data to send                 */
 | |
| 						  u32 flags);
 | |
| 
 | |
| /* Read 8-bits value to device */
 | |
| 	typedef int(*drx_read_reg8func_t) (struct i2c_device_addr *dev_addr,	/* address of I2C device        */
 | |
| 						 u32 addr,	/* address of register/memory   */
 | |
| 						 u8 *data,	/* receive buffer               */
 | |
| 						 u32 flags);
 | |
| 
 | |
| /* Read modify write 8-bits value to device */
 | |
| 	typedef int(*drx_read_modify_write_reg8func_t) (struct i2c_device_addr *dev_addr,	/* address of I2C device       */
 | |
| 							    u32 waddr,	/* write address of register   */
 | |
| 							    u32 raddr,	/* read  address of register   */
 | |
| 							    u8 wdata,	/* data to write               */
 | |
| 							    u8 *rdata);	/* data to read                */
 | |
| 
 | |
| /* Write 16-bits value to device */
 | |
| 	typedef int(*drx_write_reg16func_t) (struct i2c_device_addr *dev_addr,	/* address of I2C device        */
 | |
| 						   u32 addr,	/* address of register/memory   */
 | |
| 						   u16 data,	/* data to send                 */
 | |
| 						   u32 flags);
 | |
| 
 | |
| /* Read 16-bits value to device */
 | |
| 	typedef int(*drx_read_reg16func_t) (struct i2c_device_addr *dev_addr,	/* address of I2C device        */
 | |
| 						  u32 addr,	/* address of register/memory   */
 | |
| 						  u16 *data,	/* receive buffer               */
 | |
| 						  u32 flags);
 | |
| 
 | |
| /* Read modify write 16-bits value to device */
 | |
| 	typedef int(*drx_read_modify_write_reg16func_t) (struct i2c_device_addr *dev_addr,	/* address of I2C device       */
 | |
| 							     u32 waddr,	/* write address of register   */
 | |
| 							     u32 raddr,	/* read  address of register   */
 | |
| 							     u16 wdata,	/* data to write               */
 | |
| 							     u16 *rdata);	/* data to read                */
 | |
| 
 | |
| /* Write 32-bits value to device */
 | |
| 	typedef int(*drx_write_reg32func_t) (struct i2c_device_addr *dev_addr,	/* address of I2C device        */
 | |
| 						   u32 addr,	/* address of register/memory   */
 | |
| 						   u32 data,	/* data to send                 */
 | |
| 						   u32 flags);
 | |
| 
 | |
| /* Read 32-bits value to device */
 | |
| 	typedef int(*drx_read_reg32func_t) (struct i2c_device_addr *dev_addr,	/* address of I2C device        */
 | |
| 						  u32 addr,	/* address of register/memory   */
 | |
| 						  u32 *data,	/* receive buffer               */
 | |
| 						  u32 flags);
 | |
| 
 | |
| /* Read modify write 32-bits value to device */
 | |
| 	typedef int(*drx_read_modify_write_reg32func_t) (struct i2c_device_addr *dev_addr,	/* address of I2C device       */
 | |
| 							     u32 waddr,	/* write address of register   */
 | |
| 							     u32 raddr,	/* read  address of register   */
 | |
| 							     u32 wdata,	/* data to write               */
 | |
| 							     u32 *rdata);	/* data to read                */
 | |
| 
 | |
| /*
 | |
| * \struct struct drx_access_func * \brief Interface to an access protocol.
 | |
| */
 | |
| struct drx_access_func {
 | |
| 	drx_write_block_func_t write_block_func;
 | |
| 	drx_read_block_func_t read_block_func;
 | |
| 	drx_write_reg8func_t write_reg8func;
 | |
| 	drx_read_reg8func_t read_reg8func;
 | |
| 	drx_read_modify_write_reg8func_t read_modify_write_reg8func;
 | |
| 	drx_write_reg16func_t write_reg16func;
 | |
| 	drx_read_reg16func_t read_reg16func;
 | |
| 	drx_read_modify_write_reg16func_t read_modify_write_reg16func;
 | |
| 	drx_write_reg32func_t write_reg32func;
 | |
| 	drx_read_reg32func_t read_reg32func;
 | |
| 	drx_read_modify_write_reg32func_t read_modify_write_reg32func;
 | |
| };
 | |
| 
 | |
| /* Register address and data for register dump function */
 | |
| struct drx_reg_dump {
 | |
| 	u32 address;
 | |
| 	u32 data;
 | |
| };
 | |
| 
 | |
| /*============================================================================*/
 | |
| /*============================================================================*/
 | |
| /*== Demod instance data structures ==========================================*/
 | |
| /*============================================================================*/
 | |
| /*============================================================================*/
 | |
| 
 | |
| /*
 | |
| * \struct struct drx_common_attr * \brief Set of common attributes, shared by all DRX devices.
 | |
| */
 | |
| 	struct drx_common_attr {
 | |
| 		/* Microcode (firmware) attributes */
 | |
| 		char *microcode_file;   /*<  microcode filename           */
 | |
| 		bool verify_microcode;
 | |
| 				   /*< Use microcode verify or not.          */
 | |
| 		struct drx_mc_version_rec mcversion;
 | |
| 				   /*< Version record of microcode from file */
 | |
| 
 | |
| 		/* Clocks and tuner attributes */
 | |
| 		s32 intermediate_freq;
 | |
| 				     /*< IF,if tuner instance not used. (kHz)*/
 | |
| 		s32 sys_clock_freq;
 | |
| 				     /*< Systemclock frequency.  (kHz)       */
 | |
| 		s32 osc_clock_freq;
 | |
| 				     /*< Oscillator clock frequency.  (kHz)  */
 | |
| 		s16 osc_clock_deviation;
 | |
| 				     /*< Oscillator clock deviation.  (ppm)  */
 | |
| 		bool mirror_freq_spect;
 | |
| 				     /*< Mirror IF frequency spectrum or not.*/
 | |
| 
 | |
| 		/* Initial MPEG output attributes */
 | |
| 		struct drx_cfg_mpeg_output mpeg_cfg;
 | |
| 				     /*< MPEG configuration                  */
 | |
| 
 | |
| 		bool is_opened;     /*< if true instance is already opened. */
 | |
| 
 | |
| 		/* Channel scan */
 | |
| 		struct drx_scan_param *scan_param;
 | |
| 				      /*< scan parameters                    */
 | |
| 		u16 scan_freq_plan_index;
 | |
| 				      /*< next index in freq plan            */
 | |
| 		s32 scan_next_frequency;
 | |
| 				      /*< next freq to scan                  */
 | |
| 		bool scan_ready;     /*< scan ready flag                    */
 | |
| 		u32 scan_max_channels;/*< number of channels in freqplan     */
 | |
| 		u32 scan_channels_scanned;
 | |
| 					/*< number of channels scanned       */
 | |
| 		/* Channel scan - inner loop: demod related */
 | |
| 		drx_scan_func_t scan_function;
 | |
| 				      /*< function to check channel          */
 | |
| 		/* Channel scan - inner loop: SYSObj related */
 | |
| 		void *scan_context;    /*< Context Pointer of SYSObj          */
 | |
| 		/* Channel scan - parameters for default DTV scan function in core driver  */
 | |
| 		u16 scan_demod_lock_timeout;
 | |
| 					 /*< millisecs to wait for lock      */
 | |
| 		enum drx_lock_status scan_desired_lock;
 | |
| 				      /*< lock requirement for channel found */
 | |
| 		/* scan_active can be used by SetChannel to decide how to program the tuner,
 | |
| 		   fast or slow (but stable). Usually fast during scan. */
 | |
| 		bool scan_active;    /*< true when scan routines are active */
 | |
| 
 | |
| 		/* Power management */
 | |
| 		enum drx_power_mode current_power_mode;
 | |
| 				      /*< current power management mode      */
 | |
| 
 | |
| 		/* Tuner */
 | |
| 		u8 tuner_port_nr;     /*< nr of I2C port to which tuner is    */
 | |
| 		s32 tuner_min_freq_rf;
 | |
| 				      /*< minimum RF input frequency, in kHz */
 | |
| 		s32 tuner_max_freq_rf;
 | |
| 				      /*< maximum RF input frequency, in kHz */
 | |
| 		bool tuner_rf_agc_pol; /*< if true invert RF AGC polarity     */
 | |
| 		bool tuner_if_agc_pol; /*< if true invert IF AGC polarity     */
 | |
| 		bool tuner_slow_mode; /*< if true invert IF AGC polarity     */
 | |
| 
 | |
| 		struct drx_channel current_channel;
 | |
| 				      /*< current channel parameters         */
 | |
| 		enum drx_standard current_standard;
 | |
| 				      /*< current standard selection         */
 | |
| 		enum drx_standard prev_standard;
 | |
| 				      /*< previous standard selection        */
 | |
| 		enum drx_standard di_cache_standard;
 | |
| 				      /*< standard in DI cache if available  */
 | |
| 		bool use_bootloader; /*< use bootloader in open             */
 | |
| 		u32 capabilities;   /*< capabilities flags                 */
 | |
| 		u32 product_id;      /*< product ID inc. metal fix number   */};
 | |
| 
 | |
| /*
 | |
| * Generic functions for DRX devices.
 | |
| */
 | |
| 
 | |
| struct drx_demod_instance;
 | |
| 
 | |
| /*
 | |
| * \struct struct drx_demod_instance * \brief Top structure of demodulator instance.
 | |
| */
 | |
| struct drx_demod_instance {
 | |
| 				/*< data access protocol functions       */
 | |
| 	struct i2c_device_addr *my_i2c_dev_addr;
 | |
| 				/*< i2c address and device identifier    */
 | |
| 	struct drx_common_attr *my_common_attr;
 | |
| 				/*< common DRX attributes                */
 | |
| 	void *my_ext_attr;    /*< device specific attributes           */
 | |
| 	/* generic demodulator data */
 | |
| 
 | |
| 	struct i2c_adapter	*i2c;
 | |
| 	const struct firmware	*firmware;
 | |
| };
 | |
| 
 | |
| /*-------------------------------------------------------------------------
 | |
| MACROS
 | |
| Conversion from enum values to human readable form.
 | |
| -------------------------------------------------------------------------*/
 | |
| 
 | |
| /* standard */
 | |
| 
 | |
| #define DRX_STR_STANDARD(x) ( \
 | |
| 	(x == DRX_STANDARD_DVBT)  ? "DVB-T"            : \
 | |
| 	(x == DRX_STANDARD_8VSB)  ? "8VSB"             : \
 | |
| 	(x == DRX_STANDARD_NTSC)  ? "NTSC"             : \
 | |
| 	(x == DRX_STANDARD_PAL_SECAM_BG)  ? "PAL/SECAM B/G"    : \
 | |
| 	(x == DRX_STANDARD_PAL_SECAM_DK)  ? "PAL/SECAM D/K"    : \
 | |
| 	(x == DRX_STANDARD_PAL_SECAM_I)  ? "PAL/SECAM I"      : \
 | |
| 	(x == DRX_STANDARD_PAL_SECAM_L)  ? "PAL/SECAM L"      : \
 | |
| 	(x == DRX_STANDARD_PAL_SECAM_LP)  ? "PAL/SECAM LP"     : \
 | |
| 	(x == DRX_STANDARD_ITU_A)  ? "ITU-A"            : \
 | |
| 	(x == DRX_STANDARD_ITU_B)  ? "ITU-B"            : \
 | |
| 	(x == DRX_STANDARD_ITU_C)  ? "ITU-C"            : \
 | |
| 	(x == DRX_STANDARD_ITU_D)  ? "ITU-D"            : \
 | |
| 	(x == DRX_STANDARD_FM)  ? "FM"               : \
 | |
| 	(x == DRX_STANDARD_DTMB)  ? "DTMB"             : \
 | |
| 	(x == DRX_STANDARD_AUTO)  ? "Auto"             : \
 | |
| 	(x == DRX_STANDARD_UNKNOWN)  ? "Unknown"          : \
 | |
| 	"(Invalid)")
 | |
| 
 | |
| /* channel */
 | |
| 
 | |
| #define DRX_STR_BANDWIDTH(x) ( \
 | |
| 	(x == DRX_BANDWIDTH_8MHZ)  ?  "8 MHz"            : \
 | |
| 	(x == DRX_BANDWIDTH_7MHZ)  ?  "7 MHz"            : \
 | |
| 	(x == DRX_BANDWIDTH_6MHZ)  ?  "6 MHz"            : \
 | |
| 	(x == DRX_BANDWIDTH_AUTO)  ?  "Auto"             : \
 | |
| 	(x == DRX_BANDWIDTH_UNKNOWN)  ?  "Unknown"          : \
 | |
| 	"(Invalid)")
 | |
| #define DRX_STR_FFTMODE(x) ( \
 | |
| 	(x == DRX_FFTMODE_2K)  ?  "2k"               : \
 | |
| 	(x == DRX_FFTMODE_4K)  ?  "4k"               : \
 | |
| 	(x == DRX_FFTMODE_8K)  ?  "8k"               : \
 | |
| 	(x == DRX_FFTMODE_AUTO)  ?  "Auto"             : \
 | |
| 	(x == DRX_FFTMODE_UNKNOWN)  ?  "Unknown"          : \
 | |
| 	"(Invalid)")
 | |
| #define DRX_STR_GUARD(x) ( \
 | |
| 	(x == DRX_GUARD_1DIV32)  ?  "1/32nd"           : \
 | |
| 	(x == DRX_GUARD_1DIV16)  ?  "1/16th"           : \
 | |
| 	(x == DRX_GUARD_1DIV8)  ?  "1/8th"            : \
 | |
| 	(x == DRX_GUARD_1DIV4)  ?  "1/4th"            : \
 | |
| 	(x == DRX_GUARD_AUTO)  ?  "Auto"             : \
 | |
| 	(x == DRX_GUARD_UNKNOWN)  ?  "Unknown"          : \
 | |
| 	"(Invalid)")
 | |
| #define DRX_STR_CONSTELLATION(x) ( \
 | |
| 	(x == DRX_CONSTELLATION_BPSK)  ?  "BPSK"            : \
 | |
| 	(x == DRX_CONSTELLATION_QPSK)  ?  "QPSK"            : \
 | |
| 	(x == DRX_CONSTELLATION_PSK8)  ?  "PSK8"            : \
 | |
| 	(x == DRX_CONSTELLATION_QAM16)  ?  "QAM16"           : \
 | |
| 	(x == DRX_CONSTELLATION_QAM32)  ?  "QAM32"           : \
 | |
| 	(x == DRX_CONSTELLATION_QAM64)  ?  "QAM64"           : \
 | |
| 	(x == DRX_CONSTELLATION_QAM128)  ?  "QAM128"          : \
 | |
| 	(x == DRX_CONSTELLATION_QAM256)  ?  "QAM256"          : \
 | |
| 	(x == DRX_CONSTELLATION_QAM512)  ?  "QAM512"          : \
 | |
| 	(x == DRX_CONSTELLATION_QAM1024)  ?  "QAM1024"         : \
 | |
| 	(x == DRX_CONSTELLATION_QPSK_NR)  ?  "QPSK_NR"            : \
 | |
| 	(x == DRX_CONSTELLATION_AUTO)  ?  "Auto"            : \
 | |
| 	(x == DRX_CONSTELLATION_UNKNOWN)  ?  "Unknown"         : \
 | |
| 	"(Invalid)")
 | |
| #define DRX_STR_CODERATE(x) ( \
 | |
| 	(x == DRX_CODERATE_1DIV2)  ?  "1/2nd"           : \
 | |
| 	(x == DRX_CODERATE_2DIV3)  ?  "2/3rd"           : \
 | |
| 	(x == DRX_CODERATE_3DIV4)  ?  "3/4th"           : \
 | |
| 	(x == DRX_CODERATE_5DIV6)  ?  "5/6th"           : \
 | |
| 	(x == DRX_CODERATE_7DIV8)  ?  "7/8th"           : \
 | |
| 	(x == DRX_CODERATE_AUTO)  ?  "Auto"            : \
 | |
| 	(x == DRX_CODERATE_UNKNOWN)  ?  "Unknown"         : \
 | |
| 	"(Invalid)")
 | |
| #define DRX_STR_HIERARCHY(x) ( \
 | |
| 	(x == DRX_HIERARCHY_NONE)  ?  "None"            : \
 | |
| 	(x == DRX_HIERARCHY_ALPHA1)  ?  "Alpha=1"         : \
 | |
| 	(x == DRX_HIERARCHY_ALPHA2)  ?  "Alpha=2"         : \
 | |
| 	(x == DRX_HIERARCHY_ALPHA4)  ?  "Alpha=4"         : \
 | |
| 	(x == DRX_HIERARCHY_AUTO)  ?  "Auto"            : \
 | |
| 	(x == DRX_HIERARCHY_UNKNOWN)  ?  "Unknown"         : \
 | |
| 	"(Invalid)")
 | |
| #define DRX_STR_PRIORITY(x) ( \
 | |
| 	(x == DRX_PRIORITY_LOW)  ?  "Low"             : \
 | |
| 	(x == DRX_PRIORITY_HIGH)  ?  "High"            : \
 | |
| 	(x == DRX_PRIORITY_UNKNOWN)  ?  "Unknown"         : \
 | |
| 	"(Invalid)")
 | |
| #define DRX_STR_MIRROR(x) ( \
 | |
| 	(x == DRX_MIRROR_NO)  ?  "Normal"          : \
 | |
| 	(x == DRX_MIRROR_YES)  ?  "Mirrored"        : \
 | |
| 	(x == DRX_MIRROR_AUTO)  ?  "Auto"            : \
 | |
| 	(x == DRX_MIRROR_UNKNOWN)  ?  "Unknown"         : \
 | |
| 	"(Invalid)")
 | |
| #define DRX_STR_CLASSIFICATION(x) ( \
 | |
| 	(x == DRX_CLASSIFICATION_GAUSS)  ?  "Gaussion"        : \
 | |
| 	(x == DRX_CLASSIFICATION_HVY_GAUSS)  ?  "Heavy Gaussion"  : \
 | |
| 	(x == DRX_CLASSIFICATION_COCHANNEL)  ?  "Co-channel"      : \
 | |
| 	(x == DRX_CLASSIFICATION_STATIC)  ?  "Static echo"     : \
 | |
| 	(x == DRX_CLASSIFICATION_MOVING)  ?  "Moving echo"     : \
 | |
| 	(x == DRX_CLASSIFICATION_ZERODB)  ?  "Zero dB echo"    : \
 | |
| 	(x == DRX_CLASSIFICATION_UNKNOWN)  ?  "Unknown"         : \
 | |
| 	(x == DRX_CLASSIFICATION_AUTO)  ?  "Auto"            : \
 | |
| 	"(Invalid)")
 | |
| 
 | |
| #define DRX_STR_INTERLEAVEMODE(x) ( \
 | |
| 	(x == DRX_INTERLEAVEMODE_I128_J1) ? "I128_J1"         : \
 | |
| 	(x == DRX_INTERLEAVEMODE_I128_J1_V2) ? "I128_J1_V2"      : \
 | |
| 	(x == DRX_INTERLEAVEMODE_I128_J2) ? "I128_J2"         : \
 | |
| 	(x == DRX_INTERLEAVEMODE_I64_J2) ? "I64_J2"          : \
 | |
| 	(x == DRX_INTERLEAVEMODE_I128_J3) ? "I128_J3"         : \
 | |
| 	(x == DRX_INTERLEAVEMODE_I32_J4) ? "I32_J4"          : \
 | |
| 	(x == DRX_INTERLEAVEMODE_I128_J4) ? "I128_J4"         : \
 | |
| 	(x == DRX_INTERLEAVEMODE_I16_J8) ? "I16_J8"          : \
 | |
| 	(x == DRX_INTERLEAVEMODE_I128_J5) ? "I128_J5"         : \
 | |
| 	(x == DRX_INTERLEAVEMODE_I8_J16) ? "I8_J16"          : \
 | |
| 	(x == DRX_INTERLEAVEMODE_I128_J6) ? "I128_J6"         : \
 | |
| 	(x == DRX_INTERLEAVEMODE_RESERVED_11) ? "Reserved 11"     : \
 | |
| 	(x == DRX_INTERLEAVEMODE_I128_J7) ? "I128_J7"         : \
 | |
| 	(x == DRX_INTERLEAVEMODE_RESERVED_13) ? "Reserved 13"     : \
 | |
| 	(x == DRX_INTERLEAVEMODE_I128_J8) ? "I128_J8"         : \
 | |
| 	(x == DRX_INTERLEAVEMODE_RESERVED_15) ? "Reserved 15"     : \
 | |
| 	(x == DRX_INTERLEAVEMODE_I12_J17) ? "I12_J17"         : \
 | |
| 	(x == DRX_INTERLEAVEMODE_I5_J4) ? "I5_J4"           : \
 | |
| 	(x == DRX_INTERLEAVEMODE_B52_M240) ? "B52_M240"        : \
 | |
| 	(x == DRX_INTERLEAVEMODE_B52_M720) ? "B52_M720"        : \
 | |
| 	(x == DRX_INTERLEAVEMODE_B52_M48) ? "B52_M48"         : \
 | |
| 	(x == DRX_INTERLEAVEMODE_B52_M0) ? "B52_M0"          : \
 | |
| 	(x == DRX_INTERLEAVEMODE_UNKNOWN) ? "Unknown"         : \
 | |
| 	(x == DRX_INTERLEAVEMODE_AUTO) ? "Auto"            : \
 | |
| 	"(Invalid)")
 | |
| 
 | |
| #define DRX_STR_LDPC(x) ( \
 | |
| 	(x == DRX_LDPC_0_4) ? "0.4"             : \
 | |
| 	(x == DRX_LDPC_0_6) ? "0.6"             : \
 | |
| 	(x == DRX_LDPC_0_8) ? "0.8"             : \
 | |
| 	(x == DRX_LDPC_AUTO) ? "Auto"            : \
 | |
| 	(x == DRX_LDPC_UNKNOWN) ? "Unknown"         : \
 | |
| 	"(Invalid)")
 | |
| 
 | |
| #define DRX_STR_CARRIER(x) ( \
 | |
| 	(x == DRX_CARRIER_MULTI) ? "Multi"           : \
 | |
| 	(x == DRX_CARRIER_SINGLE) ? "Single"          : \
 | |
| 	(x == DRX_CARRIER_AUTO) ? "Auto"            : \
 | |
| 	(x == DRX_CARRIER_UNKNOWN) ? "Unknown"         : \
 | |
| 	"(Invalid)")
 | |
| 
 | |
| #define DRX_STR_FRAMEMODE(x) ( \
 | |
| 	(x == DRX_FRAMEMODE_420)  ? "420"                : \
 | |
| 	(x == DRX_FRAMEMODE_595)  ? "595"                : \
 | |
| 	(x == DRX_FRAMEMODE_945)  ? "945"                : \
 | |
| 	(x == DRX_FRAMEMODE_420_FIXED_PN)  ? "420 with fixed PN"  : \
 | |
| 	(x == DRX_FRAMEMODE_945_FIXED_PN)  ? "945 with fixed PN"  : \
 | |
| 	(x == DRX_FRAMEMODE_AUTO)  ? "Auto"               : \
 | |
| 	(x == DRX_FRAMEMODE_UNKNOWN)  ? "Unknown"            : \
 | |
| 	"(Invalid)")
 | |
| 
 | |
| #define DRX_STR_PILOT(x) ( \
 | |
| 	(x == DRX_PILOT_ON) ?   "On"              : \
 | |
| 	(x == DRX_PILOT_OFF) ?   "Off"             : \
 | |
| 	(x == DRX_PILOT_AUTO) ?   "Auto"            : \
 | |
| 	(x == DRX_PILOT_UNKNOWN) ?   "Unknown"         : \
 | |
| 	"(Invalid)")
 | |
| /* TPS */
 | |
| 
 | |
| #define DRX_STR_TPS_FRAME(x)  ( \
 | |
| 	(x == DRX_TPS_FRAME1)  ?  "Frame1"          : \
 | |
| 	(x == DRX_TPS_FRAME2)  ?  "Frame2"          : \
 | |
| 	(x == DRX_TPS_FRAME3)  ?  "Frame3"          : \
 | |
| 	(x == DRX_TPS_FRAME4)  ?  "Frame4"          : \
 | |
| 	(x == DRX_TPS_FRAME_UNKNOWN)  ?  "Unknown"         : \
 | |
| 	"(Invalid)")
 | |
| 
 | |
| /* lock status */
 | |
| 
 | |
| #define DRX_STR_LOCKSTATUS(x) ( \
 | |
| 	(x == DRX_NEVER_LOCK)  ?  "Never"           : \
 | |
| 	(x == DRX_NOT_LOCKED)  ?  "No"              : \
 | |
| 	(x == DRX_LOCKED)  ?  "Locked"          : \
 | |
| 	(x == DRX_LOCK_STATE_1)  ?  "Lock state 1"    : \
 | |
| 	(x == DRX_LOCK_STATE_2)  ?  "Lock state 2"    : \
 | |
| 	(x == DRX_LOCK_STATE_3)  ?  "Lock state 3"    : \
 | |
| 	(x == DRX_LOCK_STATE_4)  ?  "Lock state 4"    : \
 | |
| 	(x == DRX_LOCK_STATE_5)  ?  "Lock state 5"    : \
 | |
| 	(x == DRX_LOCK_STATE_6)  ?  "Lock state 6"    : \
 | |
| 	(x == DRX_LOCK_STATE_7)  ?  "Lock state 7"    : \
 | |
| 	(x == DRX_LOCK_STATE_8)  ?  "Lock state 8"    : \
 | |
| 	(x == DRX_LOCK_STATE_9)  ?  "Lock state 9"    : \
 | |
| 	"(Invalid)")
 | |
| 
 | |
| /* version information , modules */
 | |
| #define DRX_STR_MODULE(x) ( \
 | |
| 	(x == DRX_MODULE_DEVICE)  ?  "Device"                : \
 | |
| 	(x == DRX_MODULE_MICROCODE)  ?  "Microcode"             : \
 | |
| 	(x == DRX_MODULE_DRIVERCORE)  ?  "CoreDriver"            : \
 | |
| 	(x == DRX_MODULE_DEVICEDRIVER)  ?  "DeviceDriver"          : \
 | |
| 	(x == DRX_MODULE_BSP_I2C)  ?  "BSP I2C"               : \
 | |
| 	(x == DRX_MODULE_BSP_TUNER)  ?  "BSP Tuner"             : \
 | |
| 	(x == DRX_MODULE_BSP_HOST)  ?  "BSP Host"              : \
 | |
| 	(x == DRX_MODULE_DAP)  ?  "Data Access Protocol"  : \
 | |
| 	(x == DRX_MODULE_UNKNOWN)  ?  "Unknown"               : \
 | |
| 	"(Invalid)")
 | |
| 
 | |
| #define DRX_STR_POWER_MODE(x) ( \
 | |
| 	(x == DRX_POWER_UP)  ?  "DRX_POWER_UP    "  : \
 | |
| 	(x == DRX_POWER_MODE_1)  ?  "DRX_POWER_MODE_1"  : \
 | |
| 	(x == DRX_POWER_MODE_2)  ?  "DRX_POWER_MODE_2"  : \
 | |
| 	(x == DRX_POWER_MODE_3)  ?  "DRX_POWER_MODE_3"  : \
 | |
| 	(x == DRX_POWER_MODE_4)  ?  "DRX_POWER_MODE_4"  : \
 | |
| 	(x == DRX_POWER_MODE_5)  ?  "DRX_POWER_MODE_5"  : \
 | |
| 	(x == DRX_POWER_MODE_6)  ?  "DRX_POWER_MODE_6"  : \
 | |
| 	(x == DRX_POWER_MODE_7)  ?  "DRX_POWER_MODE_7"  : \
 | |
| 	(x == DRX_POWER_MODE_8)  ?  "DRX_POWER_MODE_8"  : \
 | |
| 	(x == DRX_POWER_MODE_9)  ?  "DRX_POWER_MODE_9"  : \
 | |
| 	(x == DRX_POWER_MODE_10)  ?  "DRX_POWER_MODE_10" : \
 | |
| 	(x == DRX_POWER_MODE_11)  ?  "DRX_POWER_MODE_11" : \
 | |
| 	(x == DRX_POWER_MODE_12)  ?  "DRX_POWER_MODE_12" : \
 | |
| 	(x == DRX_POWER_MODE_13)  ?  "DRX_POWER_MODE_13" : \
 | |
| 	(x == DRX_POWER_MODE_14)  ?  "DRX_POWER_MODE_14" : \
 | |
| 	(x == DRX_POWER_MODE_15)  ?  "DRX_POWER_MODE_15" : \
 | |
| 	(x == DRX_POWER_MODE_16)  ?  "DRX_POWER_MODE_16" : \
 | |
| 	(x == DRX_POWER_DOWN)  ?  "DRX_POWER_DOWN  " : \
 | |
| 	"(Invalid)")
 | |
| 
 | |
| #define DRX_STR_OOB_STANDARD(x) ( \
 | |
| 	(x == DRX_OOB_MODE_A)  ?  "ANSI 55-1  " : \
 | |
| 	(x == DRX_OOB_MODE_B_GRADE_A)  ?  "ANSI 55-2 A" : \
 | |
| 	(x == DRX_OOB_MODE_B_GRADE_B)  ?  "ANSI 55-2 B" : \
 | |
| 	"(Invalid)")
 | |
| 
 | |
| #define DRX_STR_AUD_STANDARD(x) ( \
 | |
| 	(x == DRX_AUD_STANDARD_BTSC)  ? "BTSC"                     : \
 | |
| 	(x == DRX_AUD_STANDARD_A2)  ? "A2"                       : \
 | |
| 	(x == DRX_AUD_STANDARD_EIAJ)  ? "EIAJ"                     : \
 | |
| 	(x == DRX_AUD_STANDARD_FM_STEREO)  ? "FM Stereo"                : \
 | |
| 	(x == DRX_AUD_STANDARD_AUTO)  ? "Auto"                     : \
 | |
| 	(x == DRX_AUD_STANDARD_M_MONO)  ? "M-Standard Mono"          : \
 | |
| 	(x == DRX_AUD_STANDARD_D_K_MONO)  ? "D/K Mono FM"              : \
 | |
| 	(x == DRX_AUD_STANDARD_BG_FM)  ? "B/G-Dual Carrier FM (A2)" : \
 | |
| 	(x == DRX_AUD_STANDARD_D_K1)  ? "D/K1-Dual Carrier FM"     : \
 | |
| 	(x == DRX_AUD_STANDARD_D_K2)  ? "D/K2-Dual Carrier FM"     : \
 | |
| 	(x == DRX_AUD_STANDARD_D_K3)  ? "D/K3-Dual Carrier FM"     : \
 | |
| 	(x == DRX_AUD_STANDARD_BG_NICAM_FM)  ? "B/G-NICAM-FM"             : \
 | |
| 	(x == DRX_AUD_STANDARD_L_NICAM_AM)  ? "L-NICAM-AM"               : \
 | |
| 	(x == DRX_AUD_STANDARD_I_NICAM_FM)  ? "I-NICAM-FM"               : \
 | |
| 	(x == DRX_AUD_STANDARD_D_K_NICAM_FM)  ? "D/K-NICAM-FM"             : \
 | |
| 	(x == DRX_AUD_STANDARD_UNKNOWN)  ? "Unknown"                  : \
 | |
| 	"(Invalid)")
 | |
| #define DRX_STR_AUD_STEREO(x) ( \
 | |
| 	(x == true)  ? "Stereo"           : \
 | |
| 	(x == false)  ? "Mono"             : \
 | |
| 	"(Invalid)")
 | |
| 
 | |
| #define DRX_STR_AUD_SAP(x) ( \
 | |
| 	(x == true)  ? "Present"          : \
 | |
| 	(x == false)  ? "Not present"      : \
 | |
| 	"(Invalid)")
 | |
| 
 | |
| #define DRX_STR_AUD_CARRIER(x) ( \
 | |
| 	(x == true)  ? "Present"          : \
 | |
| 	(x == false)  ? "Not present"      : \
 | |
| 	"(Invalid)")
 | |
| 
 | |
| #define DRX_STR_AUD_RDS(x) ( \
 | |
| 	(x == true)  ? "Available"        : \
 | |
| 	(x == false)  ? "Not Available"    : \
 | |
| 	"(Invalid)")
 | |
| 
 | |
| #define DRX_STR_AUD_NICAM_STATUS(x) ( \
 | |
| 	(x == DRX_AUD_NICAM_DETECTED)  ? "Detected"         : \
 | |
| 	(x == DRX_AUD_NICAM_NOT_DETECTED)  ? "Not detected"     : \
 | |
| 	(x == DRX_AUD_NICAM_BAD)  ? "Bad"              : \
 | |
| 	"(Invalid)")
 | |
| 
 | |
| #define DRX_STR_RDS_VALID(x) ( \
 | |
| 	(x == true)  ? "Valid"            : \
 | |
| 	(x == false)  ? "Not Valid"        : \
 | |
| 	"(Invalid)")
 | |
| 
 | |
| /*-------------------------------------------------------------------------
 | |
| Access macros
 | |
| -------------------------------------------------------------------------*/
 | |
| 
 | |
| /*
 | |
| * \brief Create a compilable reference to the microcode attribute
 | |
| * \param d pointer to demod instance
 | |
| *
 | |
| * Used as main reference to an attribute field.
 | |
| * Used by both macro implementation and function implementation.
 | |
| * These macros are defined to avoid duplication of code in macro and function
 | |
| * definitions that handle access of demod common or extended attributes.
 | |
| *
 | |
| */
 | |
| 
 | |
| #define DRX_ATTR_MCRECORD(d)        ((d)->my_common_attr->mcversion)
 | |
| #define DRX_ATTR_MIRRORFREQSPECT(d) ((d)->my_common_attr->mirror_freq_spect)
 | |
| #define DRX_ATTR_CURRENTPOWERMODE(d)((d)->my_common_attr->current_power_mode)
 | |
| #define DRX_ATTR_ISOPENED(d)        ((d)->my_common_attr->is_opened)
 | |
| #define DRX_ATTR_USEBOOTLOADER(d)   ((d)->my_common_attr->use_bootloader)
 | |
| #define DRX_ATTR_CURRENTSTANDARD(d) ((d)->my_common_attr->current_standard)
 | |
| #define DRX_ATTR_PREVSTANDARD(d)    ((d)->my_common_attr->prev_standard)
 | |
| #define DRX_ATTR_CACHESTANDARD(d)   ((d)->my_common_attr->di_cache_standard)
 | |
| #define DRX_ATTR_CURRENTCHANNEL(d)  ((d)->my_common_attr->current_channel)
 | |
| #define DRX_ATTR_MICROCODE(d)       ((d)->my_common_attr->microcode)
 | |
| #define DRX_ATTR_VERIFYMICROCODE(d) ((d)->my_common_attr->verify_microcode)
 | |
| #define DRX_ATTR_CAPABILITIES(d)    ((d)->my_common_attr->capabilities)
 | |
| #define DRX_ATTR_PRODUCTID(d)       ((d)->my_common_attr->product_id)
 | |
| #define DRX_ATTR_INTERMEDIATEFREQ(d) ((d)->my_common_attr->intermediate_freq)
 | |
| #define DRX_ATTR_SYSCLOCKFREQ(d)     ((d)->my_common_attr->sys_clock_freq)
 | |
| #define DRX_ATTR_TUNERRFAGCPOL(d)   ((d)->my_common_attr->tuner_rf_agc_pol)
 | |
| #define DRX_ATTR_TUNERIFAGCPOL(d)    ((d)->my_common_attr->tuner_if_agc_pol)
 | |
| #define DRX_ATTR_TUNERSLOWMODE(d)    ((d)->my_common_attr->tuner_slow_mode)
 | |
| #define DRX_ATTR_TUNERSPORTNR(d)     ((d)->my_common_attr->tuner_port_nr)
 | |
| #define DRX_ATTR_I2CADDR(d)         ((d)->my_i2c_dev_addr->i2c_addr)
 | |
| #define DRX_ATTR_I2CDEVID(d)        ((d)->my_i2c_dev_addr->i2c_dev_id)
 | |
| #define DRX_ISMCVERTYPE(x) ((x) == AUX_VER_RECORD)
 | |
| 
 | |
| /*************************/
 | |
| 
 | |
| /* Macros with device-specific handling are converted to CFG functions */
 | |
| 
 | |
| #define DRX_ACCESSMACRO_SET(demod, value, cfg_name, data_type)             \
 | |
| 	do {                                                               \
 | |
| 		struct drx_cfg config;                                     \
 | |
| 		data_type cfg_data;                                        \
 | |
| 		config.cfg_type = cfg_name;                                \
 | |
| 		config.cfg_data = &cfg_data;                               \
 | |
| 		cfg_data = value;                                          \
 | |
| 		drx_ctrl(demod, DRX_CTRL_SET_CFG, &config);                \
 | |
| 	} while (0)
 | |
| 
 | |
| #define DRX_ACCESSMACRO_GET(demod, value, cfg_name, data_type, error_value) \
 | |
| 	do {                                                                \
 | |
| 		int cfg_status;                                             \
 | |
| 		struct drx_cfg config;                                      \
 | |
| 		data_type    cfg_data;                                      \
 | |
| 		config.cfg_type = cfg_name;                                 \
 | |
| 		config.cfg_data = &cfg_data;                                \
 | |
| 		cfg_status = drx_ctrl(demod, DRX_CTRL_GET_CFG, &config);    \
 | |
| 		if (cfg_status == 0) {                                      \
 | |
| 			value = cfg_data;                                   \
 | |
| 		} else {                                                    \
 | |
| 			value = (data_type)error_value;                     \
 | |
| 		}                                                           \
 | |
| 	} while (0)
 | |
| 
 | |
| /* Configuration functions for usage by Access (XS) Macros */
 | |
| 
 | |
| #ifndef DRX_XS_CFG_BASE
 | |
| #define DRX_XS_CFG_BASE (500)
 | |
| #endif
 | |
| 
 | |
| #define DRX_XS_CFG_PRESET          (DRX_XS_CFG_BASE + 0)
 | |
| #define DRX_XS_CFG_AUD_BTSC_DETECT (DRX_XS_CFG_BASE + 1)
 | |
| #define DRX_XS_CFG_QAM_LOCKRANGE   (DRX_XS_CFG_BASE + 2)
 | |
| 
 | |
| /* Access Macros with device-specific handling */
 | |
| 
 | |
| #define DRX_SET_PRESET(d, x) \
 | |
| 	DRX_ACCESSMACRO_SET((d), (x), DRX_XS_CFG_PRESET, char*)
 | |
| #define DRX_GET_PRESET(d, x) \
 | |
| 	DRX_ACCESSMACRO_GET((d), (x), DRX_XS_CFG_PRESET, char*, "ERROR")
 | |
| 
 | |
| #define DRX_SET_AUD_BTSC_DETECT(d, x) DRX_ACCESSMACRO_SET((d), (x), \
 | |
| 	 DRX_XS_CFG_AUD_BTSC_DETECT, enum drx_aud_btsc_detect)
 | |
| #define DRX_GET_AUD_BTSC_DETECT(d, x) DRX_ACCESSMACRO_GET((d), (x), \
 | |
| 	 DRX_XS_CFG_AUD_BTSC_DETECT, enum drx_aud_btsc_detect, DRX_UNKNOWN)
 | |
| 
 | |
| #define DRX_SET_QAM_LOCKRANGE(d, x) DRX_ACCESSMACRO_SET((d), (x), \
 | |
| 	 DRX_XS_CFG_QAM_LOCKRANGE, enum drx_qam_lock_range)
 | |
| #define DRX_GET_QAM_LOCKRANGE(d, x) DRX_ACCESSMACRO_GET((d), (x), \
 | |
| 	 DRX_XS_CFG_QAM_LOCKRANGE, enum drx_qam_lock_range, DRX_UNKNOWN)
 | |
| 
 | |
| /*
 | |
| * \brief Macro to check if std is an ATV standard
 | |
| * \retval true std is an ATV standard
 | |
| * \retval false std is an ATV standard
 | |
| */
 | |
| #define DRX_ISATVSTD(std) (((std) == DRX_STANDARD_PAL_SECAM_BG) || \
 | |
| 			      ((std) == DRX_STANDARD_PAL_SECAM_DK) || \
 | |
| 			      ((std) == DRX_STANDARD_PAL_SECAM_I) || \
 | |
| 			      ((std) == DRX_STANDARD_PAL_SECAM_L) || \
 | |
| 			      ((std) == DRX_STANDARD_PAL_SECAM_LP) || \
 | |
| 			      ((std) == DRX_STANDARD_NTSC) || \
 | |
| 			      ((std) == DRX_STANDARD_FM))
 | |
| 
 | |
| /*
 | |
| * \brief Macro to check if std is an QAM standard
 | |
| * \retval true std is an QAM standards
 | |
| * \retval false std is an QAM standards
 | |
| */
 | |
| #define DRX_ISQAMSTD(std) (((std) == DRX_STANDARD_ITU_A) || \
 | |
| 			      ((std) == DRX_STANDARD_ITU_B) || \
 | |
| 			      ((std) == DRX_STANDARD_ITU_C) || \
 | |
| 			      ((std) == DRX_STANDARD_ITU_D))
 | |
| 
 | |
| /*
 | |
| * \brief Macro to check if std is VSB standard
 | |
| * \retval true std is VSB standard
 | |
| * \retval false std is not VSB standard
 | |
| */
 | |
| #define DRX_ISVSBSTD(std) ((std) == DRX_STANDARD_8VSB)
 | |
| 
 | |
| /*
 | |
| * \brief Macro to check if std is DVBT standard
 | |
| * \retval true std is DVBT standard
 | |
| * \retval false std is not DVBT standard
 | |
| */
 | |
| #define DRX_ISDVBTSTD(std) ((std) == DRX_STANDARD_DVBT)
 | |
| 
 | |
| /*-------------------------------------------------------------------------
 | |
| THE END
 | |
| -------------------------------------------------------------------------*/
 | |
| #endif				/* __DRXDRIVER_H__ */
 |