162306a36Sopenharmony_ci/* 262306a36Sopenharmony_ci Copyright (c), 2004-2005,2007-2010 Trident Microsystems, Inc. 362306a36Sopenharmony_ci All rights reserved. 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci Redistribution and use in source and binary forms, with or without 662306a36Sopenharmony_ci modification, are permitted provided that the following conditions are met: 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci * Redistributions of source code must retain the above copyright notice, 962306a36Sopenharmony_ci this list of conditions and the following disclaimer. 1062306a36Sopenharmony_ci * Redistributions in binary form must reproduce the above copyright notice, 1162306a36Sopenharmony_ci this list of conditions and the following disclaimer in the documentation 1262306a36Sopenharmony_ci and/or other materials provided with the distribution. 1362306a36Sopenharmony_ci * Neither the name of Trident Microsystems nor Hauppauge Computer Works 1462306a36Sopenharmony_ci nor the names of its contributors may be used to endorse or promote 1562306a36Sopenharmony_ci products derived from this software without specific prior written 1662306a36Sopenharmony_ci permission. 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 1962306a36Sopenharmony_ci AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2062306a36Sopenharmony_ci IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2162306a36Sopenharmony_ci ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 2262306a36Sopenharmony_ci LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2362306a36Sopenharmony_ci CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2462306a36Sopenharmony_ci SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2562306a36Sopenharmony_ci INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2662306a36Sopenharmony_ci CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2762306a36Sopenharmony_ci ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 2862306a36Sopenharmony_ci POSSIBILITY OF SUCH DAMAGE. 2962306a36Sopenharmony_ci*/ 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci#ifndef __DRXDRIVER_H__ 3262306a36Sopenharmony_ci#define __DRXDRIVER_H__ 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci#include <linux/kernel.h> 3562306a36Sopenharmony_ci#include <linux/errno.h> 3662306a36Sopenharmony_ci#include <linux/firmware.h> 3762306a36Sopenharmony_ci#include <linux/i2c.h> 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci/* 4062306a36Sopenharmony_ci * This structure contains the I2C address, the device ID and a user_data pointer. 4162306a36Sopenharmony_ci * The user_data pointer can be used for application specific purposes. 4262306a36Sopenharmony_ci */ 4362306a36Sopenharmony_cistruct i2c_device_addr { 4462306a36Sopenharmony_ci u16 i2c_addr; /* The I2C address of the device. */ 4562306a36Sopenharmony_ci u16 i2c_dev_id; /* The device identifier. */ 4662306a36Sopenharmony_ci void *user_data; /* User data pointer */ 4762306a36Sopenharmony_ci}; 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci/* 5062306a36Sopenharmony_ci* \def IS_I2C_10BIT( addr ) 5162306a36Sopenharmony_ci* \brief Determine if I2C address 'addr' is a 10 bits address or not. 5262306a36Sopenharmony_ci* \param addr The I2C address. 5362306a36Sopenharmony_ci* \return int. 5462306a36Sopenharmony_ci* \retval 0 if address is not a 10 bits I2C address. 5562306a36Sopenharmony_ci* \retval 1 if address is a 10 bits I2C address. 5662306a36Sopenharmony_ci*/ 5762306a36Sopenharmony_ci#define IS_I2C_10BIT(addr) \ 5862306a36Sopenharmony_ci (((addr) & 0xF8) == 0xF0) 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci/*------------------------------------------------------------------------------ 6162306a36Sopenharmony_ciExported FUNCTIONS 6262306a36Sopenharmony_ci------------------------------------------------------------------------------*/ 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci/* 6562306a36Sopenharmony_ci* \fn drxbsp_i2c_init() 6662306a36Sopenharmony_ci* \brief Initialize I2C communication module. 6762306a36Sopenharmony_ci* \return int Return status. 6862306a36Sopenharmony_ci* \retval 0 Initialization successful. 6962306a36Sopenharmony_ci* \retval -EIO Initialization failed. 7062306a36Sopenharmony_ci*/ 7162306a36Sopenharmony_ciint drxbsp_i2c_init(void); 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci/* 7462306a36Sopenharmony_ci* \fn drxbsp_i2c_term() 7562306a36Sopenharmony_ci* \brief Terminate I2C communication module. 7662306a36Sopenharmony_ci* \return int Return status. 7762306a36Sopenharmony_ci* \retval 0 Termination successful. 7862306a36Sopenharmony_ci* \retval -EIO Termination failed. 7962306a36Sopenharmony_ci*/ 8062306a36Sopenharmony_ciint drxbsp_i2c_term(void); 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci/* 8362306a36Sopenharmony_ci* \fn int drxbsp_i2c_write_read( struct i2c_device_addr *w_dev_addr, 8462306a36Sopenharmony_ci* u16 w_count, 8562306a36Sopenharmony_ci* u8 * wData, 8662306a36Sopenharmony_ci* struct i2c_device_addr *r_dev_addr, 8762306a36Sopenharmony_ci* u16 r_count, 8862306a36Sopenharmony_ci* u8 * r_data) 8962306a36Sopenharmony_ci* \brief Read and/or write count bytes from I2C bus, store them in data[]. 9062306a36Sopenharmony_ci* \param w_dev_addr The device i2c address and the device ID to write to 9162306a36Sopenharmony_ci* \param w_count The number of bytes to write 9262306a36Sopenharmony_ci* \param wData The array to write the data to 9362306a36Sopenharmony_ci* \param r_dev_addr The device i2c address and the device ID to read from 9462306a36Sopenharmony_ci* \param r_count The number of bytes to read 9562306a36Sopenharmony_ci* \param r_data The array to read the data from 9662306a36Sopenharmony_ci* \return int Return status. 9762306a36Sopenharmony_ci* \retval 0 Success. 9862306a36Sopenharmony_ci* \retval -EIO Failure. 9962306a36Sopenharmony_ci* \retval -EINVAL Parameter 'wcount' is not zero but parameter 10062306a36Sopenharmony_ci* 'wdata' contains NULL. 10162306a36Sopenharmony_ci* Idem for 'rcount' and 'rdata'. 10262306a36Sopenharmony_ci* Both w_dev_addr and r_dev_addr are NULL. 10362306a36Sopenharmony_ci* 10462306a36Sopenharmony_ci* This function must implement an atomic write and/or read action on the I2C bus 10562306a36Sopenharmony_ci* No other process may use the I2C bus when this function is executing. 10662306a36Sopenharmony_ci* The critical section of this function runs from and including the I2C 10762306a36Sopenharmony_ci* write, up to and including the I2C read action. 10862306a36Sopenharmony_ci* 10962306a36Sopenharmony_ci* The device ID can be useful if several devices share an I2C address. 11062306a36Sopenharmony_ci* It can be used to control a "switch" on the I2C bus to the correct device. 11162306a36Sopenharmony_ci*/ 11262306a36Sopenharmony_ciint drxbsp_i2c_write_read(struct i2c_device_addr *w_dev_addr, 11362306a36Sopenharmony_ci u16 w_count, 11462306a36Sopenharmony_ci u8 *wData, 11562306a36Sopenharmony_ci struct i2c_device_addr *r_dev_addr, 11662306a36Sopenharmony_ci u16 r_count, u8 *r_data); 11762306a36Sopenharmony_ci 11862306a36Sopenharmony_ci/* 11962306a36Sopenharmony_ci* \fn drxbsp_i2c_error_text() 12062306a36Sopenharmony_ci* \brief Returns a human readable error. 12162306a36Sopenharmony_ci* Counter part of numerical drx_i2c_error_g. 12262306a36Sopenharmony_ci* 12362306a36Sopenharmony_ci* \return char* Pointer to human readable error text. 12462306a36Sopenharmony_ci*/ 12562306a36Sopenharmony_cichar *drxbsp_i2c_error_text(void); 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_ci/* 12862306a36Sopenharmony_ci* \var drx_i2c_error_g; 12962306a36Sopenharmony_ci* \brief I2C specific error codes, platform dependent. 13062306a36Sopenharmony_ci*/ 13162306a36Sopenharmony_ciextern int drx_i2c_error_g; 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_ci#define TUNER_MODE_SUB0 0x0001 /* for sub-mode (e.g. RF-AGC setting) */ 13462306a36Sopenharmony_ci#define TUNER_MODE_SUB1 0x0002 /* for sub-mode (e.g. RF-AGC setting) */ 13562306a36Sopenharmony_ci#define TUNER_MODE_SUB2 0x0004 /* for sub-mode (e.g. RF-AGC setting) */ 13662306a36Sopenharmony_ci#define TUNER_MODE_SUB3 0x0008 /* for sub-mode (e.g. RF-AGC setting) */ 13762306a36Sopenharmony_ci#define TUNER_MODE_SUB4 0x0010 /* for sub-mode (e.g. RF-AGC setting) */ 13862306a36Sopenharmony_ci#define TUNER_MODE_SUB5 0x0020 /* for sub-mode (e.g. RF-AGC setting) */ 13962306a36Sopenharmony_ci#define TUNER_MODE_SUB6 0x0040 /* for sub-mode (e.g. RF-AGC setting) */ 14062306a36Sopenharmony_ci#define TUNER_MODE_SUB7 0x0080 /* for sub-mode (e.g. RF-AGC setting) */ 14162306a36Sopenharmony_ci 14262306a36Sopenharmony_ci#define TUNER_MODE_DIGITAL 0x0100 /* for digital channel (e.g. DVB-T) */ 14362306a36Sopenharmony_ci#define TUNER_MODE_ANALOG 0x0200 /* for analog channel (e.g. PAL) */ 14462306a36Sopenharmony_ci#define TUNER_MODE_SWITCH 0x0400 /* during channel switch & scanning */ 14562306a36Sopenharmony_ci#define TUNER_MODE_LOCK 0x0800 /* after tuner has locked */ 14662306a36Sopenharmony_ci#define TUNER_MODE_6MHZ 0x1000 /* for 6MHz bandwidth channels */ 14762306a36Sopenharmony_ci#define TUNER_MODE_7MHZ 0x2000 /* for 7MHz bandwidth channels */ 14862306a36Sopenharmony_ci#define TUNER_MODE_8MHZ 0x4000 /* for 8MHz bandwidth channels */ 14962306a36Sopenharmony_ci 15062306a36Sopenharmony_ci#define TUNER_MODE_SUB_MAX 8 15162306a36Sopenharmony_ci#define TUNER_MODE_SUBALL (TUNER_MODE_SUB0 | TUNER_MODE_SUB1 | \ 15262306a36Sopenharmony_ci TUNER_MODE_SUB2 | TUNER_MODE_SUB3 | \ 15362306a36Sopenharmony_ci TUNER_MODE_SUB4 | TUNER_MODE_SUB5 | \ 15462306a36Sopenharmony_ci TUNER_MODE_SUB6 | TUNER_MODE_SUB7) 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_ci 15762306a36Sopenharmony_cienum tuner_lock_status { 15862306a36Sopenharmony_ci TUNER_LOCKED, 15962306a36Sopenharmony_ci TUNER_NOT_LOCKED 16062306a36Sopenharmony_ci}; 16162306a36Sopenharmony_ci 16262306a36Sopenharmony_cistruct tuner_common { 16362306a36Sopenharmony_ci char *name; /* Tuner brand & type name */ 16462306a36Sopenharmony_ci s32 min_freq_rf; /* Lowest RF input frequency, in kHz */ 16562306a36Sopenharmony_ci s32 max_freq_rf; /* Highest RF input frequency, in kHz */ 16662306a36Sopenharmony_ci 16762306a36Sopenharmony_ci u8 sub_mode; /* Index to sub-mode in use */ 16862306a36Sopenharmony_ci char ***sub_mode_descriptions; /* Pointer to description of sub-modes */ 16962306a36Sopenharmony_ci u8 sub_modes; /* Number of available sub-modes */ 17062306a36Sopenharmony_ci 17162306a36Sopenharmony_ci /* The following fields will be either 0, NULL or false and do not need 17262306a36Sopenharmony_ci initialisation */ 17362306a36Sopenharmony_ci void *self_check; /* gives proof of initialization */ 17462306a36Sopenharmony_ci bool programmed; /* only valid if self_check is OK */ 17562306a36Sopenharmony_ci s32 r_ffrequency; /* only valid if programmed */ 17662306a36Sopenharmony_ci s32 i_ffrequency; /* only valid if programmed */ 17762306a36Sopenharmony_ci 17862306a36Sopenharmony_ci void *my_user_data; /* pointer to associated demod instance */ 17962306a36Sopenharmony_ci u16 my_capabilities; /* value for storing application flags */ 18062306a36Sopenharmony_ci}; 18162306a36Sopenharmony_ci 18262306a36Sopenharmony_cistruct tuner_instance; 18362306a36Sopenharmony_ci 18462306a36Sopenharmony_citypedef int(*tuner_open_func_t) (struct tuner_instance *tuner); 18562306a36Sopenharmony_citypedef int(*tuner_close_func_t) (struct tuner_instance *tuner); 18662306a36Sopenharmony_ci 18762306a36Sopenharmony_citypedef int(*tuner_set_frequency_func_t) (struct tuner_instance *tuner, 18862306a36Sopenharmony_ci u32 mode, 18962306a36Sopenharmony_ci s32 19062306a36Sopenharmony_ci frequency); 19162306a36Sopenharmony_ci 19262306a36Sopenharmony_citypedef int(*tuner_get_frequency_func_t) (struct tuner_instance *tuner, 19362306a36Sopenharmony_ci u32 mode, 19462306a36Sopenharmony_ci s32 * 19562306a36Sopenharmony_ci r_ffrequency, 19662306a36Sopenharmony_ci s32 * 19762306a36Sopenharmony_ci i_ffrequency); 19862306a36Sopenharmony_ci 19962306a36Sopenharmony_citypedef int(*tuner_lock_status_func_t) (struct tuner_instance *tuner, 20062306a36Sopenharmony_ci enum tuner_lock_status * 20162306a36Sopenharmony_ci lock_stat); 20262306a36Sopenharmony_ci 20362306a36Sopenharmony_citypedef int(*tune_ri2c_write_read_func_t) (struct tuner_instance *tuner, 20462306a36Sopenharmony_ci struct i2c_device_addr * 20562306a36Sopenharmony_ci w_dev_addr, u16 w_count, 20662306a36Sopenharmony_ci u8 *wData, 20762306a36Sopenharmony_ci struct i2c_device_addr * 20862306a36Sopenharmony_ci r_dev_addr, u16 r_count, 20962306a36Sopenharmony_ci u8 *r_data); 21062306a36Sopenharmony_ci 21162306a36Sopenharmony_cistruct tuner_ops { 21262306a36Sopenharmony_ci tuner_open_func_t open_func; 21362306a36Sopenharmony_ci tuner_close_func_t close_func; 21462306a36Sopenharmony_ci tuner_set_frequency_func_t set_frequency_func; 21562306a36Sopenharmony_ci tuner_get_frequency_func_t get_frequency_func; 21662306a36Sopenharmony_ci tuner_lock_status_func_t lock_status_func; 21762306a36Sopenharmony_ci tune_ri2c_write_read_func_t i2c_write_read_func; 21862306a36Sopenharmony_ci 21962306a36Sopenharmony_ci}; 22062306a36Sopenharmony_ci 22162306a36Sopenharmony_cistruct tuner_instance { 22262306a36Sopenharmony_ci struct i2c_device_addr my_i2c_dev_addr; 22362306a36Sopenharmony_ci struct tuner_common *my_common_attr; 22462306a36Sopenharmony_ci void *my_ext_attr; 22562306a36Sopenharmony_ci struct tuner_ops *my_funct; 22662306a36Sopenharmony_ci}; 22762306a36Sopenharmony_ci 22862306a36Sopenharmony_ciint drxbsp_tuner_set_frequency(struct tuner_instance *tuner, 22962306a36Sopenharmony_ci u32 mode, 23062306a36Sopenharmony_ci s32 frequency); 23162306a36Sopenharmony_ci 23262306a36Sopenharmony_ciint drxbsp_tuner_get_frequency(struct tuner_instance *tuner, 23362306a36Sopenharmony_ci u32 mode, 23462306a36Sopenharmony_ci s32 *r_ffrequency, 23562306a36Sopenharmony_ci s32 *i_ffrequency); 23662306a36Sopenharmony_ci 23762306a36Sopenharmony_ciint drxbsp_tuner_default_i2c_write_read(struct tuner_instance *tuner, 23862306a36Sopenharmony_ci struct i2c_device_addr *w_dev_addr, 23962306a36Sopenharmony_ci u16 w_count, 24062306a36Sopenharmony_ci u8 *wData, 24162306a36Sopenharmony_ci struct i2c_device_addr *r_dev_addr, 24262306a36Sopenharmony_ci u16 r_count, u8 *r_data); 24362306a36Sopenharmony_ci 24462306a36Sopenharmony_ci/************* 24562306a36Sopenharmony_ci* 24662306a36Sopenharmony_ci* This section configures the DRX Data Access Protocols (DAPs). 24762306a36Sopenharmony_ci* 24862306a36Sopenharmony_ci**************/ 24962306a36Sopenharmony_ci 25062306a36Sopenharmony_ci/* 25162306a36Sopenharmony_ci* \def DRXDAP_SINGLE_MASTER 25262306a36Sopenharmony_ci* \brief Enable I2C single or I2C multimaster mode on host. 25362306a36Sopenharmony_ci* 25462306a36Sopenharmony_ci* Set to 1 to enable single master mode 25562306a36Sopenharmony_ci* Set to 0 to enable multi master mode 25662306a36Sopenharmony_ci* 25762306a36Sopenharmony_ci* The actual DAP implementation may be restricted to only one of the modes. 25862306a36Sopenharmony_ci* A compiler warning or error will be generated if the DAP implementation 25962306a36Sopenharmony_ci* overrides or cannot handle the mode defined below. 26062306a36Sopenharmony_ci*/ 26162306a36Sopenharmony_ci#ifndef DRXDAP_SINGLE_MASTER 26262306a36Sopenharmony_ci#define DRXDAP_SINGLE_MASTER 1 26362306a36Sopenharmony_ci#endif 26462306a36Sopenharmony_ci 26562306a36Sopenharmony_ci/* 26662306a36Sopenharmony_ci* \def DRXDAP_MAX_WCHUNKSIZE 26762306a36Sopenharmony_ci* \brief Defines maximum chunksize of an i2c write action by host. 26862306a36Sopenharmony_ci* 26962306a36Sopenharmony_ci* This indicates the maximum size of data the I2C device driver is able to 27062306a36Sopenharmony_ci* write at a time. This includes I2C device address and register addressing. 27162306a36Sopenharmony_ci* 27262306a36Sopenharmony_ci* This maximum size may be restricted by the actual DAP implementation. 27362306a36Sopenharmony_ci* A compiler warning or error will be generated if the DAP implementation 27462306a36Sopenharmony_ci* overrides or cannot handle the chunksize defined below. 27562306a36Sopenharmony_ci* 27662306a36Sopenharmony_ci* Beware that the DAP uses DRXDAP_MAX_WCHUNKSIZE to create a temporary data 27762306a36Sopenharmony_ci* buffer. Do not undefine or choose too large, unless your system is able to 27862306a36Sopenharmony_ci* handle a stack buffer of that size. 27962306a36Sopenharmony_ci* 28062306a36Sopenharmony_ci*/ 28162306a36Sopenharmony_ci#ifndef DRXDAP_MAX_WCHUNKSIZE 28262306a36Sopenharmony_ci#define DRXDAP_MAX_WCHUNKSIZE 60 28362306a36Sopenharmony_ci#endif 28462306a36Sopenharmony_ci 28562306a36Sopenharmony_ci/* 28662306a36Sopenharmony_ci* \def DRXDAP_MAX_RCHUNKSIZE 28762306a36Sopenharmony_ci* \brief Defines maximum chunksize of an i2c read action by host. 28862306a36Sopenharmony_ci* 28962306a36Sopenharmony_ci* This indicates the maximum size of data the I2C device driver is able to read 29062306a36Sopenharmony_ci* at a time. Minimum value is 2. Also, the read chunk size must be even. 29162306a36Sopenharmony_ci* 29262306a36Sopenharmony_ci* This maximum size may be restricted by the actual DAP implementation. 29362306a36Sopenharmony_ci* A compiler warning or error will be generated if the DAP implementation 29462306a36Sopenharmony_ci* overrides or cannot handle the chunksize defined below. 29562306a36Sopenharmony_ci*/ 29662306a36Sopenharmony_ci#ifndef DRXDAP_MAX_RCHUNKSIZE 29762306a36Sopenharmony_ci#define DRXDAP_MAX_RCHUNKSIZE 60 29862306a36Sopenharmony_ci#endif 29962306a36Sopenharmony_ci 30062306a36Sopenharmony_ci/************* 30162306a36Sopenharmony_ci* 30262306a36Sopenharmony_ci* This section describes drxdriver defines. 30362306a36Sopenharmony_ci* 30462306a36Sopenharmony_ci**************/ 30562306a36Sopenharmony_ci 30662306a36Sopenharmony_ci/* 30762306a36Sopenharmony_ci* \def DRX_UNKNOWN 30862306a36Sopenharmony_ci* \brief Generic UNKNOWN value for DRX enumerated types. 30962306a36Sopenharmony_ci* 31062306a36Sopenharmony_ci* Used to indicate that the parameter value is unknown or not yet initialized. 31162306a36Sopenharmony_ci*/ 31262306a36Sopenharmony_ci#ifndef DRX_UNKNOWN 31362306a36Sopenharmony_ci#define DRX_UNKNOWN (254) 31462306a36Sopenharmony_ci#endif 31562306a36Sopenharmony_ci 31662306a36Sopenharmony_ci/* 31762306a36Sopenharmony_ci* \def DRX_AUTO 31862306a36Sopenharmony_ci* \brief Generic AUTO value for DRX enumerated types. 31962306a36Sopenharmony_ci* 32062306a36Sopenharmony_ci* Used to instruct the driver to automatically determine the value of the 32162306a36Sopenharmony_ci* parameter. 32262306a36Sopenharmony_ci*/ 32362306a36Sopenharmony_ci#ifndef DRX_AUTO 32462306a36Sopenharmony_ci#define DRX_AUTO (255) 32562306a36Sopenharmony_ci#endif 32662306a36Sopenharmony_ci 32762306a36Sopenharmony_ci/************* 32862306a36Sopenharmony_ci* 32962306a36Sopenharmony_ci* This section describes flag definitions for the device capbilities. 33062306a36Sopenharmony_ci* 33162306a36Sopenharmony_ci**************/ 33262306a36Sopenharmony_ci 33362306a36Sopenharmony_ci/* 33462306a36Sopenharmony_ci* \brief LNA capability flag 33562306a36Sopenharmony_ci* 33662306a36Sopenharmony_ci* Device has a Low Noise Amplifier 33762306a36Sopenharmony_ci* 33862306a36Sopenharmony_ci*/ 33962306a36Sopenharmony_ci#define DRX_CAPABILITY_HAS_LNA (1UL << 0) 34062306a36Sopenharmony_ci/* 34162306a36Sopenharmony_ci* \brief OOB-RX capability flag 34262306a36Sopenharmony_ci* 34362306a36Sopenharmony_ci* Device has OOB-RX 34462306a36Sopenharmony_ci* 34562306a36Sopenharmony_ci*/ 34662306a36Sopenharmony_ci#define DRX_CAPABILITY_HAS_OOBRX (1UL << 1) 34762306a36Sopenharmony_ci/* 34862306a36Sopenharmony_ci* \brief ATV capability flag 34962306a36Sopenharmony_ci* 35062306a36Sopenharmony_ci* Device has ATV 35162306a36Sopenharmony_ci* 35262306a36Sopenharmony_ci*/ 35362306a36Sopenharmony_ci#define DRX_CAPABILITY_HAS_ATV (1UL << 2) 35462306a36Sopenharmony_ci/* 35562306a36Sopenharmony_ci* \brief DVB-T capability flag 35662306a36Sopenharmony_ci* 35762306a36Sopenharmony_ci* Device has DVB-T 35862306a36Sopenharmony_ci* 35962306a36Sopenharmony_ci*/ 36062306a36Sopenharmony_ci#define DRX_CAPABILITY_HAS_DVBT (1UL << 3) 36162306a36Sopenharmony_ci/* 36262306a36Sopenharmony_ci* \brief ITU-B capability flag 36362306a36Sopenharmony_ci* 36462306a36Sopenharmony_ci* Device has ITU-B 36562306a36Sopenharmony_ci* 36662306a36Sopenharmony_ci*/ 36762306a36Sopenharmony_ci#define DRX_CAPABILITY_HAS_ITUB (1UL << 4) 36862306a36Sopenharmony_ci/* 36962306a36Sopenharmony_ci* \brief Audio capability flag 37062306a36Sopenharmony_ci* 37162306a36Sopenharmony_ci* Device has Audio 37262306a36Sopenharmony_ci* 37362306a36Sopenharmony_ci*/ 37462306a36Sopenharmony_ci#define DRX_CAPABILITY_HAS_AUD (1UL << 5) 37562306a36Sopenharmony_ci/* 37662306a36Sopenharmony_ci* \brief SAW switch capability flag 37762306a36Sopenharmony_ci* 37862306a36Sopenharmony_ci* Device has SAW switch 37962306a36Sopenharmony_ci* 38062306a36Sopenharmony_ci*/ 38162306a36Sopenharmony_ci#define DRX_CAPABILITY_HAS_SAWSW (1UL << 6) 38262306a36Sopenharmony_ci/* 38362306a36Sopenharmony_ci* \brief GPIO1 capability flag 38462306a36Sopenharmony_ci* 38562306a36Sopenharmony_ci* Device has GPIO1 38662306a36Sopenharmony_ci* 38762306a36Sopenharmony_ci*/ 38862306a36Sopenharmony_ci#define DRX_CAPABILITY_HAS_GPIO1 (1UL << 7) 38962306a36Sopenharmony_ci/* 39062306a36Sopenharmony_ci* \brief GPIO2 capability flag 39162306a36Sopenharmony_ci* 39262306a36Sopenharmony_ci* Device has GPIO2 39362306a36Sopenharmony_ci* 39462306a36Sopenharmony_ci*/ 39562306a36Sopenharmony_ci#define DRX_CAPABILITY_HAS_GPIO2 (1UL << 8) 39662306a36Sopenharmony_ci/* 39762306a36Sopenharmony_ci* \brief IRQN capability flag 39862306a36Sopenharmony_ci* 39962306a36Sopenharmony_ci* Device has IRQN 40062306a36Sopenharmony_ci* 40162306a36Sopenharmony_ci*/ 40262306a36Sopenharmony_ci#define DRX_CAPABILITY_HAS_IRQN (1UL << 9) 40362306a36Sopenharmony_ci/* 40462306a36Sopenharmony_ci* \brief 8VSB capability flag 40562306a36Sopenharmony_ci* 40662306a36Sopenharmony_ci* Device has 8VSB 40762306a36Sopenharmony_ci* 40862306a36Sopenharmony_ci*/ 40962306a36Sopenharmony_ci#define DRX_CAPABILITY_HAS_8VSB (1UL << 10) 41062306a36Sopenharmony_ci/* 41162306a36Sopenharmony_ci* \brief SMA-TX capability flag 41262306a36Sopenharmony_ci* 41362306a36Sopenharmony_ci* Device has SMATX 41462306a36Sopenharmony_ci* 41562306a36Sopenharmony_ci*/ 41662306a36Sopenharmony_ci#define DRX_CAPABILITY_HAS_SMATX (1UL << 11) 41762306a36Sopenharmony_ci/* 41862306a36Sopenharmony_ci* \brief SMA-RX capability flag 41962306a36Sopenharmony_ci* 42062306a36Sopenharmony_ci* Device has SMARX 42162306a36Sopenharmony_ci* 42262306a36Sopenharmony_ci*/ 42362306a36Sopenharmony_ci#define DRX_CAPABILITY_HAS_SMARX (1UL << 12) 42462306a36Sopenharmony_ci/* 42562306a36Sopenharmony_ci* \brief ITU-A/C capability flag 42662306a36Sopenharmony_ci* 42762306a36Sopenharmony_ci* Device has ITU-A/C 42862306a36Sopenharmony_ci* 42962306a36Sopenharmony_ci*/ 43062306a36Sopenharmony_ci#define DRX_CAPABILITY_HAS_ITUAC (1UL << 13) 43162306a36Sopenharmony_ci 43262306a36Sopenharmony_ci/*------------------------------------------------------------------------- 43362306a36Sopenharmony_ciMACROS 43462306a36Sopenharmony_ci-------------------------------------------------------------------------*/ 43562306a36Sopenharmony_ci/* Macros to stringify the version number */ 43662306a36Sopenharmony_ci#define DRX_VERSIONSTRING(MAJOR, MINOR, PATCH) \ 43762306a36Sopenharmony_ci DRX_VERSIONSTRING_HELP(MAJOR)"." \ 43862306a36Sopenharmony_ci DRX_VERSIONSTRING_HELP(MINOR)"." \ 43962306a36Sopenharmony_ci DRX_VERSIONSTRING_HELP(PATCH) 44062306a36Sopenharmony_ci#define DRX_VERSIONSTRING_HELP(NUM) #NUM 44162306a36Sopenharmony_ci 44262306a36Sopenharmony_ci/* 44362306a36Sopenharmony_ci* \brief Macro to create byte array elements from 16 bit integers. 44462306a36Sopenharmony_ci* This macro is used to create byte arrays for block writes. 44562306a36Sopenharmony_ci* Block writes speed up I2C traffic between host and demod. 44662306a36Sopenharmony_ci* The macro takes care of the required byte order in a 16 bits word. 44762306a36Sopenharmony_ci* x->lowbyte(x), highbyte(x) 44862306a36Sopenharmony_ci*/ 44962306a36Sopenharmony_ci#define DRX_16TO8(x) ((u8) (((u16)x) & 0xFF)), \ 45062306a36Sopenharmony_ci ((u8)((((u16)x)>>8)&0xFF)) 45162306a36Sopenharmony_ci 45262306a36Sopenharmony_ci/* 45362306a36Sopenharmony_ci* \brief Macro to convert 16 bit register value to a s32 45462306a36Sopenharmony_ci*/ 45562306a36Sopenharmony_ci#define DRX_U16TODRXFREQ(x) ((x & 0x8000) ? \ 45662306a36Sopenharmony_ci ((s32) \ 45762306a36Sopenharmony_ci (((u32) x) | 0xFFFF0000)) : \ 45862306a36Sopenharmony_ci ((s32) x)) 45962306a36Sopenharmony_ci 46062306a36Sopenharmony_ci/*------------------------------------------------------------------------- 46162306a36Sopenharmony_ciENUM 46262306a36Sopenharmony_ci-------------------------------------------------------------------------*/ 46362306a36Sopenharmony_ci 46462306a36Sopenharmony_ci/* 46562306a36Sopenharmony_ci* \enum enum drx_standard 46662306a36Sopenharmony_ci* \brief Modulation standards. 46762306a36Sopenharmony_ci*/ 46862306a36Sopenharmony_cienum drx_standard { 46962306a36Sopenharmony_ci DRX_STANDARD_DVBT = 0, /*< Terrestrial DVB-T. */ 47062306a36Sopenharmony_ci DRX_STANDARD_8VSB, /*< Terrestrial 8VSB. */ 47162306a36Sopenharmony_ci DRX_STANDARD_NTSC, /*< Terrestrial\Cable analog NTSC. */ 47262306a36Sopenharmony_ci DRX_STANDARD_PAL_SECAM_BG, 47362306a36Sopenharmony_ci /*< Terrestrial analog PAL/SECAM B/G */ 47462306a36Sopenharmony_ci DRX_STANDARD_PAL_SECAM_DK, 47562306a36Sopenharmony_ci /*< Terrestrial analog PAL/SECAM D/K */ 47662306a36Sopenharmony_ci DRX_STANDARD_PAL_SECAM_I, 47762306a36Sopenharmony_ci /*< Terrestrial analog PAL/SECAM I */ 47862306a36Sopenharmony_ci DRX_STANDARD_PAL_SECAM_L, 47962306a36Sopenharmony_ci /*< Terrestrial analog PAL/SECAM L 48062306a36Sopenharmony_ci with negative modulation */ 48162306a36Sopenharmony_ci DRX_STANDARD_PAL_SECAM_LP, 48262306a36Sopenharmony_ci /*< Terrestrial analog PAL/SECAM L 48362306a36Sopenharmony_ci with positive modulation */ 48462306a36Sopenharmony_ci DRX_STANDARD_ITU_A, /*< Cable ITU ANNEX A. */ 48562306a36Sopenharmony_ci DRX_STANDARD_ITU_B, /*< Cable ITU ANNEX B. */ 48662306a36Sopenharmony_ci DRX_STANDARD_ITU_C, /*< Cable ITU ANNEX C. */ 48762306a36Sopenharmony_ci DRX_STANDARD_ITU_D, /*< Cable ITU ANNEX D. */ 48862306a36Sopenharmony_ci DRX_STANDARD_FM, /*< Terrestrial\Cable FM radio */ 48962306a36Sopenharmony_ci DRX_STANDARD_DTMB, /*< Terrestrial DTMB standard (China)*/ 49062306a36Sopenharmony_ci DRX_STANDARD_UNKNOWN = DRX_UNKNOWN, 49162306a36Sopenharmony_ci /*< Standard unknown. */ 49262306a36Sopenharmony_ci DRX_STANDARD_AUTO = DRX_AUTO 49362306a36Sopenharmony_ci /*< Autodetect standard. */ 49462306a36Sopenharmony_ci}; 49562306a36Sopenharmony_ci 49662306a36Sopenharmony_ci/* 49762306a36Sopenharmony_ci* \enum enum drx_standard 49862306a36Sopenharmony_ci* \brief Modulation sub-standards. 49962306a36Sopenharmony_ci*/ 50062306a36Sopenharmony_cienum drx_substandard { 50162306a36Sopenharmony_ci DRX_SUBSTANDARD_MAIN = 0, /*< Main subvariant of standard */ 50262306a36Sopenharmony_ci DRX_SUBSTANDARD_ATV_BG_SCANDINAVIA, 50362306a36Sopenharmony_ci DRX_SUBSTANDARD_ATV_DK_POLAND, 50462306a36Sopenharmony_ci DRX_SUBSTANDARD_ATV_DK_CHINA, 50562306a36Sopenharmony_ci DRX_SUBSTANDARD_UNKNOWN = DRX_UNKNOWN, 50662306a36Sopenharmony_ci /*< Sub-standard unknown. */ 50762306a36Sopenharmony_ci DRX_SUBSTANDARD_AUTO = DRX_AUTO 50862306a36Sopenharmony_ci /*< Auto (default) sub-standard */ 50962306a36Sopenharmony_ci}; 51062306a36Sopenharmony_ci 51162306a36Sopenharmony_ci/* 51262306a36Sopenharmony_ci* \enum enum drx_bandwidth 51362306a36Sopenharmony_ci* \brief Channel bandwidth or channel spacing. 51462306a36Sopenharmony_ci*/ 51562306a36Sopenharmony_cienum drx_bandwidth { 51662306a36Sopenharmony_ci DRX_BANDWIDTH_8MHZ = 0, /*< Bandwidth 8 MHz. */ 51762306a36Sopenharmony_ci DRX_BANDWIDTH_7MHZ, /*< Bandwidth 7 MHz. */ 51862306a36Sopenharmony_ci DRX_BANDWIDTH_6MHZ, /*< Bandwidth 6 MHz. */ 51962306a36Sopenharmony_ci DRX_BANDWIDTH_UNKNOWN = DRX_UNKNOWN, 52062306a36Sopenharmony_ci /*< Bandwidth unknown. */ 52162306a36Sopenharmony_ci DRX_BANDWIDTH_AUTO = DRX_AUTO 52262306a36Sopenharmony_ci /*< Auto Set Bandwidth */ 52362306a36Sopenharmony_ci}; 52462306a36Sopenharmony_ci 52562306a36Sopenharmony_ci/* 52662306a36Sopenharmony_ci* \enum enum drx_mirror 52762306a36Sopenharmony_ci* \brief Indicate if channel spectrum is mirrored or not. 52862306a36Sopenharmony_ci*/ 52962306a36Sopenharmony_cienum drx_mirror { 53062306a36Sopenharmony_ci DRX_MIRROR_NO = 0, /*< Spectrum is not mirrored. */ 53162306a36Sopenharmony_ci DRX_MIRROR_YES, /*< Spectrum is mirrored. */ 53262306a36Sopenharmony_ci DRX_MIRROR_UNKNOWN = DRX_UNKNOWN, 53362306a36Sopenharmony_ci /*< Unknown if spectrum is mirrored. */ 53462306a36Sopenharmony_ci DRX_MIRROR_AUTO = DRX_AUTO 53562306a36Sopenharmony_ci /*< Autodetect if spectrum is mirrored. */ 53662306a36Sopenharmony_ci}; 53762306a36Sopenharmony_ci 53862306a36Sopenharmony_ci/* 53962306a36Sopenharmony_ci* \enum enum drx_modulation 54062306a36Sopenharmony_ci* \brief Constellation type of the channel. 54162306a36Sopenharmony_ci*/ 54262306a36Sopenharmony_cienum drx_modulation { 54362306a36Sopenharmony_ci DRX_CONSTELLATION_BPSK = 0, /*< Modulation is BPSK. */ 54462306a36Sopenharmony_ci DRX_CONSTELLATION_QPSK, /*< Constellation is QPSK. */ 54562306a36Sopenharmony_ci DRX_CONSTELLATION_PSK8, /*< Constellation is PSK8. */ 54662306a36Sopenharmony_ci DRX_CONSTELLATION_QAM16, /*< Constellation is QAM16. */ 54762306a36Sopenharmony_ci DRX_CONSTELLATION_QAM32, /*< Constellation is QAM32. */ 54862306a36Sopenharmony_ci DRX_CONSTELLATION_QAM64, /*< Constellation is QAM64. */ 54962306a36Sopenharmony_ci DRX_CONSTELLATION_QAM128, /*< Constellation is QAM128. */ 55062306a36Sopenharmony_ci DRX_CONSTELLATION_QAM256, /*< Constellation is QAM256. */ 55162306a36Sopenharmony_ci DRX_CONSTELLATION_QAM512, /*< Constellation is QAM512. */ 55262306a36Sopenharmony_ci DRX_CONSTELLATION_QAM1024, /*< Constellation is QAM1024. */ 55362306a36Sopenharmony_ci DRX_CONSTELLATION_QPSK_NR, /*< Constellation is QPSK_NR */ 55462306a36Sopenharmony_ci DRX_CONSTELLATION_UNKNOWN = DRX_UNKNOWN, 55562306a36Sopenharmony_ci /*< Constellation unknown. */ 55662306a36Sopenharmony_ci DRX_CONSTELLATION_AUTO = DRX_AUTO 55762306a36Sopenharmony_ci /*< Autodetect constellation. */ 55862306a36Sopenharmony_ci}; 55962306a36Sopenharmony_ci 56062306a36Sopenharmony_ci/* 56162306a36Sopenharmony_ci* \enum enum drx_hierarchy 56262306a36Sopenharmony_ci* \brief Hierarchy of the channel. 56362306a36Sopenharmony_ci*/ 56462306a36Sopenharmony_cienum drx_hierarchy { 56562306a36Sopenharmony_ci DRX_HIERARCHY_NONE = 0, /*< None hierarchical channel. */ 56662306a36Sopenharmony_ci DRX_HIERARCHY_ALPHA1, /*< Hierarchical channel, alpha=1. */ 56762306a36Sopenharmony_ci DRX_HIERARCHY_ALPHA2, /*< Hierarchical channel, alpha=2. */ 56862306a36Sopenharmony_ci DRX_HIERARCHY_ALPHA4, /*< Hierarchical channel, alpha=4. */ 56962306a36Sopenharmony_ci DRX_HIERARCHY_UNKNOWN = DRX_UNKNOWN, 57062306a36Sopenharmony_ci /*< Hierarchy unknown. */ 57162306a36Sopenharmony_ci DRX_HIERARCHY_AUTO = DRX_AUTO 57262306a36Sopenharmony_ci /*< Autodetect hierarchy. */ 57362306a36Sopenharmony_ci}; 57462306a36Sopenharmony_ci 57562306a36Sopenharmony_ci/* 57662306a36Sopenharmony_ci* \enum enum drx_priority 57762306a36Sopenharmony_ci* \brief Channel priority in case of hierarchical transmission. 57862306a36Sopenharmony_ci*/ 57962306a36Sopenharmony_cienum drx_priority { 58062306a36Sopenharmony_ci DRX_PRIORITY_LOW = 0, /*< Low priority channel. */ 58162306a36Sopenharmony_ci DRX_PRIORITY_HIGH, /*< High priority channel. */ 58262306a36Sopenharmony_ci DRX_PRIORITY_UNKNOWN = DRX_UNKNOWN 58362306a36Sopenharmony_ci /*< Priority unknown. */ 58462306a36Sopenharmony_ci}; 58562306a36Sopenharmony_ci 58662306a36Sopenharmony_ci/* 58762306a36Sopenharmony_ci* \enum enum drx_coderate 58862306a36Sopenharmony_ci* \brief Channel priority in case of hierarchical transmission. 58962306a36Sopenharmony_ci*/ 59062306a36Sopenharmony_cienum drx_coderate { 59162306a36Sopenharmony_ci DRX_CODERATE_1DIV2 = 0, /*< Code rate 1/2nd. */ 59262306a36Sopenharmony_ci DRX_CODERATE_2DIV3, /*< Code rate 2/3nd. */ 59362306a36Sopenharmony_ci DRX_CODERATE_3DIV4, /*< Code rate 3/4nd. */ 59462306a36Sopenharmony_ci DRX_CODERATE_5DIV6, /*< Code rate 5/6nd. */ 59562306a36Sopenharmony_ci DRX_CODERATE_7DIV8, /*< Code rate 7/8nd. */ 59662306a36Sopenharmony_ci DRX_CODERATE_UNKNOWN = DRX_UNKNOWN, 59762306a36Sopenharmony_ci /*< Code rate unknown. */ 59862306a36Sopenharmony_ci DRX_CODERATE_AUTO = DRX_AUTO 59962306a36Sopenharmony_ci /*< Autodetect code rate. */ 60062306a36Sopenharmony_ci}; 60162306a36Sopenharmony_ci 60262306a36Sopenharmony_ci/* 60362306a36Sopenharmony_ci* \enum enum drx_guard 60462306a36Sopenharmony_ci* \brief Guard interval of a channel. 60562306a36Sopenharmony_ci*/ 60662306a36Sopenharmony_cienum drx_guard { 60762306a36Sopenharmony_ci DRX_GUARD_1DIV32 = 0, /*< Guard interval 1/32nd. */ 60862306a36Sopenharmony_ci DRX_GUARD_1DIV16, /*< Guard interval 1/16th. */ 60962306a36Sopenharmony_ci DRX_GUARD_1DIV8, /*< Guard interval 1/8th. */ 61062306a36Sopenharmony_ci DRX_GUARD_1DIV4, /*< Guard interval 1/4th. */ 61162306a36Sopenharmony_ci DRX_GUARD_UNKNOWN = DRX_UNKNOWN, 61262306a36Sopenharmony_ci /*< Guard interval unknown. */ 61362306a36Sopenharmony_ci DRX_GUARD_AUTO = DRX_AUTO 61462306a36Sopenharmony_ci /*< Autodetect guard interval. */ 61562306a36Sopenharmony_ci}; 61662306a36Sopenharmony_ci 61762306a36Sopenharmony_ci/* 61862306a36Sopenharmony_ci* \enum enum drx_fft_mode 61962306a36Sopenharmony_ci* \brief FFT mode. 62062306a36Sopenharmony_ci*/ 62162306a36Sopenharmony_cienum drx_fft_mode { 62262306a36Sopenharmony_ci DRX_FFTMODE_2K = 0, /*< 2K FFT mode. */ 62362306a36Sopenharmony_ci DRX_FFTMODE_4K, /*< 4K FFT mode. */ 62462306a36Sopenharmony_ci DRX_FFTMODE_8K, /*< 8K FFT mode. */ 62562306a36Sopenharmony_ci DRX_FFTMODE_UNKNOWN = DRX_UNKNOWN, 62662306a36Sopenharmony_ci /*< FFT mode unknown. */ 62762306a36Sopenharmony_ci DRX_FFTMODE_AUTO = DRX_AUTO 62862306a36Sopenharmony_ci /*< Autodetect FFT mode. */ 62962306a36Sopenharmony_ci}; 63062306a36Sopenharmony_ci 63162306a36Sopenharmony_ci/* 63262306a36Sopenharmony_ci* \enum enum drx_classification 63362306a36Sopenharmony_ci* \brief Channel classification. 63462306a36Sopenharmony_ci*/ 63562306a36Sopenharmony_cienum drx_classification { 63662306a36Sopenharmony_ci DRX_CLASSIFICATION_GAUSS = 0, /*< Gaussion noise. */ 63762306a36Sopenharmony_ci DRX_CLASSIFICATION_HVY_GAUSS, /*< Heavy Gaussion noise. */ 63862306a36Sopenharmony_ci DRX_CLASSIFICATION_COCHANNEL, /*< Co-channel. */ 63962306a36Sopenharmony_ci DRX_CLASSIFICATION_STATIC, /*< Static echo. */ 64062306a36Sopenharmony_ci DRX_CLASSIFICATION_MOVING, /*< Moving echo. */ 64162306a36Sopenharmony_ci DRX_CLASSIFICATION_ZERODB, /*< Zero dB echo. */ 64262306a36Sopenharmony_ci DRX_CLASSIFICATION_UNKNOWN = DRX_UNKNOWN, 64362306a36Sopenharmony_ci /*< Unknown classification */ 64462306a36Sopenharmony_ci DRX_CLASSIFICATION_AUTO = DRX_AUTO 64562306a36Sopenharmony_ci /*< Autodetect classification. */ 64662306a36Sopenharmony_ci}; 64762306a36Sopenharmony_ci 64862306a36Sopenharmony_ci/* 64962306a36Sopenharmony_ci* /enum enum drx_interleave_mode 65062306a36Sopenharmony_ci* /brief Interleave modes 65162306a36Sopenharmony_ci*/ 65262306a36Sopenharmony_cienum drx_interleave_mode { 65362306a36Sopenharmony_ci DRX_INTERLEAVEMODE_I128_J1 = 0, 65462306a36Sopenharmony_ci DRX_INTERLEAVEMODE_I128_J1_V2, 65562306a36Sopenharmony_ci DRX_INTERLEAVEMODE_I128_J2, 65662306a36Sopenharmony_ci DRX_INTERLEAVEMODE_I64_J2, 65762306a36Sopenharmony_ci DRX_INTERLEAVEMODE_I128_J3, 65862306a36Sopenharmony_ci DRX_INTERLEAVEMODE_I32_J4, 65962306a36Sopenharmony_ci DRX_INTERLEAVEMODE_I128_J4, 66062306a36Sopenharmony_ci DRX_INTERLEAVEMODE_I16_J8, 66162306a36Sopenharmony_ci DRX_INTERLEAVEMODE_I128_J5, 66262306a36Sopenharmony_ci DRX_INTERLEAVEMODE_I8_J16, 66362306a36Sopenharmony_ci DRX_INTERLEAVEMODE_I128_J6, 66462306a36Sopenharmony_ci DRX_INTERLEAVEMODE_RESERVED_11, 66562306a36Sopenharmony_ci DRX_INTERLEAVEMODE_I128_J7, 66662306a36Sopenharmony_ci DRX_INTERLEAVEMODE_RESERVED_13, 66762306a36Sopenharmony_ci DRX_INTERLEAVEMODE_I128_J8, 66862306a36Sopenharmony_ci DRX_INTERLEAVEMODE_RESERVED_15, 66962306a36Sopenharmony_ci DRX_INTERLEAVEMODE_I12_J17, 67062306a36Sopenharmony_ci DRX_INTERLEAVEMODE_I5_J4, 67162306a36Sopenharmony_ci DRX_INTERLEAVEMODE_B52_M240, 67262306a36Sopenharmony_ci DRX_INTERLEAVEMODE_B52_M720, 67362306a36Sopenharmony_ci DRX_INTERLEAVEMODE_B52_M48, 67462306a36Sopenharmony_ci DRX_INTERLEAVEMODE_B52_M0, 67562306a36Sopenharmony_ci DRX_INTERLEAVEMODE_UNKNOWN = DRX_UNKNOWN, 67662306a36Sopenharmony_ci /*< Unknown interleave mode */ 67762306a36Sopenharmony_ci DRX_INTERLEAVEMODE_AUTO = DRX_AUTO 67862306a36Sopenharmony_ci /*< Autodetect interleave mode */ 67962306a36Sopenharmony_ci}; 68062306a36Sopenharmony_ci 68162306a36Sopenharmony_ci/* 68262306a36Sopenharmony_ci* \enum enum drx_carrier_mode 68362306a36Sopenharmony_ci* \brief Channel Carrier Mode. 68462306a36Sopenharmony_ci*/ 68562306a36Sopenharmony_cienum drx_carrier_mode { 68662306a36Sopenharmony_ci DRX_CARRIER_MULTI = 0, /*< Multi carrier mode */ 68762306a36Sopenharmony_ci DRX_CARRIER_SINGLE, /*< Single carrier mode */ 68862306a36Sopenharmony_ci DRX_CARRIER_UNKNOWN = DRX_UNKNOWN, 68962306a36Sopenharmony_ci /*< Carrier mode unknown. */ 69062306a36Sopenharmony_ci DRX_CARRIER_AUTO = DRX_AUTO /*< Autodetect carrier mode */ 69162306a36Sopenharmony_ci}; 69262306a36Sopenharmony_ci 69362306a36Sopenharmony_ci/* 69462306a36Sopenharmony_ci* \enum enum drx_frame_mode 69562306a36Sopenharmony_ci* \brief Channel Frame Mode. 69662306a36Sopenharmony_ci*/ 69762306a36Sopenharmony_cienum drx_frame_mode { 69862306a36Sopenharmony_ci DRX_FRAMEMODE_420 = 0, /*< 420 with variable PN */ 69962306a36Sopenharmony_ci DRX_FRAMEMODE_595, /*< 595 */ 70062306a36Sopenharmony_ci DRX_FRAMEMODE_945, /*< 945 with variable PN */ 70162306a36Sopenharmony_ci DRX_FRAMEMODE_420_FIXED_PN, 70262306a36Sopenharmony_ci /*< 420 with fixed PN */ 70362306a36Sopenharmony_ci DRX_FRAMEMODE_945_FIXED_PN, 70462306a36Sopenharmony_ci /*< 945 with fixed PN */ 70562306a36Sopenharmony_ci DRX_FRAMEMODE_UNKNOWN = DRX_UNKNOWN, 70662306a36Sopenharmony_ci /*< Frame mode unknown. */ 70762306a36Sopenharmony_ci DRX_FRAMEMODE_AUTO = DRX_AUTO 70862306a36Sopenharmony_ci /*< Autodetect frame mode */ 70962306a36Sopenharmony_ci}; 71062306a36Sopenharmony_ci 71162306a36Sopenharmony_ci/* 71262306a36Sopenharmony_ci* \enum enum drx_tps_frame 71362306a36Sopenharmony_ci* \brief Frame number in current super-frame. 71462306a36Sopenharmony_ci*/ 71562306a36Sopenharmony_cienum drx_tps_frame { 71662306a36Sopenharmony_ci DRX_TPS_FRAME1 = 0, /*< TPS frame 1. */ 71762306a36Sopenharmony_ci DRX_TPS_FRAME2, /*< TPS frame 2. */ 71862306a36Sopenharmony_ci DRX_TPS_FRAME3, /*< TPS frame 3. */ 71962306a36Sopenharmony_ci DRX_TPS_FRAME4, /*< TPS frame 4. */ 72062306a36Sopenharmony_ci DRX_TPS_FRAME_UNKNOWN = DRX_UNKNOWN 72162306a36Sopenharmony_ci /*< TPS frame unknown. */ 72262306a36Sopenharmony_ci}; 72362306a36Sopenharmony_ci 72462306a36Sopenharmony_ci/* 72562306a36Sopenharmony_ci* \enum enum drx_ldpc 72662306a36Sopenharmony_ci* \brief TPS LDPC . 72762306a36Sopenharmony_ci*/ 72862306a36Sopenharmony_cienum drx_ldpc { 72962306a36Sopenharmony_ci DRX_LDPC_0_4 = 0, /*< LDPC 0.4 */ 73062306a36Sopenharmony_ci DRX_LDPC_0_6, /*< LDPC 0.6 */ 73162306a36Sopenharmony_ci DRX_LDPC_0_8, /*< LDPC 0.8 */ 73262306a36Sopenharmony_ci DRX_LDPC_UNKNOWN = DRX_UNKNOWN, 73362306a36Sopenharmony_ci /*< LDPC unknown. */ 73462306a36Sopenharmony_ci DRX_LDPC_AUTO = DRX_AUTO /*< Autodetect LDPC */ 73562306a36Sopenharmony_ci}; 73662306a36Sopenharmony_ci 73762306a36Sopenharmony_ci/* 73862306a36Sopenharmony_ci* \enum enum drx_pilot_mode 73962306a36Sopenharmony_ci* \brief Pilot modes in DTMB. 74062306a36Sopenharmony_ci*/ 74162306a36Sopenharmony_cienum drx_pilot_mode { 74262306a36Sopenharmony_ci DRX_PILOT_ON = 0, /*< Pilot On */ 74362306a36Sopenharmony_ci DRX_PILOT_OFF, /*< Pilot Off */ 74462306a36Sopenharmony_ci DRX_PILOT_UNKNOWN = DRX_UNKNOWN, 74562306a36Sopenharmony_ci /*< Pilot unknown. */ 74662306a36Sopenharmony_ci DRX_PILOT_AUTO = DRX_AUTO /*< Autodetect Pilot */ 74762306a36Sopenharmony_ci}; 74862306a36Sopenharmony_ci 74962306a36Sopenharmony_ci/* 75062306a36Sopenharmony_ci * enum drxu_code_action - indicate if firmware has to be uploaded or verified. 75162306a36Sopenharmony_ci * @UCODE_UPLOAD: Upload the microcode image to device 75262306a36Sopenharmony_ci * @UCODE_VERIFY: Compare microcode image with code on device 75362306a36Sopenharmony_ci */ 75462306a36Sopenharmony_cienum drxu_code_action { 75562306a36Sopenharmony_ci UCODE_UPLOAD, 75662306a36Sopenharmony_ci UCODE_VERIFY 75762306a36Sopenharmony_ci}; 75862306a36Sopenharmony_ci 75962306a36Sopenharmony_ci/* 76062306a36Sopenharmony_ci* \enum enum drx_lock_status * \brief Used to reflect current lock status of demodulator. 76162306a36Sopenharmony_ci* 76262306a36Sopenharmony_ci* The generic lock states have device dependent semantics. 76362306a36Sopenharmony_ci 76462306a36Sopenharmony_ci DRX_NEVER_LOCK = 0, 76562306a36Sopenharmony_ci **< Device will never lock on this signal * 76662306a36Sopenharmony_ci DRX_NOT_LOCKED, 76762306a36Sopenharmony_ci **< Device has no lock at all * 76862306a36Sopenharmony_ci DRX_LOCK_STATE_1, 76962306a36Sopenharmony_ci **< Generic lock state * 77062306a36Sopenharmony_ci DRX_LOCK_STATE_2, 77162306a36Sopenharmony_ci **< Generic lock state * 77262306a36Sopenharmony_ci DRX_LOCK_STATE_3, 77362306a36Sopenharmony_ci **< Generic lock state * 77462306a36Sopenharmony_ci DRX_LOCK_STATE_4, 77562306a36Sopenharmony_ci **< Generic lock state * 77662306a36Sopenharmony_ci DRX_LOCK_STATE_5, 77762306a36Sopenharmony_ci **< Generic lock state * 77862306a36Sopenharmony_ci DRX_LOCK_STATE_6, 77962306a36Sopenharmony_ci **< Generic lock state * 78062306a36Sopenharmony_ci DRX_LOCK_STATE_7, 78162306a36Sopenharmony_ci **< Generic lock state * 78262306a36Sopenharmony_ci DRX_LOCK_STATE_8, 78362306a36Sopenharmony_ci **< Generic lock state * 78462306a36Sopenharmony_ci DRX_LOCK_STATE_9, 78562306a36Sopenharmony_ci **< Generic lock state * 78662306a36Sopenharmony_ci DRX_LOCKED **< Device is in lock * 78762306a36Sopenharmony_ci*/ 78862306a36Sopenharmony_ci 78962306a36Sopenharmony_cienum drx_lock_status { 79062306a36Sopenharmony_ci DRX_NEVER_LOCK = 0, 79162306a36Sopenharmony_ci DRX_NOT_LOCKED, 79262306a36Sopenharmony_ci DRX_LOCK_STATE_1, 79362306a36Sopenharmony_ci DRX_LOCK_STATE_2, 79462306a36Sopenharmony_ci DRX_LOCK_STATE_3, 79562306a36Sopenharmony_ci DRX_LOCK_STATE_4, 79662306a36Sopenharmony_ci DRX_LOCK_STATE_5, 79762306a36Sopenharmony_ci DRX_LOCK_STATE_6, 79862306a36Sopenharmony_ci DRX_LOCK_STATE_7, 79962306a36Sopenharmony_ci DRX_LOCK_STATE_8, 80062306a36Sopenharmony_ci DRX_LOCK_STATE_9, 80162306a36Sopenharmony_ci DRX_LOCKED 80262306a36Sopenharmony_ci}; 80362306a36Sopenharmony_ci 80462306a36Sopenharmony_ci/* 80562306a36Sopenharmony_ci* \enum enum drx_uio* \brief Used to address a User IO (UIO). 80662306a36Sopenharmony_ci*/ 80762306a36Sopenharmony_cienum drx_uio { 80862306a36Sopenharmony_ci DRX_UIO1, 80962306a36Sopenharmony_ci DRX_UIO2, 81062306a36Sopenharmony_ci DRX_UIO3, 81162306a36Sopenharmony_ci DRX_UIO4, 81262306a36Sopenharmony_ci DRX_UIO5, 81362306a36Sopenharmony_ci DRX_UIO6, 81462306a36Sopenharmony_ci DRX_UIO7, 81562306a36Sopenharmony_ci DRX_UIO8, 81662306a36Sopenharmony_ci DRX_UIO9, 81762306a36Sopenharmony_ci DRX_UIO10, 81862306a36Sopenharmony_ci DRX_UIO11, 81962306a36Sopenharmony_ci DRX_UIO12, 82062306a36Sopenharmony_ci DRX_UIO13, 82162306a36Sopenharmony_ci DRX_UIO14, 82262306a36Sopenharmony_ci DRX_UIO15, 82362306a36Sopenharmony_ci DRX_UIO16, 82462306a36Sopenharmony_ci DRX_UIO17, 82562306a36Sopenharmony_ci DRX_UIO18, 82662306a36Sopenharmony_ci DRX_UIO19, 82762306a36Sopenharmony_ci DRX_UIO20, 82862306a36Sopenharmony_ci DRX_UIO21, 82962306a36Sopenharmony_ci DRX_UIO22, 83062306a36Sopenharmony_ci DRX_UIO23, 83162306a36Sopenharmony_ci DRX_UIO24, 83262306a36Sopenharmony_ci DRX_UIO25, 83362306a36Sopenharmony_ci DRX_UIO26, 83462306a36Sopenharmony_ci DRX_UIO27, 83562306a36Sopenharmony_ci DRX_UIO28, 83662306a36Sopenharmony_ci DRX_UIO29, 83762306a36Sopenharmony_ci DRX_UIO30, 83862306a36Sopenharmony_ci DRX_UIO31, 83962306a36Sopenharmony_ci DRX_UIO32, 84062306a36Sopenharmony_ci DRX_UIO_MAX = DRX_UIO32 84162306a36Sopenharmony_ci}; 84262306a36Sopenharmony_ci 84362306a36Sopenharmony_ci/* 84462306a36Sopenharmony_ci* \enum enum drxuio_mode * \brief Used to configure the modus oprandi of a UIO. 84562306a36Sopenharmony_ci* 84662306a36Sopenharmony_ci* DRX_UIO_MODE_FIRMWARE is an old uio mode. 84762306a36Sopenharmony_ci* It is replaced by the modes DRX_UIO_MODE_FIRMWARE0 .. DRX_UIO_MODE_FIRMWARE9. 84862306a36Sopenharmony_ci* To be backward compatible DRX_UIO_MODE_FIRMWARE is equivalent to 84962306a36Sopenharmony_ci* DRX_UIO_MODE_FIRMWARE0. 85062306a36Sopenharmony_ci*/ 85162306a36Sopenharmony_cienum drxuio_mode { 85262306a36Sopenharmony_ci DRX_UIO_MODE_DISABLE = 0x01, 85362306a36Sopenharmony_ci /*< not used, pin is configured as input */ 85462306a36Sopenharmony_ci DRX_UIO_MODE_READWRITE = 0x02, 85562306a36Sopenharmony_ci /*< used for read/write by application */ 85662306a36Sopenharmony_ci DRX_UIO_MODE_FIRMWARE = 0x04, 85762306a36Sopenharmony_ci /*< controlled by firmware, function 0 */ 85862306a36Sopenharmony_ci DRX_UIO_MODE_FIRMWARE0 = DRX_UIO_MODE_FIRMWARE, 85962306a36Sopenharmony_ci /*< same as above */ 86062306a36Sopenharmony_ci DRX_UIO_MODE_FIRMWARE1 = 0x08, 86162306a36Sopenharmony_ci /*< controlled by firmware, function 1 */ 86262306a36Sopenharmony_ci DRX_UIO_MODE_FIRMWARE2 = 0x10, 86362306a36Sopenharmony_ci /*< controlled by firmware, function 2 */ 86462306a36Sopenharmony_ci DRX_UIO_MODE_FIRMWARE3 = 0x20, 86562306a36Sopenharmony_ci /*< controlled by firmware, function 3 */ 86662306a36Sopenharmony_ci DRX_UIO_MODE_FIRMWARE4 = 0x40, 86762306a36Sopenharmony_ci /*< controlled by firmware, function 4 */ 86862306a36Sopenharmony_ci DRX_UIO_MODE_FIRMWARE5 = 0x80 86962306a36Sopenharmony_ci /*< controlled by firmware, function 5 */ 87062306a36Sopenharmony_ci}; 87162306a36Sopenharmony_ci 87262306a36Sopenharmony_ci/* 87362306a36Sopenharmony_ci* \enum enum drxoob_downstream_standard * \brief Used to select OOB standard. 87462306a36Sopenharmony_ci* 87562306a36Sopenharmony_ci* Based on ANSI 55-1 and 55-2 87662306a36Sopenharmony_ci*/ 87762306a36Sopenharmony_cienum drxoob_downstream_standard { 87862306a36Sopenharmony_ci DRX_OOB_MODE_A = 0, 87962306a36Sopenharmony_ci /*< ANSI 55-1 */ 88062306a36Sopenharmony_ci DRX_OOB_MODE_B_GRADE_A, 88162306a36Sopenharmony_ci /*< ANSI 55-2 A */ 88262306a36Sopenharmony_ci DRX_OOB_MODE_B_GRADE_B 88362306a36Sopenharmony_ci /*< ANSI 55-2 B */ 88462306a36Sopenharmony_ci}; 88562306a36Sopenharmony_ci 88662306a36Sopenharmony_ci/*------------------------------------------------------------------------- 88762306a36Sopenharmony_ciSTRUCTS 88862306a36Sopenharmony_ci-------------------------------------------------------------------------*/ 88962306a36Sopenharmony_ci 89062306a36Sopenharmony_ci/*============================================================================*/ 89162306a36Sopenharmony_ci/*============================================================================*/ 89262306a36Sopenharmony_ci/*== CTRL CFG related data structures ========================================*/ 89362306a36Sopenharmony_ci/*============================================================================*/ 89462306a36Sopenharmony_ci/*============================================================================*/ 89562306a36Sopenharmony_ci 89662306a36Sopenharmony_ci#ifndef DRX_CFG_BASE 89762306a36Sopenharmony_ci#define DRX_CFG_BASE 0 89862306a36Sopenharmony_ci#endif 89962306a36Sopenharmony_ci 90062306a36Sopenharmony_ci#define DRX_CFG_MPEG_OUTPUT (DRX_CFG_BASE + 0) /* MPEG TS output */ 90162306a36Sopenharmony_ci#define DRX_CFG_PKTERR (DRX_CFG_BASE + 1) /* Packet Error */ 90262306a36Sopenharmony_ci#define DRX_CFG_SYMCLK_OFFS (DRX_CFG_BASE + 2) /* Symbol Clk Offset */ 90362306a36Sopenharmony_ci#define DRX_CFG_SMA (DRX_CFG_BASE + 3) /* Smart Antenna */ 90462306a36Sopenharmony_ci#define DRX_CFG_PINSAFE (DRX_CFG_BASE + 4) /* Pin safe mode */ 90562306a36Sopenharmony_ci#define DRX_CFG_SUBSTANDARD (DRX_CFG_BASE + 5) /* substandard */ 90662306a36Sopenharmony_ci#define DRX_CFG_AUD_VOLUME (DRX_CFG_BASE + 6) /* volume */ 90762306a36Sopenharmony_ci#define DRX_CFG_AUD_RDS (DRX_CFG_BASE + 7) /* rds */ 90862306a36Sopenharmony_ci#define DRX_CFG_AUD_AUTOSOUND (DRX_CFG_BASE + 8) /* ASS & ASC */ 90962306a36Sopenharmony_ci#define DRX_CFG_AUD_ASS_THRES (DRX_CFG_BASE + 9) /* ASS Thresholds */ 91062306a36Sopenharmony_ci#define DRX_CFG_AUD_DEVIATION (DRX_CFG_BASE + 10) /* Deviation */ 91162306a36Sopenharmony_ci#define DRX_CFG_AUD_PRESCALE (DRX_CFG_BASE + 11) /* Prescale */ 91262306a36Sopenharmony_ci#define DRX_CFG_AUD_MIXER (DRX_CFG_BASE + 12) /* Mixer */ 91362306a36Sopenharmony_ci#define DRX_CFG_AUD_AVSYNC (DRX_CFG_BASE + 13) /* AVSync */ 91462306a36Sopenharmony_ci#define DRX_CFG_AUD_CARRIER (DRX_CFG_BASE + 14) /* Audio carriers */ 91562306a36Sopenharmony_ci#define DRX_CFG_I2S_OUTPUT (DRX_CFG_BASE + 15) /* I2S output */ 91662306a36Sopenharmony_ci#define DRX_CFG_ATV_STANDARD (DRX_CFG_BASE + 16) /* ATV standard */ 91762306a36Sopenharmony_ci#define DRX_CFG_SQI_SPEED (DRX_CFG_BASE + 17) /* SQI speed */ 91862306a36Sopenharmony_ci#define DRX_CTRL_CFG_MAX (DRX_CFG_BASE + 18) /* never to be used */ 91962306a36Sopenharmony_ci 92062306a36Sopenharmony_ci#define DRX_CFG_PINS_SAFE_MODE DRX_CFG_PINSAFE 92162306a36Sopenharmony_ci/*============================================================================*/ 92262306a36Sopenharmony_ci/*============================================================================*/ 92362306a36Sopenharmony_ci/*== CTRL related data structures ============================================*/ 92462306a36Sopenharmony_ci/*============================================================================*/ 92562306a36Sopenharmony_ci/*============================================================================*/ 92662306a36Sopenharmony_ci 92762306a36Sopenharmony_ci/* 92862306a36Sopenharmony_ci * struct drxu_code_info Parameters for microcode upload and verfiy. 92962306a36Sopenharmony_ci * 93062306a36Sopenharmony_ci * @mc_file: microcode file name 93162306a36Sopenharmony_ci * 93262306a36Sopenharmony_ci * Used by DRX_CTRL_LOAD_UCODE and DRX_CTRL_VERIFY_UCODE 93362306a36Sopenharmony_ci */ 93462306a36Sopenharmony_cistruct drxu_code_info { 93562306a36Sopenharmony_ci char *mc_file; 93662306a36Sopenharmony_ci}; 93762306a36Sopenharmony_ci 93862306a36Sopenharmony_ci/* 93962306a36Sopenharmony_ci* \struct drx_mc_version_rec_t 94062306a36Sopenharmony_ci* \brief Microcode version record 94162306a36Sopenharmony_ci* Version numbers are stored in BCD format, as usual: 94262306a36Sopenharmony_ci* o major number = bits 31-20 (first three nibbles of MSW) 94362306a36Sopenharmony_ci* o minor number = bits 19-16 (fourth nibble of MSW) 94462306a36Sopenharmony_ci* o patch number = bits 15-0 (remaining nibbles in LSW) 94562306a36Sopenharmony_ci* 94662306a36Sopenharmony_ci* The device type indicates for which the device is meant. It is based on the 94762306a36Sopenharmony_ci* JTAG ID, using everything except the bond ID and the metal fix. 94862306a36Sopenharmony_ci* 94962306a36Sopenharmony_ci* Special values: 95062306a36Sopenharmony_ci* - mc_dev_type == 0 => any device allowed 95162306a36Sopenharmony_ci* - mc_base_version == 0.0.0 => full microcode (mc_version is the version) 95262306a36Sopenharmony_ci* - mc_base_version != 0.0.0 => patch microcode, the base microcode version 95362306a36Sopenharmony_ci* (mc_version is the version) 95462306a36Sopenharmony_ci*/ 95562306a36Sopenharmony_ci#define AUX_VER_RECORD 0x8000 95662306a36Sopenharmony_ci 95762306a36Sopenharmony_cistruct drx_mc_version_rec { 95862306a36Sopenharmony_ci u16 aux_type; /* type of aux data - 0x8000 for version record */ 95962306a36Sopenharmony_ci u32 mc_dev_type; /* device type, based on JTAG ID */ 96062306a36Sopenharmony_ci u32 mc_version; /* version of microcode */ 96162306a36Sopenharmony_ci u32 mc_base_version; /* in case of patch: the original microcode version */ 96262306a36Sopenharmony_ci}; 96362306a36Sopenharmony_ci 96462306a36Sopenharmony_ci/*========================================*/ 96562306a36Sopenharmony_ci 96662306a36Sopenharmony_ci/* 96762306a36Sopenharmony_ci* \struct drx_filter_info_t 96862306a36Sopenharmony_ci* \brief Parameters for loading filter coefficients 96962306a36Sopenharmony_ci* 97062306a36Sopenharmony_ci* Used by DRX_CTRL_LOAD_FILTER 97162306a36Sopenharmony_ci*/ 97262306a36Sopenharmony_cistruct drx_filter_info { 97362306a36Sopenharmony_ci u8 *data_re; 97462306a36Sopenharmony_ci /*< pointer to coefficients for RE */ 97562306a36Sopenharmony_ci u8 *data_im; 97662306a36Sopenharmony_ci /*< pointer to coefficients for IM */ 97762306a36Sopenharmony_ci u16 size_re; 97862306a36Sopenharmony_ci /*< size of coefficients for RE */ 97962306a36Sopenharmony_ci u16 size_im; 98062306a36Sopenharmony_ci /*< size of coefficients for IM */ 98162306a36Sopenharmony_ci}; 98262306a36Sopenharmony_ci 98362306a36Sopenharmony_ci/*========================================*/ 98462306a36Sopenharmony_ci 98562306a36Sopenharmony_ci/* 98662306a36Sopenharmony_ci* \struct struct drx_channel * \brief The set of parameters describing a single channel. 98762306a36Sopenharmony_ci* 98862306a36Sopenharmony_ci* Used by DRX_CTRL_SET_CHANNEL and DRX_CTRL_GET_CHANNEL. 98962306a36Sopenharmony_ci* Only certain fields need to be used for a specific standard. 99062306a36Sopenharmony_ci* 99162306a36Sopenharmony_ci*/ 99262306a36Sopenharmony_cistruct drx_channel { 99362306a36Sopenharmony_ci s32 frequency; 99462306a36Sopenharmony_ci /*< frequency in kHz */ 99562306a36Sopenharmony_ci enum drx_bandwidth bandwidth; 99662306a36Sopenharmony_ci /*< bandwidth */ 99762306a36Sopenharmony_ci enum drx_mirror mirror; /*< mirrored or not on RF */ 99862306a36Sopenharmony_ci enum drx_modulation constellation; 99962306a36Sopenharmony_ci /*< constellation */ 100062306a36Sopenharmony_ci enum drx_hierarchy hierarchy; 100162306a36Sopenharmony_ci /*< hierarchy */ 100262306a36Sopenharmony_ci enum drx_priority priority; /*< priority */ 100362306a36Sopenharmony_ci enum drx_coderate coderate; /*< coderate */ 100462306a36Sopenharmony_ci enum drx_guard guard; /*< guard interval */ 100562306a36Sopenharmony_ci enum drx_fft_mode fftmode; /*< fftmode */ 100662306a36Sopenharmony_ci enum drx_classification classification; 100762306a36Sopenharmony_ci /*< classification */ 100862306a36Sopenharmony_ci u32 symbolrate; 100962306a36Sopenharmony_ci /*< symbolrate in symbols/sec */ 101062306a36Sopenharmony_ci enum drx_interleave_mode interleavemode; 101162306a36Sopenharmony_ci /*< interleaveMode QAM */ 101262306a36Sopenharmony_ci enum drx_ldpc ldpc; /*< ldpc */ 101362306a36Sopenharmony_ci enum drx_carrier_mode carrier; /*< carrier */ 101462306a36Sopenharmony_ci enum drx_frame_mode framemode; 101562306a36Sopenharmony_ci /*< frame mode */ 101662306a36Sopenharmony_ci enum drx_pilot_mode pilot; /*< pilot mode */ 101762306a36Sopenharmony_ci}; 101862306a36Sopenharmony_ci 101962306a36Sopenharmony_ci/*========================================*/ 102062306a36Sopenharmony_ci 102162306a36Sopenharmony_cienum drx_cfg_sqi_speed { 102262306a36Sopenharmony_ci DRX_SQI_SPEED_FAST = 0, 102362306a36Sopenharmony_ci DRX_SQI_SPEED_MEDIUM, 102462306a36Sopenharmony_ci DRX_SQI_SPEED_SLOW, 102562306a36Sopenharmony_ci DRX_SQI_SPEED_UNKNOWN = DRX_UNKNOWN 102662306a36Sopenharmony_ci}; 102762306a36Sopenharmony_ci 102862306a36Sopenharmony_ci/*========================================*/ 102962306a36Sopenharmony_ci 103062306a36Sopenharmony_ci/* 103162306a36Sopenharmony_ci* \struct struct drx_complex * A complex number. 103262306a36Sopenharmony_ci* 103362306a36Sopenharmony_ci* Used by DRX_CTRL_CONSTEL. 103462306a36Sopenharmony_ci*/ 103562306a36Sopenharmony_cistruct drx_complex { 103662306a36Sopenharmony_ci s16 im; 103762306a36Sopenharmony_ci /*< Imaginary part. */ 103862306a36Sopenharmony_ci s16 re; 103962306a36Sopenharmony_ci /*< Real part. */ 104062306a36Sopenharmony_ci}; 104162306a36Sopenharmony_ci 104262306a36Sopenharmony_ci/*========================================*/ 104362306a36Sopenharmony_ci 104462306a36Sopenharmony_ci/* 104562306a36Sopenharmony_ci* \struct struct drx_frequency_plan * Array element of a frequency plan. 104662306a36Sopenharmony_ci* 104762306a36Sopenharmony_ci* Used by DRX_CTRL_SCAN_INIT. 104862306a36Sopenharmony_ci*/ 104962306a36Sopenharmony_cistruct drx_frequency_plan { 105062306a36Sopenharmony_ci s32 first; 105162306a36Sopenharmony_ci /*< First centre frequency in this band */ 105262306a36Sopenharmony_ci s32 last; 105362306a36Sopenharmony_ci /*< Last centre frequency in this band */ 105462306a36Sopenharmony_ci s32 step; 105562306a36Sopenharmony_ci /*< Stepping frequency in this band */ 105662306a36Sopenharmony_ci enum drx_bandwidth bandwidth; 105762306a36Sopenharmony_ci /*< Bandwidth within this frequency band */ 105862306a36Sopenharmony_ci u16 ch_number; 105962306a36Sopenharmony_ci /*< First channel number in this band, or first 106062306a36Sopenharmony_ci index in ch_names */ 106162306a36Sopenharmony_ci char **ch_names; 106262306a36Sopenharmony_ci /*< Optional list of channel names in this 106362306a36Sopenharmony_ci band */ 106462306a36Sopenharmony_ci}; 106562306a36Sopenharmony_ci 106662306a36Sopenharmony_ci/*========================================*/ 106762306a36Sopenharmony_ci 106862306a36Sopenharmony_ci/* 106962306a36Sopenharmony_ci* \struct struct drx_scan_param * Parameters for channel scan. 107062306a36Sopenharmony_ci* 107162306a36Sopenharmony_ci* Used by DRX_CTRL_SCAN_INIT. 107262306a36Sopenharmony_ci*/ 107362306a36Sopenharmony_cistruct drx_scan_param { 107462306a36Sopenharmony_ci struct drx_frequency_plan *frequency_plan; 107562306a36Sopenharmony_ci /*< Frequency plan (array)*/ 107662306a36Sopenharmony_ci u16 frequency_plan_size; /*< Number of bands */ 107762306a36Sopenharmony_ci u32 num_tries; /*< Max channels tried */ 107862306a36Sopenharmony_ci s32 skip; /*< Minimum frequency step to take 107962306a36Sopenharmony_ci after a channel is found */ 108062306a36Sopenharmony_ci void *ext_params; /*< Standard specific params */ 108162306a36Sopenharmony_ci}; 108262306a36Sopenharmony_ci 108362306a36Sopenharmony_ci/*========================================*/ 108462306a36Sopenharmony_ci 108562306a36Sopenharmony_ci/* 108662306a36Sopenharmony_ci* \brief Scan commands. 108762306a36Sopenharmony_ci* Used by scanning algorithms. 108862306a36Sopenharmony_ci*/ 108962306a36Sopenharmony_cienum drx_scan_command { 109062306a36Sopenharmony_ci DRX_SCAN_COMMAND_INIT = 0,/*< Initialize scanning */ 109162306a36Sopenharmony_ci DRX_SCAN_COMMAND_NEXT, /*< Next scan */ 109262306a36Sopenharmony_ci DRX_SCAN_COMMAND_STOP /*< Stop scanning */ 109362306a36Sopenharmony_ci}; 109462306a36Sopenharmony_ci 109562306a36Sopenharmony_ci/*========================================*/ 109662306a36Sopenharmony_ci 109762306a36Sopenharmony_ci/* 109862306a36Sopenharmony_ci* \brief Inner scan function prototype. 109962306a36Sopenharmony_ci*/ 110062306a36Sopenharmony_citypedef int(*drx_scan_func_t) (void *scan_context, 110162306a36Sopenharmony_ci enum drx_scan_command scan_command, 110262306a36Sopenharmony_ci struct drx_channel *scan_channel, 110362306a36Sopenharmony_ci bool *get_next_channel); 110462306a36Sopenharmony_ci 110562306a36Sopenharmony_ci/*========================================*/ 110662306a36Sopenharmony_ci 110762306a36Sopenharmony_ci/* 110862306a36Sopenharmony_ci* \struct struct drxtps_info * TPS information, DVB-T specific. 110962306a36Sopenharmony_ci* 111062306a36Sopenharmony_ci* Used by DRX_CTRL_TPS_INFO. 111162306a36Sopenharmony_ci*/ 111262306a36Sopenharmony_ci struct drxtps_info { 111362306a36Sopenharmony_ci enum drx_fft_mode fftmode; /*< Fft mode */ 111462306a36Sopenharmony_ci enum drx_guard guard; /*< Guard interval */ 111562306a36Sopenharmony_ci enum drx_modulation constellation; 111662306a36Sopenharmony_ci /*< Constellation */ 111762306a36Sopenharmony_ci enum drx_hierarchy hierarchy; 111862306a36Sopenharmony_ci /*< Hierarchy */ 111962306a36Sopenharmony_ci enum drx_coderate high_coderate; 112062306a36Sopenharmony_ci /*< High code rate */ 112162306a36Sopenharmony_ci enum drx_coderate low_coderate; 112262306a36Sopenharmony_ci /*< Low cod rate */ 112362306a36Sopenharmony_ci enum drx_tps_frame frame; /*< Tps frame */ 112462306a36Sopenharmony_ci u8 length; /*< Length */ 112562306a36Sopenharmony_ci u16 cell_id; /*< Cell id */ 112662306a36Sopenharmony_ci }; 112762306a36Sopenharmony_ci 112862306a36Sopenharmony_ci/*========================================*/ 112962306a36Sopenharmony_ci 113062306a36Sopenharmony_ci/* 113162306a36Sopenharmony_ci* \brief Power mode of device. 113262306a36Sopenharmony_ci* 113362306a36Sopenharmony_ci* Used by DRX_CTRL_SET_POWER_MODE. 113462306a36Sopenharmony_ci*/ 113562306a36Sopenharmony_ci enum drx_power_mode { 113662306a36Sopenharmony_ci DRX_POWER_UP = 0, 113762306a36Sopenharmony_ci /*< Generic , Power Up Mode */ 113862306a36Sopenharmony_ci DRX_POWER_MODE_1, 113962306a36Sopenharmony_ci /*< Device specific , Power Up Mode */ 114062306a36Sopenharmony_ci DRX_POWER_MODE_2, 114162306a36Sopenharmony_ci /*< Device specific , Power Up Mode */ 114262306a36Sopenharmony_ci DRX_POWER_MODE_3, 114362306a36Sopenharmony_ci /*< Device specific , Power Up Mode */ 114462306a36Sopenharmony_ci DRX_POWER_MODE_4, 114562306a36Sopenharmony_ci /*< Device specific , Power Up Mode */ 114662306a36Sopenharmony_ci DRX_POWER_MODE_5, 114762306a36Sopenharmony_ci /*< Device specific , Power Up Mode */ 114862306a36Sopenharmony_ci DRX_POWER_MODE_6, 114962306a36Sopenharmony_ci /*< Device specific , Power Up Mode */ 115062306a36Sopenharmony_ci DRX_POWER_MODE_7, 115162306a36Sopenharmony_ci /*< Device specific , Power Up Mode */ 115262306a36Sopenharmony_ci DRX_POWER_MODE_8, 115362306a36Sopenharmony_ci /*< Device specific , Power Up Mode */ 115462306a36Sopenharmony_ci 115562306a36Sopenharmony_ci DRX_POWER_MODE_9, 115662306a36Sopenharmony_ci /*< Device specific , Power Down Mode */ 115762306a36Sopenharmony_ci DRX_POWER_MODE_10, 115862306a36Sopenharmony_ci /*< Device specific , Power Down Mode */ 115962306a36Sopenharmony_ci DRX_POWER_MODE_11, 116062306a36Sopenharmony_ci /*< Device specific , Power Down Mode */ 116162306a36Sopenharmony_ci DRX_POWER_MODE_12, 116262306a36Sopenharmony_ci /*< Device specific , Power Down Mode */ 116362306a36Sopenharmony_ci DRX_POWER_MODE_13, 116462306a36Sopenharmony_ci /*< Device specific , Power Down Mode */ 116562306a36Sopenharmony_ci DRX_POWER_MODE_14, 116662306a36Sopenharmony_ci /*< Device specific , Power Down Mode */ 116762306a36Sopenharmony_ci DRX_POWER_MODE_15, 116862306a36Sopenharmony_ci /*< Device specific , Power Down Mode */ 116962306a36Sopenharmony_ci DRX_POWER_MODE_16, 117062306a36Sopenharmony_ci /*< Device specific , Power Down Mode */ 117162306a36Sopenharmony_ci DRX_POWER_DOWN = 255 117262306a36Sopenharmony_ci /*< Generic , Power Down Mode */ 117362306a36Sopenharmony_ci }; 117462306a36Sopenharmony_ci 117562306a36Sopenharmony_ci/*========================================*/ 117662306a36Sopenharmony_ci 117762306a36Sopenharmony_ci/* 117862306a36Sopenharmony_ci* \enum enum drx_module * \brief Software module identification. 117962306a36Sopenharmony_ci* 118062306a36Sopenharmony_ci* Used by DRX_CTRL_VERSION. 118162306a36Sopenharmony_ci*/ 118262306a36Sopenharmony_ci enum drx_module { 118362306a36Sopenharmony_ci DRX_MODULE_DEVICE, 118462306a36Sopenharmony_ci DRX_MODULE_MICROCODE, 118562306a36Sopenharmony_ci DRX_MODULE_DRIVERCORE, 118662306a36Sopenharmony_ci DRX_MODULE_DEVICEDRIVER, 118762306a36Sopenharmony_ci DRX_MODULE_DAP, 118862306a36Sopenharmony_ci DRX_MODULE_BSP_I2C, 118962306a36Sopenharmony_ci DRX_MODULE_BSP_TUNER, 119062306a36Sopenharmony_ci DRX_MODULE_BSP_HOST, 119162306a36Sopenharmony_ci DRX_MODULE_UNKNOWN 119262306a36Sopenharmony_ci }; 119362306a36Sopenharmony_ci 119462306a36Sopenharmony_ci/* 119562306a36Sopenharmony_ci* \enum struct drx_version * \brief Version information of one software module. 119662306a36Sopenharmony_ci* 119762306a36Sopenharmony_ci* Used by DRX_CTRL_VERSION. 119862306a36Sopenharmony_ci*/ 119962306a36Sopenharmony_ci struct drx_version { 120062306a36Sopenharmony_ci enum drx_module module_type; 120162306a36Sopenharmony_ci /*< Type identifier of the module */ 120262306a36Sopenharmony_ci char *module_name; 120362306a36Sopenharmony_ci /*< Name or description of module */ 120462306a36Sopenharmony_ci u16 v_major; /*< Major version number */ 120562306a36Sopenharmony_ci u16 v_minor; /*< Minor version number */ 120662306a36Sopenharmony_ci u16 v_patch; /*< Patch version number */ 120762306a36Sopenharmony_ci char *v_string; /*< Version as text string */ 120862306a36Sopenharmony_ci }; 120962306a36Sopenharmony_ci 121062306a36Sopenharmony_ci/* 121162306a36Sopenharmony_ci* \enum struct drx_version_list * \brief List element of NULL terminated, linked list for version information. 121262306a36Sopenharmony_ci* 121362306a36Sopenharmony_ci* Used by DRX_CTRL_VERSION. 121462306a36Sopenharmony_ci*/ 121562306a36Sopenharmony_cistruct drx_version_list { 121662306a36Sopenharmony_ci struct drx_version *version;/*< Version information */ 121762306a36Sopenharmony_ci struct drx_version_list *next; 121862306a36Sopenharmony_ci /*< Next list element */ 121962306a36Sopenharmony_ci}; 122062306a36Sopenharmony_ci 122162306a36Sopenharmony_ci/*========================================*/ 122262306a36Sopenharmony_ci 122362306a36Sopenharmony_ci/* 122462306a36Sopenharmony_ci* \brief Parameters needed to confiugure a UIO. 122562306a36Sopenharmony_ci* 122662306a36Sopenharmony_ci* Used by DRX_CTRL_UIO_CFG. 122762306a36Sopenharmony_ci*/ 122862306a36Sopenharmony_ci struct drxuio_cfg { 122962306a36Sopenharmony_ci enum drx_uio uio; 123062306a36Sopenharmony_ci /*< UIO identifier */ 123162306a36Sopenharmony_ci enum drxuio_mode mode; 123262306a36Sopenharmony_ci /*< UIO operational mode */ 123362306a36Sopenharmony_ci }; 123462306a36Sopenharmony_ci 123562306a36Sopenharmony_ci/*========================================*/ 123662306a36Sopenharmony_ci 123762306a36Sopenharmony_ci/* 123862306a36Sopenharmony_ci* \brief Parameters needed to read from or write to a UIO. 123962306a36Sopenharmony_ci* 124062306a36Sopenharmony_ci* Used by DRX_CTRL_UIO_READ and DRX_CTRL_UIO_WRITE. 124162306a36Sopenharmony_ci*/ 124262306a36Sopenharmony_ci struct drxuio_data { 124362306a36Sopenharmony_ci enum drx_uio uio; 124462306a36Sopenharmony_ci /*< UIO identifier */ 124562306a36Sopenharmony_ci bool value; 124662306a36Sopenharmony_ci /*< UIO value (true=1, false=0) */ 124762306a36Sopenharmony_ci }; 124862306a36Sopenharmony_ci 124962306a36Sopenharmony_ci/*========================================*/ 125062306a36Sopenharmony_ci 125162306a36Sopenharmony_ci/* 125262306a36Sopenharmony_ci* \brief Parameters needed to configure OOB. 125362306a36Sopenharmony_ci* 125462306a36Sopenharmony_ci* Used by DRX_CTRL_SET_OOB. 125562306a36Sopenharmony_ci*/ 125662306a36Sopenharmony_ci struct drxoob { 125762306a36Sopenharmony_ci s32 frequency; /*< Frequency in kHz */ 125862306a36Sopenharmony_ci enum drxoob_downstream_standard standard; 125962306a36Sopenharmony_ci /*< OOB standard */ 126062306a36Sopenharmony_ci bool spectrum_inverted; /*< If true, then spectrum 126162306a36Sopenharmony_ci is inverted */ 126262306a36Sopenharmony_ci }; 126362306a36Sopenharmony_ci 126462306a36Sopenharmony_ci/*========================================*/ 126562306a36Sopenharmony_ci 126662306a36Sopenharmony_ci/* 126762306a36Sopenharmony_ci* \brief Metrics from OOB. 126862306a36Sopenharmony_ci* 126962306a36Sopenharmony_ci* Used by DRX_CTRL_GET_OOB. 127062306a36Sopenharmony_ci*/ 127162306a36Sopenharmony_ci struct drxoob_status { 127262306a36Sopenharmony_ci s32 frequency; /*< Frequency in Khz */ 127362306a36Sopenharmony_ci enum drx_lock_status lock; /*< Lock status */ 127462306a36Sopenharmony_ci u32 mer; /*< MER */ 127562306a36Sopenharmony_ci s32 symbol_rate_offset; /*< Symbolrate offset in ppm */ 127662306a36Sopenharmony_ci }; 127762306a36Sopenharmony_ci 127862306a36Sopenharmony_ci/*========================================*/ 127962306a36Sopenharmony_ci 128062306a36Sopenharmony_ci/* 128162306a36Sopenharmony_ci* \brief Device dependent configuration data. 128262306a36Sopenharmony_ci* 128362306a36Sopenharmony_ci* Used by DRX_CTRL_SET_CFG and DRX_CTRL_GET_CFG. 128462306a36Sopenharmony_ci* A sort of nested drx_ctrl() functionality for device specific controls. 128562306a36Sopenharmony_ci*/ 128662306a36Sopenharmony_ci struct drx_cfg { 128762306a36Sopenharmony_ci u32 cfg_type; 128862306a36Sopenharmony_ci /*< Function identifier */ 128962306a36Sopenharmony_ci void *cfg_data; 129062306a36Sopenharmony_ci /*< Function data */ 129162306a36Sopenharmony_ci }; 129262306a36Sopenharmony_ci 129362306a36Sopenharmony_ci/*========================================*/ 129462306a36Sopenharmony_ci 129562306a36Sopenharmony_ci/* 129662306a36Sopenharmony_ci* /struct DRXMpegStartWidth_t 129762306a36Sopenharmony_ci* MStart width [nr MCLK cycles] for serial MPEG output. 129862306a36Sopenharmony_ci*/ 129962306a36Sopenharmony_ci 130062306a36Sopenharmony_ci enum drxmpeg_str_width { 130162306a36Sopenharmony_ci DRX_MPEG_STR_WIDTH_1, 130262306a36Sopenharmony_ci DRX_MPEG_STR_WIDTH_8 130362306a36Sopenharmony_ci }; 130462306a36Sopenharmony_ci 130562306a36Sopenharmony_ci/* CTRL CFG MPEG output */ 130662306a36Sopenharmony_ci/* 130762306a36Sopenharmony_ci* \struct struct drx_cfg_mpeg_output * \brief Configuration parameters for MPEG output control. 130862306a36Sopenharmony_ci* 130962306a36Sopenharmony_ci* Used by DRX_CFG_MPEG_OUTPUT, in combination with DRX_CTRL_SET_CFG and 131062306a36Sopenharmony_ci* DRX_CTRL_GET_CFG. 131162306a36Sopenharmony_ci*/ 131262306a36Sopenharmony_ci 131362306a36Sopenharmony_ci struct drx_cfg_mpeg_output { 131462306a36Sopenharmony_ci bool enable_mpeg_output;/*< If true, enable MPEG output */ 131562306a36Sopenharmony_ci bool insert_rs_byte; /*< If true, insert RS byte */ 131662306a36Sopenharmony_ci bool enable_parallel; /*< If true, parallel out otherwise 131762306a36Sopenharmony_ci serial */ 131862306a36Sopenharmony_ci bool invert_data; /*< If true, invert DATA signals */ 131962306a36Sopenharmony_ci bool invert_err; /*< If true, invert ERR signal */ 132062306a36Sopenharmony_ci bool invert_str; /*< If true, invert STR signals */ 132162306a36Sopenharmony_ci bool invert_val; /*< If true, invert VAL signals */ 132262306a36Sopenharmony_ci bool invert_clk; /*< If true, invert CLK signals */ 132362306a36Sopenharmony_ci bool static_clk; /*< If true, static MPEG clockrate 132462306a36Sopenharmony_ci will be used, otherwise clockrate 132562306a36Sopenharmony_ci will adapt to the bitrate of the 132662306a36Sopenharmony_ci TS */ 132762306a36Sopenharmony_ci u32 bitrate; /*< Maximum bitrate in b/s in case 132862306a36Sopenharmony_ci static clockrate is selected */ 132962306a36Sopenharmony_ci enum drxmpeg_str_width width_str; 133062306a36Sopenharmony_ci /*< MPEG start width */ 133162306a36Sopenharmony_ci }; 133262306a36Sopenharmony_ci 133362306a36Sopenharmony_ci 133462306a36Sopenharmony_ci/*========================================*/ 133562306a36Sopenharmony_ci 133662306a36Sopenharmony_ci/* 133762306a36Sopenharmony_ci* \struct struct drxi2c_data * \brief Data for I2C via 2nd or 3rd or etc I2C port. 133862306a36Sopenharmony_ci* 133962306a36Sopenharmony_ci* Used by DRX_CTRL_I2C_READWRITE. 134062306a36Sopenharmony_ci* If port_nr is equal to primairy port_nr BSPI2C will be used. 134162306a36Sopenharmony_ci* 134262306a36Sopenharmony_ci*/ 134362306a36Sopenharmony_ci struct drxi2c_data { 134462306a36Sopenharmony_ci u16 port_nr; /*< I2C port number */ 134562306a36Sopenharmony_ci struct i2c_device_addr *w_dev_addr; 134662306a36Sopenharmony_ci /*< Write device address */ 134762306a36Sopenharmony_ci u16 w_count; /*< Size of write data in bytes */ 134862306a36Sopenharmony_ci u8 *wData; /*< Pointer to write data */ 134962306a36Sopenharmony_ci struct i2c_device_addr *r_dev_addr; 135062306a36Sopenharmony_ci /*< Read device address */ 135162306a36Sopenharmony_ci u16 r_count; /*< Size of data to read in bytes */ 135262306a36Sopenharmony_ci u8 *r_data; /*< Pointer to read buffer */ 135362306a36Sopenharmony_ci }; 135462306a36Sopenharmony_ci 135562306a36Sopenharmony_ci/*========================================*/ 135662306a36Sopenharmony_ci 135762306a36Sopenharmony_ci/* 135862306a36Sopenharmony_ci* \enum enum drx_aud_standard * \brief Audio standard identifier. 135962306a36Sopenharmony_ci* 136062306a36Sopenharmony_ci* Used by DRX_CTRL_SET_AUD. 136162306a36Sopenharmony_ci*/ 136262306a36Sopenharmony_ci enum drx_aud_standard { 136362306a36Sopenharmony_ci DRX_AUD_STANDARD_BTSC, /*< set BTSC standard (USA) */ 136462306a36Sopenharmony_ci DRX_AUD_STANDARD_A2, /*< set A2-Korea FM Stereo */ 136562306a36Sopenharmony_ci DRX_AUD_STANDARD_EIAJ, /*< set to Japanese FM Stereo */ 136662306a36Sopenharmony_ci DRX_AUD_STANDARD_FM_STEREO,/*< set to FM-Stereo Radio */ 136762306a36Sopenharmony_ci DRX_AUD_STANDARD_M_MONO, /*< for 4.5 MHz mono detected */ 136862306a36Sopenharmony_ci DRX_AUD_STANDARD_D_K_MONO, /*< for 6.5 MHz mono detected */ 136962306a36Sopenharmony_ci DRX_AUD_STANDARD_BG_FM, /*< set BG_FM standard */ 137062306a36Sopenharmony_ci DRX_AUD_STANDARD_D_K1, /*< set D_K1 standard */ 137162306a36Sopenharmony_ci DRX_AUD_STANDARD_D_K2, /*< set D_K2 standard */ 137262306a36Sopenharmony_ci DRX_AUD_STANDARD_D_K3, /*< set D_K3 standard */ 137362306a36Sopenharmony_ci DRX_AUD_STANDARD_BG_NICAM_FM, 137462306a36Sopenharmony_ci /*< set BG_NICAM_FM standard */ 137562306a36Sopenharmony_ci DRX_AUD_STANDARD_L_NICAM_AM, 137662306a36Sopenharmony_ci /*< set L_NICAM_AM standard */ 137762306a36Sopenharmony_ci DRX_AUD_STANDARD_I_NICAM_FM, 137862306a36Sopenharmony_ci /*< set I_NICAM_FM standard */ 137962306a36Sopenharmony_ci DRX_AUD_STANDARD_D_K_NICAM_FM, 138062306a36Sopenharmony_ci /*< set D_K_NICAM_FM standard */ 138162306a36Sopenharmony_ci DRX_AUD_STANDARD_NOT_READY,/*< used to detect audio standard */ 138262306a36Sopenharmony_ci DRX_AUD_STANDARD_AUTO = DRX_AUTO, 138362306a36Sopenharmony_ci /*< Automatic Standard Detection */ 138462306a36Sopenharmony_ci DRX_AUD_STANDARD_UNKNOWN = DRX_UNKNOWN 138562306a36Sopenharmony_ci /*< used as auto and for readback */ 138662306a36Sopenharmony_ci }; 138762306a36Sopenharmony_ci 138862306a36Sopenharmony_ci/* CTRL_AUD_GET_STATUS - struct drx_aud_status */ 138962306a36Sopenharmony_ci/* 139062306a36Sopenharmony_ci* \enum enum drx_aud_nicam_status * \brief Status of NICAM carrier. 139162306a36Sopenharmony_ci*/ 139262306a36Sopenharmony_ci enum drx_aud_nicam_status { 139362306a36Sopenharmony_ci DRX_AUD_NICAM_DETECTED = 0, 139462306a36Sopenharmony_ci /*< NICAM carrier detected */ 139562306a36Sopenharmony_ci DRX_AUD_NICAM_NOT_DETECTED, 139662306a36Sopenharmony_ci /*< NICAM carrier not detected */ 139762306a36Sopenharmony_ci DRX_AUD_NICAM_BAD /*< NICAM carrier bad quality */ 139862306a36Sopenharmony_ci }; 139962306a36Sopenharmony_ci 140062306a36Sopenharmony_ci/* 140162306a36Sopenharmony_ci* \struct struct drx_aud_status * \brief Audio status characteristics. 140262306a36Sopenharmony_ci*/ 140362306a36Sopenharmony_ci struct drx_aud_status { 140462306a36Sopenharmony_ci bool stereo; /*< stereo detection */ 140562306a36Sopenharmony_ci bool carrier_a; /*< carrier A detected */ 140662306a36Sopenharmony_ci bool carrier_b; /*< carrier B detected */ 140762306a36Sopenharmony_ci bool sap; /*< sap / bilingual detection */ 140862306a36Sopenharmony_ci bool rds; /*< RDS data array present */ 140962306a36Sopenharmony_ci enum drx_aud_nicam_status nicam_status; 141062306a36Sopenharmony_ci /*< status of NICAM carrier */ 141162306a36Sopenharmony_ci s8 fm_ident; /*< FM Identification value */ 141262306a36Sopenharmony_ci }; 141362306a36Sopenharmony_ci 141462306a36Sopenharmony_ci/* CTRL_AUD_READ_RDS - DRXRDSdata_t */ 141562306a36Sopenharmony_ci 141662306a36Sopenharmony_ci/* 141762306a36Sopenharmony_ci* \struct DRXRDSdata_t 141862306a36Sopenharmony_ci* \brief Raw RDS data array. 141962306a36Sopenharmony_ci*/ 142062306a36Sopenharmony_ci struct drx_cfg_aud_rds { 142162306a36Sopenharmony_ci bool valid; /*< RDS data validation */ 142262306a36Sopenharmony_ci u16 data[18]; /*< data from one RDS data array */ 142362306a36Sopenharmony_ci }; 142462306a36Sopenharmony_ci 142562306a36Sopenharmony_ci/* DRX_CFG_AUD_VOLUME - struct drx_cfg_aud_volume - set/get */ 142662306a36Sopenharmony_ci/* 142762306a36Sopenharmony_ci* \enum DRXAudAVCDecayTime_t 142862306a36Sopenharmony_ci* \brief Automatic volume control configuration. 142962306a36Sopenharmony_ci*/ 143062306a36Sopenharmony_ci enum drx_aud_avc_mode { 143162306a36Sopenharmony_ci DRX_AUD_AVC_OFF, /*< Automatic volume control off */ 143262306a36Sopenharmony_ci DRX_AUD_AVC_DECAYTIME_8S, /*< level volume in 8 seconds */ 143362306a36Sopenharmony_ci DRX_AUD_AVC_DECAYTIME_4S, /*< level volume in 4 seconds */ 143462306a36Sopenharmony_ci DRX_AUD_AVC_DECAYTIME_2S, /*< level volume in 2 seconds */ 143562306a36Sopenharmony_ci DRX_AUD_AVC_DECAYTIME_20MS/*< level volume in 20 millisec */ 143662306a36Sopenharmony_ci }; 143762306a36Sopenharmony_ci 143862306a36Sopenharmony_ci/* 143962306a36Sopenharmony_ci* /enum DRXAudMaxAVCGain_t 144062306a36Sopenharmony_ci* /brief Automatic volume control max gain in audio baseband. 144162306a36Sopenharmony_ci*/ 144262306a36Sopenharmony_ci enum drx_aud_avc_max_gain { 144362306a36Sopenharmony_ci DRX_AUD_AVC_MAX_GAIN_0DB, /*< maximum AVC gain 0 dB */ 144462306a36Sopenharmony_ci DRX_AUD_AVC_MAX_GAIN_6DB, /*< maximum AVC gain 6 dB */ 144562306a36Sopenharmony_ci DRX_AUD_AVC_MAX_GAIN_12DB /*< maximum AVC gain 12 dB */ 144662306a36Sopenharmony_ci }; 144762306a36Sopenharmony_ci 144862306a36Sopenharmony_ci/* 144962306a36Sopenharmony_ci* /enum DRXAudMaxAVCAtten_t 145062306a36Sopenharmony_ci* /brief Automatic volume control max attenuation in audio baseband. 145162306a36Sopenharmony_ci*/ 145262306a36Sopenharmony_ci enum drx_aud_avc_max_atten { 145362306a36Sopenharmony_ci DRX_AUD_AVC_MAX_ATTEN_12DB, 145462306a36Sopenharmony_ci /*< maximum AVC attenuation 12 dB */ 145562306a36Sopenharmony_ci DRX_AUD_AVC_MAX_ATTEN_18DB, 145662306a36Sopenharmony_ci /*< maximum AVC attenuation 18 dB */ 145762306a36Sopenharmony_ci DRX_AUD_AVC_MAX_ATTEN_24DB/*< maximum AVC attenuation 24 dB */ 145862306a36Sopenharmony_ci }; 145962306a36Sopenharmony_ci/* 146062306a36Sopenharmony_ci* \struct struct drx_cfg_aud_volume * \brief Audio volume configuration. 146162306a36Sopenharmony_ci*/ 146262306a36Sopenharmony_ci struct drx_cfg_aud_volume { 146362306a36Sopenharmony_ci bool mute; /*< mute overrides volume setting */ 146462306a36Sopenharmony_ci s16 volume; /*< volume, range -114 to 12 dB */ 146562306a36Sopenharmony_ci enum drx_aud_avc_mode avc_mode; /*< AVC auto volume control mode */ 146662306a36Sopenharmony_ci u16 avc_ref_level; /*< AVC reference level */ 146762306a36Sopenharmony_ci enum drx_aud_avc_max_gain avc_max_gain; 146862306a36Sopenharmony_ci /*< AVC max gain selection */ 146962306a36Sopenharmony_ci enum drx_aud_avc_max_atten avc_max_atten; 147062306a36Sopenharmony_ci /*< AVC max attenuation selection */ 147162306a36Sopenharmony_ci s16 strength_left; /*< quasi-peak, left speaker */ 147262306a36Sopenharmony_ci s16 strength_right; /*< quasi-peak, right speaker */ 147362306a36Sopenharmony_ci }; 147462306a36Sopenharmony_ci 147562306a36Sopenharmony_ci/* DRX_CFG_I2S_OUTPUT - struct drx_cfg_i2s_output - set/get */ 147662306a36Sopenharmony_ci/* 147762306a36Sopenharmony_ci* \enum enum drxi2s_mode * \brief I2S output mode. 147862306a36Sopenharmony_ci*/ 147962306a36Sopenharmony_ci enum drxi2s_mode { 148062306a36Sopenharmony_ci DRX_I2S_MODE_MASTER, /*< I2S is in master mode */ 148162306a36Sopenharmony_ci DRX_I2S_MODE_SLAVE /*< I2S is in slave mode */ 148262306a36Sopenharmony_ci }; 148362306a36Sopenharmony_ci 148462306a36Sopenharmony_ci/* 148562306a36Sopenharmony_ci* \enum enum drxi2s_word_length * \brief Width of I2S data. 148662306a36Sopenharmony_ci*/ 148762306a36Sopenharmony_ci enum drxi2s_word_length { 148862306a36Sopenharmony_ci DRX_I2S_WORDLENGTH_32 = 0,/*< I2S data is 32 bit wide */ 148962306a36Sopenharmony_ci DRX_I2S_WORDLENGTH_16 = 1 /*< I2S data is 16 bit wide */ 149062306a36Sopenharmony_ci }; 149162306a36Sopenharmony_ci 149262306a36Sopenharmony_ci/* 149362306a36Sopenharmony_ci* \enum enum drxi2s_format * \brief Data wordstrobe alignment for I2S. 149462306a36Sopenharmony_ci*/ 149562306a36Sopenharmony_ci enum drxi2s_format { 149662306a36Sopenharmony_ci DRX_I2S_FORMAT_WS_WITH_DATA, 149762306a36Sopenharmony_ci /*< I2S data and wordstrobe are aligned */ 149862306a36Sopenharmony_ci DRX_I2S_FORMAT_WS_ADVANCED 149962306a36Sopenharmony_ci /*< I2S data one cycle after wordstrobe */ 150062306a36Sopenharmony_ci }; 150162306a36Sopenharmony_ci 150262306a36Sopenharmony_ci/* 150362306a36Sopenharmony_ci* \enum enum drxi2s_polarity * \brief Polarity of I2S data. 150462306a36Sopenharmony_ci*/ 150562306a36Sopenharmony_ci enum drxi2s_polarity { 150662306a36Sopenharmony_ci DRX_I2S_POLARITY_RIGHT,/*< wordstrobe - right high, left low */ 150762306a36Sopenharmony_ci DRX_I2S_POLARITY_LEFT /*< wordstrobe - right low, left high */ 150862306a36Sopenharmony_ci }; 150962306a36Sopenharmony_ci 151062306a36Sopenharmony_ci/* 151162306a36Sopenharmony_ci* \struct struct drx_cfg_i2s_output * \brief I2S output configuration. 151262306a36Sopenharmony_ci*/ 151362306a36Sopenharmony_ci struct drx_cfg_i2s_output { 151462306a36Sopenharmony_ci bool output_enable; /*< I2S output enable */ 151562306a36Sopenharmony_ci u32 frequency; /*< range from 8000-48000 Hz */ 151662306a36Sopenharmony_ci enum drxi2s_mode mode; /*< I2S mode, master or slave */ 151762306a36Sopenharmony_ci enum drxi2s_word_length word_length; 151862306a36Sopenharmony_ci /*< I2S wordlength, 16 or 32 bits */ 151962306a36Sopenharmony_ci enum drxi2s_polarity polarity;/*< I2S wordstrobe polarity */ 152062306a36Sopenharmony_ci enum drxi2s_format format; /*< I2S wordstrobe delay to data */ 152162306a36Sopenharmony_ci }; 152262306a36Sopenharmony_ci 152362306a36Sopenharmony_ci/* ------------------------------expert interface-----------------------------*/ 152462306a36Sopenharmony_ci/* 152562306a36Sopenharmony_ci* /enum enum drx_aud_fm_deemphasis * setting for FM-Deemphasis in audio demodulator. 152662306a36Sopenharmony_ci* 152762306a36Sopenharmony_ci*/ 152862306a36Sopenharmony_ci enum drx_aud_fm_deemphasis { 152962306a36Sopenharmony_ci DRX_AUD_FM_DEEMPH_50US, 153062306a36Sopenharmony_ci DRX_AUD_FM_DEEMPH_75US, 153162306a36Sopenharmony_ci DRX_AUD_FM_DEEMPH_OFF 153262306a36Sopenharmony_ci }; 153362306a36Sopenharmony_ci 153462306a36Sopenharmony_ci/* 153562306a36Sopenharmony_ci* /enum DRXAudDeviation_t 153662306a36Sopenharmony_ci* setting for deviation mode in audio demodulator. 153762306a36Sopenharmony_ci* 153862306a36Sopenharmony_ci*/ 153962306a36Sopenharmony_ci enum drx_cfg_aud_deviation { 154062306a36Sopenharmony_ci DRX_AUD_DEVIATION_NORMAL, 154162306a36Sopenharmony_ci DRX_AUD_DEVIATION_HIGH 154262306a36Sopenharmony_ci }; 154362306a36Sopenharmony_ci 154462306a36Sopenharmony_ci/* 154562306a36Sopenharmony_ci* /enum enum drx_no_carrier_option * setting for carrier, mute/noise. 154662306a36Sopenharmony_ci* 154762306a36Sopenharmony_ci*/ 154862306a36Sopenharmony_ci enum drx_no_carrier_option { 154962306a36Sopenharmony_ci DRX_NO_CARRIER_MUTE, 155062306a36Sopenharmony_ci DRX_NO_CARRIER_NOISE 155162306a36Sopenharmony_ci }; 155262306a36Sopenharmony_ci 155362306a36Sopenharmony_ci/* 155462306a36Sopenharmony_ci* \enum DRXAudAutoSound_t 155562306a36Sopenharmony_ci* \brief Automatic Sound 155662306a36Sopenharmony_ci*/ 155762306a36Sopenharmony_ci enum drx_cfg_aud_auto_sound { 155862306a36Sopenharmony_ci DRX_AUD_AUTO_SOUND_OFF = 0, 155962306a36Sopenharmony_ci DRX_AUD_AUTO_SOUND_SELECT_ON_CHANGE_ON, 156062306a36Sopenharmony_ci DRX_AUD_AUTO_SOUND_SELECT_ON_CHANGE_OFF 156162306a36Sopenharmony_ci }; 156262306a36Sopenharmony_ci 156362306a36Sopenharmony_ci/* 156462306a36Sopenharmony_ci* \enum DRXAudASSThres_t 156562306a36Sopenharmony_ci* \brief Automatic Sound Select Thresholds 156662306a36Sopenharmony_ci*/ 156762306a36Sopenharmony_ci struct drx_cfg_aud_ass_thres { 156862306a36Sopenharmony_ci u16 a2; /* A2 Threshold for ASS configuration */ 156962306a36Sopenharmony_ci u16 btsc; /* BTSC Threshold for ASS configuration */ 157062306a36Sopenharmony_ci u16 nicam; /* Nicam Threshold for ASS configuration */ 157162306a36Sopenharmony_ci }; 157262306a36Sopenharmony_ci 157362306a36Sopenharmony_ci/* 157462306a36Sopenharmony_ci* \struct struct drx_aud_carrier * \brief Carrier detection related parameters 157562306a36Sopenharmony_ci*/ 157662306a36Sopenharmony_ci struct drx_aud_carrier { 157762306a36Sopenharmony_ci u16 thres; /* carrier detetcion threshold for primary carrier (A) */ 157862306a36Sopenharmony_ci enum drx_no_carrier_option opt; /* Mute or noise at no carrier detection (A) */ 157962306a36Sopenharmony_ci s32 shift; /* DC level of incoming signal (A) */ 158062306a36Sopenharmony_ci s32 dco; /* frequency adjustment (A) */ 158162306a36Sopenharmony_ci }; 158262306a36Sopenharmony_ci 158362306a36Sopenharmony_ci/* 158462306a36Sopenharmony_ci* \struct struct drx_cfg_aud_carriers * \brief combining carrier A & B to one struct 158562306a36Sopenharmony_ci*/ 158662306a36Sopenharmony_ci struct drx_cfg_aud_carriers { 158762306a36Sopenharmony_ci struct drx_aud_carrier a; 158862306a36Sopenharmony_ci struct drx_aud_carrier b; 158962306a36Sopenharmony_ci }; 159062306a36Sopenharmony_ci 159162306a36Sopenharmony_ci/* 159262306a36Sopenharmony_ci* /enum enum drx_aud_i2s_src * Selection of audio source 159362306a36Sopenharmony_ci*/ 159462306a36Sopenharmony_ci enum drx_aud_i2s_src { 159562306a36Sopenharmony_ci DRX_AUD_SRC_MONO, 159662306a36Sopenharmony_ci DRX_AUD_SRC_STEREO_OR_AB, 159762306a36Sopenharmony_ci DRX_AUD_SRC_STEREO_OR_A, 159862306a36Sopenharmony_ci DRX_AUD_SRC_STEREO_OR_B}; 159962306a36Sopenharmony_ci 160062306a36Sopenharmony_ci/* 160162306a36Sopenharmony_ci* \enum enum drx_aud_i2s_matrix * \brief Used for selecting I2S output. 160262306a36Sopenharmony_ci*/ 160362306a36Sopenharmony_ci enum drx_aud_i2s_matrix { 160462306a36Sopenharmony_ci DRX_AUD_I2S_MATRIX_A_MONO, 160562306a36Sopenharmony_ci /*< A sound only, stereo or mono */ 160662306a36Sopenharmony_ci DRX_AUD_I2S_MATRIX_B_MONO, 160762306a36Sopenharmony_ci /*< B sound only, stereo or mono */ 160862306a36Sopenharmony_ci DRX_AUD_I2S_MATRIX_STEREO, 160962306a36Sopenharmony_ci /*< A+B sound, transparent */ 161062306a36Sopenharmony_ci DRX_AUD_I2S_MATRIX_MONO /*< A+B mixed to mono sum, (L+R)/2 */}; 161162306a36Sopenharmony_ci 161262306a36Sopenharmony_ci/* 161362306a36Sopenharmony_ci* /enum enum drx_aud_fm_matrix * setting for FM-Matrix in audio demodulator. 161462306a36Sopenharmony_ci* 161562306a36Sopenharmony_ci*/ 161662306a36Sopenharmony_ci enum drx_aud_fm_matrix { 161762306a36Sopenharmony_ci DRX_AUD_FM_MATRIX_NO_MATRIX, 161862306a36Sopenharmony_ci DRX_AUD_FM_MATRIX_GERMAN, 161962306a36Sopenharmony_ci DRX_AUD_FM_MATRIX_KOREAN, 162062306a36Sopenharmony_ci DRX_AUD_FM_MATRIX_SOUND_A, 162162306a36Sopenharmony_ci DRX_AUD_FM_MATRIX_SOUND_B}; 162262306a36Sopenharmony_ci 162362306a36Sopenharmony_ci/* 162462306a36Sopenharmony_ci* \struct DRXAudMatrices_t 162562306a36Sopenharmony_ci* \brief Mixer settings 162662306a36Sopenharmony_ci*/ 162762306a36Sopenharmony_cistruct drx_cfg_aud_mixer { 162862306a36Sopenharmony_ci enum drx_aud_i2s_src source_i2s; 162962306a36Sopenharmony_ci enum drx_aud_i2s_matrix matrix_i2s; 163062306a36Sopenharmony_ci enum drx_aud_fm_matrix matrix_fm; 163162306a36Sopenharmony_ci}; 163262306a36Sopenharmony_ci 163362306a36Sopenharmony_ci/* 163462306a36Sopenharmony_ci* \enum DRXI2SVidSync_t 163562306a36Sopenharmony_ci* \brief Audio/video synchronization, interacts with I2S mode. 163662306a36Sopenharmony_ci* AUTO_1 and AUTO_2 are for automatic video standard detection with preference 163762306a36Sopenharmony_ci* for NTSC or Monochrome, because the frequencies are too close (59.94 & 60 Hz) 163862306a36Sopenharmony_ci*/ 163962306a36Sopenharmony_ci enum drx_cfg_aud_av_sync { 164062306a36Sopenharmony_ci DRX_AUD_AVSYNC_OFF,/*< audio/video synchronization is off */ 164162306a36Sopenharmony_ci DRX_AUD_AVSYNC_NTSC, 164262306a36Sopenharmony_ci /*< it is an NTSC system */ 164362306a36Sopenharmony_ci DRX_AUD_AVSYNC_MONOCHROME, 164462306a36Sopenharmony_ci /*< it is a MONOCHROME system */ 164562306a36Sopenharmony_ci DRX_AUD_AVSYNC_PAL_SECAM 164662306a36Sopenharmony_ci /*< it is a PAL/SECAM system */}; 164762306a36Sopenharmony_ci 164862306a36Sopenharmony_ci/* 164962306a36Sopenharmony_ci* \struct struct drx_cfg_aud_prescale * \brief Prescalers 165062306a36Sopenharmony_ci*/ 165162306a36Sopenharmony_cistruct drx_cfg_aud_prescale { 165262306a36Sopenharmony_ci u16 fm_deviation; 165362306a36Sopenharmony_ci s16 nicam_gain; 165462306a36Sopenharmony_ci}; 165562306a36Sopenharmony_ci 165662306a36Sopenharmony_ci/* 165762306a36Sopenharmony_ci* \struct struct drx_aud_beep * \brief Beep 165862306a36Sopenharmony_ci*/ 165962306a36Sopenharmony_cistruct drx_aud_beep { 166062306a36Sopenharmony_ci s16 volume; /* dB */ 166162306a36Sopenharmony_ci u16 frequency; /* Hz */ 166262306a36Sopenharmony_ci bool mute; 166362306a36Sopenharmony_ci}; 166462306a36Sopenharmony_ci 166562306a36Sopenharmony_ci/* 166662306a36Sopenharmony_ci* \enum enum drx_aud_btsc_detect * \brief BTSC detetcion mode 166762306a36Sopenharmony_ci*/ 166862306a36Sopenharmony_ci enum drx_aud_btsc_detect { 166962306a36Sopenharmony_ci DRX_BTSC_STEREO, 167062306a36Sopenharmony_ci DRX_BTSC_MONO_AND_SAP}; 167162306a36Sopenharmony_ci 167262306a36Sopenharmony_ci/* 167362306a36Sopenharmony_ci* \struct struct drx_aud_data * \brief Audio data structure 167462306a36Sopenharmony_ci*/ 167562306a36Sopenharmony_cistruct drx_aud_data { 167662306a36Sopenharmony_ci /* audio storage */ 167762306a36Sopenharmony_ci bool audio_is_active; 167862306a36Sopenharmony_ci enum drx_aud_standard audio_standard; 167962306a36Sopenharmony_ci struct drx_cfg_i2s_output i2sdata; 168062306a36Sopenharmony_ci struct drx_cfg_aud_volume volume; 168162306a36Sopenharmony_ci enum drx_cfg_aud_auto_sound auto_sound; 168262306a36Sopenharmony_ci struct drx_cfg_aud_ass_thres ass_thresholds; 168362306a36Sopenharmony_ci struct drx_cfg_aud_carriers carriers; 168462306a36Sopenharmony_ci struct drx_cfg_aud_mixer mixer; 168562306a36Sopenharmony_ci enum drx_cfg_aud_deviation deviation; 168662306a36Sopenharmony_ci enum drx_cfg_aud_av_sync av_sync; 168762306a36Sopenharmony_ci struct drx_cfg_aud_prescale prescale; 168862306a36Sopenharmony_ci enum drx_aud_fm_deemphasis deemph; 168962306a36Sopenharmony_ci enum drx_aud_btsc_detect btsc_detect; 169062306a36Sopenharmony_ci /* rds */ 169162306a36Sopenharmony_ci u16 rds_data_counter; 169262306a36Sopenharmony_ci bool rds_data_present; 169362306a36Sopenharmony_ci}; 169462306a36Sopenharmony_ci 169562306a36Sopenharmony_ci/* 169662306a36Sopenharmony_ci* \enum enum drx_qam_lock_range * \brief QAM lock range mode 169762306a36Sopenharmony_ci*/ 169862306a36Sopenharmony_ci enum drx_qam_lock_range { 169962306a36Sopenharmony_ci DRX_QAM_LOCKRANGE_NORMAL, 170062306a36Sopenharmony_ci DRX_QAM_LOCKRANGE_EXTENDED}; 170162306a36Sopenharmony_ci 170262306a36Sopenharmony_ci/*============================================================================*/ 170362306a36Sopenharmony_ci/*============================================================================*/ 170462306a36Sopenharmony_ci/*== Data access structures ==================================================*/ 170562306a36Sopenharmony_ci/*============================================================================*/ 170662306a36Sopenharmony_ci/*============================================================================*/ 170762306a36Sopenharmony_ci 170862306a36Sopenharmony_ci/* Address on device */ 170962306a36Sopenharmony_ci typedef u32 dr_xaddr_t, *pdr_xaddr_t; 171062306a36Sopenharmony_ci 171162306a36Sopenharmony_ci/* Protocol specific flags */ 171262306a36Sopenharmony_ci typedef u32 dr_xflags_t, *pdr_xflags_t; 171362306a36Sopenharmony_ci 171462306a36Sopenharmony_ci/* Write block of data to device */ 171562306a36Sopenharmony_ci typedef int(*drx_write_block_func_t) (struct i2c_device_addr *dev_addr, /* address of I2C device */ 171662306a36Sopenharmony_ci u32 addr, /* address of register/memory */ 171762306a36Sopenharmony_ci u16 datasize, /* size of data in bytes */ 171862306a36Sopenharmony_ci u8 *data, /* data to send */ 171962306a36Sopenharmony_ci u32 flags); 172062306a36Sopenharmony_ci 172162306a36Sopenharmony_ci/* Read block of data from device */ 172262306a36Sopenharmony_ci typedef int(*drx_read_block_func_t) (struct i2c_device_addr *dev_addr, /* address of I2C device */ 172362306a36Sopenharmony_ci u32 addr, /* address of register/memory */ 172462306a36Sopenharmony_ci u16 datasize, /* size of data in bytes */ 172562306a36Sopenharmony_ci u8 *data, /* receive buffer */ 172662306a36Sopenharmony_ci u32 flags); 172762306a36Sopenharmony_ci 172862306a36Sopenharmony_ci/* Write 8-bits value to device */ 172962306a36Sopenharmony_ci typedef int(*drx_write_reg8func_t) (struct i2c_device_addr *dev_addr, /* address of I2C device */ 173062306a36Sopenharmony_ci u32 addr, /* address of register/memory */ 173162306a36Sopenharmony_ci u8 data, /* data to send */ 173262306a36Sopenharmony_ci u32 flags); 173362306a36Sopenharmony_ci 173462306a36Sopenharmony_ci/* Read 8-bits value to device */ 173562306a36Sopenharmony_ci typedef int(*drx_read_reg8func_t) (struct i2c_device_addr *dev_addr, /* address of I2C device */ 173662306a36Sopenharmony_ci u32 addr, /* address of register/memory */ 173762306a36Sopenharmony_ci u8 *data, /* receive buffer */ 173862306a36Sopenharmony_ci u32 flags); 173962306a36Sopenharmony_ci 174062306a36Sopenharmony_ci/* Read modify write 8-bits value to device */ 174162306a36Sopenharmony_ci typedef int(*drx_read_modify_write_reg8func_t) (struct i2c_device_addr *dev_addr, /* address of I2C device */ 174262306a36Sopenharmony_ci u32 waddr, /* write address of register */ 174362306a36Sopenharmony_ci u32 raddr, /* read address of register */ 174462306a36Sopenharmony_ci u8 wdata, /* data to write */ 174562306a36Sopenharmony_ci u8 *rdata); /* data to read */ 174662306a36Sopenharmony_ci 174762306a36Sopenharmony_ci/* Write 16-bits value to device */ 174862306a36Sopenharmony_ci typedef int(*drx_write_reg16func_t) (struct i2c_device_addr *dev_addr, /* address of I2C device */ 174962306a36Sopenharmony_ci u32 addr, /* address of register/memory */ 175062306a36Sopenharmony_ci u16 data, /* data to send */ 175162306a36Sopenharmony_ci u32 flags); 175262306a36Sopenharmony_ci 175362306a36Sopenharmony_ci/* Read 16-bits value to device */ 175462306a36Sopenharmony_ci typedef int(*drx_read_reg16func_t) (struct i2c_device_addr *dev_addr, /* address of I2C device */ 175562306a36Sopenharmony_ci u32 addr, /* address of register/memory */ 175662306a36Sopenharmony_ci u16 *data, /* receive buffer */ 175762306a36Sopenharmony_ci u32 flags); 175862306a36Sopenharmony_ci 175962306a36Sopenharmony_ci/* Read modify write 16-bits value to device */ 176062306a36Sopenharmony_ci typedef int(*drx_read_modify_write_reg16func_t) (struct i2c_device_addr *dev_addr, /* address of I2C device */ 176162306a36Sopenharmony_ci u32 waddr, /* write address of register */ 176262306a36Sopenharmony_ci u32 raddr, /* read address of register */ 176362306a36Sopenharmony_ci u16 wdata, /* data to write */ 176462306a36Sopenharmony_ci u16 *rdata); /* data to read */ 176562306a36Sopenharmony_ci 176662306a36Sopenharmony_ci/* Write 32-bits value to device */ 176762306a36Sopenharmony_ci typedef int(*drx_write_reg32func_t) (struct i2c_device_addr *dev_addr, /* address of I2C device */ 176862306a36Sopenharmony_ci u32 addr, /* address of register/memory */ 176962306a36Sopenharmony_ci u32 data, /* data to send */ 177062306a36Sopenharmony_ci u32 flags); 177162306a36Sopenharmony_ci 177262306a36Sopenharmony_ci/* Read 32-bits value to device */ 177362306a36Sopenharmony_ci typedef int(*drx_read_reg32func_t) (struct i2c_device_addr *dev_addr, /* address of I2C device */ 177462306a36Sopenharmony_ci u32 addr, /* address of register/memory */ 177562306a36Sopenharmony_ci u32 *data, /* receive buffer */ 177662306a36Sopenharmony_ci u32 flags); 177762306a36Sopenharmony_ci 177862306a36Sopenharmony_ci/* Read modify write 32-bits value to device */ 177962306a36Sopenharmony_ci typedef int(*drx_read_modify_write_reg32func_t) (struct i2c_device_addr *dev_addr, /* address of I2C device */ 178062306a36Sopenharmony_ci u32 waddr, /* write address of register */ 178162306a36Sopenharmony_ci u32 raddr, /* read address of register */ 178262306a36Sopenharmony_ci u32 wdata, /* data to write */ 178362306a36Sopenharmony_ci u32 *rdata); /* data to read */ 178462306a36Sopenharmony_ci 178562306a36Sopenharmony_ci/* 178662306a36Sopenharmony_ci* \struct struct drx_access_func * \brief Interface to an access protocol. 178762306a36Sopenharmony_ci*/ 178862306a36Sopenharmony_cistruct drx_access_func { 178962306a36Sopenharmony_ci drx_write_block_func_t write_block_func; 179062306a36Sopenharmony_ci drx_read_block_func_t read_block_func; 179162306a36Sopenharmony_ci drx_write_reg8func_t write_reg8func; 179262306a36Sopenharmony_ci drx_read_reg8func_t read_reg8func; 179362306a36Sopenharmony_ci drx_read_modify_write_reg8func_t read_modify_write_reg8func; 179462306a36Sopenharmony_ci drx_write_reg16func_t write_reg16func; 179562306a36Sopenharmony_ci drx_read_reg16func_t read_reg16func; 179662306a36Sopenharmony_ci drx_read_modify_write_reg16func_t read_modify_write_reg16func; 179762306a36Sopenharmony_ci drx_write_reg32func_t write_reg32func; 179862306a36Sopenharmony_ci drx_read_reg32func_t read_reg32func; 179962306a36Sopenharmony_ci drx_read_modify_write_reg32func_t read_modify_write_reg32func; 180062306a36Sopenharmony_ci}; 180162306a36Sopenharmony_ci 180262306a36Sopenharmony_ci/* Register address and data for register dump function */ 180362306a36Sopenharmony_cistruct drx_reg_dump { 180462306a36Sopenharmony_ci u32 address; 180562306a36Sopenharmony_ci u32 data; 180662306a36Sopenharmony_ci}; 180762306a36Sopenharmony_ci 180862306a36Sopenharmony_ci/*============================================================================*/ 180962306a36Sopenharmony_ci/*============================================================================*/ 181062306a36Sopenharmony_ci/*== Demod instance data structures ==========================================*/ 181162306a36Sopenharmony_ci/*============================================================================*/ 181262306a36Sopenharmony_ci/*============================================================================*/ 181362306a36Sopenharmony_ci 181462306a36Sopenharmony_ci/* 181562306a36Sopenharmony_ci* \struct struct drx_common_attr * \brief Set of common attributes, shared by all DRX devices. 181662306a36Sopenharmony_ci*/ 181762306a36Sopenharmony_ci struct drx_common_attr { 181862306a36Sopenharmony_ci /* Microcode (firmware) attributes */ 181962306a36Sopenharmony_ci char *microcode_file; /*< microcode filename */ 182062306a36Sopenharmony_ci bool verify_microcode; 182162306a36Sopenharmony_ci /*< Use microcode verify or not. */ 182262306a36Sopenharmony_ci struct drx_mc_version_rec mcversion; 182362306a36Sopenharmony_ci /*< Version record of microcode from file */ 182462306a36Sopenharmony_ci 182562306a36Sopenharmony_ci /* Clocks and tuner attributes */ 182662306a36Sopenharmony_ci s32 intermediate_freq; 182762306a36Sopenharmony_ci /*< IF,if tuner instance not used. (kHz)*/ 182862306a36Sopenharmony_ci s32 sys_clock_freq; 182962306a36Sopenharmony_ci /*< Systemclock frequency. (kHz) */ 183062306a36Sopenharmony_ci s32 osc_clock_freq; 183162306a36Sopenharmony_ci /*< Oscillator clock frequency. (kHz) */ 183262306a36Sopenharmony_ci s16 osc_clock_deviation; 183362306a36Sopenharmony_ci /*< Oscillator clock deviation. (ppm) */ 183462306a36Sopenharmony_ci bool mirror_freq_spect; 183562306a36Sopenharmony_ci /*< Mirror IF frequency spectrum or not.*/ 183662306a36Sopenharmony_ci 183762306a36Sopenharmony_ci /* Initial MPEG output attributes */ 183862306a36Sopenharmony_ci struct drx_cfg_mpeg_output mpeg_cfg; 183962306a36Sopenharmony_ci /*< MPEG configuration */ 184062306a36Sopenharmony_ci 184162306a36Sopenharmony_ci bool is_opened; /*< if true instance is already opened. */ 184262306a36Sopenharmony_ci 184362306a36Sopenharmony_ci /* Channel scan */ 184462306a36Sopenharmony_ci struct drx_scan_param *scan_param; 184562306a36Sopenharmony_ci /*< scan parameters */ 184662306a36Sopenharmony_ci u16 scan_freq_plan_index; 184762306a36Sopenharmony_ci /*< next index in freq plan */ 184862306a36Sopenharmony_ci s32 scan_next_frequency; 184962306a36Sopenharmony_ci /*< next freq to scan */ 185062306a36Sopenharmony_ci bool scan_ready; /*< scan ready flag */ 185162306a36Sopenharmony_ci u32 scan_max_channels;/*< number of channels in freqplan */ 185262306a36Sopenharmony_ci u32 scan_channels_scanned; 185362306a36Sopenharmony_ci /*< number of channels scanned */ 185462306a36Sopenharmony_ci /* Channel scan - inner loop: demod related */ 185562306a36Sopenharmony_ci drx_scan_func_t scan_function; 185662306a36Sopenharmony_ci /*< function to check channel */ 185762306a36Sopenharmony_ci /* Channel scan - inner loop: SYSObj related */ 185862306a36Sopenharmony_ci void *scan_context; /*< Context Pointer of SYSObj */ 185962306a36Sopenharmony_ci /* Channel scan - parameters for default DTV scan function in core driver */ 186062306a36Sopenharmony_ci u16 scan_demod_lock_timeout; 186162306a36Sopenharmony_ci /*< millisecs to wait for lock */ 186262306a36Sopenharmony_ci enum drx_lock_status scan_desired_lock; 186362306a36Sopenharmony_ci /*< lock requirement for channel found */ 186462306a36Sopenharmony_ci /* scan_active can be used by SetChannel to decide how to program the tuner, 186562306a36Sopenharmony_ci fast or slow (but stable). Usually fast during scan. */ 186662306a36Sopenharmony_ci bool scan_active; /*< true when scan routines are active */ 186762306a36Sopenharmony_ci 186862306a36Sopenharmony_ci /* Power management */ 186962306a36Sopenharmony_ci enum drx_power_mode current_power_mode; 187062306a36Sopenharmony_ci /*< current power management mode */ 187162306a36Sopenharmony_ci 187262306a36Sopenharmony_ci /* Tuner */ 187362306a36Sopenharmony_ci u8 tuner_port_nr; /*< nr of I2C port to which tuner is */ 187462306a36Sopenharmony_ci s32 tuner_min_freq_rf; 187562306a36Sopenharmony_ci /*< minimum RF input frequency, in kHz */ 187662306a36Sopenharmony_ci s32 tuner_max_freq_rf; 187762306a36Sopenharmony_ci /*< maximum RF input frequency, in kHz */ 187862306a36Sopenharmony_ci bool tuner_rf_agc_pol; /*< if true invert RF AGC polarity */ 187962306a36Sopenharmony_ci bool tuner_if_agc_pol; /*< if true invert IF AGC polarity */ 188062306a36Sopenharmony_ci bool tuner_slow_mode; /*< if true invert IF AGC polarity */ 188162306a36Sopenharmony_ci 188262306a36Sopenharmony_ci struct drx_channel current_channel; 188362306a36Sopenharmony_ci /*< current channel parameters */ 188462306a36Sopenharmony_ci enum drx_standard current_standard; 188562306a36Sopenharmony_ci /*< current standard selection */ 188662306a36Sopenharmony_ci enum drx_standard prev_standard; 188762306a36Sopenharmony_ci /*< previous standard selection */ 188862306a36Sopenharmony_ci enum drx_standard di_cache_standard; 188962306a36Sopenharmony_ci /*< standard in DI cache if available */ 189062306a36Sopenharmony_ci bool use_bootloader; /*< use bootloader in open */ 189162306a36Sopenharmony_ci u32 capabilities; /*< capabilities flags */ 189262306a36Sopenharmony_ci u32 product_id; /*< product ID inc. metal fix number */}; 189362306a36Sopenharmony_ci 189462306a36Sopenharmony_ci/* 189562306a36Sopenharmony_ci* Generic functions for DRX devices. 189662306a36Sopenharmony_ci*/ 189762306a36Sopenharmony_ci 189862306a36Sopenharmony_cistruct drx_demod_instance; 189962306a36Sopenharmony_ci 190062306a36Sopenharmony_ci/* 190162306a36Sopenharmony_ci* \struct struct drx_demod_instance * \brief Top structure of demodulator instance. 190262306a36Sopenharmony_ci*/ 190362306a36Sopenharmony_cistruct drx_demod_instance { 190462306a36Sopenharmony_ci /*< data access protocol functions */ 190562306a36Sopenharmony_ci struct i2c_device_addr *my_i2c_dev_addr; 190662306a36Sopenharmony_ci /*< i2c address and device identifier */ 190762306a36Sopenharmony_ci struct drx_common_attr *my_common_attr; 190862306a36Sopenharmony_ci /*< common DRX attributes */ 190962306a36Sopenharmony_ci void *my_ext_attr; /*< device specific attributes */ 191062306a36Sopenharmony_ci /* generic demodulator data */ 191162306a36Sopenharmony_ci 191262306a36Sopenharmony_ci struct i2c_adapter *i2c; 191362306a36Sopenharmony_ci const struct firmware *firmware; 191462306a36Sopenharmony_ci}; 191562306a36Sopenharmony_ci 191662306a36Sopenharmony_ci/*------------------------------------------------------------------------- 191762306a36Sopenharmony_ciMACROS 191862306a36Sopenharmony_ciConversion from enum values to human readable form. 191962306a36Sopenharmony_ci-------------------------------------------------------------------------*/ 192062306a36Sopenharmony_ci 192162306a36Sopenharmony_ci/* standard */ 192262306a36Sopenharmony_ci 192362306a36Sopenharmony_ci#define DRX_STR_STANDARD(x) ( \ 192462306a36Sopenharmony_ci (x == DRX_STANDARD_DVBT) ? "DVB-T" : \ 192562306a36Sopenharmony_ci (x == DRX_STANDARD_8VSB) ? "8VSB" : \ 192662306a36Sopenharmony_ci (x == DRX_STANDARD_NTSC) ? "NTSC" : \ 192762306a36Sopenharmony_ci (x == DRX_STANDARD_PAL_SECAM_BG) ? "PAL/SECAM B/G" : \ 192862306a36Sopenharmony_ci (x == DRX_STANDARD_PAL_SECAM_DK) ? "PAL/SECAM D/K" : \ 192962306a36Sopenharmony_ci (x == DRX_STANDARD_PAL_SECAM_I) ? "PAL/SECAM I" : \ 193062306a36Sopenharmony_ci (x == DRX_STANDARD_PAL_SECAM_L) ? "PAL/SECAM L" : \ 193162306a36Sopenharmony_ci (x == DRX_STANDARD_PAL_SECAM_LP) ? "PAL/SECAM LP" : \ 193262306a36Sopenharmony_ci (x == DRX_STANDARD_ITU_A) ? "ITU-A" : \ 193362306a36Sopenharmony_ci (x == DRX_STANDARD_ITU_B) ? "ITU-B" : \ 193462306a36Sopenharmony_ci (x == DRX_STANDARD_ITU_C) ? "ITU-C" : \ 193562306a36Sopenharmony_ci (x == DRX_STANDARD_ITU_D) ? "ITU-D" : \ 193662306a36Sopenharmony_ci (x == DRX_STANDARD_FM) ? "FM" : \ 193762306a36Sopenharmony_ci (x == DRX_STANDARD_DTMB) ? "DTMB" : \ 193862306a36Sopenharmony_ci (x == DRX_STANDARD_AUTO) ? "Auto" : \ 193962306a36Sopenharmony_ci (x == DRX_STANDARD_UNKNOWN) ? "Unknown" : \ 194062306a36Sopenharmony_ci "(Invalid)") 194162306a36Sopenharmony_ci 194262306a36Sopenharmony_ci/* channel */ 194362306a36Sopenharmony_ci 194462306a36Sopenharmony_ci#define DRX_STR_BANDWIDTH(x) ( \ 194562306a36Sopenharmony_ci (x == DRX_BANDWIDTH_8MHZ) ? "8 MHz" : \ 194662306a36Sopenharmony_ci (x == DRX_BANDWIDTH_7MHZ) ? "7 MHz" : \ 194762306a36Sopenharmony_ci (x == DRX_BANDWIDTH_6MHZ) ? "6 MHz" : \ 194862306a36Sopenharmony_ci (x == DRX_BANDWIDTH_AUTO) ? "Auto" : \ 194962306a36Sopenharmony_ci (x == DRX_BANDWIDTH_UNKNOWN) ? "Unknown" : \ 195062306a36Sopenharmony_ci "(Invalid)") 195162306a36Sopenharmony_ci#define DRX_STR_FFTMODE(x) ( \ 195262306a36Sopenharmony_ci (x == DRX_FFTMODE_2K) ? "2k" : \ 195362306a36Sopenharmony_ci (x == DRX_FFTMODE_4K) ? "4k" : \ 195462306a36Sopenharmony_ci (x == DRX_FFTMODE_8K) ? "8k" : \ 195562306a36Sopenharmony_ci (x == DRX_FFTMODE_AUTO) ? "Auto" : \ 195662306a36Sopenharmony_ci (x == DRX_FFTMODE_UNKNOWN) ? "Unknown" : \ 195762306a36Sopenharmony_ci "(Invalid)") 195862306a36Sopenharmony_ci#define DRX_STR_GUARD(x) ( \ 195962306a36Sopenharmony_ci (x == DRX_GUARD_1DIV32) ? "1/32nd" : \ 196062306a36Sopenharmony_ci (x == DRX_GUARD_1DIV16) ? "1/16th" : \ 196162306a36Sopenharmony_ci (x == DRX_GUARD_1DIV8) ? "1/8th" : \ 196262306a36Sopenharmony_ci (x == DRX_GUARD_1DIV4) ? "1/4th" : \ 196362306a36Sopenharmony_ci (x == DRX_GUARD_AUTO) ? "Auto" : \ 196462306a36Sopenharmony_ci (x == DRX_GUARD_UNKNOWN) ? "Unknown" : \ 196562306a36Sopenharmony_ci "(Invalid)") 196662306a36Sopenharmony_ci#define DRX_STR_CONSTELLATION(x) ( \ 196762306a36Sopenharmony_ci (x == DRX_CONSTELLATION_BPSK) ? "BPSK" : \ 196862306a36Sopenharmony_ci (x == DRX_CONSTELLATION_QPSK) ? "QPSK" : \ 196962306a36Sopenharmony_ci (x == DRX_CONSTELLATION_PSK8) ? "PSK8" : \ 197062306a36Sopenharmony_ci (x == DRX_CONSTELLATION_QAM16) ? "QAM16" : \ 197162306a36Sopenharmony_ci (x == DRX_CONSTELLATION_QAM32) ? "QAM32" : \ 197262306a36Sopenharmony_ci (x == DRX_CONSTELLATION_QAM64) ? "QAM64" : \ 197362306a36Sopenharmony_ci (x == DRX_CONSTELLATION_QAM128) ? "QAM128" : \ 197462306a36Sopenharmony_ci (x == DRX_CONSTELLATION_QAM256) ? "QAM256" : \ 197562306a36Sopenharmony_ci (x == DRX_CONSTELLATION_QAM512) ? "QAM512" : \ 197662306a36Sopenharmony_ci (x == DRX_CONSTELLATION_QAM1024) ? "QAM1024" : \ 197762306a36Sopenharmony_ci (x == DRX_CONSTELLATION_QPSK_NR) ? "QPSK_NR" : \ 197862306a36Sopenharmony_ci (x == DRX_CONSTELLATION_AUTO) ? "Auto" : \ 197962306a36Sopenharmony_ci (x == DRX_CONSTELLATION_UNKNOWN) ? "Unknown" : \ 198062306a36Sopenharmony_ci "(Invalid)") 198162306a36Sopenharmony_ci#define DRX_STR_CODERATE(x) ( \ 198262306a36Sopenharmony_ci (x == DRX_CODERATE_1DIV2) ? "1/2nd" : \ 198362306a36Sopenharmony_ci (x == DRX_CODERATE_2DIV3) ? "2/3rd" : \ 198462306a36Sopenharmony_ci (x == DRX_CODERATE_3DIV4) ? "3/4th" : \ 198562306a36Sopenharmony_ci (x == DRX_CODERATE_5DIV6) ? "5/6th" : \ 198662306a36Sopenharmony_ci (x == DRX_CODERATE_7DIV8) ? "7/8th" : \ 198762306a36Sopenharmony_ci (x == DRX_CODERATE_AUTO) ? "Auto" : \ 198862306a36Sopenharmony_ci (x == DRX_CODERATE_UNKNOWN) ? "Unknown" : \ 198962306a36Sopenharmony_ci "(Invalid)") 199062306a36Sopenharmony_ci#define DRX_STR_HIERARCHY(x) ( \ 199162306a36Sopenharmony_ci (x == DRX_HIERARCHY_NONE) ? "None" : \ 199262306a36Sopenharmony_ci (x == DRX_HIERARCHY_ALPHA1) ? "Alpha=1" : \ 199362306a36Sopenharmony_ci (x == DRX_HIERARCHY_ALPHA2) ? "Alpha=2" : \ 199462306a36Sopenharmony_ci (x == DRX_HIERARCHY_ALPHA4) ? "Alpha=4" : \ 199562306a36Sopenharmony_ci (x == DRX_HIERARCHY_AUTO) ? "Auto" : \ 199662306a36Sopenharmony_ci (x == DRX_HIERARCHY_UNKNOWN) ? "Unknown" : \ 199762306a36Sopenharmony_ci "(Invalid)") 199862306a36Sopenharmony_ci#define DRX_STR_PRIORITY(x) ( \ 199962306a36Sopenharmony_ci (x == DRX_PRIORITY_LOW) ? "Low" : \ 200062306a36Sopenharmony_ci (x == DRX_PRIORITY_HIGH) ? "High" : \ 200162306a36Sopenharmony_ci (x == DRX_PRIORITY_UNKNOWN) ? "Unknown" : \ 200262306a36Sopenharmony_ci "(Invalid)") 200362306a36Sopenharmony_ci#define DRX_STR_MIRROR(x) ( \ 200462306a36Sopenharmony_ci (x == DRX_MIRROR_NO) ? "Normal" : \ 200562306a36Sopenharmony_ci (x == DRX_MIRROR_YES) ? "Mirrored" : \ 200662306a36Sopenharmony_ci (x == DRX_MIRROR_AUTO) ? "Auto" : \ 200762306a36Sopenharmony_ci (x == DRX_MIRROR_UNKNOWN) ? "Unknown" : \ 200862306a36Sopenharmony_ci "(Invalid)") 200962306a36Sopenharmony_ci#define DRX_STR_CLASSIFICATION(x) ( \ 201062306a36Sopenharmony_ci (x == DRX_CLASSIFICATION_GAUSS) ? "Gaussion" : \ 201162306a36Sopenharmony_ci (x == DRX_CLASSIFICATION_HVY_GAUSS) ? "Heavy Gaussion" : \ 201262306a36Sopenharmony_ci (x == DRX_CLASSIFICATION_COCHANNEL) ? "Co-channel" : \ 201362306a36Sopenharmony_ci (x == DRX_CLASSIFICATION_STATIC) ? "Static echo" : \ 201462306a36Sopenharmony_ci (x == DRX_CLASSIFICATION_MOVING) ? "Moving echo" : \ 201562306a36Sopenharmony_ci (x == DRX_CLASSIFICATION_ZERODB) ? "Zero dB echo" : \ 201662306a36Sopenharmony_ci (x == DRX_CLASSIFICATION_UNKNOWN) ? "Unknown" : \ 201762306a36Sopenharmony_ci (x == DRX_CLASSIFICATION_AUTO) ? "Auto" : \ 201862306a36Sopenharmony_ci "(Invalid)") 201962306a36Sopenharmony_ci 202062306a36Sopenharmony_ci#define DRX_STR_INTERLEAVEMODE(x) ( \ 202162306a36Sopenharmony_ci (x == DRX_INTERLEAVEMODE_I128_J1) ? "I128_J1" : \ 202262306a36Sopenharmony_ci (x == DRX_INTERLEAVEMODE_I128_J1_V2) ? "I128_J1_V2" : \ 202362306a36Sopenharmony_ci (x == DRX_INTERLEAVEMODE_I128_J2) ? "I128_J2" : \ 202462306a36Sopenharmony_ci (x == DRX_INTERLEAVEMODE_I64_J2) ? "I64_J2" : \ 202562306a36Sopenharmony_ci (x == DRX_INTERLEAVEMODE_I128_J3) ? "I128_J3" : \ 202662306a36Sopenharmony_ci (x == DRX_INTERLEAVEMODE_I32_J4) ? "I32_J4" : \ 202762306a36Sopenharmony_ci (x == DRX_INTERLEAVEMODE_I128_J4) ? "I128_J4" : \ 202862306a36Sopenharmony_ci (x == DRX_INTERLEAVEMODE_I16_J8) ? "I16_J8" : \ 202962306a36Sopenharmony_ci (x == DRX_INTERLEAVEMODE_I128_J5) ? "I128_J5" : \ 203062306a36Sopenharmony_ci (x == DRX_INTERLEAVEMODE_I8_J16) ? "I8_J16" : \ 203162306a36Sopenharmony_ci (x == DRX_INTERLEAVEMODE_I128_J6) ? "I128_J6" : \ 203262306a36Sopenharmony_ci (x == DRX_INTERLEAVEMODE_RESERVED_11) ? "Reserved 11" : \ 203362306a36Sopenharmony_ci (x == DRX_INTERLEAVEMODE_I128_J7) ? "I128_J7" : \ 203462306a36Sopenharmony_ci (x == DRX_INTERLEAVEMODE_RESERVED_13) ? "Reserved 13" : \ 203562306a36Sopenharmony_ci (x == DRX_INTERLEAVEMODE_I128_J8) ? "I128_J8" : \ 203662306a36Sopenharmony_ci (x == DRX_INTERLEAVEMODE_RESERVED_15) ? "Reserved 15" : \ 203762306a36Sopenharmony_ci (x == DRX_INTERLEAVEMODE_I12_J17) ? "I12_J17" : \ 203862306a36Sopenharmony_ci (x == DRX_INTERLEAVEMODE_I5_J4) ? "I5_J4" : \ 203962306a36Sopenharmony_ci (x == DRX_INTERLEAVEMODE_B52_M240) ? "B52_M240" : \ 204062306a36Sopenharmony_ci (x == DRX_INTERLEAVEMODE_B52_M720) ? "B52_M720" : \ 204162306a36Sopenharmony_ci (x == DRX_INTERLEAVEMODE_B52_M48) ? "B52_M48" : \ 204262306a36Sopenharmony_ci (x == DRX_INTERLEAVEMODE_B52_M0) ? "B52_M0" : \ 204362306a36Sopenharmony_ci (x == DRX_INTERLEAVEMODE_UNKNOWN) ? "Unknown" : \ 204462306a36Sopenharmony_ci (x == DRX_INTERLEAVEMODE_AUTO) ? "Auto" : \ 204562306a36Sopenharmony_ci "(Invalid)") 204662306a36Sopenharmony_ci 204762306a36Sopenharmony_ci#define DRX_STR_LDPC(x) ( \ 204862306a36Sopenharmony_ci (x == DRX_LDPC_0_4) ? "0.4" : \ 204962306a36Sopenharmony_ci (x == DRX_LDPC_0_6) ? "0.6" : \ 205062306a36Sopenharmony_ci (x == DRX_LDPC_0_8) ? "0.8" : \ 205162306a36Sopenharmony_ci (x == DRX_LDPC_AUTO) ? "Auto" : \ 205262306a36Sopenharmony_ci (x == DRX_LDPC_UNKNOWN) ? "Unknown" : \ 205362306a36Sopenharmony_ci "(Invalid)") 205462306a36Sopenharmony_ci 205562306a36Sopenharmony_ci#define DRX_STR_CARRIER(x) ( \ 205662306a36Sopenharmony_ci (x == DRX_CARRIER_MULTI) ? "Multi" : \ 205762306a36Sopenharmony_ci (x == DRX_CARRIER_SINGLE) ? "Single" : \ 205862306a36Sopenharmony_ci (x == DRX_CARRIER_AUTO) ? "Auto" : \ 205962306a36Sopenharmony_ci (x == DRX_CARRIER_UNKNOWN) ? "Unknown" : \ 206062306a36Sopenharmony_ci "(Invalid)") 206162306a36Sopenharmony_ci 206262306a36Sopenharmony_ci#define DRX_STR_FRAMEMODE(x) ( \ 206362306a36Sopenharmony_ci (x == DRX_FRAMEMODE_420) ? "420" : \ 206462306a36Sopenharmony_ci (x == DRX_FRAMEMODE_595) ? "595" : \ 206562306a36Sopenharmony_ci (x == DRX_FRAMEMODE_945) ? "945" : \ 206662306a36Sopenharmony_ci (x == DRX_FRAMEMODE_420_FIXED_PN) ? "420 with fixed PN" : \ 206762306a36Sopenharmony_ci (x == DRX_FRAMEMODE_945_FIXED_PN) ? "945 with fixed PN" : \ 206862306a36Sopenharmony_ci (x == DRX_FRAMEMODE_AUTO) ? "Auto" : \ 206962306a36Sopenharmony_ci (x == DRX_FRAMEMODE_UNKNOWN) ? "Unknown" : \ 207062306a36Sopenharmony_ci "(Invalid)") 207162306a36Sopenharmony_ci 207262306a36Sopenharmony_ci#define DRX_STR_PILOT(x) ( \ 207362306a36Sopenharmony_ci (x == DRX_PILOT_ON) ? "On" : \ 207462306a36Sopenharmony_ci (x == DRX_PILOT_OFF) ? "Off" : \ 207562306a36Sopenharmony_ci (x == DRX_PILOT_AUTO) ? "Auto" : \ 207662306a36Sopenharmony_ci (x == DRX_PILOT_UNKNOWN) ? "Unknown" : \ 207762306a36Sopenharmony_ci "(Invalid)") 207862306a36Sopenharmony_ci/* TPS */ 207962306a36Sopenharmony_ci 208062306a36Sopenharmony_ci#define DRX_STR_TPS_FRAME(x) ( \ 208162306a36Sopenharmony_ci (x == DRX_TPS_FRAME1) ? "Frame1" : \ 208262306a36Sopenharmony_ci (x == DRX_TPS_FRAME2) ? "Frame2" : \ 208362306a36Sopenharmony_ci (x == DRX_TPS_FRAME3) ? "Frame3" : \ 208462306a36Sopenharmony_ci (x == DRX_TPS_FRAME4) ? "Frame4" : \ 208562306a36Sopenharmony_ci (x == DRX_TPS_FRAME_UNKNOWN) ? "Unknown" : \ 208662306a36Sopenharmony_ci "(Invalid)") 208762306a36Sopenharmony_ci 208862306a36Sopenharmony_ci/* lock status */ 208962306a36Sopenharmony_ci 209062306a36Sopenharmony_ci#define DRX_STR_LOCKSTATUS(x) ( \ 209162306a36Sopenharmony_ci (x == DRX_NEVER_LOCK) ? "Never" : \ 209262306a36Sopenharmony_ci (x == DRX_NOT_LOCKED) ? "No" : \ 209362306a36Sopenharmony_ci (x == DRX_LOCKED) ? "Locked" : \ 209462306a36Sopenharmony_ci (x == DRX_LOCK_STATE_1) ? "Lock state 1" : \ 209562306a36Sopenharmony_ci (x == DRX_LOCK_STATE_2) ? "Lock state 2" : \ 209662306a36Sopenharmony_ci (x == DRX_LOCK_STATE_3) ? "Lock state 3" : \ 209762306a36Sopenharmony_ci (x == DRX_LOCK_STATE_4) ? "Lock state 4" : \ 209862306a36Sopenharmony_ci (x == DRX_LOCK_STATE_5) ? "Lock state 5" : \ 209962306a36Sopenharmony_ci (x == DRX_LOCK_STATE_6) ? "Lock state 6" : \ 210062306a36Sopenharmony_ci (x == DRX_LOCK_STATE_7) ? "Lock state 7" : \ 210162306a36Sopenharmony_ci (x == DRX_LOCK_STATE_8) ? "Lock state 8" : \ 210262306a36Sopenharmony_ci (x == DRX_LOCK_STATE_9) ? "Lock state 9" : \ 210362306a36Sopenharmony_ci "(Invalid)") 210462306a36Sopenharmony_ci 210562306a36Sopenharmony_ci/* version information , modules */ 210662306a36Sopenharmony_ci#define DRX_STR_MODULE(x) ( \ 210762306a36Sopenharmony_ci (x == DRX_MODULE_DEVICE) ? "Device" : \ 210862306a36Sopenharmony_ci (x == DRX_MODULE_MICROCODE) ? "Microcode" : \ 210962306a36Sopenharmony_ci (x == DRX_MODULE_DRIVERCORE) ? "CoreDriver" : \ 211062306a36Sopenharmony_ci (x == DRX_MODULE_DEVICEDRIVER) ? "DeviceDriver" : \ 211162306a36Sopenharmony_ci (x == DRX_MODULE_BSP_I2C) ? "BSP I2C" : \ 211262306a36Sopenharmony_ci (x == DRX_MODULE_BSP_TUNER) ? "BSP Tuner" : \ 211362306a36Sopenharmony_ci (x == DRX_MODULE_BSP_HOST) ? "BSP Host" : \ 211462306a36Sopenharmony_ci (x == DRX_MODULE_DAP) ? "Data Access Protocol" : \ 211562306a36Sopenharmony_ci (x == DRX_MODULE_UNKNOWN) ? "Unknown" : \ 211662306a36Sopenharmony_ci "(Invalid)") 211762306a36Sopenharmony_ci 211862306a36Sopenharmony_ci#define DRX_STR_POWER_MODE(x) ( \ 211962306a36Sopenharmony_ci (x == DRX_POWER_UP) ? "DRX_POWER_UP " : \ 212062306a36Sopenharmony_ci (x == DRX_POWER_MODE_1) ? "DRX_POWER_MODE_1" : \ 212162306a36Sopenharmony_ci (x == DRX_POWER_MODE_2) ? "DRX_POWER_MODE_2" : \ 212262306a36Sopenharmony_ci (x == DRX_POWER_MODE_3) ? "DRX_POWER_MODE_3" : \ 212362306a36Sopenharmony_ci (x == DRX_POWER_MODE_4) ? "DRX_POWER_MODE_4" : \ 212462306a36Sopenharmony_ci (x == DRX_POWER_MODE_5) ? "DRX_POWER_MODE_5" : \ 212562306a36Sopenharmony_ci (x == DRX_POWER_MODE_6) ? "DRX_POWER_MODE_6" : \ 212662306a36Sopenharmony_ci (x == DRX_POWER_MODE_7) ? "DRX_POWER_MODE_7" : \ 212762306a36Sopenharmony_ci (x == DRX_POWER_MODE_8) ? "DRX_POWER_MODE_8" : \ 212862306a36Sopenharmony_ci (x == DRX_POWER_MODE_9) ? "DRX_POWER_MODE_9" : \ 212962306a36Sopenharmony_ci (x == DRX_POWER_MODE_10) ? "DRX_POWER_MODE_10" : \ 213062306a36Sopenharmony_ci (x == DRX_POWER_MODE_11) ? "DRX_POWER_MODE_11" : \ 213162306a36Sopenharmony_ci (x == DRX_POWER_MODE_12) ? "DRX_POWER_MODE_12" : \ 213262306a36Sopenharmony_ci (x == DRX_POWER_MODE_13) ? "DRX_POWER_MODE_13" : \ 213362306a36Sopenharmony_ci (x == DRX_POWER_MODE_14) ? "DRX_POWER_MODE_14" : \ 213462306a36Sopenharmony_ci (x == DRX_POWER_MODE_15) ? "DRX_POWER_MODE_15" : \ 213562306a36Sopenharmony_ci (x == DRX_POWER_MODE_16) ? "DRX_POWER_MODE_16" : \ 213662306a36Sopenharmony_ci (x == DRX_POWER_DOWN) ? "DRX_POWER_DOWN " : \ 213762306a36Sopenharmony_ci "(Invalid)") 213862306a36Sopenharmony_ci 213962306a36Sopenharmony_ci#define DRX_STR_OOB_STANDARD(x) ( \ 214062306a36Sopenharmony_ci (x == DRX_OOB_MODE_A) ? "ANSI 55-1 " : \ 214162306a36Sopenharmony_ci (x == DRX_OOB_MODE_B_GRADE_A) ? "ANSI 55-2 A" : \ 214262306a36Sopenharmony_ci (x == DRX_OOB_MODE_B_GRADE_B) ? "ANSI 55-2 B" : \ 214362306a36Sopenharmony_ci "(Invalid)") 214462306a36Sopenharmony_ci 214562306a36Sopenharmony_ci#define DRX_STR_AUD_STANDARD(x) ( \ 214662306a36Sopenharmony_ci (x == DRX_AUD_STANDARD_BTSC) ? "BTSC" : \ 214762306a36Sopenharmony_ci (x == DRX_AUD_STANDARD_A2) ? "A2" : \ 214862306a36Sopenharmony_ci (x == DRX_AUD_STANDARD_EIAJ) ? "EIAJ" : \ 214962306a36Sopenharmony_ci (x == DRX_AUD_STANDARD_FM_STEREO) ? "FM Stereo" : \ 215062306a36Sopenharmony_ci (x == DRX_AUD_STANDARD_AUTO) ? "Auto" : \ 215162306a36Sopenharmony_ci (x == DRX_AUD_STANDARD_M_MONO) ? "M-Standard Mono" : \ 215262306a36Sopenharmony_ci (x == DRX_AUD_STANDARD_D_K_MONO) ? "D/K Mono FM" : \ 215362306a36Sopenharmony_ci (x == DRX_AUD_STANDARD_BG_FM) ? "B/G-Dual Carrier FM (A2)" : \ 215462306a36Sopenharmony_ci (x == DRX_AUD_STANDARD_D_K1) ? "D/K1-Dual Carrier FM" : \ 215562306a36Sopenharmony_ci (x == DRX_AUD_STANDARD_D_K2) ? "D/K2-Dual Carrier FM" : \ 215662306a36Sopenharmony_ci (x == DRX_AUD_STANDARD_D_K3) ? "D/K3-Dual Carrier FM" : \ 215762306a36Sopenharmony_ci (x == DRX_AUD_STANDARD_BG_NICAM_FM) ? "B/G-NICAM-FM" : \ 215862306a36Sopenharmony_ci (x == DRX_AUD_STANDARD_L_NICAM_AM) ? "L-NICAM-AM" : \ 215962306a36Sopenharmony_ci (x == DRX_AUD_STANDARD_I_NICAM_FM) ? "I-NICAM-FM" : \ 216062306a36Sopenharmony_ci (x == DRX_AUD_STANDARD_D_K_NICAM_FM) ? "D/K-NICAM-FM" : \ 216162306a36Sopenharmony_ci (x == DRX_AUD_STANDARD_UNKNOWN) ? "Unknown" : \ 216262306a36Sopenharmony_ci "(Invalid)") 216362306a36Sopenharmony_ci#define DRX_STR_AUD_STEREO(x) ( \ 216462306a36Sopenharmony_ci (x == true) ? "Stereo" : \ 216562306a36Sopenharmony_ci (x == false) ? "Mono" : \ 216662306a36Sopenharmony_ci "(Invalid)") 216762306a36Sopenharmony_ci 216862306a36Sopenharmony_ci#define DRX_STR_AUD_SAP(x) ( \ 216962306a36Sopenharmony_ci (x == true) ? "Present" : \ 217062306a36Sopenharmony_ci (x == false) ? "Not present" : \ 217162306a36Sopenharmony_ci "(Invalid)") 217262306a36Sopenharmony_ci 217362306a36Sopenharmony_ci#define DRX_STR_AUD_CARRIER(x) ( \ 217462306a36Sopenharmony_ci (x == true) ? "Present" : \ 217562306a36Sopenharmony_ci (x == false) ? "Not present" : \ 217662306a36Sopenharmony_ci "(Invalid)") 217762306a36Sopenharmony_ci 217862306a36Sopenharmony_ci#define DRX_STR_AUD_RDS(x) ( \ 217962306a36Sopenharmony_ci (x == true) ? "Available" : \ 218062306a36Sopenharmony_ci (x == false) ? "Not Available" : \ 218162306a36Sopenharmony_ci "(Invalid)") 218262306a36Sopenharmony_ci 218362306a36Sopenharmony_ci#define DRX_STR_AUD_NICAM_STATUS(x) ( \ 218462306a36Sopenharmony_ci (x == DRX_AUD_NICAM_DETECTED) ? "Detected" : \ 218562306a36Sopenharmony_ci (x == DRX_AUD_NICAM_NOT_DETECTED) ? "Not detected" : \ 218662306a36Sopenharmony_ci (x == DRX_AUD_NICAM_BAD) ? "Bad" : \ 218762306a36Sopenharmony_ci "(Invalid)") 218862306a36Sopenharmony_ci 218962306a36Sopenharmony_ci#define DRX_STR_RDS_VALID(x) ( \ 219062306a36Sopenharmony_ci (x == true) ? "Valid" : \ 219162306a36Sopenharmony_ci (x == false) ? "Not Valid" : \ 219262306a36Sopenharmony_ci "(Invalid)") 219362306a36Sopenharmony_ci 219462306a36Sopenharmony_ci/*------------------------------------------------------------------------- 219562306a36Sopenharmony_ciAccess macros 219662306a36Sopenharmony_ci-------------------------------------------------------------------------*/ 219762306a36Sopenharmony_ci 219862306a36Sopenharmony_ci/* 219962306a36Sopenharmony_ci* \brief Create a compilable reference to the microcode attribute 220062306a36Sopenharmony_ci* \param d pointer to demod instance 220162306a36Sopenharmony_ci* 220262306a36Sopenharmony_ci* Used as main reference to an attribute field. 220362306a36Sopenharmony_ci* Used by both macro implementation and function implementation. 220462306a36Sopenharmony_ci* These macros are defined to avoid duplication of code in macro and function 220562306a36Sopenharmony_ci* definitions that handle access of demod common or extended attributes. 220662306a36Sopenharmony_ci* 220762306a36Sopenharmony_ci*/ 220862306a36Sopenharmony_ci 220962306a36Sopenharmony_ci#define DRX_ATTR_MCRECORD(d) ((d)->my_common_attr->mcversion) 221062306a36Sopenharmony_ci#define DRX_ATTR_MIRRORFREQSPECT(d) ((d)->my_common_attr->mirror_freq_spect) 221162306a36Sopenharmony_ci#define DRX_ATTR_CURRENTPOWERMODE(d)((d)->my_common_attr->current_power_mode) 221262306a36Sopenharmony_ci#define DRX_ATTR_ISOPENED(d) ((d)->my_common_attr->is_opened) 221362306a36Sopenharmony_ci#define DRX_ATTR_USEBOOTLOADER(d) ((d)->my_common_attr->use_bootloader) 221462306a36Sopenharmony_ci#define DRX_ATTR_CURRENTSTANDARD(d) ((d)->my_common_attr->current_standard) 221562306a36Sopenharmony_ci#define DRX_ATTR_PREVSTANDARD(d) ((d)->my_common_attr->prev_standard) 221662306a36Sopenharmony_ci#define DRX_ATTR_CACHESTANDARD(d) ((d)->my_common_attr->di_cache_standard) 221762306a36Sopenharmony_ci#define DRX_ATTR_CURRENTCHANNEL(d) ((d)->my_common_attr->current_channel) 221862306a36Sopenharmony_ci#define DRX_ATTR_MICROCODE(d) ((d)->my_common_attr->microcode) 221962306a36Sopenharmony_ci#define DRX_ATTR_VERIFYMICROCODE(d) ((d)->my_common_attr->verify_microcode) 222062306a36Sopenharmony_ci#define DRX_ATTR_CAPABILITIES(d) ((d)->my_common_attr->capabilities) 222162306a36Sopenharmony_ci#define DRX_ATTR_PRODUCTID(d) ((d)->my_common_attr->product_id) 222262306a36Sopenharmony_ci#define DRX_ATTR_INTERMEDIATEFREQ(d) ((d)->my_common_attr->intermediate_freq) 222362306a36Sopenharmony_ci#define DRX_ATTR_SYSCLOCKFREQ(d) ((d)->my_common_attr->sys_clock_freq) 222462306a36Sopenharmony_ci#define DRX_ATTR_TUNERRFAGCPOL(d) ((d)->my_common_attr->tuner_rf_agc_pol) 222562306a36Sopenharmony_ci#define DRX_ATTR_TUNERIFAGCPOL(d) ((d)->my_common_attr->tuner_if_agc_pol) 222662306a36Sopenharmony_ci#define DRX_ATTR_TUNERSLOWMODE(d) ((d)->my_common_attr->tuner_slow_mode) 222762306a36Sopenharmony_ci#define DRX_ATTR_TUNERSPORTNR(d) ((d)->my_common_attr->tuner_port_nr) 222862306a36Sopenharmony_ci#define DRX_ATTR_I2CADDR(d) ((d)->my_i2c_dev_addr->i2c_addr) 222962306a36Sopenharmony_ci#define DRX_ATTR_I2CDEVID(d) ((d)->my_i2c_dev_addr->i2c_dev_id) 223062306a36Sopenharmony_ci#define DRX_ISMCVERTYPE(x) ((x) == AUX_VER_RECORD) 223162306a36Sopenharmony_ci 223262306a36Sopenharmony_ci/*************************/ 223362306a36Sopenharmony_ci 223462306a36Sopenharmony_ci/* Macros with device-specific handling are converted to CFG functions */ 223562306a36Sopenharmony_ci 223662306a36Sopenharmony_ci#define DRX_ACCESSMACRO_SET(demod, value, cfg_name, data_type) \ 223762306a36Sopenharmony_ci do { \ 223862306a36Sopenharmony_ci struct drx_cfg config; \ 223962306a36Sopenharmony_ci data_type cfg_data; \ 224062306a36Sopenharmony_ci config.cfg_type = cfg_name; \ 224162306a36Sopenharmony_ci config.cfg_data = &cfg_data; \ 224262306a36Sopenharmony_ci cfg_data = value; \ 224362306a36Sopenharmony_ci drx_ctrl(demod, DRX_CTRL_SET_CFG, &config); \ 224462306a36Sopenharmony_ci } while (0) 224562306a36Sopenharmony_ci 224662306a36Sopenharmony_ci#define DRX_ACCESSMACRO_GET(demod, value, cfg_name, data_type, error_value) \ 224762306a36Sopenharmony_ci do { \ 224862306a36Sopenharmony_ci int cfg_status; \ 224962306a36Sopenharmony_ci struct drx_cfg config; \ 225062306a36Sopenharmony_ci data_type cfg_data; \ 225162306a36Sopenharmony_ci config.cfg_type = cfg_name; \ 225262306a36Sopenharmony_ci config.cfg_data = &cfg_data; \ 225362306a36Sopenharmony_ci cfg_status = drx_ctrl(demod, DRX_CTRL_GET_CFG, &config); \ 225462306a36Sopenharmony_ci if (cfg_status == 0) { \ 225562306a36Sopenharmony_ci value = cfg_data; \ 225662306a36Sopenharmony_ci } else { \ 225762306a36Sopenharmony_ci value = (data_type)error_value; \ 225862306a36Sopenharmony_ci } \ 225962306a36Sopenharmony_ci } while (0) 226062306a36Sopenharmony_ci 226162306a36Sopenharmony_ci/* Configuration functions for usage by Access (XS) Macros */ 226262306a36Sopenharmony_ci 226362306a36Sopenharmony_ci#ifndef DRX_XS_CFG_BASE 226462306a36Sopenharmony_ci#define DRX_XS_CFG_BASE (500) 226562306a36Sopenharmony_ci#endif 226662306a36Sopenharmony_ci 226762306a36Sopenharmony_ci#define DRX_XS_CFG_PRESET (DRX_XS_CFG_BASE + 0) 226862306a36Sopenharmony_ci#define DRX_XS_CFG_AUD_BTSC_DETECT (DRX_XS_CFG_BASE + 1) 226962306a36Sopenharmony_ci#define DRX_XS_CFG_QAM_LOCKRANGE (DRX_XS_CFG_BASE + 2) 227062306a36Sopenharmony_ci 227162306a36Sopenharmony_ci/* Access Macros with device-specific handling */ 227262306a36Sopenharmony_ci 227362306a36Sopenharmony_ci#define DRX_SET_PRESET(d, x) \ 227462306a36Sopenharmony_ci DRX_ACCESSMACRO_SET((d), (x), DRX_XS_CFG_PRESET, char*) 227562306a36Sopenharmony_ci#define DRX_GET_PRESET(d, x) \ 227662306a36Sopenharmony_ci DRX_ACCESSMACRO_GET((d), (x), DRX_XS_CFG_PRESET, char*, "ERROR") 227762306a36Sopenharmony_ci 227862306a36Sopenharmony_ci#define DRX_SET_AUD_BTSC_DETECT(d, x) DRX_ACCESSMACRO_SET((d), (x), \ 227962306a36Sopenharmony_ci DRX_XS_CFG_AUD_BTSC_DETECT, enum drx_aud_btsc_detect) 228062306a36Sopenharmony_ci#define DRX_GET_AUD_BTSC_DETECT(d, x) DRX_ACCESSMACRO_GET((d), (x), \ 228162306a36Sopenharmony_ci DRX_XS_CFG_AUD_BTSC_DETECT, enum drx_aud_btsc_detect, DRX_UNKNOWN) 228262306a36Sopenharmony_ci 228362306a36Sopenharmony_ci#define DRX_SET_QAM_LOCKRANGE(d, x) DRX_ACCESSMACRO_SET((d), (x), \ 228462306a36Sopenharmony_ci DRX_XS_CFG_QAM_LOCKRANGE, enum drx_qam_lock_range) 228562306a36Sopenharmony_ci#define DRX_GET_QAM_LOCKRANGE(d, x) DRX_ACCESSMACRO_GET((d), (x), \ 228662306a36Sopenharmony_ci DRX_XS_CFG_QAM_LOCKRANGE, enum drx_qam_lock_range, DRX_UNKNOWN) 228762306a36Sopenharmony_ci 228862306a36Sopenharmony_ci/* 228962306a36Sopenharmony_ci* \brief Macro to check if std is an ATV standard 229062306a36Sopenharmony_ci* \retval true std is an ATV standard 229162306a36Sopenharmony_ci* \retval false std is an ATV standard 229262306a36Sopenharmony_ci*/ 229362306a36Sopenharmony_ci#define DRX_ISATVSTD(std) (((std) == DRX_STANDARD_PAL_SECAM_BG) || \ 229462306a36Sopenharmony_ci ((std) == DRX_STANDARD_PAL_SECAM_DK) || \ 229562306a36Sopenharmony_ci ((std) == DRX_STANDARD_PAL_SECAM_I) || \ 229662306a36Sopenharmony_ci ((std) == DRX_STANDARD_PAL_SECAM_L) || \ 229762306a36Sopenharmony_ci ((std) == DRX_STANDARD_PAL_SECAM_LP) || \ 229862306a36Sopenharmony_ci ((std) == DRX_STANDARD_NTSC) || \ 229962306a36Sopenharmony_ci ((std) == DRX_STANDARD_FM)) 230062306a36Sopenharmony_ci 230162306a36Sopenharmony_ci/* 230262306a36Sopenharmony_ci* \brief Macro to check if std is an QAM standard 230362306a36Sopenharmony_ci* \retval true std is an QAM standards 230462306a36Sopenharmony_ci* \retval false std is an QAM standards 230562306a36Sopenharmony_ci*/ 230662306a36Sopenharmony_ci#define DRX_ISQAMSTD(std) (((std) == DRX_STANDARD_ITU_A) || \ 230762306a36Sopenharmony_ci ((std) == DRX_STANDARD_ITU_B) || \ 230862306a36Sopenharmony_ci ((std) == DRX_STANDARD_ITU_C) || \ 230962306a36Sopenharmony_ci ((std) == DRX_STANDARD_ITU_D)) 231062306a36Sopenharmony_ci 231162306a36Sopenharmony_ci/* 231262306a36Sopenharmony_ci* \brief Macro to check if std is VSB standard 231362306a36Sopenharmony_ci* \retval true std is VSB standard 231462306a36Sopenharmony_ci* \retval false std is not VSB standard 231562306a36Sopenharmony_ci*/ 231662306a36Sopenharmony_ci#define DRX_ISVSBSTD(std) ((std) == DRX_STANDARD_8VSB) 231762306a36Sopenharmony_ci 231862306a36Sopenharmony_ci/* 231962306a36Sopenharmony_ci* \brief Macro to check if std is DVBT standard 232062306a36Sopenharmony_ci* \retval true std is DVBT standard 232162306a36Sopenharmony_ci* \retval false std is not DVBT standard 232262306a36Sopenharmony_ci*/ 232362306a36Sopenharmony_ci#define DRX_ISDVBTSTD(std) ((std) == DRX_STANDARD_DVBT) 232462306a36Sopenharmony_ci 232562306a36Sopenharmony_ci/*------------------------------------------------------------------------- 232662306a36Sopenharmony_ciTHE END 232762306a36Sopenharmony_ci-------------------------------------------------------------------------*/ 232862306a36Sopenharmony_ci#endif /* __DRXDRIVER_H__ */ 2329