1*ccae7af2SMauro Carvalho Chehab /* 2*ccae7af2SMauro Carvalho Chehab tda18271.h - header for the Philips / NXP TDA18271 silicon tuner 3*ccae7af2SMauro Carvalho Chehab 4*ccae7af2SMauro Carvalho Chehab Copyright (C) 2007, 2008 Michael Krufky <mkrufky@linuxtv.org> 5*ccae7af2SMauro Carvalho Chehab 6*ccae7af2SMauro Carvalho Chehab This program is free software; you can redistribute it and/or modify 7*ccae7af2SMauro Carvalho Chehab it under the terms of the GNU General Public License as published by 8*ccae7af2SMauro Carvalho Chehab the Free Software Foundation; either version 2 of the License, or 9*ccae7af2SMauro Carvalho Chehab (at your option) any later version. 10*ccae7af2SMauro Carvalho Chehab 11*ccae7af2SMauro Carvalho Chehab This program is distributed in the hope that it will be useful, 12*ccae7af2SMauro Carvalho Chehab but WITHOUT ANY WARRANTY; without even the implied warranty of 13*ccae7af2SMauro Carvalho Chehab MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14*ccae7af2SMauro Carvalho Chehab GNU General Public License for more details. 15*ccae7af2SMauro Carvalho Chehab 16*ccae7af2SMauro Carvalho Chehab You should have received a copy of the GNU General Public License 17*ccae7af2SMauro Carvalho Chehab along with this program; if not, write to the Free Software 18*ccae7af2SMauro Carvalho Chehab Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19*ccae7af2SMauro Carvalho Chehab */ 20*ccae7af2SMauro Carvalho Chehab 21*ccae7af2SMauro Carvalho Chehab #ifndef __TDA18271_H__ 22*ccae7af2SMauro Carvalho Chehab #define __TDA18271_H__ 23*ccae7af2SMauro Carvalho Chehab 24*ccae7af2SMauro Carvalho Chehab #include <linux/i2c.h> 25*ccae7af2SMauro Carvalho Chehab #include "dvb_frontend.h" 26*ccae7af2SMauro Carvalho Chehab 27*ccae7af2SMauro Carvalho Chehab struct tda18271_std_map_item { 28*ccae7af2SMauro Carvalho Chehab u16 if_freq; 29*ccae7af2SMauro Carvalho Chehab 30*ccae7af2SMauro Carvalho Chehab /* EP3[4:3] */ 31*ccae7af2SMauro Carvalho Chehab unsigned int agc_mode:2; 32*ccae7af2SMauro Carvalho Chehab /* EP3[2:0] */ 33*ccae7af2SMauro Carvalho Chehab unsigned int std:3; 34*ccae7af2SMauro Carvalho Chehab /* EP4[7] */ 35*ccae7af2SMauro Carvalho Chehab unsigned int fm_rfn:1; 36*ccae7af2SMauro Carvalho Chehab /* EP4[4:2] */ 37*ccae7af2SMauro Carvalho Chehab unsigned int if_lvl:3; 38*ccae7af2SMauro Carvalho Chehab /* EB22[6:0] */ 39*ccae7af2SMauro Carvalho Chehab unsigned int rfagc_top:7; 40*ccae7af2SMauro Carvalho Chehab }; 41*ccae7af2SMauro Carvalho Chehab 42*ccae7af2SMauro Carvalho Chehab struct tda18271_std_map { 43*ccae7af2SMauro Carvalho Chehab struct tda18271_std_map_item fm_radio; 44*ccae7af2SMauro Carvalho Chehab struct tda18271_std_map_item atv_b; 45*ccae7af2SMauro Carvalho Chehab struct tda18271_std_map_item atv_dk; 46*ccae7af2SMauro Carvalho Chehab struct tda18271_std_map_item atv_gh; 47*ccae7af2SMauro Carvalho Chehab struct tda18271_std_map_item atv_i; 48*ccae7af2SMauro Carvalho Chehab struct tda18271_std_map_item atv_l; 49*ccae7af2SMauro Carvalho Chehab struct tda18271_std_map_item atv_lc; 50*ccae7af2SMauro Carvalho Chehab struct tda18271_std_map_item atv_mn; 51*ccae7af2SMauro Carvalho Chehab struct tda18271_std_map_item atsc_6; 52*ccae7af2SMauro Carvalho Chehab struct tda18271_std_map_item dvbt_6; 53*ccae7af2SMauro Carvalho Chehab struct tda18271_std_map_item dvbt_7; 54*ccae7af2SMauro Carvalho Chehab struct tda18271_std_map_item dvbt_8; 55*ccae7af2SMauro Carvalho Chehab struct tda18271_std_map_item qam_6; 56*ccae7af2SMauro Carvalho Chehab struct tda18271_std_map_item qam_7; 57*ccae7af2SMauro Carvalho Chehab struct tda18271_std_map_item qam_8; 58*ccae7af2SMauro Carvalho Chehab }; 59*ccae7af2SMauro Carvalho Chehab 60*ccae7af2SMauro Carvalho Chehab enum tda18271_role { 61*ccae7af2SMauro Carvalho Chehab TDA18271_MASTER = 0, 62*ccae7af2SMauro Carvalho Chehab TDA18271_SLAVE, 63*ccae7af2SMauro Carvalho Chehab }; 64*ccae7af2SMauro Carvalho Chehab 65*ccae7af2SMauro Carvalho Chehab enum tda18271_i2c_gate { 66*ccae7af2SMauro Carvalho Chehab TDA18271_GATE_AUTO = 0, 67*ccae7af2SMauro Carvalho Chehab TDA18271_GATE_ANALOG, 68*ccae7af2SMauro Carvalho Chehab TDA18271_GATE_DIGITAL, 69*ccae7af2SMauro Carvalho Chehab }; 70*ccae7af2SMauro Carvalho Chehab 71*ccae7af2SMauro Carvalho Chehab enum tda18271_output_options { 72*ccae7af2SMauro Carvalho Chehab /* slave tuner output & loop thru & xtal oscillator always on */ 73*ccae7af2SMauro Carvalho Chehab TDA18271_OUTPUT_LT_XT_ON = 0, 74*ccae7af2SMauro Carvalho Chehab 75*ccae7af2SMauro Carvalho Chehab /* slave tuner output loop thru off */ 76*ccae7af2SMauro Carvalho Chehab TDA18271_OUTPUT_LT_OFF = 1, 77*ccae7af2SMauro Carvalho Chehab 78*ccae7af2SMauro Carvalho Chehab /* xtal oscillator off */ 79*ccae7af2SMauro Carvalho Chehab TDA18271_OUTPUT_XT_OFF = 2, 80*ccae7af2SMauro Carvalho Chehab }; 81*ccae7af2SMauro Carvalho Chehab 82*ccae7af2SMauro Carvalho Chehab enum tda18271_small_i2c { 83*ccae7af2SMauro Carvalho Chehab TDA18271_39_BYTE_CHUNK_INIT = 0, 84*ccae7af2SMauro Carvalho Chehab TDA18271_16_BYTE_CHUNK_INIT = 16, 85*ccae7af2SMauro Carvalho Chehab TDA18271_08_BYTE_CHUNK_INIT = 8, 86*ccae7af2SMauro Carvalho Chehab TDA18271_03_BYTE_CHUNK_INIT = 3, 87*ccae7af2SMauro Carvalho Chehab }; 88*ccae7af2SMauro Carvalho Chehab 89*ccae7af2SMauro Carvalho Chehab struct tda18271_config { 90*ccae7af2SMauro Carvalho Chehab /* override default if freq / std settings (optional) */ 91*ccae7af2SMauro Carvalho Chehab struct tda18271_std_map *std_map; 92*ccae7af2SMauro Carvalho Chehab 93*ccae7af2SMauro Carvalho Chehab /* master / slave tuner: master uses main pll, slave uses cal pll */ 94*ccae7af2SMauro Carvalho Chehab enum tda18271_role role; 95*ccae7af2SMauro Carvalho Chehab 96*ccae7af2SMauro Carvalho Chehab /* use i2c gate provided by analog or digital demod */ 97*ccae7af2SMauro Carvalho Chehab enum tda18271_i2c_gate gate; 98*ccae7af2SMauro Carvalho Chehab 99*ccae7af2SMauro Carvalho Chehab /* output options that can be disabled */ 100*ccae7af2SMauro Carvalho Chehab enum tda18271_output_options output_opt; 101*ccae7af2SMauro Carvalho Chehab 102*ccae7af2SMauro Carvalho Chehab /* some i2c providers can't write all 39 registers at once */ 103*ccae7af2SMauro Carvalho Chehab enum tda18271_small_i2c small_i2c; 104*ccae7af2SMauro Carvalho Chehab 105*ccae7af2SMauro Carvalho Chehab /* force rf tracking filter calibration on startup */ 106*ccae7af2SMauro Carvalho Chehab unsigned int rf_cal_on_startup:1; 107*ccae7af2SMauro Carvalho Chehab 108*ccae7af2SMauro Carvalho Chehab /* interface to saa713x / tda829x */ 109*ccae7af2SMauro Carvalho Chehab unsigned int config; 110*ccae7af2SMauro Carvalho Chehab }; 111*ccae7af2SMauro Carvalho Chehab 112*ccae7af2SMauro Carvalho Chehab #define TDA18271_CALLBACK_CMD_AGC_ENABLE 0 113*ccae7af2SMauro Carvalho Chehab 114*ccae7af2SMauro Carvalho Chehab enum tda18271_mode { 115*ccae7af2SMauro Carvalho Chehab TDA18271_ANALOG = 0, 116*ccae7af2SMauro Carvalho Chehab TDA18271_DIGITAL, 117*ccae7af2SMauro Carvalho Chehab }; 118*ccae7af2SMauro Carvalho Chehab 119*ccae7af2SMauro Carvalho Chehab #if defined(CONFIG_MEDIA_TUNER_TDA18271) || (defined(CONFIG_MEDIA_TUNER_TDA18271_MODULE) && defined(MODULE)) 120*ccae7af2SMauro Carvalho Chehab extern struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr, 121*ccae7af2SMauro Carvalho Chehab struct i2c_adapter *i2c, 122*ccae7af2SMauro Carvalho Chehab struct tda18271_config *cfg); 123*ccae7af2SMauro Carvalho Chehab #else 124*ccae7af2SMauro Carvalho Chehab static inline struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, 125*ccae7af2SMauro Carvalho Chehab u8 addr, 126*ccae7af2SMauro Carvalho Chehab struct i2c_adapter *i2c, 127*ccae7af2SMauro Carvalho Chehab struct tda18271_config *cfg) 128*ccae7af2SMauro Carvalho Chehab { 129*ccae7af2SMauro Carvalho Chehab printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 130*ccae7af2SMauro Carvalho Chehab return NULL; 131*ccae7af2SMauro Carvalho Chehab } 132*ccae7af2SMauro Carvalho Chehab #endif 133*ccae7af2SMauro Carvalho Chehab 134*ccae7af2SMauro Carvalho Chehab #endif /* __TDA18271_H__ */ 135