diff options
Diffstat (limited to 'drivers/media/dvb-frontends/stv090x_priv.h')
-rw-r--r-- | drivers/media/dvb-frontends/stv090x_priv.h | 279 |
1 files changed, 279 insertions, 0 deletions
diff --git a/drivers/media/dvb-frontends/stv090x_priv.h b/drivers/media/dvb-frontends/stv090x_priv.h new file mode 100644 index 000000000000..5b780c80d496 --- /dev/null +++ b/drivers/media/dvb-frontends/stv090x_priv.h | |||
@@ -0,0 +1,279 @@ | |||
1 | /* | ||
2 | STV0900/0903 Multistandard Broadcast Frontend driver | ||
3 | Copyright (C) Manu Abraham <abraham.manu@gmail.com> | ||
4 | |||
5 | Copyright (C) ST Microelectronics | ||
6 | |||
7 | This program is free software; you can redistribute it and/or modify | ||
8 | it under the terms of the GNU General Public License as published by | ||
9 | the Free Software Foundation; either version 2 of the License, or | ||
10 | (at your option) any later version. | ||
11 | |||
12 | This program is distributed in the hope that it will be useful, | ||
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | GNU General Public License for more details. | ||
16 | |||
17 | You should have received a copy of the GNU General Public License | ||
18 | along with this program; if not, write to the Free Software | ||
19 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
20 | */ | ||
21 | |||
22 | #ifndef __STV090x_PRIV_H | ||
23 | #define __STV090x_PRIV_H | ||
24 | |||
25 | #include "dvb_frontend.h" | ||
26 | |||
27 | #define FE_ERROR 0 | ||
28 | #define FE_NOTICE 1 | ||
29 | #define FE_INFO 2 | ||
30 | #define FE_DEBUG 3 | ||
31 | #define FE_DEBUGREG 4 | ||
32 | |||
33 | #define dprintk(__y, __z, format, arg...) do { \ | ||
34 | if (__z) { \ | ||
35 | if ((verbose > FE_ERROR) && (verbose > __y)) \ | ||
36 | printk(KERN_ERR "%s: " format "\n", __func__ , ##arg); \ | ||
37 | else if ((verbose > FE_NOTICE) && (verbose > __y)) \ | ||
38 | printk(KERN_NOTICE "%s: " format "\n", __func__ , ##arg); \ | ||
39 | else if ((verbose > FE_INFO) && (verbose > __y)) \ | ||
40 | printk(KERN_INFO "%s: " format "\n", __func__ , ##arg); \ | ||
41 | else if ((verbose > FE_DEBUG) && (verbose > __y)) \ | ||
42 | printk(KERN_DEBUG "%s: " format "\n", __func__ , ##arg); \ | ||
43 | } else { \ | ||
44 | if (verbose > __y) \ | ||
45 | printk(format, ##arg); \ | ||
46 | } \ | ||
47 | } while (0) | ||
48 | |||
49 | #define STV090x_READ_DEMOD(__state, __reg) (( \ | ||
50 | (__state)->demod == STV090x_DEMODULATOR_1) ? \ | ||
51 | stv090x_read_reg(__state, STV090x_P2_##__reg) : \ | ||
52 | stv090x_read_reg(__state, STV090x_P1_##__reg)) | ||
53 | |||
54 | #define STV090x_WRITE_DEMOD(__state, __reg, __data) (( \ | ||
55 | (__state)->demod == STV090x_DEMODULATOR_1) ? \ | ||
56 | stv090x_write_reg(__state, STV090x_P2_##__reg, __data) :\ | ||
57 | stv090x_write_reg(__state, STV090x_P1_##__reg, __data)) | ||
58 | |||
59 | #define STV090x_ADDR_OFFST(__state, __x) (( \ | ||
60 | (__state->demod) == STV090x_DEMODULATOR_1) ? \ | ||
61 | STV090x_P1_##__x : \ | ||
62 | STV090x_P2_##__x) | ||
63 | |||
64 | |||
65 | #define STV090x_SETFIELD(mask, bitf, val) (mask = (mask & (~(((1 << STV090x_WIDTH_##bitf) - 1) <<\ | ||
66 | STV090x_OFFST_##bitf))) | \ | ||
67 | (val << STV090x_OFFST_##bitf)) | ||
68 | |||
69 | #define STV090x_GETFIELD(val, bitf) ((val >> STV090x_OFFST_##bitf) & ((1 << STV090x_WIDTH_##bitf) - 1)) | ||
70 | |||
71 | |||
72 | #define STV090x_SETFIELD_Px(mask, bitf, val) (mask = (mask & (~(((1 << STV090x_WIDTH_Px_##bitf) - 1) <<\ | ||
73 | STV090x_OFFST_Px_##bitf))) | \ | ||
74 | (val << STV090x_OFFST_Px_##bitf)) | ||
75 | |||
76 | #define STV090x_GETFIELD_Px(val, bitf) ((val >> STV090x_OFFST_Px_##bitf) & ((1 << STV090x_WIDTH_Px_##bitf) - 1)) | ||
77 | |||
78 | #define MAKEWORD16(__a, __b) (((__a) << 8) | (__b)) | ||
79 | |||
80 | #define MSB(__x) ((__x >> 8) & 0xff) | ||
81 | #define LSB(__x) (__x & 0xff) | ||
82 | |||
83 | |||
84 | #define STV090x_IQPOWER_THRESHOLD 30 | ||
85 | #define STV090x_SEARCH_AGC2_TH_CUT20 700 | ||
86 | #define STV090x_SEARCH_AGC2_TH_CUT30 1400 | ||
87 | |||
88 | #define STV090x_SEARCH_AGC2_TH(__ver) \ | ||
89 | ((__ver <= 0x20) ? \ | ||
90 | STV090x_SEARCH_AGC2_TH_CUT20 : \ | ||
91 | STV090x_SEARCH_AGC2_TH_CUT30) | ||
92 | |||
93 | enum stv090x_signal_state { | ||
94 | STV090x_NOAGC1, | ||
95 | STV090x_NOCARRIER, | ||
96 | STV090x_NODATA, | ||
97 | STV090x_DATAOK, | ||
98 | STV090x_RANGEOK, | ||
99 | STV090x_OUTOFRANGE | ||
100 | }; | ||
101 | |||
102 | enum stv090x_fec { | ||
103 | STV090x_PR12 = 0, | ||
104 | STV090x_PR23, | ||
105 | STV090x_PR34, | ||
106 | STV090x_PR45, | ||
107 | STV090x_PR56, | ||
108 | STV090x_PR67, | ||
109 | STV090x_PR78, | ||
110 | STV090x_PR89, | ||
111 | STV090x_PR910, | ||
112 | STV090x_PRERR | ||
113 | }; | ||
114 | |||
115 | enum stv090x_modulation { | ||
116 | STV090x_QPSK, | ||
117 | STV090x_8PSK, | ||
118 | STV090x_16APSK, | ||
119 | STV090x_32APSK, | ||
120 | STV090x_UNKNOWN | ||
121 | }; | ||
122 | |||
123 | enum stv090x_frame { | ||
124 | STV090x_LONG_FRAME, | ||
125 | STV090x_SHORT_FRAME | ||
126 | }; | ||
127 | |||
128 | enum stv090x_pilot { | ||
129 | STV090x_PILOTS_OFF, | ||
130 | STV090x_PILOTS_ON | ||
131 | }; | ||
132 | |||
133 | enum stv090x_rolloff { | ||
134 | STV090x_RO_35, | ||
135 | STV090x_RO_25, | ||
136 | STV090x_RO_20 | ||
137 | }; | ||
138 | |||
139 | enum stv090x_inversion { | ||
140 | STV090x_IQ_AUTO, | ||
141 | STV090x_IQ_NORMAL, | ||
142 | STV090x_IQ_SWAP | ||
143 | }; | ||
144 | |||
145 | enum stv090x_modcod { | ||
146 | STV090x_DUMMY_PLF = 0, | ||
147 | STV090x_QPSK_14, | ||
148 | STV090x_QPSK_13, | ||
149 | STV090x_QPSK_25, | ||
150 | STV090x_QPSK_12, | ||
151 | STV090x_QPSK_35, | ||
152 | STV090x_QPSK_23, | ||
153 | STV090x_QPSK_34, | ||
154 | STV090x_QPSK_45, | ||
155 | STV090x_QPSK_56, | ||
156 | STV090x_QPSK_89, | ||
157 | STV090x_QPSK_910, | ||
158 | STV090x_8PSK_35, | ||
159 | STV090x_8PSK_23, | ||
160 | STV090x_8PSK_34, | ||
161 | STV090x_8PSK_56, | ||
162 | STV090x_8PSK_89, | ||
163 | STV090x_8PSK_910, | ||
164 | STV090x_16APSK_23, | ||
165 | STV090x_16APSK_34, | ||
166 | STV090x_16APSK_45, | ||
167 | STV090x_16APSK_56, | ||
168 | STV090x_16APSK_89, | ||
169 | STV090x_16APSK_910, | ||
170 | STV090x_32APSK_34, | ||
171 | STV090x_32APSK_45, | ||
172 | STV090x_32APSK_56, | ||
173 | STV090x_32APSK_89, | ||
174 | STV090x_32APSK_910, | ||
175 | STV090x_MODCODE_UNKNOWN | ||
176 | }; | ||
177 | |||
178 | enum stv090x_search { | ||
179 | STV090x_SEARCH_DSS = 0, | ||
180 | STV090x_SEARCH_DVBS1, | ||
181 | STV090x_SEARCH_DVBS2, | ||
182 | STV090x_SEARCH_AUTO | ||
183 | }; | ||
184 | |||
185 | enum stv090x_algo { | ||
186 | STV090x_BLIND_SEARCH, | ||
187 | STV090x_COLD_SEARCH, | ||
188 | STV090x_WARM_SEARCH | ||
189 | }; | ||
190 | |||
191 | enum stv090x_delsys { | ||
192 | STV090x_ERROR = 0, | ||
193 | STV090x_DVBS1 = 1, | ||
194 | STV090x_DVBS2, | ||
195 | STV090x_DSS | ||
196 | }; | ||
197 | |||
198 | struct stv090x_long_frame_crloop { | ||
199 | enum stv090x_modcod modcod; | ||
200 | |||
201 | u8 crl_pilots_on_2; | ||
202 | u8 crl_pilots_off_2; | ||
203 | u8 crl_pilots_on_5; | ||
204 | u8 crl_pilots_off_5; | ||
205 | u8 crl_pilots_on_10; | ||
206 | u8 crl_pilots_off_10; | ||
207 | u8 crl_pilots_on_20; | ||
208 | u8 crl_pilots_off_20; | ||
209 | u8 crl_pilots_on_30; | ||
210 | u8 crl_pilots_off_30; | ||
211 | }; | ||
212 | |||
213 | struct stv090x_short_frame_crloop { | ||
214 | enum stv090x_modulation modulation; | ||
215 | |||
216 | u8 crl_2; /* SR < 3M */ | ||
217 | u8 crl_5; /* 3 < SR <= 7M */ | ||
218 | u8 crl_10; /* 7 < SR <= 15M */ | ||
219 | u8 crl_20; /* 10 < SR <= 25M */ | ||
220 | u8 crl_30; /* 10 < SR <= 45M */ | ||
221 | }; | ||
222 | |||
223 | struct stv090x_reg { | ||
224 | u16 addr; | ||
225 | u8 data; | ||
226 | }; | ||
227 | |||
228 | struct stv090x_tab { | ||
229 | s32 real; | ||
230 | s32 read; | ||
231 | }; | ||
232 | |||
233 | struct stv090x_internal { | ||
234 | struct i2c_adapter *i2c_adap; | ||
235 | u8 i2c_addr; | ||
236 | |||
237 | struct mutex demod_lock; /* Lock access to shared register */ | ||
238 | struct mutex tuner_lock; /* Lock access to tuners */ | ||
239 | s32 mclk; /* Masterclock Divider factor */ | ||
240 | u32 dev_ver; | ||
241 | |||
242 | int num_used; | ||
243 | }; | ||
244 | |||
245 | struct stv090x_state { | ||
246 | enum stv090x_device device; | ||
247 | enum stv090x_demodulator demod; | ||
248 | enum stv090x_mode demod_mode; | ||
249 | struct stv090x_internal *internal; | ||
250 | |||
251 | struct i2c_adapter *i2c; | ||
252 | const struct stv090x_config *config; | ||
253 | struct dvb_frontend frontend; | ||
254 | |||
255 | u32 *verbose; /* Cached module verbosity */ | ||
256 | |||
257 | enum stv090x_delsys delsys; | ||
258 | enum stv090x_fec fec; | ||
259 | enum stv090x_modulation modulation; | ||
260 | enum stv090x_modcod modcod; | ||
261 | enum stv090x_search search_mode; | ||
262 | enum stv090x_frame frame_len; | ||
263 | enum stv090x_pilot pilots; | ||
264 | enum stv090x_rolloff rolloff; | ||
265 | enum stv090x_inversion inversion; | ||
266 | enum stv090x_algo algo; | ||
267 | |||
268 | u32 frequency; | ||
269 | u32 srate; | ||
270 | |||
271 | s32 tuner_bw; | ||
272 | |||
273 | s32 search_range; | ||
274 | |||
275 | s32 DemodTimeout; | ||
276 | s32 FecTimeout; | ||
277 | }; | ||
278 | |||
279 | #endif /* __STV090x_PRIV_H */ | ||