Commit | Line | Data |
---|---|---|
74ba9207 | 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
5bea1cd3 MK |
2 | /* |
3 | tda18271.h - header for the Philips / NXP TDA18271 silicon tuner | |
4 | ||
59067f7e | 5 | Copyright (C) 2007, 2008 Michael Krufky <mkrufky@linuxtv.org> |
5bea1cd3 | 6 | |
5bea1cd3 MK |
7 | */ |
8 | ||
9 | #ifndef __TDA18271_H__ | |
10 | #define __TDA18271_H__ | |
11 | ||
12 | #include <linux/i2c.h> | |
fada1935 | 13 | #include <media/dvb_frontend.h> |
5bea1cd3 | 14 | |
f21e0d7f | 15 | struct tda18271_std_map_item { |
2ba65d51 | 16 | u16 if_freq; |
7f7203df MK |
17 | |
18 | /* EP3[4:3] */ | |
19 | unsigned int agc_mode:2; | |
20 | /* EP3[2:0] */ | |
21 | unsigned int std:3; | |
22 | /* EP4[7] */ | |
c293d0a7 | 23 | unsigned int fm_rfn:1; |
14c74b23 MK |
24 | /* EP4[4:2] */ |
25 | unsigned int if_lvl:3; | |
c0dc0c11 MK |
26 | /* EB22[6:0] */ |
27 | unsigned int rfagc_top:7; | |
f21e0d7f MK |
28 | }; |
29 | ||
30 | struct tda18271_std_map { | |
c353f42f | 31 | struct tda18271_std_map_item fm_radio; |
f21e0d7f MK |
32 | struct tda18271_std_map_item atv_b; |
33 | struct tda18271_std_map_item atv_dk; | |
34 | struct tda18271_std_map_item atv_gh; | |
35 | struct tda18271_std_map_item atv_i; | |
36 | struct tda18271_std_map_item atv_l; | |
37 | struct tda18271_std_map_item atv_lc; | |
38 | struct tda18271_std_map_item atv_mn; | |
39 | struct tda18271_std_map_item atsc_6; | |
40 | struct tda18271_std_map_item dvbt_6; | |
41 | struct tda18271_std_map_item dvbt_7; | |
42 | struct tda18271_std_map_item dvbt_8; | |
43 | struct tda18271_std_map_item qam_6; | |
ce0e93a5 | 44 | struct tda18271_std_map_item qam_7; |
f21e0d7f MK |
45 | struct tda18271_std_map_item qam_8; |
46 | }; | |
47 | ||
868f5ccd MK |
48 | enum tda18271_role { |
49 | TDA18271_MASTER = 0, | |
50 | TDA18271_SLAVE, | |
51 | }; | |
52 | ||
e435f95c MK |
53 | enum tda18271_i2c_gate { |
54 | TDA18271_GATE_AUTO = 0, | |
55 | TDA18271_GATE_ANALOG, | |
56 | TDA18271_GATE_DIGITAL, | |
57 | }; | |
58 | ||
4240b460 | 59 | enum tda18271_output_options { |
dda1bb4e | 60 | /* slave tuner output & loop through & xtal oscillator always on */ |
4240b460 | 61 | TDA18271_OUTPUT_LT_XT_ON = 0, |
81259f21 | 62 | |
dda1bb4e | 63 | /* slave tuner output loop through off */ |
4240b460 | 64 | TDA18271_OUTPUT_LT_OFF = 1, |
81259f21 | 65 | |
4240b460 MK |
66 | /* xtal oscillator off */ |
67 | TDA18271_OUTPUT_XT_OFF = 2, | |
81259f21 MK |
68 | }; |
69 | ||
1724c8fa MK |
70 | enum tda18271_small_i2c { |
71 | TDA18271_39_BYTE_CHUNK_INIT = 0, | |
e350d44f MCC |
72 | TDA18271_16_BYTE_CHUNK_INIT = 16, |
73 | TDA18271_08_BYTE_CHUNK_INIT = 8, | |
74 | TDA18271_03_BYTE_CHUNK_INIT = 3, | |
1724c8fa MK |
75 | }; |
76 | ||
f21e0d7f | 77 | struct tda18271_config { |
0e1fab90 | 78 | /* override default if freq / std settings (optional) */ |
f21e0d7f | 79 | struct tda18271_std_map *std_map; |
0e1fab90 | 80 | |
868f5ccd MK |
81 | /* master / slave tuner: master uses main pll, slave uses cal pll */ |
82 | enum tda18271_role role; | |
83 | ||
0e1fab90 | 84 | /* use i2c gate provided by analog or digital demod */ |
f21e0d7f | 85 | enum tda18271_i2c_gate gate; |
5555309c | 86 | |
4240b460 MK |
87 | /* output options that can be disabled */ |
88 | enum tda18271_output_options output_opt; | |
81259f21 | 89 | |
25985edc | 90 | /* some i2c providers can't write all 39 registers at once */ |
1724c8fa MK |
91 | enum tda18271_small_i2c small_i2c; |
92 | ||
81016b49 MK |
93 | /* force rf tracking filter calibration on startup */ |
94 | unsigned int rf_cal_on_startup:1; | |
95 | ||
6b82e0cf MK |
96 | /* prevent any register access during attach(), |
97 | * delaying both IR & RF calibration until init() | |
98 | * module option 'cal' overrides this delay */ | |
99 | unsigned int delay_cal:1; | |
100 | ||
adcc4b3e MK |
101 | /* interface to saa713x / tda829x */ |
102 | unsigned int config; | |
103 | }; | |
104 | ||
105 | #define TDA18271_CALLBACK_CMD_AGC_ENABLE 0 | |
106 | ||
107 | enum tda18271_mode { | |
108 | TDA18271_ANALOG = 0, | |
109 | TDA18271_DIGITAL, | |
f21e0d7f MK |
110 | }; |
111 | ||
9b174527 | 112 | #if IS_REACHABLE(CONFIG_MEDIA_TUNER_TDA18271) |
5bea1cd3 | 113 | extern struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr, |
e435f95c | 114 | struct i2c_adapter *i2c, |
f21e0d7f | 115 | struct tda18271_config *cfg); |
5bea1cd3 MK |
116 | #else |
117 | static inline struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, | |
118 | u8 addr, | |
e435f95c | 119 | struct i2c_adapter *i2c, |
f21e0d7f | 120 | struct tda18271_config *cfg) |
5bea1cd3 | 121 | { |
271ddbf7 | 122 | printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); |
5bea1cd3 MK |
123 | return NULL; |
124 | } | |
125 | #endif | |
126 | ||
127 | #endif /* __TDA18271_H__ */ |