xref: /linux/drivers/media/tuners/tda18271.h (revision ccae7af2bf07dfef69cc2eb6ebc9e1ff15addfbd)
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