summaryrefslogtreecommitdiffstats
path: root/drivers/media/tuners/mc44s803_priv.h
blob: 52325395dfe7fb147f7d3b8bee972c676606b166 (plain)
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
195
196
197
198
199
200
201
202
203
204
/*
 *  Driver for Freescale MC44S803 Low Power CMOS Broadband Tuner
 *
 *  Copyright (c) 2009 Jochen Friedrich <jochen@scram.de>
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *
 *  GNU General Public License for more details.
 */

#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