forked from Minki/linux
b72dbaefbd
Add Freescale MC44S803 tuner driver. Signed-off-by: Jochen Friedrich <jochen@scram.de> Signed-off-by: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
209 lines
5.6 KiB
C
209 lines
5.6 KiB
C
/*
|
|
* 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
|