initial commit with v2.6.9
[linux-2.6.9-moxart.git] / drivers / media / video / bttvp.h
blob943f8136ab78fc65142a584d49bf653941b9bf80
1 /*
2 bttv - Bt848 frame grabber driver
4 bttv's *private* header file -- nobody other than bttv itself
5 should ever include this file.
7 (c) 2000-2002 Gerd Knorr <kraxel@bytesex.org>
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 #ifndef _BTTVP_H_
25 #define _BTTVP_H_
27 #include <linux/version.h>
28 #define BTTV_VERSION_CODE KERNEL_VERSION(0,9,15)
30 #include <linux/types.h>
31 #include <linux/wait.h>
32 #include <linux/i2c.h>
33 #include <linux/i2c-algo-bit.h>
34 #include <linux/videodev.h>
35 #include <linux/pci.h>
36 #include <linux/input.h>
37 #include <asm/scatterlist.h>
38 #include <asm/io.h>
40 #include <linux/device.h>
41 #include <media/video-buf.h>
42 #include <media/audiochip.h>
43 #include <media/tuner.h>
44 #include <media/ir-common.h>
46 #include "bt848.h"
47 #include "bttv.h"
48 #include "btcx-risc.h"
50 #ifdef __KERNEL__
52 #define FORMAT_FLAGS_DITHER 0x01
53 #define FORMAT_FLAGS_PACKED 0x02
54 #define FORMAT_FLAGS_PLANAR 0x04
55 #define FORMAT_FLAGS_RAW 0x08
56 #define FORMAT_FLAGS_CrCb 0x10
58 #define RISC_SLOT_O_VBI 4
59 #define RISC_SLOT_O_FIELD 6
60 #define RISC_SLOT_E_VBI 10
61 #define RISC_SLOT_E_FIELD 12
62 #define RISC_SLOT_LOOP 14
64 #define RESOURCE_OVERLAY 1
65 #define RESOURCE_VIDEO 2
66 #define RESOURCE_VBI 4
68 #define RAW_LINES 640
69 #define RAW_BPL 1024
71 #define UNSET (-1U)
73 /* ---------------------------------------------------------- */
75 struct bttv_tvnorm {
76 int v4l2_id;
77 char *name;
78 u32 Fsc;
79 u16 swidth, sheight; /* scaled standard width, height */
80 u16 totalwidth;
81 u8 adelay, bdelay, iform;
82 u32 scaledtwidth;
83 u16 hdelayx1, hactivex1;
84 u16 vdelay;
85 u8 vbipack;
86 u16 vtotal;
87 int sram;
89 extern const struct bttv_tvnorm bttv_tvnorms[];
90 extern const unsigned int BTTV_TVNORMS;
92 struct bttv_format {
93 char *name;
94 int palette; /* video4linux 1 */
95 int fourcc; /* video4linux 2 */
96 int btformat; /* BT848_COLOR_FMT_* */
97 int btswap; /* BT848_COLOR_CTL_* */
98 int depth; /* bit/pixel */
99 int flags;
100 int hshift,vshift; /* for planar modes */
102 extern const struct bttv_format bttv_formats[];
103 extern const unsigned int BTTV_FORMATS;
105 /* ---------------------------------------------------------- */
107 struct bttv_geometry {
108 u8 vtc,crop,comb;
109 u16 width,hscale,hdelay;
110 u16 sheight,vscale,vdelay,vtotal;
113 struct bttv_buffer {
114 /* common v4l buffer stuff -- must be first */
115 struct videobuf_buffer vb;
117 /* bttv specific */
118 const struct bttv_format *fmt;
119 int tvnorm;
120 int btformat;
121 int btswap;
122 struct bttv_geometry geo;
123 struct btcx_riscmem top;
124 struct btcx_riscmem bottom;
127 struct bttv_buffer_set {
128 struct bttv_buffer *top; /* top field buffer */
129 struct bttv_buffer *bottom; /* bottom field buffer */
130 unsigned int irqflags;
131 unsigned int topirq;
134 struct bttv_overlay {
135 int tvnorm;
136 struct v4l2_rect w;
137 enum v4l2_field field;
138 struct v4l2_clip *clips;
139 int nclips;
140 int setup_ok;
143 struct bttv_fh {
144 struct bttv *btv;
145 int resources;
146 #ifdef VIDIOC_G_PRIORITY
147 enum v4l2_priority prio;
148 #endif
149 enum v4l2_buf_type type;
151 /* video capture */
152 struct videobuf_queue cap;
153 const struct bttv_format *fmt;
154 int width;
155 int height;
157 /* current settings */
158 const struct bttv_format *ovfmt;
159 struct bttv_overlay ov;
161 /* video overlay */
162 struct videobuf_queue vbi;
163 int lines;
166 /* ---------------------------------------------------------- */
167 /* bttv-risc.c */
169 /* risc code generators - capture */
170 int bttv_risc_packed(struct bttv *btv, struct btcx_riscmem *risc,
171 struct scatterlist *sglist,
172 unsigned int offset, unsigned int bpl,
173 unsigned int pitch, unsigned int lines);
174 int bttv_risc_planar(struct bttv *btv, struct btcx_riscmem *risc,
175 struct scatterlist *sglist,
176 unsigned int yoffset, unsigned int ybpl,
177 unsigned int ypadding, unsigned int ylines,
178 unsigned int uoffset, unsigned int voffset,
179 unsigned int hshift, unsigned int vshift,
180 unsigned int cpadding);
181 int bttv_risc_overlay(struct bttv *btv, struct btcx_riscmem *risc,
182 const struct bttv_format *fmt,
183 struct bttv_overlay *ov,
184 int skip_top, int skip_bottom);
186 /* calculate / apply geometry settings */
187 void bttv_calc_geo(struct bttv *btv, struct bttv_geometry *geo,
188 int width, int height, int interleaved, int norm);
189 void bttv_apply_geo(struct bttv *btv, struct bttv_geometry *geo, int top);
191 /* control dma register + risc main loop */
192 void bttv_set_dma(struct bttv *btv, int override, int irqflags);
193 int bttv_risc_init_main(struct bttv *btv);
194 int bttv_risc_hook(struct bttv *btv, int slot, struct btcx_riscmem *risc,
195 int irqflags);
197 /* capture buffer handling */
198 int bttv_buffer_risc(struct bttv *btv, struct bttv_buffer *buf);
199 int bttv_buffer_activate_video(struct bttv *btv,
200 struct bttv_buffer_set *set);
201 int bttv_buffer_activate_vbi(struct bttv *btv,
202 struct bttv_buffer *vbi);
203 void bttv_dma_free(struct bttv *btv, struct bttv_buffer *buf);
205 /* overlay handling */
206 int bttv_overlay_risc(struct bttv *btv, struct bttv_overlay *ov,
207 const struct bttv_format *fmt,
208 struct bttv_buffer *buf);
211 /* ---------------------------------------------------------- */
212 /* bttv-vbi.c */
214 void bttv_vbi_try_fmt(struct bttv_fh *fh, struct v4l2_format *f);
215 void bttv_vbi_get_fmt(struct bttv_fh *fh, struct v4l2_format *f);
216 void bttv_vbi_setlines(struct bttv_fh *fh, struct bttv *btv, int lines);
218 extern struct videobuf_queue_ops bttv_vbi_qops;
220 /* ---------------------------------------------------------- */
221 /* bttv-gpio.c */
224 extern struct bus_type bttv_sub_bus_type;
225 int bttv_sub_add_device(struct bttv_core *core, char *name);
226 int bttv_sub_del_devices(struct bttv_core *core);
227 void bttv_gpio_irq(struct bttv_core *core);
228 void bttv_i2c_info(struct bttv_core *core, struct i2c_client *client, int attach);
231 /* ---------------------------------------------------------- */
232 /* bttv-driver.c */
234 /* insmod options */
235 extern unsigned int bttv_verbose;
236 extern unsigned int bttv_debug;
237 extern unsigned int bttv_gpio;
238 extern void bttv_gpio_tracking(struct bttv *btv, char *comment);
239 extern int init_bttv_i2c(struct bttv *btv);
240 extern int fini_bttv_i2c(struct bttv *btv);
241 extern int pvr_boot(struct bttv *btv);
243 extern int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg);
244 extern void bttv_reinit_bt848(struct bttv *btv);
245 extern void bttv_field_count(struct bttv *btv);
247 #define vprintk if (bttv_verbose) printk
248 #define dprintk if (bttv_debug >= 1) printk
249 #define d2printk if (bttv_debug >= 2) printk
251 /* our devices */
252 #define BTTV_MAX 16
253 extern unsigned int bttv_num;
254 extern struct bttv bttvs[BTTV_MAX];
256 #define BTTV_MAX_FBUF 0x208000
257 #define VBIBUF_SIZE (2048*VBI_MAXLINES*2)
258 #define BTTV_TIMEOUT (HZ/2) /* 0.5 seconds */
259 #define BTTV_FREE_IDLE (HZ) /* one second */
262 struct bttv_pll_info {
263 unsigned int pll_ifreq; /* PLL input frequency */
264 unsigned int pll_ofreq; /* PLL output frequency */
265 unsigned int pll_crystal; /* Crystal used for input */
266 unsigned int pll_current; /* Currently programmed ofreq */
269 /* for gpio-connected remote control */
270 struct bttv_input {
271 struct input_dev dev;
272 struct ir_input_state ir;
273 char name[32];
274 char phys[32];
275 u32 mask_keycode;
276 u32 mask_keydown;
279 struct bttv_suspend_state {
280 u32 pci_cfg[64 / sizeof(u32)];
281 u32 gpio_enable;
282 u32 gpio_data;
283 int disabled;
284 struct bttv_buffer_set video;
285 struct bttv_buffer *vbi;
288 struct bttv {
289 struct bttv_core c;
291 /* pci device config */
292 unsigned short id;
293 unsigned char revision;
294 unsigned char *bt848_mmio; /* pointer to mmio */
296 /* card configuration info */
297 unsigned int cardid; /* pci subsystem id (bt878 based ones) */
298 unsigned int tuner_type; /* tuner chip type */
299 unsigned int pinnacle_id;
300 unsigned int svhs;
301 struct bttv_pll_info pll;
302 int triton1;
303 int gpioirq;
304 int use_i2c_hw;
306 /* old gpio interface */
307 wait_queue_head_t gpioq;
308 int shutdown;
309 void (*audio_hook)(struct bttv *btv, struct video_audio *v, int set);
311 /* new gpio interface */
312 spinlock_t gpio_lock;
314 /* i2c layer */
315 struct i2c_algo_bit_data i2c_algo;
316 struct i2c_client i2c_client;
317 int i2c_state, i2c_rc;
318 int i2c_done;
319 wait_queue_head_t i2c_queue;
321 /* video4linux (1) */
322 struct video_device *video_dev;
323 struct video_device *radio_dev;
324 struct video_device *vbi_dev;
326 /* infrared remote */
327 int has_remote;
328 struct bttv_input *remote;
330 /* locking */
331 spinlock_t s_lock;
332 struct semaphore lock;
333 int resources;
334 struct semaphore reslock;
335 #ifdef VIDIOC_G_PRIORITY
336 struct v4l2_prio_state prio;
337 #endif
339 /* video state */
340 unsigned int input;
341 unsigned int audio;
342 unsigned long freq;
343 int tvnorm,hue,contrast,bright,saturation;
344 struct v4l2_framebuffer fbuf;
345 unsigned int field_count;
347 /* various options */
348 int opt_combfilter;
349 int opt_lumafilter;
350 int opt_automute;
351 int opt_chroma_agc;
352 int opt_adc_crush;
353 int opt_vcr_hack;
354 int opt_whitecrush_upper;
355 int opt_whitecrush_lower;
357 /* radio data/state */
358 int has_radio;
359 int radio_user;
361 /* miro/pinnacle + Aimslab VHX
362 philips matchbox (tea5757 radio tuner) support */
363 int has_matchbox;
364 int mbox_we;
365 int mbox_data;
366 int mbox_clk;
367 int mbox_most;
368 int mbox_mask;
370 /* ISA stuff (Terratec Active Radio Upgrade) */
371 int mbox_ior;
372 int mbox_iow;
373 int mbox_csel;
375 /* risc memory management data
376 - must aquire s_lock before changing these
377 - only the irq handler is supported to touch top + bottom + vcurr */
378 struct btcx_riscmem main;
379 struct bttv_buffer *screen; /* overlay */
380 struct list_head capture; /* video capture queue */
381 struct list_head vcapture; /* vbi capture queue */
382 struct bttv_buffer_set curr; /* active buffers */
383 struct bttv_buffer *cvbi; /* active vbi buffer */
384 int new_input;
386 unsigned long cap_ctl;
387 unsigned long dma_on;
388 struct timer_list timeout;
389 struct bttv_suspend_state state;
391 /* stats */
392 unsigned int errors;
393 unsigned int framedrop;
394 unsigned int irq_total;
395 unsigned int irq_me;
397 unsigned int users;
398 struct bttv_fh init;
401 /* private ioctls */
402 #define BTTV_VERSION _IOR('v' , BASE_VIDIOCPRIVATE+6, int)
403 #define BTTV_VBISIZE _IOR('v' , BASE_VIDIOCPRIVATE+8, int)
405 #endif
407 #define btwrite(dat,adr) writel((dat), (char *) (btv->bt848_mmio+(adr)))
408 #define btread(adr) readl(btv->bt848_mmio+(adr))
410 #define btand(dat,adr) btwrite((dat) & btread(adr), adr)
411 #define btor(dat,adr) btwrite((dat) | btread(adr), adr)
412 #define btaor(dat,mask,adr) btwrite((dat) | ((mask) & btread(adr)), adr)
414 #endif /* _BTTVP_H_ */
417 * Local variables:
418 * c-basic-offset: 8
419 * End: