]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
1da177e4 LT |
2 | #ifndef _AV7110_H_ |
3 | #define _AV7110_H_ | |
4 | ||
5 | #include <linux/interrupt.h> | |
6 | #include <linux/socket.h> | |
7 | #include <linux/netdevice.h> | |
8 | #include <linux/i2c.h> | |
ee820a64 | 9 | #include <linux/input.h> |
b2409b65 | 10 | #include <linux/time.h> |
1da177e4 | 11 | |
1da177e4 LT |
12 | #include <linux/dvb/video.h> |
13 | #include <linux/dvb/audio.h> | |
14 | #include <linux/dvb/dmx.h> | |
15 | #include <linux/dvb/ca.h> | |
16 | #include <linux/dvb/osd.h> | |
17 | #include <linux/dvb/net.h> | |
3593cab5 | 18 | #include <linux/mutex.h> |
1da177e4 LT |
19 | |
20 | #include "dvbdev.h" | |
21 | #include "demux.h" | |
22 | #include "dvb_demux.h" | |
23 | #include "dmxdev.h" | |
24 | #include "dvb_filter.h" | |
25 | #include "dvb_net.h" | |
26 | #include "dvb_ringbuffer.h" | |
27 | #include "dvb_frontend.h" | |
28 | #include "ves1820.h" | |
29 | #include "ves1x93.h" | |
30 | #include "stv0299.h" | |
31 | #include "tda8083.h" | |
32 | #include "sp8870.h" | |
33 | #include "stv0297.h" | |
34 | #include "l64781.h" | |
35 | ||
d647f0b7 | 36 | #include <media/drv-intf/saa7146_vv.h> |
1da177e4 LT |
37 | |
38 | ||
39 | #define ANALOG_TUNER_VES1820 1 | |
40 | #define ANALOG_TUNER_STV0297 2 | |
1da177e4 LT |
41 | |
42 | extern int av7110_debug; | |
43 | ||
a80e1d96 MCC |
44 | #define dprintk(level, fmt, arg...) do { \ |
45 | if (level & av7110_debug) \ | |
46 | printk(KERN_DEBUG KBUILD_MODNAME ": %s(): " fmt, \ | |
47 | __func__, ##arg); \ | |
48 | } while (0) | |
1da177e4 LT |
49 | |
50 | #define MAXFILT 32 | |
51 | ||
52 | enum {AV_PES_STREAM, PS_STREAM, TS_STREAM, PES_STREAM}; | |
53 | ||
58a44040 MS |
54 | enum av7110_video_mode { |
55 | AV7110_VIDEO_MODE_PAL = 0, | |
56 | AV7110_VIDEO_MODE_NTSC = 1 | |
57 | }; | |
58 | ||
1da177e4 LT |
59 | struct av7110_p2t { |
60 | u8 pes[TS_SIZE]; | |
61 | u8 counter; | |
62 | long int pos; | |
63 | int frags; | |
64 | struct dvb_demux_feed *feed; | |
65 | }; | |
66 | ||
67 | /* video MPEG decoder events: */ | |
68 | /* (code copied from dvb_frontend.c, should maybe be factored out...) */ | |
69 | #define MAX_VIDEO_EVENT 8 | |
70 | struct dvb_video_events { | |
71 | struct video_event events[MAX_VIDEO_EVENT]; | |
72 | int eventw; | |
73 | int eventr; | |
74 | int overflow; | |
75 | wait_queue_head_t wait_queue; | |
76 | spinlock_t lock; | |
77 | }; | |
78 | ||
79 | ||
ee820a64 OE |
80 | struct av7110; |
81 | ||
82 | /* infrared remote control */ | |
83 | struct infrared { | |
84 | u16 key_map[256]; | |
85 | struct input_dev *input_dev; | |
86 | char input_phys[32]; | |
87 | struct timer_list keyup_timer; | |
88 | struct tasklet_struct ir_tasklet; | |
89 | void (*ir_handler)(struct av7110 *av7110, u32 ircom); | |
90 | u32 ir_command; | |
91 | u32 ir_config; | |
92 | u32 device_mask; | |
93 | u8 protocol; | |
94 | u8 inversion; | |
95 | u16 last_key; | |
96 | u16 last_toggle; | |
97 | u8 delay_timer_finished; | |
98 | }; | |
99 | ||
100 | ||
1da177e4 LT |
101 | /* place to store all the necessary device information */ |
102 | struct av7110 { | |
103 | ||
104 | /* devices */ | |
105 | ||
106 | struct dvb_device dvb_dev; | |
107 | struct dvb_net dvb_net; | |
108 | ||
3ae863e0 HV |
109 | struct video_device v4l_dev; |
110 | struct video_device vbi_dev; | |
1da177e4 LT |
111 | |
112 | struct saa7146_dev *dev; | |
113 | ||
114 | struct i2c_adapter i2c_adap; | |
115 | ||
116 | char *card_name; | |
117 | ||
118 | /* support for analog module of dvb-c */ | |
119 | int analog_tuner_flags; | |
120 | int current_input; | |
121 | u32 current_freq; | |
122 | ||
123 | struct tasklet_struct debi_tasklet; | |
124 | struct tasklet_struct gpio_tasklet; | |
125 | ||
126 | int adac_type; /* audio DAC type */ | |
127 | #define DVB_ADAC_TI 0 | |
128 | #define DVB_ADAC_CRYSTAL 1 | |
1c13b95c MS |
129 | #define DVB_ADAC_MSP34x0 2 |
130 | #define DVB_ADAC_MSP34x5 3 | |
1da177e4 LT |
131 | #define DVB_ADAC_NONE -1 |
132 | ||
133 | ||
134 | /* buffers */ | |
135 | ||
136 | void *iobuf; /* memory for all buffers */ | |
137 | struct dvb_ringbuffer avout; /* buffer for video or A/V mux */ | |
138 | #define AVOUTLEN (128*1024) | |
139 | struct dvb_ringbuffer aout; /* buffer for audio */ | |
140 | #define AOUTLEN (64*1024) | |
141 | void *bmpbuf; | |
142 | #define BMPLEN (8*32768+1024) | |
143 | ||
144 | /* bitmap buffers and states */ | |
145 | ||
146 | int bmpp; | |
147 | int bmplen; | |
148 | volatile int bmp_state; | |
149 | #define BMP_NONE 0 | |
150 | #define BMP_LOADING 1 | |
c9090ebb | 151 | #define BMP_LOADED 2 |
1da177e4 LT |
152 | wait_queue_head_t bmpq; |
153 | ||
154 | ||
155 | /* DEBI and polled command interface */ | |
156 | ||
157 | spinlock_t debilock; | |
3593cab5 | 158 | struct mutex dcomlock; |
1da177e4 LT |
159 | volatile int debitype; |
160 | volatile int debilen; | |
161 | ||
162 | ||
163 | /* Recording and playback flags */ | |
164 | ||
165 | int rec_mode; | |
166 | int playing; | |
167 | #define RP_NONE 0 | |
168 | #define RP_VIDEO 1 | |
169 | #define RP_AUDIO 2 | |
170 | #define RP_AV 3 | |
171 | ||
172 | ||
173 | /* OSD */ | |
174 | ||
175 | int osdwin; /* currently active window */ | |
176 | u16 osdbpp[8]; | |
3593cab5 | 177 | struct mutex osd_mutex; |
1da177e4 LT |
178 | |
179 | /* CA */ | |
180 | ||
c93022a7 | 181 | struct ca_slot_info ci_slot[2]; |
1da177e4 | 182 | |
58a44040 | 183 | enum av7110_video_mode vidmode; |
1da177e4 LT |
184 | struct dmxdev dmxdev; |
185 | struct dvb_demux demux; | |
186 | ||
187 | struct dmx_frontend hw_frontend; | |
188 | struct dmx_frontend mem_frontend; | |
189 | ||
190 | /* for budget mode demux1 */ | |
191 | struct dmxdev dmxdev1; | |
192 | struct dvb_demux demux1; | |
193 | struct dvb_net dvb_net1; | |
194 | spinlock_t feedlock1; | |
195 | int feeding1; | |
1da177e4 LT |
196 | u32 ttbp; |
197 | unsigned char *grabbing; | |
198 | struct saa7146_pgtable pt; | |
199 | struct tasklet_struct vpe_tasklet; | |
9e615eac | 200 | bool full_ts; |
1da177e4 LT |
201 | |
202 | int fe_synced; | |
3593cab5 | 203 | struct mutex pid_mutex; |
1da177e4 LT |
204 | |
205 | int video_blank; | |
206 | struct video_status videostate; | |
defd574e | 207 | u16 display_panscan; |
1da177e4 LT |
208 | int display_ar; |
209 | int trickmode; | |
210 | #define TRICK_NONE 0 | |
211 | #define TRICK_FAST 1 | |
212 | #define TRICK_SLOW 2 | |
213 | #define TRICK_FREEZE 3 | |
214 | struct audio_status audiostate; | |
215 | ||
216 | struct dvb_demux_filter *handle2filter[32]; | |
217 | struct av7110_p2t p2t_filter[MAXFILT]; | |
218 | struct dvb_filter_pes2ts p2t[2]; | |
219 | struct ipack ipack[2]; | |
220 | u8 *kbuf[2]; | |
221 | ||
222 | int sinfo; | |
223 | int feeding; | |
224 | ||
225 | int arm_errors; | |
226 | int registered; | |
227 | ||
228 | ||
229 | /* AV711X */ | |
230 | ||
231 | u32 arm_fw; | |
232 | u32 arm_rtsl; | |
233 | u32 arm_vid; | |
234 | u32 arm_app; | |
235 | u32 avtype; | |
236 | int arm_ready; | |
237 | struct task_struct *arm_thread; | |
238 | wait_queue_head_t arm_wait; | |
239 | u16 arm_loops; | |
1da177e4 LT |
240 | |
241 | void *debi_virt; | |
242 | dma_addr_t debi_bus; | |
243 | ||
244 | u16 pids[DMX_PES_OTHER]; | |
245 | ||
246 | struct dvb_ringbuffer ci_rbuffer; | |
247 | struct dvb_ringbuffer ci_wbuffer; | |
248 | ||
249 | struct audio_mixer mixer; | |
250 | ||
fdc53a6d | 251 | struct dvb_adapter dvb_adapter; |
1da177e4 LT |
252 | struct dvb_device *video_dev; |
253 | struct dvb_device *audio_dev; | |
254 | struct dvb_device *ca_dev; | |
255 | struct dvb_device *osd_dev; | |
256 | ||
257 | struct dvb_video_events video_events; | |
258 | video_size_t video_size; | |
259 | ||
5b0fa4ff OE |
260 | u16 wssMode; |
261 | u16 wssData; | |
262 | ||
ee820a64 | 263 | struct infrared ir; |
1da177e4 LT |
264 | |
265 | /* firmware stuff */ | |
266 | unsigned char *bin_fw; | |
267 | unsigned long size_fw; | |
268 | ||
269 | unsigned char *bin_dpram; | |
270 | unsigned long size_dpram; | |
271 | ||
272 | unsigned char *bin_root; | |
273 | unsigned long size_root; | |
274 | ||
275 | struct dvb_frontend* fe; | |
0df289a2 | 276 | enum fe_status fe_status; |
66190a27 | 277 | |
30ad64b8 NS |
278 | struct mutex ioctl_mutex; |
279 | ||
66190a27 OE |
280 | /* crash recovery */ |
281 | void (*recover)(struct av7110* av7110); | |
0df289a2 MCC |
282 | enum fe_sec_voltage saved_voltage; |
283 | enum fe_sec_tone_mode saved_tone; | |
66190a27 | 284 | struct dvb_diseqc_master_cmd saved_master_cmd; |
0df289a2 | 285 | enum fe_sec_mini_cmd saved_minicmd; |
66190a27 | 286 | |
1da177e4 | 287 | int (*fe_init)(struct dvb_frontend* fe); |
0df289a2 MCC |
288 | int (*fe_read_status)(struct dvb_frontend *fe, enum fe_status *status); |
289 | int (*fe_diseqc_reset_overload)(struct dvb_frontend *fe); | |
290 | int (*fe_diseqc_send_master_cmd)(struct dvb_frontend *fe, | |
291 | struct dvb_diseqc_master_cmd *cmd); | |
292 | int (*fe_diseqc_send_burst)(struct dvb_frontend *fe, | |
293 | enum fe_sec_mini_cmd minicmd); | |
294 | int (*fe_set_tone)(struct dvb_frontend *fe, | |
295 | enum fe_sec_tone_mode tone); | |
296 | int (*fe_set_voltage)(struct dvb_frontend *fe, | |
297 | enum fe_sec_voltage voltage); | |
298 | int (*fe_dishnetwork_send_legacy_command)(struct dvb_frontend *fe, | |
299 | unsigned long cmd); | |
b5c7cfd1 | 300 | int (*fe_set_frontend)(struct dvb_frontend *fe); |
1da177e4 LT |
301 | }; |
302 | ||
303 | ||
ce18a223 | 304 | extern int ChangePIDs(struct av7110 *av7110, u16 vpid, u16 apid, u16 ttpid, |
1da177e4 LT |
305 | u16 subpid, u16 pcrpid); |
306 | ||
ee820a64 | 307 | extern int av7110_check_ir_config(struct av7110 *av7110, int force); |
03388ae3 OE |
308 | extern int av7110_ir_init(struct av7110 *av7110); |
309 | extern void av7110_ir_exit(struct av7110 *av7110); | |
1da177e4 LT |
310 | |
311 | /* msp3400 i2c subaddresses */ | |
312 | #define MSP_WR_DEM 0x10 | |
313 | #define MSP_RD_DEM 0x11 | |
314 | #define MSP_WR_DSP 0x12 | |
315 | #define MSP_RD_DSP 0x13 | |
316 | ||
317 | extern int i2c_writereg(struct av7110 *av7110, u8 id, u8 reg, u8 val); | |
318 | extern u8 i2c_readreg(struct av7110 *av7110, u8 id, u8 reg); | |
319 | extern int msp_writereg(struct av7110 *av7110, u8 dev, u16 reg, u16 val); | |
1da177e4 LT |
320 | |
321 | ||
322 | extern int av7110_init_analog_module(struct av7110 *av7110); | |
323 | extern int av7110_init_v4l(struct av7110 *av7110); | |
324 | extern int av7110_exit_v4l(struct av7110 *av7110); | |
325 | ||
326 | #endif /* _AV7110_H_ */ |