162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci *  Driver for Freescale MC44S803 Low Power CMOS Broadband Tuner
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci *  Copyright (c) 2009 Jochen Friedrich <jochen@scram.de>
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#ifndef MC44S803_PRIV_H
962306a36Sopenharmony_ci#define MC44S803_PRIV_H
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci/* This driver is based on the information available in the datasheet
1262306a36Sopenharmony_ci   http://www.freescale.com/files/rf_if/doc/data_sheet/MC44S803.pdf
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci   SPI or I2C Address : 0xc0-0xc6
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci   Reg.No | Function
1762306a36Sopenharmony_ci   -------------------------------------------
1862306a36Sopenharmony_ci       00 | Power Down
1962306a36Sopenharmony_ci       01 | Reference Oszillator
2062306a36Sopenharmony_ci       02 | Reference Dividers
2162306a36Sopenharmony_ci       03 | Mixer and Reference Buffer
2262306a36Sopenharmony_ci       04 | Reset/Serial Out
2362306a36Sopenharmony_ci       05 | LO 1
2462306a36Sopenharmony_ci       06 | LO 2
2562306a36Sopenharmony_ci       07 | Circuit Adjust
2662306a36Sopenharmony_ci       08 | Test
2762306a36Sopenharmony_ci       09 | Digital Tune
2862306a36Sopenharmony_ci       0A | LNA AGC
2962306a36Sopenharmony_ci       0B | Data Register Address
3062306a36Sopenharmony_ci       0C | Regulator Test
3162306a36Sopenharmony_ci       0D | VCO Test
3262306a36Sopenharmony_ci       0E | LNA Gain/Input Power
3362306a36Sopenharmony_ci       0F | ID Bits
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci*/
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci#define MC44S803_OSC 26000000	/* 26 MHz */
3862306a36Sopenharmony_ci#define MC44S803_IF1 1086000000 /* 1086 MHz */
3962306a36Sopenharmony_ci#define MC44S803_IF2 36125000	/* 36.125 MHz */
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci#define MC44S803_REG_POWER	0
4262306a36Sopenharmony_ci#define MC44S803_REG_REFOSC	1
4362306a36Sopenharmony_ci#define MC44S803_REG_REFDIV	2
4462306a36Sopenharmony_ci#define MC44S803_REG_MIXER	3
4562306a36Sopenharmony_ci#define MC44S803_REG_RESET	4
4662306a36Sopenharmony_ci#define MC44S803_REG_LO1	5
4762306a36Sopenharmony_ci#define MC44S803_REG_LO2	6
4862306a36Sopenharmony_ci#define MC44S803_REG_CIRCADJ	7
4962306a36Sopenharmony_ci#define MC44S803_REG_TEST	8
5062306a36Sopenharmony_ci#define MC44S803_REG_DIGTUNE	9
5162306a36Sopenharmony_ci#define MC44S803_REG_LNAAGC	0x0A
5262306a36Sopenharmony_ci#define MC44S803_REG_DATAREG	0x0B
5362306a36Sopenharmony_ci#define MC44S803_REG_REGTEST	0x0C
5462306a36Sopenharmony_ci#define MC44S803_REG_VCOTEST	0x0D
5562306a36Sopenharmony_ci#define MC44S803_REG_LNAGAIN	0x0E
5662306a36Sopenharmony_ci#define MC44S803_REG_ID		0x0F
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci/* Register definitions */
5962306a36Sopenharmony_ci#define MC44S803_ADDR		0x0F
6062306a36Sopenharmony_ci#define MC44S803_ADDR_S		0
6162306a36Sopenharmony_ci/* REG_POWER */
6262306a36Sopenharmony_ci#define MC44S803_POWER		0xFFFFF0
6362306a36Sopenharmony_ci#define MC44S803_POWER_S	4
6462306a36Sopenharmony_ci/* REG_REFOSC */
6562306a36Sopenharmony_ci#define MC44S803_REFOSC		0x1FF0
6662306a36Sopenharmony_ci#define MC44S803_REFOSC_S	4
6762306a36Sopenharmony_ci#define MC44S803_OSCSEL		0x2000
6862306a36Sopenharmony_ci#define MC44S803_OSCSEL_S	13
6962306a36Sopenharmony_ci/* REG_REFDIV */
7062306a36Sopenharmony_ci#define MC44S803_R2		0x1FF0
7162306a36Sopenharmony_ci#define MC44S803_R2_S		4
7262306a36Sopenharmony_ci#define MC44S803_REFBUF_EN	0x2000
7362306a36Sopenharmony_ci#define MC44S803_REFBUF_EN_S	13
7462306a36Sopenharmony_ci#define MC44S803_R1		0x7C000
7562306a36Sopenharmony_ci#define MC44S803_R1_S		14
7662306a36Sopenharmony_ci/* REG_MIXER */
7762306a36Sopenharmony_ci#define MC44S803_R3		0x70
7862306a36Sopenharmony_ci#define MC44S803_R3_S		4
7962306a36Sopenharmony_ci#define MC44S803_MUX3		0x80
8062306a36Sopenharmony_ci#define MC44S803_MUX3_S		7
8162306a36Sopenharmony_ci#define MC44S803_MUX4		0x100
8262306a36Sopenharmony_ci#define MC44S803_MUX4_S		8
8362306a36Sopenharmony_ci#define MC44S803_OSC_SCR	0x200
8462306a36Sopenharmony_ci#define MC44S803_OSC_SCR_S	9
8562306a36Sopenharmony_ci#define MC44S803_TRI_STATE	0x400
8662306a36Sopenharmony_ci#define MC44S803_TRI_STATE_S	10
8762306a36Sopenharmony_ci#define MC44S803_BUF_GAIN	0x800
8862306a36Sopenharmony_ci#define MC44S803_BUF_GAIN_S	11
8962306a36Sopenharmony_ci#define MC44S803_BUF_IO		0x1000
9062306a36Sopenharmony_ci#define MC44S803_BUF_IO_S	12
9162306a36Sopenharmony_ci#define MC44S803_MIXER_RES	0xFE000
9262306a36Sopenharmony_ci#define MC44S803_MIXER_RES_S	13
9362306a36Sopenharmony_ci/* REG_RESET */
9462306a36Sopenharmony_ci#define MC44S803_RS		0x10
9562306a36Sopenharmony_ci#define MC44S803_RS_S		4
9662306a36Sopenharmony_ci#define MC44S803_SO		0x20
9762306a36Sopenharmony_ci#define MC44S803_SO_S		5
9862306a36Sopenharmony_ci/* REG_LO1 */
9962306a36Sopenharmony_ci#define MC44S803_LO1		0xFFF0
10062306a36Sopenharmony_ci#define MC44S803_LO1_S		4
10162306a36Sopenharmony_ci/* REG_LO2 */
10262306a36Sopenharmony_ci#define MC44S803_LO2		0x7FFF0
10362306a36Sopenharmony_ci#define MC44S803_LO2_S		4
10462306a36Sopenharmony_ci/* REG_CIRCADJ */
10562306a36Sopenharmony_ci#define MC44S803_G1		0x20
10662306a36Sopenharmony_ci#define MC44S803_G1_S		5
10762306a36Sopenharmony_ci#define MC44S803_G3		0x80
10862306a36Sopenharmony_ci#define MC44S803_G3_S		7
10962306a36Sopenharmony_ci#define MC44S803_CIRCADJ_RES	0x300
11062306a36Sopenharmony_ci#define MC44S803_CIRCADJ_RES_S	8
11162306a36Sopenharmony_ci#define MC44S803_G6		0x400
11262306a36Sopenharmony_ci#define MC44S803_G6_S		10
11362306a36Sopenharmony_ci#define MC44S803_G7		0x800
11462306a36Sopenharmony_ci#define MC44S803_G7_S		11
11562306a36Sopenharmony_ci#define MC44S803_S1		0x1000
11662306a36Sopenharmony_ci#define MC44S803_S1_S		12
11762306a36Sopenharmony_ci#define MC44S803_LP		0x7E000
11862306a36Sopenharmony_ci#define MC44S803_LP_S		13
11962306a36Sopenharmony_ci#define MC44S803_CLRF		0x80000
12062306a36Sopenharmony_ci#define MC44S803_CLRF_S		19
12162306a36Sopenharmony_ci#define MC44S803_CLIF		0x100000
12262306a36Sopenharmony_ci#define MC44S803_CLIF_S		20
12362306a36Sopenharmony_ci/* REG_TEST */
12462306a36Sopenharmony_ci/* REG_DIGTUNE */
12562306a36Sopenharmony_ci#define MC44S803_DA		0xF0
12662306a36Sopenharmony_ci#define MC44S803_DA_S		4
12762306a36Sopenharmony_ci#define MC44S803_XOD		0x300
12862306a36Sopenharmony_ci#define MC44S803_XOD_S		8
12962306a36Sopenharmony_ci#define MC44S803_RST		0x10000
13062306a36Sopenharmony_ci#define MC44S803_RST_S		16
13162306a36Sopenharmony_ci#define MC44S803_LO_REF		0x1FFF00
13262306a36Sopenharmony_ci#define MC44S803_LO_REF_S	8
13362306a36Sopenharmony_ci#define MC44S803_AT		0x200000
13462306a36Sopenharmony_ci#define MC44S803_AT_S		21
13562306a36Sopenharmony_ci#define MC44S803_MT		0x400000
13662306a36Sopenharmony_ci#define MC44S803_MT_S		22
13762306a36Sopenharmony_ci/* REG_LNAAGC */
13862306a36Sopenharmony_ci#define MC44S803_G		0x3F0
13962306a36Sopenharmony_ci#define MC44S803_G_S		4
14062306a36Sopenharmony_ci#define MC44S803_AT1		0x400
14162306a36Sopenharmony_ci#define MC44S803_AT1_S		10
14262306a36Sopenharmony_ci#define MC44S803_AT2		0x800
14362306a36Sopenharmony_ci#define MC44S803_AT2_S		11
14462306a36Sopenharmony_ci#define MC44S803_HL_GR_EN	0x8000
14562306a36Sopenharmony_ci#define MC44S803_HL_GR_EN_S	15
14662306a36Sopenharmony_ci#define MC44S803_AGC_AN_DIG	0x10000
14762306a36Sopenharmony_ci#define MC44S803_AGC_AN_DIG_S	16
14862306a36Sopenharmony_ci#define MC44S803_ATTEN_EN	0x20000
14962306a36Sopenharmony_ci#define MC44S803_ATTEN_EN_S	17
15062306a36Sopenharmony_ci#define MC44S803_AGC_READ_EN	0x40000
15162306a36Sopenharmony_ci#define MC44S803_AGC_READ_EN_S	18
15262306a36Sopenharmony_ci#define MC44S803_LNA0		0x80000
15362306a36Sopenharmony_ci#define MC44S803_LNA0_S		19
15462306a36Sopenharmony_ci#define MC44S803_AGC_SEL	0x100000
15562306a36Sopenharmony_ci#define MC44S803_AGC_SEL_S	20
15662306a36Sopenharmony_ci#define MC44S803_AT0		0x200000
15762306a36Sopenharmony_ci#define MC44S803_AT0_S		21
15862306a36Sopenharmony_ci#define MC44S803_B		0xC00000
15962306a36Sopenharmony_ci#define MC44S803_B_S		22
16062306a36Sopenharmony_ci/* REG_DATAREG */
16162306a36Sopenharmony_ci#define MC44S803_D		0xF0
16262306a36Sopenharmony_ci#define MC44S803_D_S		4
16362306a36Sopenharmony_ci/* REG_REGTEST */
16462306a36Sopenharmony_ci/* REG_VCOTEST */
16562306a36Sopenharmony_ci/* REG_LNAGAIN */
16662306a36Sopenharmony_ci#define MC44S803_IF_PWR		0x700
16762306a36Sopenharmony_ci#define MC44S803_IF_PWR_S	8
16862306a36Sopenharmony_ci#define MC44S803_RF_PWR		0x3800
16962306a36Sopenharmony_ci#define MC44S803_RF_PWR_S	11
17062306a36Sopenharmony_ci#define MC44S803_LNA_GAIN	0xFC000
17162306a36Sopenharmony_ci#define MC44S803_LNA_GAIN_S	14
17262306a36Sopenharmony_ci/* REG_ID */
17362306a36Sopenharmony_ci#define MC44S803_ID		0x3E00
17462306a36Sopenharmony_ci#define MC44S803_ID_S		9
17562306a36Sopenharmony_ci
17662306a36Sopenharmony_ci/* Some macros to read/write fields */
17762306a36Sopenharmony_ci
17862306a36Sopenharmony_ci/* First shift, then mask */
17962306a36Sopenharmony_ci#define MC44S803_REG_SM(_val, _reg)					\
18062306a36Sopenharmony_ci	(((_val) << _reg##_S) & (_reg))
18162306a36Sopenharmony_ci
18262306a36Sopenharmony_ci/* First mask, then shift */
18362306a36Sopenharmony_ci#define MC44S803_REG_MS(_val, _reg)					\
18462306a36Sopenharmony_ci	(((_val) & (_reg)) >> _reg##_S)
18562306a36Sopenharmony_ci
18662306a36Sopenharmony_cistruct mc44s803_priv {
18762306a36Sopenharmony_ci	struct mc44s803_config *cfg;
18862306a36Sopenharmony_ci	struct i2c_adapter *i2c;
18962306a36Sopenharmony_ci	struct dvb_frontend *fe;
19062306a36Sopenharmony_ci
19162306a36Sopenharmony_ci	u32 frequency;
19262306a36Sopenharmony_ci};
19362306a36Sopenharmony_ci
19462306a36Sopenharmony_ci#endif
195