2005-04-16 15:20:36 -07:00
/*
Driver for Philips tda1004xh OFDM Frontend
( c ) 2004 Andrew de Quincey
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
# ifndef TDA1004X_H
# define TDA1004X_H
# include <linux/dvb/frontend.h>
# include <linux/firmware.h>
2005-07-07 17:57:40 -07:00
enum tda10046_xtal {
TDA10046_XTAL_4M ,
TDA10046_XTAL_16M ,
} ;
enum tda10046_agc {
TDA10046_AGC_DEFAULT , /* original configuration */
TDA10046_AGC_IFO_AUTO_NEG , /* IF AGC only, automatic, negtive */
2005-07-07 17:57:43 -07:00
TDA10046_AGC_IFO_AUTO_POS , /* IF AGC only, automatic, positive */
2006-02-07 06:49:10 -02:00
TDA10046_AGC_TDA827X , /* IF AGC only, special setup for tda827x */
TDA10046_AGC_TDA827X_GPL , /* same as above, but GPIOs 0 */
2005-07-07 17:57:40 -07:00
} ;
enum tda10046_if {
TDA10046_FREQ_3617 , /* original config, 36,166 MHZ */
TDA10046_FREQ_3613 , /* 36,13 MHZ */
2005-07-07 17:57:43 -07:00
TDA10046_FREQ_045 , /* low IF, 4.0, 4.5, or 5.0 MHZ */
TDA10046_FREQ_052 , /* low IF, 5.1667 MHZ for tda9889 */
2005-07-07 17:57:40 -07:00
} ;
2005-04-16 15:20:36 -07:00
struct tda1004x_config
{
/* the demodulator's i2c address */
u8 demod_address ;
/* does the "inversion" need inverted? */
2005-05-16 21:54:35 -07:00
u8 invert ;
2005-04-16 15:20:36 -07:00
/* Does the OCLK signal need inverted? */
2005-05-16 21:54:35 -07:00
u8 invert_oclk ;
2005-04-16 15:20:36 -07:00
2005-07-07 17:57:40 -07:00
/* Xtal frequency, 4 or 16MHz*/
enum tda10046_xtal xtal_freq ;
/* IF frequency */
enum tda10046_if if_freq ;
/* AGC configuration */
enum tda10046_agc agc_config ;
2005-05-16 21:54:35 -07:00
2005-04-16 15:20:36 -07:00
/* request firmware for device */
2005-07-07 17:57:40 -07:00
/* set this to NULL if the card has a firmware EEPROM */
2005-04-16 15:20:36 -07:00
int ( * request_firmware ) ( struct dvb_frontend * fe , const struct firmware * * fw , char * name ) ;
} ;
2006-08-08 09:10:08 -03:00
# if defined(CONFIG_DVB_TDA1004X) || defined(CONFIG_DVB_TDA1004X_MODULE)
2005-04-16 15:20:36 -07:00
extern struct dvb_frontend * tda10045_attach ( const struct tda1004x_config * config ,
struct i2c_adapter * i2c ) ;
extern struct dvb_frontend * tda10046_attach ( const struct tda1004x_config * config ,
struct i2c_adapter * i2c ) ;
2006-08-08 09:10:08 -03:00
# else
static inline struct dvb_frontend * tda10045_attach ( const struct tda1004x_config * config ,
struct i2c_adapter * i2c )
{
printk ( KERN_WARNING " %s: driver disabled by Kconfig \n " , __FUNCTION__ ) ;
return NULL ;
}
static inline struct dvb_frontend * tda10046_attach ( const struct tda1004x_config * config ,
struct i2c_adapter * i2c )
{
printk ( KERN_WARNING " %s: driver disabled by Kconfig \n " , __FUNCTION__ ) ;
return NULL ;
}
# endif // CONFIG_DVB_TDA1004X
2005-04-16 15:20:36 -07:00
2006-08-08 09:10:08 -03:00
static inline int tda1004x_writereg ( struct dvb_frontend * fe , u8 reg , u8 val ) {
int r = 0 ;
u8 buf [ ] = { reg , val } ;
if ( fe - > ops . write )
r = fe - > ops . write ( fe , buf , 2 ) ;
return r ;
}
2005-04-16 15:20:36 -07:00
# endif // TDA1004X_H