Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
[sfrench/cifs-2.6.git] / drivers / media / dvb-frontends / stv090x_priv.h
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 <media/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 */