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