2007-10-22 09:56:38 -03:00
/*
tda18271 . h - header for the Philips / NXP TDA18271 silicon tuner
2008-01-02 01:58:26 -03:00
Copyright ( C ) 2007 , 2008 Michael Krufky < mkrufky @ linuxtv . org >
2007-10-22 09:56:38 -03:00
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 __TDA18271_H__
# define __TDA18271_H__
# include <linux/i2c.h>
2017-12-28 13:03:51 -05:00
# include <media/dvb_frontend.h>
2007-10-22 09:56:38 -03:00
2008-01-02 03:01:54 -03:00
struct tda18271_std_map_item {
2008-01-03 01:17:45 -03:00
u16 if_freq ;
2008-04-22 14:46:06 -03:00
/* EP3[4:3] */
unsigned int agc_mode : 2 ;
/* EP3[2:0] */
unsigned int std : 3 ;
/* EP4[7] */
2008-04-22 14:46:06 -03:00
unsigned int fm_rfn : 1 ;
2008-04-22 14:46:21 -03:00
/* EP4[4:2] */
unsigned int if_lvl : 3 ;
2008-04-22 14:46:22 -03:00
/* EB22[6:0] */
unsigned int rfagc_top : 7 ;
2008-01-02 03:01:54 -03:00
} ;
struct tda18271_std_map {
2008-01-08 10:38:10 -03:00
struct tda18271_std_map_item fm_radio ;
2008-01-02 03:01:54 -03:00
struct tda18271_std_map_item atv_b ;
struct tda18271_std_map_item atv_dk ;
struct tda18271_std_map_item atv_gh ;
struct tda18271_std_map_item atv_i ;
struct tda18271_std_map_item atv_l ;
struct tda18271_std_map_item atv_lc ;
struct tda18271_std_map_item atv_mn ;
struct tda18271_std_map_item atsc_6 ;
struct tda18271_std_map_item dvbt_6 ;
struct tda18271_std_map_item dvbt_7 ;
struct tda18271_std_map_item dvbt_8 ;
struct tda18271_std_map_item qam_6 ;
2011-12-21 08:07:52 -03:00
struct tda18271_std_map_item qam_7 ;
2008-01-02 03:01:54 -03:00
struct tda18271_std_map_item qam_8 ;
} ;
2008-04-22 14:46:23 -03:00
enum tda18271_role {
TDA18271_MASTER = 0 ,
TDA18271_SLAVE ,
} ;
2007-12-09 22:23:30 -03:00
enum tda18271_i2c_gate {
TDA18271_GATE_AUTO = 0 ,
TDA18271_GATE_ANALOG ,
TDA18271_GATE_DIGITAL ,
} ;
2009-08-29 16:25:37 -03:00
enum tda18271_output_options {
/* slave tuner output & loop thru & xtal oscillator always on */
TDA18271_OUTPUT_LT_XT_ON = 0 ,
2008-05-11 12:46:52 -03:00
2009-08-29 16:25:37 -03:00
/* slave tuner output loop thru off */
TDA18271_OUTPUT_LT_OFF = 1 ,
2008-05-11 12:46:52 -03:00
2009-08-29 16:25:37 -03:00
/* xtal oscillator off */
TDA18271_OUTPUT_XT_OFF = 2 ,
2008-05-11 12:46:52 -03:00
} ;
2009-10-23 02:47:49 -03:00
enum tda18271_small_i2c {
TDA18271_39_BYTE_CHUNK_INIT = 0 ,
2010-09-26 22:58:28 -03:00
TDA18271_16_BYTE_CHUNK_INIT = 16 ,
TDA18271_08_BYTE_CHUNK_INIT = 8 ,
TDA18271_03_BYTE_CHUNK_INIT = 3 ,
2009-10-23 02:47:49 -03:00
} ;
2008-01-02 03:01:54 -03:00
struct tda18271_config {
2008-01-03 01:40:47 -03:00
/* override default if freq / std settings (optional) */
2008-01-02 03:01:54 -03:00
struct tda18271_std_map * std_map ;
2008-01-03 01:40:47 -03:00
2008-04-22 14:46:23 -03:00
/* master / slave tuner: master uses main pll, slave uses cal pll */
enum tda18271_role role ;
2008-01-03 01:40:47 -03:00
/* use i2c gate provided by analog or digital demod */
2008-01-02 03:01:54 -03:00
enum tda18271_i2c_gate gate ;
2008-04-22 14:46:06 -03:00
2009-08-29 16:25:37 -03:00
/* output options that can be disabled */
enum tda18271_output_options output_opt ;
2008-05-11 12:46:52 -03:00
2011-03-30 22:57:33 -03:00
/* some i2c providers can't write all 39 registers at once */
2009-10-23 02:47:49 -03:00
enum tda18271_small_i2c small_i2c ;
2009-08-27 16:58:06 -03:00
/* force rf tracking filter calibration on startup */
unsigned int rf_cal_on_startup : 1 ;
2012-10-01 23:50:37 -03:00
/* prevent any register access during attach(),
* delaying both IR & RF calibration until init ( )
* module option ' cal ' overrides this delay */
unsigned int delay_cal : 1 ;
2009-03-04 19:42:06 -03:00
/* interface to saa713x / tda829x */
unsigned int config ;
} ;
# define TDA18271_CALLBACK_CMD_AGC_ENABLE 0
enum tda18271_mode {
TDA18271_ANALOG = 0 ,
TDA18271_DIGITAL ,
2008-01-02 03:01:54 -03:00
} ;
2015-02-18 14:12:42 -03:00
# if IS_REACHABLE(CONFIG_MEDIA_TUNER_TDA18271)
2007-10-22 09:56:38 -03:00
extern struct dvb_frontend * tda18271_attach ( struct dvb_frontend * fe , u8 addr ,
2007-12-09 22:23:30 -03:00
struct i2c_adapter * i2c ,
2008-01-02 03:01:54 -03:00
struct tda18271_config * cfg ) ;
2007-10-22 09:56:38 -03:00
# else
static inline struct dvb_frontend * tda18271_attach ( struct dvb_frontend * fe ,
u8 addr ,
2007-12-09 22:23:30 -03:00
struct i2c_adapter * i2c ,
2008-01-02 03:01:54 -03:00
struct tda18271_config * cfg )
2007-10-22 09:56:38 -03:00
{
2008-04-08 23:20:00 -03:00
printk ( KERN_WARNING " %s: driver disabled by Kconfig \n " , __func__ ) ;
2007-10-22 09:56:38 -03:00
return NULL ;
}
# endif
# endif /* __TDA18271_H__ */