Merge tag 'v3.3.7' into 3.3/master
[zen-stable.git] / drivers / media / dvb / frontends / stv090x_priv.h
blob5b780c80d4967a6609a4610590c5fe00eb229456
1 /*
2 STV0900/0903 Multistandard Broadcast Frontend driver
3 Copyright (C) Manu Abraham <abraham.manu@gmail.com>
5 Copyright (C) ST Microelectronics
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.
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.
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.
22 #ifndef __STV090x_PRIV_H
23 #define __STV090x_PRIV_H
25 #include "dvb_frontend.h"
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
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)
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))
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))
59 #define STV090x_ADDR_OFFST(__state, __x) (( \
60 (__state->demod) == STV090x_DEMODULATOR_1) ? \
61 STV090x_P1_##__x : \
62 STV090x_P2_##__x)
65 #define STV090x_SETFIELD(mask, bitf, val) (mask = (mask & (~(((1 << STV090x_WIDTH_##bitf) - 1) <<\
66 STV090x_OFFST_##bitf))) | \
67 (val << STV090x_OFFST_##bitf))
69 #define STV090x_GETFIELD(val, bitf) ((val >> STV090x_OFFST_##bitf) & ((1 << STV090x_WIDTH_##bitf) - 1))
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))
76 #define STV090x_GETFIELD_Px(val, bitf) ((val >> STV090x_OFFST_Px_##bitf) & ((1 << STV090x_WIDTH_Px_##bitf) - 1))
78 #define MAKEWORD16(__a, __b) (((__a) << 8) | (__b))
80 #define MSB(__x) ((__x >> 8) & 0xff)
81 #define LSB(__x) (__x & 0xff)
84 #define STV090x_IQPOWER_THRESHOLD 30
85 #define STV090x_SEARCH_AGC2_TH_CUT20 700
86 #define STV090x_SEARCH_AGC2_TH_CUT30 1400
88 #define STV090x_SEARCH_AGC2_TH(__ver) \
89 ((__ver <= 0x20) ? \
90 STV090x_SEARCH_AGC2_TH_CUT20 : \
91 STV090x_SEARCH_AGC2_TH_CUT30)
93 enum stv090x_signal_state {
94 STV090x_NOAGC1,
95 STV090x_NOCARRIER,
96 STV090x_NODATA,
97 STV090x_DATAOK,
98 STV090x_RANGEOK,
99 STV090x_OUTOFRANGE
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
115 enum stv090x_modulation {
116 STV090x_QPSK,
117 STV090x_8PSK,
118 STV090x_16APSK,
119 STV090x_32APSK,
120 STV090x_UNKNOWN
123 enum stv090x_frame {
124 STV090x_LONG_FRAME,
125 STV090x_SHORT_FRAME
128 enum stv090x_pilot {
129 STV090x_PILOTS_OFF,
130 STV090x_PILOTS_ON
133 enum stv090x_rolloff {
134 STV090x_RO_35,
135 STV090x_RO_25,
136 STV090x_RO_20
139 enum stv090x_inversion {
140 STV090x_IQ_AUTO,
141 STV090x_IQ_NORMAL,
142 STV090x_IQ_SWAP
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
178 enum stv090x_search {
179 STV090x_SEARCH_DSS = 0,
180 STV090x_SEARCH_DVBS1,
181 STV090x_SEARCH_DVBS2,
182 STV090x_SEARCH_AUTO
185 enum stv090x_algo {
186 STV090x_BLIND_SEARCH,
187 STV090x_COLD_SEARCH,
188 STV090x_WARM_SEARCH
191 enum stv090x_delsys {
192 STV090x_ERROR = 0,
193 STV090x_DVBS1 = 1,
194 STV090x_DVBS2,
195 STV090x_DSS
198 struct stv090x_long_frame_crloop {
199 enum stv090x_modcod modcod;
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;
213 struct stv090x_short_frame_crloop {
214 enum stv090x_modulation modulation;
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 */
223 struct stv090x_reg {
224 u16 addr;
225 u8 data;
228 struct stv090x_tab {
229 s32 real;
230 s32 read;
233 struct stv090x_internal {
234 struct i2c_adapter *i2c_adap;
235 u8 i2c_addr;
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;
242 int num_used;
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;
251 struct i2c_adapter *i2c;
252 const struct stv090x_config *config;
253 struct dvb_frontend frontend;
255 u32 *verbose; /* Cached module verbosity */
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;
268 u32 frequency;
269 u32 srate;
271 s32 tuner_bw;
273 s32 search_range;
275 s32 DemodTimeout;
276 s32 FecTimeout;
279 #endif /* __STV090x_PRIV_H */