Commit | Line | Data |
---|---|---|
e415c689 MA |
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 | ||
fada1935 | 25 | #include <media/dvb_frontend.h> |
e415c689 MA |
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 | ||
27d40321 MA |
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 | |
b4a4248d | 86 | #define STV090x_SEARCH_AGC2_TH_CUT30 1400 |
27d40321 MA |
87 | |
88 | #define STV090x_SEARCH_AGC2_TH(__ver) \ | |
89 | ((__ver <= 0x20) ? \ | |
90 | STV090x_SEARCH_AGC2_TH_CUT20 : \ | |
91 | STV090x_SEARCH_AGC2_TH_CUT30) | |
e415c689 MA |
92 | |
93 | enum stv090x_signal_state { | |
c4fa649a | 94 | STV090x_NOAGC1, |
e415c689 MA |
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 | ||
27d40321 MA |
216 | u8 crl_2; /* SR < 3M */ |
217 | u8 crl_5; /* 3 < SR <= 7M */ | |
e415c689 MA |
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 | ||
97f7a2ae | 233 | struct stv090x_internal { |
6e6a8b5a | 234 | struct i2c_adapter *i2c_adap; |
97f7a2ae AR |
235 | u8 i2c_addr; |
236 | ||
237 | struct mutex demod_lock; /* Lock access to shared register */ | |
96506a50 | 238 | struct mutex tuner_lock; /* Lock access to tuners */ |
97f7a2ae AR |
239 | s32 mclk; /* Masterclock Divider factor */ |
240 | u32 dev_ver; | |
241 | ||
242 | int num_used; | |
243 | }; | |
244 | ||
e415c689 MA |
245 | struct stv090x_state { |
246 | enum stv090x_device device; | |
247 | enum stv090x_demodulator demod; | |
248 | enum stv090x_mode demod_mode; | |
97f7a2ae | 249 | struct stv090x_internal *internal; |
e415c689 MA |
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 | ||
e415c689 MA |
271 | s32 tuner_bw; |
272 | ||
e415c689 MA |
273 | s32 search_range; |
274 | ||
275 | s32 DemodTimeout; | |
276 | s32 FecTimeout; | |
277 | }; | |
278 | ||
279 | #endif /* __STV090x_PRIV_H */ |