WIP FPC-III support
[linux/fpc-iii.git] / drivers / media / dvb-frontends / stv090x_priv.h
blobf8ece898c1535537ca0723fa29fdb28596cb91d7
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3 STV0900/0903 Multistandard Broadcast Frontend driver
4 Copyright (C) Manu Abraham <abraham.manu@gmail.com>
6 Copyright (C) ST Microelectronics
8 */
10 #ifndef __STV090x_PRIV_H
11 #define __STV090x_PRIV_H
13 #include <media/dvb_frontend.h>
15 #define FE_ERROR 0
16 #define FE_NOTICE 1
17 #define FE_INFO 2
18 #define FE_DEBUG 3
19 #define FE_DEBUGREG 4
21 #define dprintk(__y, __z, format, arg...) do { \
22 if (__z) { \
23 if ((verbose > FE_ERROR) && (verbose > __y)) \
24 printk(KERN_ERR "%s: " format "\n", __func__ , ##arg); \
25 else if ((verbose > FE_NOTICE) && (verbose > __y)) \
26 printk(KERN_NOTICE "%s: " format "\n", __func__ , ##arg); \
27 else if ((verbose > FE_INFO) && (verbose > __y)) \
28 printk(KERN_INFO "%s: " format "\n", __func__ , ##arg); \
29 else if ((verbose > FE_DEBUG) && (verbose > __y)) \
30 printk(KERN_DEBUG "%s: " format "\n", __func__ , ##arg); \
31 } else { \
32 if (verbose > __y) \
33 printk(format, ##arg); \
34 } \
35 } while (0)
37 #define STV090x_READ_DEMOD(__state, __reg) (( \
38 (__state)->demod == STV090x_DEMODULATOR_1) ? \
39 stv090x_read_reg(__state, STV090x_P2_##__reg) : \
40 stv090x_read_reg(__state, STV090x_P1_##__reg))
42 #define STV090x_WRITE_DEMOD(__state, __reg, __data) (( \
43 (__state)->demod == STV090x_DEMODULATOR_1) ? \
44 stv090x_write_reg(__state, STV090x_P2_##__reg, __data) :\
45 stv090x_write_reg(__state, STV090x_P1_##__reg, __data))
47 #define STV090x_ADDR_OFFST(__state, __x) (( \
48 (__state->demod) == STV090x_DEMODULATOR_1) ? \
49 STV090x_P1_##__x : \
50 STV090x_P2_##__x)
53 #define STV090x_SETFIELD(mask, bitf, val) (mask = (mask & (~(((1 << STV090x_WIDTH_##bitf) - 1) <<\
54 STV090x_OFFST_##bitf))) | \
55 (val << STV090x_OFFST_##bitf))
57 #define STV090x_GETFIELD(val, bitf) ((val >> STV090x_OFFST_##bitf) & ((1 << STV090x_WIDTH_##bitf) - 1))
60 #define STV090x_SETFIELD_Px(mask, bitf, val) (mask = (mask & (~(((1 << STV090x_WIDTH_Px_##bitf) - 1) <<\
61 STV090x_OFFST_Px_##bitf))) | \
62 (val << STV090x_OFFST_Px_##bitf))
64 #define STV090x_GETFIELD_Px(val, bitf) ((val >> STV090x_OFFST_Px_##bitf) & ((1 << STV090x_WIDTH_Px_##bitf) - 1))
66 #define MAKEWORD16(__a, __b) (((__a) << 8) | (__b))
68 #define MSB(__x) ((__x >> 8) & 0xff)
69 #define LSB(__x) (__x & 0xff)
72 #define STV090x_IQPOWER_THRESHOLD 30
73 #define STV090x_SEARCH_AGC2_TH_CUT20 700
74 #define STV090x_SEARCH_AGC2_TH_CUT30 1400
76 #define STV090x_SEARCH_AGC2_TH(__ver) \
77 ((__ver <= 0x20) ? \
78 STV090x_SEARCH_AGC2_TH_CUT20 : \
79 STV090x_SEARCH_AGC2_TH_CUT30)
81 enum stv090x_signal_state {
82 STV090x_NOAGC1,
83 STV090x_NOCARRIER,
84 STV090x_NODATA,
85 STV090x_DATAOK,
86 STV090x_RANGEOK,
87 STV090x_OUTOFRANGE
90 enum stv090x_fec {
91 STV090x_PR12 = 0,
92 STV090x_PR23,
93 STV090x_PR34,
94 STV090x_PR45,
95 STV090x_PR56,
96 STV090x_PR67,
97 STV090x_PR78,
98 STV090x_PR89,
99 STV090x_PR910,
100 STV090x_PRERR
103 enum stv090x_modulation {
104 STV090x_QPSK,
105 STV090x_8PSK,
106 STV090x_16APSK,
107 STV090x_32APSK,
108 STV090x_UNKNOWN
111 enum stv090x_frame {
112 STV090x_LONG_FRAME,
113 STV090x_SHORT_FRAME
116 enum stv090x_pilot {
117 STV090x_PILOTS_OFF,
118 STV090x_PILOTS_ON
121 enum stv090x_rolloff {
122 STV090x_RO_35,
123 STV090x_RO_25,
124 STV090x_RO_20
127 enum stv090x_inversion {
128 STV090x_IQ_AUTO,
129 STV090x_IQ_NORMAL,
130 STV090x_IQ_SWAP
133 enum stv090x_modcod {
134 STV090x_DUMMY_PLF = 0,
135 STV090x_QPSK_14,
136 STV090x_QPSK_13,
137 STV090x_QPSK_25,
138 STV090x_QPSK_12,
139 STV090x_QPSK_35,
140 STV090x_QPSK_23,
141 STV090x_QPSK_34,
142 STV090x_QPSK_45,
143 STV090x_QPSK_56,
144 STV090x_QPSK_89,
145 STV090x_QPSK_910,
146 STV090x_8PSK_35,
147 STV090x_8PSK_23,
148 STV090x_8PSK_34,
149 STV090x_8PSK_56,
150 STV090x_8PSK_89,
151 STV090x_8PSK_910,
152 STV090x_16APSK_23,
153 STV090x_16APSK_34,
154 STV090x_16APSK_45,
155 STV090x_16APSK_56,
156 STV090x_16APSK_89,
157 STV090x_16APSK_910,
158 STV090x_32APSK_34,
159 STV090x_32APSK_45,
160 STV090x_32APSK_56,
161 STV090x_32APSK_89,
162 STV090x_32APSK_910,
163 STV090x_MODCODE_UNKNOWN
166 enum stv090x_search {
167 STV090x_SEARCH_DSS = 0,
168 STV090x_SEARCH_DVBS1,
169 STV090x_SEARCH_DVBS2,
170 STV090x_SEARCH_AUTO
173 enum stv090x_algo {
174 STV090x_BLIND_SEARCH,
175 STV090x_COLD_SEARCH,
176 STV090x_WARM_SEARCH
179 enum stv090x_delsys {
180 STV090x_ERROR = 0,
181 STV090x_DVBS1 = 1,
182 STV090x_DVBS2,
183 STV090x_DSS
186 struct stv090x_long_frame_crloop {
187 enum stv090x_modcod modcod;
189 u8 crl_pilots_on_2;
190 u8 crl_pilots_off_2;
191 u8 crl_pilots_on_5;
192 u8 crl_pilots_off_5;
193 u8 crl_pilots_on_10;
194 u8 crl_pilots_off_10;
195 u8 crl_pilots_on_20;
196 u8 crl_pilots_off_20;
197 u8 crl_pilots_on_30;
198 u8 crl_pilots_off_30;
201 struct stv090x_short_frame_crloop {
202 enum stv090x_modulation modulation;
204 u8 crl_2; /* SR < 3M */
205 u8 crl_5; /* 3 < SR <= 7M */
206 u8 crl_10; /* 7 < SR <= 15M */
207 u8 crl_20; /* 10 < SR <= 25M */
208 u8 crl_30; /* 10 < SR <= 45M */
211 struct stv090x_reg {
212 u16 addr;
213 u8 data;
216 struct stv090x_tab {
217 s32 real;
218 s32 read;
221 struct stv090x_internal {
222 struct i2c_adapter *i2c_adap;
223 u8 i2c_addr;
225 struct mutex demod_lock; /* Lock access to shared register */
226 struct mutex tuner_lock; /* Lock access to tuners */
227 s32 mclk; /* Masterclock Divider factor */
228 u32 dev_ver;
230 int num_used;
233 struct stv090x_state {
234 enum stv090x_device device;
235 enum stv090x_demodulator demod;
236 enum stv090x_mode demod_mode;
237 struct stv090x_internal *internal;
239 struct i2c_adapter *i2c;
240 struct stv090x_config *config;
241 struct dvb_frontend frontend;
243 u32 *verbose; /* Cached module verbosity */
245 enum stv090x_delsys delsys;
246 enum stv090x_fec fec;
247 enum stv090x_modulation modulation;
248 enum stv090x_modcod modcod;
249 enum stv090x_search search_mode;
250 enum stv090x_frame frame_len;
251 enum stv090x_pilot pilots;
252 enum stv090x_rolloff rolloff;
253 enum stv090x_inversion inversion;
254 enum stv090x_algo algo;
256 u32 frequency;
257 u32 srate;
259 s32 tuner_bw;
261 s32 search_range;
263 s32 DemodTimeout;
264 s32 FecTimeout;
267 #endif /* __STV090x_PRIV_H */