hc
2024-01-05 071106ecf68c401173c58808b1cf5f68cc50d390
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 *  Driver for Freescale MC44S803 Low Power CMOS Broadband Tuner
 *
 *  Copyright (c) 2009 Jochen Friedrich <jochen@scram.de>
 */
 
#ifndef MC44S803_PRIV_H
#define MC44S803_PRIV_H
 
/* This driver is based on the information available in the datasheet
   http://www.freescale.com/files/rf_if/doc/data_sheet/MC44S803.pdf
 
   SPI or I2C Address : 0xc0-0xc6
 
   Reg.No | Function
   -------------------------------------------
       00 | Power Down
       01 | Reference Oszillator
       02 | Reference Dividers
       03 | Mixer and Reference Buffer
       04 | Reset/Serial Out
       05 | LO 1
       06 | LO 2
       07 | Circuit Adjust
       08 | Test
       09 | Digital Tune
       0A | LNA AGC
       0B | Data Register Address
       0C | Regulator Test
       0D | VCO Test
       0E | LNA Gain/Input Power
       0F | ID Bits
 
*/
 
#define MC44S803_OSC 26000000    /* 26 MHz */
#define MC44S803_IF1 1086000000 /* 1086 MHz */
#define MC44S803_IF2 36125000    /* 36.125 MHz */
 
#define MC44S803_REG_POWER    0
#define MC44S803_REG_REFOSC    1
#define MC44S803_REG_REFDIV    2
#define MC44S803_REG_MIXER    3
#define MC44S803_REG_RESET    4
#define MC44S803_REG_LO1    5
#define MC44S803_REG_LO2    6
#define MC44S803_REG_CIRCADJ    7
#define MC44S803_REG_TEST    8
#define MC44S803_REG_DIGTUNE    9
#define MC44S803_REG_LNAAGC    0x0A
#define MC44S803_REG_DATAREG    0x0B
#define MC44S803_REG_REGTEST    0x0C
#define MC44S803_REG_VCOTEST    0x0D
#define MC44S803_REG_LNAGAIN    0x0E
#define MC44S803_REG_ID        0x0F
 
/* Register definitions */
#define MC44S803_ADDR        0x0F
#define MC44S803_ADDR_S        0
/* REG_POWER */
#define MC44S803_POWER        0xFFFFF0
#define MC44S803_POWER_S    4
/* REG_REFOSC */
#define MC44S803_REFOSC        0x1FF0
#define MC44S803_REFOSC_S    4
#define MC44S803_OSCSEL        0x2000
#define MC44S803_OSCSEL_S    13
/* REG_REFDIV */
#define MC44S803_R2        0x1FF0
#define MC44S803_R2_S        4
#define MC44S803_REFBUF_EN    0x2000
#define MC44S803_REFBUF_EN_S    13
#define MC44S803_R1        0x7C000
#define MC44S803_R1_S        14
/* REG_MIXER */
#define MC44S803_R3        0x70
#define MC44S803_R3_S        4
#define MC44S803_MUX3        0x80
#define MC44S803_MUX3_S        7
#define MC44S803_MUX4        0x100
#define MC44S803_MUX4_S        8
#define MC44S803_OSC_SCR    0x200
#define MC44S803_OSC_SCR_S    9
#define MC44S803_TRI_STATE    0x400
#define MC44S803_TRI_STATE_S    10
#define MC44S803_BUF_GAIN    0x800
#define MC44S803_BUF_GAIN_S    11
#define MC44S803_BUF_IO        0x1000
#define MC44S803_BUF_IO_S    12
#define MC44S803_MIXER_RES    0xFE000
#define MC44S803_MIXER_RES_S    13
/* REG_RESET */
#define MC44S803_RS        0x10
#define MC44S803_RS_S        4
#define MC44S803_SO        0x20
#define MC44S803_SO_S        5
/* REG_LO1 */
#define MC44S803_LO1        0xFFF0
#define MC44S803_LO1_S        4
/* REG_LO2 */
#define MC44S803_LO2        0x7FFF0
#define MC44S803_LO2_S        4
/* REG_CIRCADJ */
#define MC44S803_G1        0x20
#define MC44S803_G1_S        5
#define MC44S803_G3        0x80
#define MC44S803_G3_S        7
#define MC44S803_CIRCADJ_RES    0x300
#define MC44S803_CIRCADJ_RES_S    8
#define MC44S803_G6        0x400
#define MC44S803_G6_S        10
#define MC44S803_G7        0x800
#define MC44S803_G7_S        11
#define MC44S803_S1        0x1000
#define MC44S803_S1_S        12
#define MC44S803_LP        0x7E000
#define MC44S803_LP_S        13
#define MC44S803_CLRF        0x80000
#define MC44S803_CLRF_S        19
#define MC44S803_CLIF        0x100000
#define MC44S803_CLIF_S        20
/* REG_TEST */
/* REG_DIGTUNE */
#define MC44S803_DA        0xF0
#define MC44S803_DA_S        4
#define MC44S803_XOD        0x300
#define MC44S803_XOD_S        8
#define MC44S803_RST        0x10000
#define MC44S803_RST_S        16
#define MC44S803_LO_REF        0x1FFF00
#define MC44S803_LO_REF_S    8
#define MC44S803_AT        0x200000
#define MC44S803_AT_S        21
#define MC44S803_MT        0x400000
#define MC44S803_MT_S        22
/* REG_LNAAGC */
#define MC44S803_G        0x3F0
#define MC44S803_G_S        4
#define MC44S803_AT1        0x400
#define MC44S803_AT1_S        10
#define MC44S803_AT2        0x800
#define MC44S803_AT2_S        11
#define MC44S803_HL_GR_EN    0x8000
#define MC44S803_HL_GR_EN_S    15
#define MC44S803_AGC_AN_DIG    0x10000
#define MC44S803_AGC_AN_DIG_S    16
#define MC44S803_ATTEN_EN    0x20000
#define MC44S803_ATTEN_EN_S    17
#define MC44S803_AGC_READ_EN    0x40000
#define MC44S803_AGC_READ_EN_S    18
#define MC44S803_LNA0        0x80000
#define MC44S803_LNA0_S        19
#define MC44S803_AGC_SEL    0x100000
#define MC44S803_AGC_SEL_S    20
#define MC44S803_AT0        0x200000
#define MC44S803_AT0_S        21
#define MC44S803_B        0xC00000
#define MC44S803_B_S        22
/* REG_DATAREG */
#define MC44S803_D        0xF0
#define MC44S803_D_S        4
/* REG_REGTEST */
/* REG_VCOTEST */
/* REG_LNAGAIN */
#define MC44S803_IF_PWR        0x700
#define MC44S803_IF_PWR_S    8
#define MC44S803_RF_PWR        0x3800
#define MC44S803_RF_PWR_S    11
#define MC44S803_LNA_GAIN    0xFC000
#define MC44S803_LNA_GAIN_S    14
/* REG_ID */
#define MC44S803_ID        0x3E00
#define MC44S803_ID_S        9
 
/* Some macros to read/write fields */
 
/* First shift, then mask */
#define MC44S803_REG_SM(_val, _reg)                    \
   (((_val) << _reg##_S) & (_reg))
 
/* First mask, then shift */
#define MC44S803_REG_MS(_val, _reg)                    \
   (((_val) & (_reg)) >> _reg##_S)
 
struct mc44s803_priv {
   struct mc44s803_config *cfg;
   struct i2c_adapter *i2c;
   struct dvb_frontend *fe;
 
   u32 frequency;
};
 
#endif