diff options
Diffstat (limited to 'drivers/media/dvb-frontends/stb0899_priv.h')
-rw-r--r-- | drivers/media/dvb-frontends/stb0899_priv.h | 263 |
1 files changed, 263 insertions, 0 deletions
diff --git a/drivers/media/dvb-frontends/stb0899_priv.h b/drivers/media/dvb-frontends/stb0899_priv.h new file mode 100644 index 000000000000..82395b912815 --- /dev/null +++ b/drivers/media/dvb-frontends/stb0899_priv.h | |||
@@ -0,0 +1,263 @@ | |||
1 | /* | ||
2 | STB0899 Multistandard 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 __STB0899_PRIV_H | ||
23 | #define __STB0899_PRIV_H | ||
24 | |||
25 | #include "dvb_frontend.h" | ||
26 | #include "stb0899_drv.h" | ||
27 | |||
28 | #define FE_ERROR 0 | ||
29 | #define FE_NOTICE 1 | ||
30 | #define FE_INFO 2 | ||
31 | #define FE_DEBUG 3 | ||
32 | #define FE_DEBUGREG 4 | ||
33 | |||
34 | #define dprintk(x, y, z, format, arg...) do { \ | ||
35 | if (z) { \ | ||
36 | if ((*x > FE_ERROR) && (*x > y)) \ | ||
37 | printk(KERN_ERR "%s: " format "\n", __func__ , ##arg); \ | ||
38 | else if ((*x > FE_NOTICE) && (*x > y)) \ | ||
39 | printk(KERN_NOTICE "%s: " format "\n", __func__ , ##arg); \ | ||
40 | else if ((*x > FE_INFO) && (*x > y)) \ | ||
41 | printk(KERN_INFO "%s: " format "\n", __func__ , ##arg); \ | ||
42 | else if ((*x > FE_DEBUG) && (*x > y)) \ | ||
43 | printk(KERN_DEBUG "%s: " format "\n", __func__ , ##arg); \ | ||
44 | } else { \ | ||
45 | if (*x > y) \ | ||
46 | printk(format, ##arg); \ | ||
47 | } \ | ||
48 | } while(0) | ||
49 | |||
50 | #define INRANGE(val, x, y) (((x <= val) && (val <= y)) || \ | ||
51 | ((y <= val) && (val <= x)) ? 1 : 0) | ||
52 | |||
53 | #define BYTE0 0 | ||
54 | #define BYTE1 8 | ||
55 | #define BYTE2 16 | ||
56 | #define BYTE3 24 | ||
57 | |||
58 | #define GETBYTE(x, y) (((x) >> (y)) & 0xff) | ||
59 | #define MAKEWORD32(a, b, c, d) (((a) << 24) | ((b) << 16) | ((c) << 8) | (d)) | ||
60 | #define MAKEWORD16(a, b) (((a) << 8) | (b)) | ||
61 | |||
62 | #define LSB(x) ((x & 0xff)) | ||
63 | #define MSB(y) ((y >> 8) & 0xff) | ||
64 | |||
65 | |||
66 | #define STB0899_GETFIELD(bitf, val) ((val >> STB0899_OFFST_##bitf) & ((1 << STB0899_WIDTH_##bitf) - 1)) | ||
67 | |||
68 | |||
69 | #define STB0899_SETFIELD(mask, val, width, offset) (mask & (~(((1 << width) - 1) << \ | ||
70 | offset))) | ((val & \ | ||
71 | ((1 << width) - 1)) << offset) | ||
72 | |||
73 | #define STB0899_SETFIELD_VAL(bitf, mask, val) (mask = (mask & (~(((1 << STB0899_WIDTH_##bitf) - 1) <<\ | ||
74 | STB0899_OFFST_##bitf))) | \ | ||
75 | (val << STB0899_OFFST_##bitf)) | ||
76 | |||
77 | |||
78 | enum stb0899_status { | ||
79 | NOAGC1 = 0, | ||
80 | AGC1OK, | ||
81 | NOTIMING, | ||
82 | ANALOGCARRIER, | ||
83 | TIMINGOK, | ||
84 | NOAGC2, | ||
85 | AGC2OK, | ||
86 | NOCARRIER, | ||
87 | CARRIEROK, | ||
88 | NODATA, | ||
89 | FALSELOCK, | ||
90 | DATAOK, | ||
91 | OUTOFRANGE, | ||
92 | RANGEOK, | ||
93 | DVBS2_DEMOD_LOCK, | ||
94 | DVBS2_DEMOD_NOLOCK, | ||
95 | DVBS2_FEC_LOCK, | ||
96 | DVBS2_FEC_NOLOCK | ||
97 | }; | ||
98 | |||
99 | enum stb0899_modcod { | ||
100 | STB0899_DUMMY_PLF, | ||
101 | STB0899_QPSK_14, | ||
102 | STB0899_QPSK_13, | ||
103 | STB0899_QPSK_25, | ||
104 | STB0899_QPSK_12, | ||
105 | STB0899_QPSK_35, | ||
106 | STB0899_QPSK_23, | ||
107 | STB0899_QPSK_34, | ||
108 | STB0899_QPSK_45, | ||
109 | STB0899_QPSK_56, | ||
110 | STB0899_QPSK_89, | ||
111 | STB0899_QPSK_910, | ||
112 | STB0899_8PSK_35, | ||
113 | STB0899_8PSK_23, | ||
114 | STB0899_8PSK_34, | ||
115 | STB0899_8PSK_56, | ||
116 | STB0899_8PSK_89, | ||
117 | STB0899_8PSK_910, | ||
118 | STB0899_16APSK_23, | ||
119 | STB0899_16APSK_34, | ||
120 | STB0899_16APSK_45, | ||
121 | STB0899_16APSK_56, | ||
122 | STB0899_16APSK_89, | ||
123 | STB0899_16APSK_910, | ||
124 | STB0899_32APSK_34, | ||
125 | STB0899_32APSK_45, | ||
126 | STB0899_32APSK_56, | ||
127 | STB0899_32APSK_89, | ||
128 | STB0899_32APSK_910 | ||
129 | }; | ||
130 | |||
131 | enum stb0899_frame { | ||
132 | STB0899_LONG_FRAME, | ||
133 | STB0899_SHORT_FRAME | ||
134 | }; | ||
135 | |||
136 | enum stb0899_alpha { | ||
137 | RRC_20, | ||
138 | RRC_25, | ||
139 | RRC_35 | ||
140 | }; | ||
141 | |||
142 | struct stb0899_tab { | ||
143 | s32 real; | ||
144 | s32 read; | ||
145 | }; | ||
146 | |||
147 | enum stb0899_fec { | ||
148 | STB0899_FEC_1_2 = 13, | ||
149 | STB0899_FEC_2_3 = 18, | ||
150 | STB0899_FEC_3_4 = 21, | ||
151 | STB0899_FEC_5_6 = 24, | ||
152 | STB0899_FEC_6_7 = 25, | ||
153 | STB0899_FEC_7_8 = 26 | ||
154 | }; | ||
155 | |||
156 | struct stb0899_params { | ||
157 | u32 freq; /* Frequency */ | ||
158 | u32 srate; /* Symbol rate */ | ||
159 | enum fe_code_rate fecrate; | ||
160 | }; | ||
161 | |||
162 | struct stb0899_internal { | ||
163 | u32 master_clk; | ||
164 | u32 freq; /* Demod internal Frequency */ | ||
165 | u32 srate; /* Demod internal Symbol rate */ | ||
166 | enum stb0899_fec fecrate; /* Demod internal FEC rate */ | ||
167 | s32 srch_range; /* Demod internal Search Range */ | ||
168 | s32 sub_range; /* Demod current sub range (Hz) */ | ||
169 | s32 tuner_step; /* Tuner step (Hz) */ | ||
170 | s32 tuner_offst; /* Relative offset to carrier (Hz) */ | ||
171 | u32 tuner_bw; /* Current bandwidth of the tuner (Hz) */ | ||
172 | |||
173 | s32 mclk; /* Masterclock Divider factor (binary) */ | ||
174 | s32 rolloff; /* Current RollOff of the filter (x100) */ | ||
175 | |||
176 | s16 derot_freq; /* Current derotator frequency (Hz) */ | ||
177 | s16 derot_percent; | ||
178 | |||
179 | s16 direction; /* Current derotator search direction */ | ||
180 | s16 derot_step; /* Derotator step (binary value) */ | ||
181 | s16 t_derot; /* Derotator time constant (ms) */ | ||
182 | s16 t_data; /* Data recovery time constant (ms) */ | ||
183 | s16 sub_dir; /* Direction of the next sub range */ | ||
184 | |||
185 | s16 t_agc1; /* Agc1 time constant (ms) */ | ||
186 | s16 t_agc2; /* Agc2 time constant (ms) */ | ||
187 | |||
188 | u32 lock; /* Demod internal lock state */ | ||
189 | enum stb0899_status status; /* Demod internal status */ | ||
190 | |||
191 | /* DVB-S2 */ | ||
192 | s32 agc_gain; /* RF AGC Gain */ | ||
193 | s32 center_freq; /* Nominal carrier frequency */ | ||
194 | s32 av_frame_coarse; /* Coarse carrier freq search frames */ | ||
195 | s32 av_frame_fine; /* Fine carrier freq search frames */ | ||
196 | |||
197 | s16 step_size; /* Carrier frequency search step size */ | ||
198 | |||
199 | enum stb0899_alpha rrc_alpha; | ||
200 | enum stb0899_inversion inversion; | ||
201 | enum stb0899_modcod modcod; | ||
202 | u8 pilots; /* Pilots found */ | ||
203 | |||
204 | enum stb0899_frame frame_length; | ||
205 | u8 v_status; /* VSTATUS */ | ||
206 | u8 err_ctrl; /* ERRCTRLn */ | ||
207 | }; | ||
208 | |||
209 | struct stb0899_state { | ||
210 | struct i2c_adapter *i2c; | ||
211 | struct stb0899_config *config; | ||
212 | struct dvb_frontend frontend; | ||
213 | |||
214 | u32 *verbose; /* Cached module verbosity level */ | ||
215 | |||
216 | struct stb0899_internal internal; /* Device internal parameters */ | ||
217 | |||
218 | /* cached params from API */ | ||
219 | enum fe_delivery_system delsys; | ||
220 | struct stb0899_params params; | ||
221 | |||
222 | u32 rx_freq; /* DiSEqC 2.0 receiver freq */ | ||
223 | struct mutex search_lock; | ||
224 | }; | ||
225 | /* stb0899.c */ | ||
226 | extern int stb0899_read_reg(struct stb0899_state *state, | ||
227 | unsigned int reg); | ||
228 | |||
229 | extern u32 _stb0899_read_s2reg(struct stb0899_state *state, | ||
230 | u32 stb0899_i2cdev, | ||
231 | u32 stb0899_base_addr, | ||
232 | u16 stb0899_reg_offset); | ||
233 | |||
234 | extern int stb0899_read_regs(struct stb0899_state *state, | ||
235 | unsigned int reg, u8 *buf, | ||
236 | u32 count); | ||
237 | |||
238 | extern int stb0899_write_regs(struct stb0899_state *state, | ||
239 | unsigned int reg, u8 *data, | ||
240 | u32 count); | ||
241 | |||
242 | extern int stb0899_write_reg(struct stb0899_state *state, | ||
243 | unsigned int reg, | ||
244 | u8 data); | ||
245 | |||
246 | extern int stb0899_write_s2reg(struct stb0899_state *state, | ||
247 | u32 stb0899_i2cdev, | ||
248 | u32 stb0899_base_addr, | ||
249 | u16 stb0899_reg_offset, | ||
250 | u32 stb0899_data); | ||
251 | |||
252 | extern int stb0899_i2c_gate_ctrl(struct dvb_frontend *fe, int enable); | ||
253 | |||
254 | |||
255 | #define STB0899_READ_S2REG(DEVICE, REG) (_stb0899_read_s2reg(state, DEVICE, STB0899_BASE_##REG, STB0899_OFF0_##REG)) | ||
256 | //#define STB0899_WRITE_S2REG(DEVICE, REG, DATA) (_stb0899_write_s2reg(state, DEVICE, STB0899_BASE_##REG, STB0899_OFF0_##REG, DATA)) | ||
257 | |||
258 | /* stb0899_algo.c */ | ||
259 | extern enum stb0899_status stb0899_dvbs_algo(struct stb0899_state *state); | ||
260 | extern enum stb0899_status stb0899_dvbs2_algo(struct stb0899_state *state); | ||
261 | extern long stb0899_carr_width(struct stb0899_state *state); | ||
262 | |||
263 | #endif //__STB0899_PRIV_H | ||