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