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