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