18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci *  Driver for Freescale MC44S803 Low Power CMOS Broadband Tuner
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci *  Copyright (c) 2009 Jochen Friedrich <jochen@scram.de>
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#ifndef MC44S803_PRIV_H
98c2ecf20Sopenharmony_ci#define MC44S803_PRIV_H
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci/* This driver is based on the information available in the datasheet
128c2ecf20Sopenharmony_ci   http://www.freescale.com/files/rf_if/doc/data_sheet/MC44S803.pdf
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ci   SPI or I2C Address : 0xc0-0xc6
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci   Reg.No | Function
178c2ecf20Sopenharmony_ci   -------------------------------------------
188c2ecf20Sopenharmony_ci       00 | Power Down
198c2ecf20Sopenharmony_ci       01 | Reference Oszillator
208c2ecf20Sopenharmony_ci       02 | Reference Dividers
218c2ecf20Sopenharmony_ci       03 | Mixer and Reference Buffer
228c2ecf20Sopenharmony_ci       04 | Reset/Serial Out
238c2ecf20Sopenharmony_ci       05 | LO 1
248c2ecf20Sopenharmony_ci       06 | LO 2
258c2ecf20Sopenharmony_ci       07 | Circuit Adjust
268c2ecf20Sopenharmony_ci       08 | Test
278c2ecf20Sopenharmony_ci       09 | Digital Tune
288c2ecf20Sopenharmony_ci       0A | LNA AGC
298c2ecf20Sopenharmony_ci       0B | Data Register Address
308c2ecf20Sopenharmony_ci       0C | Regulator Test
318c2ecf20Sopenharmony_ci       0D | VCO Test
328c2ecf20Sopenharmony_ci       0E | LNA Gain/Input Power
338c2ecf20Sopenharmony_ci       0F | ID Bits
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_ci*/
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ci#define MC44S803_OSC 26000000	/* 26 MHz */
388c2ecf20Sopenharmony_ci#define MC44S803_IF1 1086000000 /* 1086 MHz */
398c2ecf20Sopenharmony_ci#define MC44S803_IF2 36125000	/* 36.125 MHz */
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ci#define MC44S803_REG_POWER	0
428c2ecf20Sopenharmony_ci#define MC44S803_REG_REFOSC	1
438c2ecf20Sopenharmony_ci#define MC44S803_REG_REFDIV	2
448c2ecf20Sopenharmony_ci#define MC44S803_REG_MIXER	3
458c2ecf20Sopenharmony_ci#define MC44S803_REG_RESET	4
468c2ecf20Sopenharmony_ci#define MC44S803_REG_LO1	5
478c2ecf20Sopenharmony_ci#define MC44S803_REG_LO2	6
488c2ecf20Sopenharmony_ci#define MC44S803_REG_CIRCADJ	7
498c2ecf20Sopenharmony_ci#define MC44S803_REG_TEST	8
508c2ecf20Sopenharmony_ci#define MC44S803_REG_DIGTUNE	9
518c2ecf20Sopenharmony_ci#define MC44S803_REG_LNAAGC	0x0A
528c2ecf20Sopenharmony_ci#define MC44S803_REG_DATAREG	0x0B
538c2ecf20Sopenharmony_ci#define MC44S803_REG_REGTEST	0x0C
548c2ecf20Sopenharmony_ci#define MC44S803_REG_VCOTEST	0x0D
558c2ecf20Sopenharmony_ci#define MC44S803_REG_LNAGAIN	0x0E
568c2ecf20Sopenharmony_ci#define MC44S803_REG_ID		0x0F
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_ci/* Register definitions */
598c2ecf20Sopenharmony_ci#define MC44S803_ADDR		0x0F
608c2ecf20Sopenharmony_ci#define MC44S803_ADDR_S		0
618c2ecf20Sopenharmony_ci/* REG_POWER */
628c2ecf20Sopenharmony_ci#define MC44S803_POWER		0xFFFFF0
638c2ecf20Sopenharmony_ci#define MC44S803_POWER_S	4
648c2ecf20Sopenharmony_ci/* REG_REFOSC */
658c2ecf20Sopenharmony_ci#define MC44S803_REFOSC		0x1FF0
668c2ecf20Sopenharmony_ci#define MC44S803_REFOSC_S	4
678c2ecf20Sopenharmony_ci#define MC44S803_OSCSEL		0x2000
688c2ecf20Sopenharmony_ci#define MC44S803_OSCSEL_S	13
698c2ecf20Sopenharmony_ci/* REG_REFDIV */
708c2ecf20Sopenharmony_ci#define MC44S803_R2		0x1FF0
718c2ecf20Sopenharmony_ci#define MC44S803_R2_S		4
728c2ecf20Sopenharmony_ci#define MC44S803_REFBUF_EN	0x2000
738c2ecf20Sopenharmony_ci#define MC44S803_REFBUF_EN_S	13
748c2ecf20Sopenharmony_ci#define MC44S803_R1		0x7C000
758c2ecf20Sopenharmony_ci#define MC44S803_R1_S		14
768c2ecf20Sopenharmony_ci/* REG_MIXER */
778c2ecf20Sopenharmony_ci#define MC44S803_R3		0x70
788c2ecf20Sopenharmony_ci#define MC44S803_R3_S		4
798c2ecf20Sopenharmony_ci#define MC44S803_MUX3		0x80
808c2ecf20Sopenharmony_ci#define MC44S803_MUX3_S		7
818c2ecf20Sopenharmony_ci#define MC44S803_MUX4		0x100
828c2ecf20Sopenharmony_ci#define MC44S803_MUX4_S		8
838c2ecf20Sopenharmony_ci#define MC44S803_OSC_SCR	0x200
848c2ecf20Sopenharmony_ci#define MC44S803_OSC_SCR_S	9
858c2ecf20Sopenharmony_ci#define MC44S803_TRI_STATE	0x400
868c2ecf20Sopenharmony_ci#define MC44S803_TRI_STATE_S	10
878c2ecf20Sopenharmony_ci#define MC44S803_BUF_GAIN	0x800
888c2ecf20Sopenharmony_ci#define MC44S803_BUF_GAIN_S	11
898c2ecf20Sopenharmony_ci#define MC44S803_BUF_IO		0x1000
908c2ecf20Sopenharmony_ci#define MC44S803_BUF_IO_S	12
918c2ecf20Sopenharmony_ci#define MC44S803_MIXER_RES	0xFE000
928c2ecf20Sopenharmony_ci#define MC44S803_MIXER_RES_S	13
938c2ecf20Sopenharmony_ci/* REG_RESET */
948c2ecf20Sopenharmony_ci#define MC44S803_RS		0x10
958c2ecf20Sopenharmony_ci#define MC44S803_RS_S		4
968c2ecf20Sopenharmony_ci#define MC44S803_SO		0x20
978c2ecf20Sopenharmony_ci#define MC44S803_SO_S		5
988c2ecf20Sopenharmony_ci/* REG_LO1 */
998c2ecf20Sopenharmony_ci#define MC44S803_LO1		0xFFF0
1008c2ecf20Sopenharmony_ci#define MC44S803_LO1_S		4
1018c2ecf20Sopenharmony_ci/* REG_LO2 */
1028c2ecf20Sopenharmony_ci#define MC44S803_LO2		0x7FFF0
1038c2ecf20Sopenharmony_ci#define MC44S803_LO2_S		4
1048c2ecf20Sopenharmony_ci/* REG_CIRCADJ */
1058c2ecf20Sopenharmony_ci#define MC44S803_G1		0x20
1068c2ecf20Sopenharmony_ci#define MC44S803_G1_S		5
1078c2ecf20Sopenharmony_ci#define MC44S803_G3		0x80
1088c2ecf20Sopenharmony_ci#define MC44S803_G3_S		7
1098c2ecf20Sopenharmony_ci#define MC44S803_CIRCADJ_RES	0x300
1108c2ecf20Sopenharmony_ci#define MC44S803_CIRCADJ_RES_S	8
1118c2ecf20Sopenharmony_ci#define MC44S803_G6		0x400
1128c2ecf20Sopenharmony_ci#define MC44S803_G6_S		10
1138c2ecf20Sopenharmony_ci#define MC44S803_G7		0x800
1148c2ecf20Sopenharmony_ci#define MC44S803_G7_S		11
1158c2ecf20Sopenharmony_ci#define MC44S803_S1		0x1000
1168c2ecf20Sopenharmony_ci#define MC44S803_S1_S		12
1178c2ecf20Sopenharmony_ci#define MC44S803_LP		0x7E000
1188c2ecf20Sopenharmony_ci#define MC44S803_LP_S		13
1198c2ecf20Sopenharmony_ci#define MC44S803_CLRF		0x80000
1208c2ecf20Sopenharmony_ci#define MC44S803_CLRF_S		19
1218c2ecf20Sopenharmony_ci#define MC44S803_CLIF		0x100000
1228c2ecf20Sopenharmony_ci#define MC44S803_CLIF_S		20
1238c2ecf20Sopenharmony_ci/* REG_TEST */
1248c2ecf20Sopenharmony_ci/* REG_DIGTUNE */
1258c2ecf20Sopenharmony_ci#define MC44S803_DA		0xF0
1268c2ecf20Sopenharmony_ci#define MC44S803_DA_S		4
1278c2ecf20Sopenharmony_ci#define MC44S803_XOD		0x300
1288c2ecf20Sopenharmony_ci#define MC44S803_XOD_S		8
1298c2ecf20Sopenharmony_ci#define MC44S803_RST		0x10000
1308c2ecf20Sopenharmony_ci#define MC44S803_RST_S		16
1318c2ecf20Sopenharmony_ci#define MC44S803_LO_REF		0x1FFF00
1328c2ecf20Sopenharmony_ci#define MC44S803_LO_REF_S	8
1338c2ecf20Sopenharmony_ci#define MC44S803_AT		0x200000
1348c2ecf20Sopenharmony_ci#define MC44S803_AT_S		21
1358c2ecf20Sopenharmony_ci#define MC44S803_MT		0x400000
1368c2ecf20Sopenharmony_ci#define MC44S803_MT_S		22
1378c2ecf20Sopenharmony_ci/* REG_LNAAGC */
1388c2ecf20Sopenharmony_ci#define MC44S803_G		0x3F0
1398c2ecf20Sopenharmony_ci#define MC44S803_G_S		4
1408c2ecf20Sopenharmony_ci#define MC44S803_AT1		0x400
1418c2ecf20Sopenharmony_ci#define MC44S803_AT1_S		10
1428c2ecf20Sopenharmony_ci#define MC44S803_AT2		0x800
1438c2ecf20Sopenharmony_ci#define MC44S803_AT2_S		11
1448c2ecf20Sopenharmony_ci#define MC44S803_HL_GR_EN	0x8000
1458c2ecf20Sopenharmony_ci#define MC44S803_HL_GR_EN_S	15
1468c2ecf20Sopenharmony_ci#define MC44S803_AGC_AN_DIG	0x10000
1478c2ecf20Sopenharmony_ci#define MC44S803_AGC_AN_DIG_S	16
1488c2ecf20Sopenharmony_ci#define MC44S803_ATTEN_EN	0x20000
1498c2ecf20Sopenharmony_ci#define MC44S803_ATTEN_EN_S	17
1508c2ecf20Sopenharmony_ci#define MC44S803_AGC_READ_EN	0x40000
1518c2ecf20Sopenharmony_ci#define MC44S803_AGC_READ_EN_S	18
1528c2ecf20Sopenharmony_ci#define MC44S803_LNA0		0x80000
1538c2ecf20Sopenharmony_ci#define MC44S803_LNA0_S		19
1548c2ecf20Sopenharmony_ci#define MC44S803_AGC_SEL	0x100000
1558c2ecf20Sopenharmony_ci#define MC44S803_AGC_SEL_S	20
1568c2ecf20Sopenharmony_ci#define MC44S803_AT0		0x200000
1578c2ecf20Sopenharmony_ci#define MC44S803_AT0_S		21
1588c2ecf20Sopenharmony_ci#define MC44S803_B		0xC00000
1598c2ecf20Sopenharmony_ci#define MC44S803_B_S		22
1608c2ecf20Sopenharmony_ci/* REG_DATAREG */
1618c2ecf20Sopenharmony_ci#define MC44S803_D		0xF0
1628c2ecf20Sopenharmony_ci#define MC44S803_D_S		4
1638c2ecf20Sopenharmony_ci/* REG_REGTEST */
1648c2ecf20Sopenharmony_ci/* REG_VCOTEST */
1658c2ecf20Sopenharmony_ci/* REG_LNAGAIN */
1668c2ecf20Sopenharmony_ci#define MC44S803_IF_PWR		0x700
1678c2ecf20Sopenharmony_ci#define MC44S803_IF_PWR_S	8
1688c2ecf20Sopenharmony_ci#define MC44S803_RF_PWR		0x3800
1698c2ecf20Sopenharmony_ci#define MC44S803_RF_PWR_S	11
1708c2ecf20Sopenharmony_ci#define MC44S803_LNA_GAIN	0xFC000
1718c2ecf20Sopenharmony_ci#define MC44S803_LNA_GAIN_S	14
1728c2ecf20Sopenharmony_ci/* REG_ID */
1738c2ecf20Sopenharmony_ci#define MC44S803_ID		0x3E00
1748c2ecf20Sopenharmony_ci#define MC44S803_ID_S		9
1758c2ecf20Sopenharmony_ci
1768c2ecf20Sopenharmony_ci/* Some macros to read/write fields */
1778c2ecf20Sopenharmony_ci
1788c2ecf20Sopenharmony_ci/* First shift, then mask */
1798c2ecf20Sopenharmony_ci#define MC44S803_REG_SM(_val, _reg)					\
1808c2ecf20Sopenharmony_ci	(((_val) << _reg##_S) & (_reg))
1818c2ecf20Sopenharmony_ci
1828c2ecf20Sopenharmony_ci/* First mask, then shift */
1838c2ecf20Sopenharmony_ci#define MC44S803_REG_MS(_val, _reg)					\
1848c2ecf20Sopenharmony_ci	(((_val) & (_reg)) >> _reg##_S)
1858c2ecf20Sopenharmony_ci
1868c2ecf20Sopenharmony_cistruct mc44s803_priv {
1878c2ecf20Sopenharmony_ci	struct mc44s803_config *cfg;
1888c2ecf20Sopenharmony_ci	struct i2c_adapter *i2c;
1898c2ecf20Sopenharmony_ci	struct dvb_frontend *fe;
1908c2ecf20Sopenharmony_ci
1918c2ecf20Sopenharmony_ci	u32 frequency;
1928c2ecf20Sopenharmony_ci};
1938c2ecf20Sopenharmony_ci
1948c2ecf20Sopenharmony_ci#endif
195