xref: /openbmc/linux/drivers/media/dvb-frontends/bcm3510_priv.h (revision 75bf465f0bc33e9b776a46d6a1b9b990f5fb7c37)
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
448