tracing: Add __string_src() helper to help compilers not to get confused
[sfrench/cifs-2.6.git] / drivers / media / dvb-frontends / bcm3510_priv.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * Support for the Broadcom BCM3510 ATSC demodulator (1st generation Air2PC)
4  *
5  *  Copyright (C) 2001-5, B2C2 inc.
6  *
7  *  GPL/Linux driver written by Patrick Boettcher <patrick.boettcher@posteo.de>
8  */
9 #ifndef __BCM3510_PRIV_H__
10 #define __BCM3510_PRIV_H__
11
12 #define PACKED __attribute__((packed))
13
14 #undef err
15 #define err(format, arg...)  printk(KERN_ERR     "bcm3510: " format "\n" , ## arg)
16 #undef info
17 #define info(format, arg...) printk(KERN_INFO    "bcm3510: " format "\n" , ## arg)
18 #undef warn
19 #define warn(format, arg...) printk(KERN_WARNING "bcm3510: " format "\n" , ## arg)
20
21
22 #define PANASONIC_FIRST_IF_BASE_IN_KHz  1407500
23 #define BCM3510_SYMBOL_RATE             5381000
24
25 typedef union {
26         u8 raw;
27
28         struct {
29                 u8 CTL   :8;
30         } TSTCTL_2e;
31
32         u8 LDCERC_4e;
33         u8 LDUERC_4f;
34         u8 LD_BER0_65;
35         u8 LD_BER1_66;
36         u8 LD_BER2_67;
37         u8 LD_BER3_68;
38
39         struct {
40                 u8 RESET :1;
41                 u8 IDLE  :1;
42                 u8 STOP  :1;
43                 u8 HIRQ0 :1;
44                 u8 HIRQ1 :1;
45                 u8 na0   :1;
46                 u8 HABAV :1;
47                 u8 na1   :1;
48         } HCTL1_a0;
49
50         struct {
51                 u8 na0    :1;
52                 u8 IDLMSK :1;
53                 u8 STMSK  :1;
54                 u8 I0MSK  :1;
55                 u8 I1MSK  :1;
56                 u8 na1    :1;
57                 u8 HABMSK :1;
58                 u8 na2    :1;
59         } HCTLMSK_a1;
60
61         struct {
62                 u8 RESET  :1;
63                 u8 IDLE   :1;
64                 u8 STOP   :1;
65                 u8 RUN    :1;
66                 u8 HABAV  :1;
67                 u8 MEMAV  :1;
68                 u8 ALDONE :1;
69                 u8 REIRQ  :1;
70         } APSTAT1_a2;
71
72         struct {
73                 u8 RSTMSK :1;
74                 u8 IMSK   :1;
75                 u8 SMSK   :1;
76                 u8 RMSK   :1;
77                 u8 HABMSK :1;
78                 u8 MAVMSK :1;
79                 u8 ALDMSK :1;
80                 u8 REMSK  :1;
81         } APMSK1_a3;
82
83         u8 APSTAT2_a4;
84         u8 APMSK2_a5;
85
86         struct {
87                 u8 HABADR :7;
88                 u8 na     :1;
89         } HABADR_a6;
90
91         u8 HABDATA_a7;
92
93         struct {
94                 u8 HABR   :1;
95                 u8 LDHABR :1;
96                 u8 APMSK  :1;
97                 u8 HMSK   :1;
98                 u8 LDMSK  :1;
99                 u8 na     :3;
100         } HABSTAT_a8;
101
102         u8 MADRH_a9;
103         u8 MADRL_aa;
104         u8 MDATA_ab;
105
106         struct {
107 #define JDEC_WAIT_AT_RAM      0x7
108 #define JDEC_EEPROM_LOAD_WAIT 0x4
109                 u8 JDEC   :3;
110                 u8 na     :5;
111         } JDEC_ca;
112
113         struct {
114                 u8 REV   :4;
115                 u8 LAYER :4;
116         } REVID_e0;
117
118         struct {
119                 u8 unk0   :1;
120                 u8 CNTCTL :1;
121                 u8 BITCNT :1;
122                 u8 unk1   :1;
123                 u8 RESYNC :1;
124                 u8 unk2   :3;
125         } BERCTL_fa;
126
127         struct {
128                 u8 CSEL0  :1;
129                 u8 CLKED0 :1;
130                 u8 CSEL1  :1;
131                 u8 CLKED1 :1;
132                 u8 CLKLEV :1;
133                 u8 SPIVAR :1;
134                 u8 na     :2;
135         } TUNSET_fc;
136
137         struct {
138                 u8 CLK    :1;
139                 u8 DATA   :1;
140                 u8 CS0    :1;
141                 u8 CS1    :1;
142                 u8 AGCSEL :1;
143                 u8 na0    :1;
144                 u8 TUNSEL :1;
145                 u8 na1    :1;
146         } TUNCTL_fd;
147
148         u8 TUNSEL0_fe;
149         u8 TUNSEL1_ff;
150
151 } bcm3510_register_value;
152
153 /* HAB commands */
154
155 /* version */
156 #define CMD_GET_VERSION_INFO   0x3D
157 #define MSGID_GET_VERSION_INFO 0x15
158 struct bcm3510_hab_cmd_get_version_info {
159         u8 microcode_version;
160         u8 script_version;
161         u8 config_version;
162         u8 demod_version;
163 } PACKED;
164
165 #define BCM3510_DEF_MICROCODE_VERSION 0x0E
166 #define BCM3510_DEF_SCRIPT_VERSION    0x06
167 #define BCM3510_DEF_CONFIG_VERSION    0x01
168 #define BCM3510_DEF_DEMOD_VERSION     0xB1
169
170 /* acquire */
171 #define CMD_ACQUIRE            0x38
172
173 #define MSGID_EXT_TUNER_ACQUIRE 0x0A
174 struct bcm3510_hab_cmd_ext_acquire {
175         struct {
176                 u8 MODE      :4;
177                 u8 BW        :1;
178                 u8 FA        :1;
179                 u8 NTSCSWEEP :1;
180                 u8 OFFSET    :1;
181         } PACKED ACQUIRE0; /* control_byte */
182
183         struct {
184                 u8 IF_FREQ  :3;
185                 u8 zero0    :1;
186                 u8 SYM_RATE :3;
187                 u8 zero1    :1;
188         } PACKED ACQUIRE1; /* sym_if */
189
190         u8 IF_OFFSET0;   /* IF_Offset_10hz */
191         u8 IF_OFFSET1;
192         u8 SYM_OFFSET0;  /* SymbolRateOffset */
193         u8 SYM_OFFSET1;
194         u8 NTSC_OFFSET0; /* NTSC_Offset_10hz */
195         u8 NTSC_OFFSET1;
196 } PACKED;
197
198 #define MSGID_INT_TUNER_ACQUIRE 0x0B
199 struct bcm3510_hab_cmd_int_acquire {
200         struct {
201                 u8 MODE      :4;
202                 u8 BW        :1;
203                 u8 FA        :1;
204                 u8 NTSCSWEEP :1;
205                 u8 OFFSET    :1;
206         } PACKED ACQUIRE0; /* control_byte */
207
208         struct {
209                 u8 IF_FREQ  :3;
210                 u8 zero0    :1;
211                 u8 SYM_RATE :3;
212                 u8 zero1    :1;
213         } PACKED ACQUIRE1; /* sym_if */
214
215         u8 TUNER_FREQ0;
216         u8 TUNER_FREQ1;
217         u8 TUNER_FREQ2;
218         u8 TUNER_FREQ3;
219         u8 IF_OFFSET0;   /* IF_Offset_10hz */
220         u8 IF_OFFSET1;
221         u8 SYM_OFFSET0;  /* SymbolRateOffset */
222         u8 SYM_OFFSET1;
223         u8 NTSC_OFFSET0; /* NTSC_Offset_10hz */
224         u8 NTSC_OFFSET1;
225 } PACKED;
226
227 /* modes */
228 #define BCM3510_QAM16           =   0x01
229 #define BCM3510_QAM32           =   0x02
230 #define BCM3510_QAM64           =   0x03
231 #define BCM3510_QAM128          =   0x04
232 #define BCM3510_QAM256          =   0x05
233 #define BCM3510_8VSB            =   0x0B
234 #define BCM3510_16VSB           =   0x0D
235
236 /* IF_FREQS */
237 #define BCM3510_IF_TERRESTRIAL 0x0
238 #define BCM3510_IF_CABLE       0x1
239 #define BCM3510_IF_USE_CMD     0x7
240
241 /* SYM_RATE */
242 #define BCM3510_SR_8VSB        0x0 /* 5381119 s/sec */
243 #define BCM3510_SR_256QAM      0x1 /* 5360537 s/sec */
244 #define BCM3510_SR_16QAM       0x2 /* 5056971 s/sec */
245 #define BCM3510_SR_MISC        0x3 /* 5000000 s/sec */
246 #define BCM3510_SR_USE_CMD     0x7
247
248 /* special symbol rate */
249 #define CMD_SET_VALUE_NOT_LISTED  0x2d
250 #define MSGID_SET_SYMBOL_RATE_NOT_LISTED 0x0c
251 struct bcm3510_hab_cmd_set_sr_not_listed {
252         u8 HOST_SYM_RATE0;
253         u8 HOST_SYM_RATE1;
254         u8 HOST_SYM_RATE2;
255         u8 HOST_SYM_RATE3;
256 } PACKED;
257
258 /* special IF */
259 #define MSGID_SET_IF_FREQ_NOT_LISTED 0x0d
260 struct bcm3510_hab_cmd_set_if_freq_not_listed {
261         u8 HOST_IF_FREQ0;
262         u8 HOST_IF_FREQ1;
263         u8 HOST_IF_FREQ2;
264         u8 HOST_IF_FREQ3;
265 } PACKED;
266
267 /* auto reacquire */
268 #define CMD_AUTO_PARAM       0x2a
269 #define MSGID_AUTO_REACQUIRE 0x0e
270 struct bcm3510_hab_cmd_auto_reacquire {
271         u8 ACQ    :1; /* on/off*/
272         u8 unused :7;
273 } PACKED;
274
275 #define MSGID_SET_RF_AGC_SEL 0x12
276 struct bcm3510_hab_cmd_set_agc {
277         u8 LVL    :1;
278         u8 unused :6;
279         u8 SEL    :1;
280 } PACKED;
281
282 #define MSGID_SET_AUTO_INVERSION 0x14
283 struct bcm3510_hab_cmd_auto_inversion {
284         u8 AI     :1;
285         u8 unused :7;
286 } PACKED;
287
288
289 /* bert control */
290 #define CMD_STATE_CONTROL  0x12
291 #define MSGID_BERT_CONTROL 0x0e
292 #define MSGID_BERT_SET     0xfa
293 struct bcm3510_hab_cmd_bert_control {
294         u8 BE     :1;
295         u8 unused :7;
296 } PACKED;
297
298 #define MSGID_TRI_STATE 0x2e
299 struct bcm3510_hab_cmd_tri_state {
300         u8 RE :1; /* a/d ram port pins */
301         u8 PE :1; /* baud clock pin */
302         u8 AC :1; /* a/d clock pin */
303         u8 BE :1; /* baud clock pin */
304         u8 unused :4;
305 } PACKED;
306
307
308 /* tune */
309 #define CMD_TUNE   0x38
310 #define MSGID_TUNE 0x16
311 struct bcm3510_hab_cmd_tune_ctrl_data_pair {
312         struct {
313 #define BITS_8 0x07
314 #define BITS_7 0x06
315 #define BITS_6 0x05
316 #define BITS_5 0x04
317 #define BITS_4 0x03
318 #define BITS_3 0x02
319 #define BITS_2 0x01
320 #define BITS_1 0x00
321                 u8 size    :3;
322                 u8 unk     :2;
323                 u8 clk_off :1;
324                 u8 cs0     :1;
325                 u8 cs1     :1;
326
327         } PACKED ctrl;
328
329         u8 data;
330 } PACKED;
331
332 struct bcm3510_hab_cmd_tune {
333         u8 length;
334         u8 clock_width;
335         u8 misc;
336         u8 TUNCTL_state;
337
338         struct bcm3510_hab_cmd_tune_ctrl_data_pair ctl_dat[16];
339 } PACKED;
340
341 #define CMD_STATUS    0x38
342 #define MSGID_STATUS1 0x08
343 struct bcm3510_hab_cmd_status1 {
344         struct {
345                 u8 EQ_MODE       :4;
346                 u8 reserved      :2;
347                 u8 QRE           :1; /* if QSE and the spectrum is inversed */
348                 u8 QSE           :1; /* automatic spectral inversion */
349         } PACKED STATUS0;
350
351         struct {
352                 u8 RECEIVER_LOCK :1;
353                 u8 FEC_LOCK      :1;
354                 u8 OUT_PLL_LOCK  :1;
355                 u8 reserved      :5;
356         } PACKED STATUS1;
357
358         struct {
359                 u8 reserved      :2;
360                 u8 BW            :1;
361                 u8 NTE           :1; /* NTSC filter sweep enabled */
362                 u8 AQI           :1; /* currently acquiring */
363                 u8 FA            :1; /* fast acquisition */
364                 u8 ARI           :1; /* auto reacquire */
365                 u8 TI            :1; /* programming the tuner */
366         } PACKED STATUS2;
367         u8 STATUS3;
368         u8 SNR_EST0;
369         u8 SNR_EST1;
370         u8 TUNER_FREQ0;
371         u8 TUNER_FREQ1;
372         u8 TUNER_FREQ2;
373         u8 TUNER_FREQ3;
374         u8 SYM_RATE0;
375         u8 SYM_RATE1;
376         u8 SYM_RATE2;
377         u8 SYM_RATE3;
378         u8 SYM_OFFSET0;
379         u8 SYM_OFFSET1;
380         u8 SYM_ERROR0;
381         u8 SYM_ERROR1;
382         u8 IF_FREQ0;
383         u8 IF_FREQ1;
384         u8 IF_FREQ2;
385         u8 IF_FREQ3;
386         u8 IF_OFFSET0;
387         u8 IF_OFFSET1;
388         u8 IF_ERROR0;
389         u8 IF_ERROR1;
390         u8 NTSC_FILTER0;
391         u8 NTSC_FILTER1;
392         u8 NTSC_FILTER2;
393         u8 NTSC_FILTER3;
394         u8 NTSC_OFFSET0;
395         u8 NTSC_OFFSET1;
396         u8 NTSC_ERROR0;
397         u8 NTSC_ERROR1;
398         u8 INT_AGC_LEVEL0;
399         u8 INT_AGC_LEVEL1;
400         u8 EXT_AGC_LEVEL0;
401         u8 EXT_AGC_LEVEL1;
402 } PACKED;
403
404 #define MSGID_STATUS2 0x14
405 struct bcm3510_hab_cmd_status2 {
406         struct {
407                 u8 EQ_MODE  :4;
408                 u8 reserved :2;
409                 u8 QRE      :1;
410                 u8 QSR      :1;
411         } PACKED STATUS0;
412         struct {
413                 u8 RL       :1;
414                 u8 FL       :1;
415                 u8 OL       :1;
416                 u8 reserved :5;
417         } PACKED STATUS1;
418         u8 SYMBOL_RATE0;
419         u8 SYMBOL_RATE1;
420         u8 SYMBOL_RATE2;
421         u8 SYMBOL_RATE3;
422         u8 LDCERC0;
423         u8 LDCERC1;
424         u8 LDCERC2;
425         u8 LDCERC3;
426         u8 LDUERC0;
427         u8 LDUERC1;
428         u8 LDUERC2;
429         u8 LDUERC3;
430         u8 LDBER0;
431         u8 LDBER1;
432         u8 LDBER2;
433         u8 LDBER3;
434         struct {
435                 u8 MODE_TYPE :4; /* acquire mode 0 */
436                 u8 reservd   :4;
437         } MODE_TYPE;
438         u8 SNR_EST0;
439         u8 SNR_EST1;
440         u8 SIGNAL;
441 } PACKED;
442
443 #define CMD_SET_RF_BW_NOT_LISTED   0x3f
444 #define MSGID_SET_RF_BW_NOT_LISTED 0x11
445 /* TODO */
446
447 #endif