mc44s803_priv.h 5.6 KB
Newer Older
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 205 206 207 208
/*
 *  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.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.=
 */

#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