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