1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
2 | /* |
3 | tda18271.h - header for the Philips / NXP TDA18271 silicon tuner |
4 | |
5 | Copyright (C) 2007, 2008 Michael Krufky <mkrufky@linuxtv.org> |
6 | |
7 | */ |
8 | |
9 | #ifndef __TDA18271_H__ |
10 | #define __TDA18271_H__ |
11 | |
12 | #include <linux/i2c.h> |
13 | #include <media/dvb_frontend.h> |
14 | |
15 | struct tda18271_std_map_item { |
16 | u16 if_freq; |
17 | |
18 | /* EP3[4:3] */ |
19 | unsigned int agc_mode:2; |
20 | /* EP3[2:0] */ |
21 | unsigned int std:3; |
22 | /* EP4[7] */ |
23 | unsigned int fm_rfn:1; |
24 | /* EP4[4:2] */ |
25 | unsigned int if_lvl:3; |
26 | /* EB22[6:0] */ |
27 | unsigned int rfagc_top:7; |
28 | }; |
29 | |
30 | struct tda18271_std_map { |
31 | struct tda18271_std_map_item fm_radio; |
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; |
44 | struct tda18271_std_map_item qam_7; |
45 | struct tda18271_std_map_item qam_8; |
46 | }; |
47 | |
48 | enum tda18271_role { |
49 | TDA18271_MASTER = 0, |
50 | TDA18271_SLAVE, |
51 | }; |
52 | |
53 | enum tda18271_i2c_gate { |
54 | TDA18271_GATE_AUTO = 0, |
55 | TDA18271_GATE_ANALOG, |
56 | TDA18271_GATE_DIGITAL, |
57 | }; |
58 | |
59 | enum tda18271_output_options { |
60 | /* slave tuner output & loop through & xtal oscillator always on */ |
61 | TDA18271_OUTPUT_LT_XT_ON = 0, |
62 | |
63 | /* slave tuner output loop through off */ |
64 | TDA18271_OUTPUT_LT_OFF = 1, |
65 | |
66 | /* xtal oscillator off */ |
67 | TDA18271_OUTPUT_XT_OFF = 2, |
68 | }; |
69 | |
70 | enum tda18271_small_i2c { |
71 | TDA18271_39_BYTE_CHUNK_INIT = 0, |
72 | TDA18271_16_BYTE_CHUNK_INIT = 16, |
73 | TDA18271_08_BYTE_CHUNK_INIT = 8, |
74 | TDA18271_03_BYTE_CHUNK_INIT = 3, |
75 | }; |
76 | |
77 | struct tda18271_config { |
78 | /* override default if freq / std settings (optional) */ |
79 | struct tda18271_std_map *std_map; |
80 | |
81 | /* master / slave tuner: master uses main pll, slave uses cal pll */ |
82 | enum tda18271_role role; |
83 | |
84 | /* use i2c gate provided by analog or digital demod */ |
85 | enum tda18271_i2c_gate gate; |
86 | |
87 | /* output options that can be disabled */ |
88 | enum tda18271_output_options output_opt; |
89 | |
90 | /* some i2c providers can't write all 39 registers at once */ |
91 | enum tda18271_small_i2c small_i2c; |
92 | |
93 | /* force rf tracking filter calibration on startup */ |
94 | unsigned int rf_cal_on_startup:1; |
95 | |
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 | |
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, |
110 | }; |
111 | |
112 | #if IS_REACHABLE(CONFIG_MEDIA_TUNER_TDA18271) |
113 | extern struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr, |
114 | struct i2c_adapter *i2c, |
115 | struct tda18271_config *cfg); |
116 | #else |
117 | static inline struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, |
118 | u8 addr, |
119 | struct i2c_adapter *i2c, |
120 | struct tda18271_config *cfg) |
121 | { |
122 | printk(KERN_WARNING "%s: driver disabled by Kconfig\n" , __func__); |
123 | return NULL; |
124 | } |
125 | #endif |
126 | |
127 | #endif /* __TDA18271_H__ */ |
128 | |