1 /* 2 3 bttv - Bt848 frame grabber driver 4 5 bttv's *private* header file -- nobody other than bttv itself 6 should ever include this file. 7 8 (c) 2000-2002 Gerd Knorr <kraxel@bytesex.org> 9 10 This program is free software; you can redistribute it and/or modify 11 it under the terms of the GNU General Public License as published by 12 the Free Software Foundation; either version 2 of the License, or 13 (at your option) any later version. 14 15 This program is distributed in the hope that it will be useful, 16 but WITHOUT ANY WARRANTY; without even the implied warranty of 17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 GNU General Public License for more details. 19 20 You should have received a copy of the GNU General Public License 21 along with this program; if not, write to the Free Software 22 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 23 */ 24 25 #ifndef _BTTVP_H_ 26 #define _BTTVP_H_ 27 28 #include <linux/version.h> 29 #define BTTV_VERSION_CODE KERNEL_VERSION(0,9,17) 30 31 #include <linux/types.h> 32 #include <linux/wait.h> 33 #include <linux/i2c.h> 34 #include <linux/i2c-algo-bit.h> 35 #include <linux/videodev.h> 36 #include <linux/pci.h> 37 #include <linux/input.h> 38 #include <linux/mutex.h> 39 #include <linux/scatterlist.h> 40 #include <asm/io.h> 41 #include <media/v4l2-common.h> 42 #include <linux/device.h> 43 #include <media/videobuf-dma-sg.h> 44 #include <media/tveeprom.h> 45 #include <media/ir-common.h> 46 47 48 #include "bt848.h" 49 #include "bttv.h" 50 #include "btcx-risc.h" 51 52 #ifdef __KERNEL__ 53 54 #define FORMAT_FLAGS_DITHER 0x01 55 #define FORMAT_FLAGS_PACKED 0x02 56 #define FORMAT_FLAGS_PLANAR 0x04 57 #define FORMAT_FLAGS_RAW 0x08 58 #define FORMAT_FLAGS_CrCb 0x10 59 60 #define RISC_SLOT_O_VBI 4 61 #define RISC_SLOT_O_FIELD 6 62 #define RISC_SLOT_E_VBI 10 63 #define RISC_SLOT_E_FIELD 12 64 #define RISC_SLOT_LOOP 14 65 66 #define RESOURCE_OVERLAY 1 67 #define RESOURCE_VIDEO_STREAM 2 68 #define RESOURCE_VBI 4 69 #define RESOURCE_VIDEO_READ 8 70 71 #define RAW_LINES 640 72 #define RAW_BPL 1024 73 74 #define UNSET (-1U) 75 76 /* Min. value in VDELAY register. */ 77 #define MIN_VDELAY 2 78 /* Even to get Cb first, odd for Cr. */ 79 #define MAX_HDELAY (0x3FF & -2) 80 /* Limits scaled width, which must be a multiple of 4. */ 81 #define MAX_HACTIVE (0x3FF & -4) 82 83 #define BTTV_NORMS (\ 84 V4L2_STD_PAL | V4L2_STD_PAL_N | \ 85 V4L2_STD_PAL_Nc | V4L2_STD_SECAM | \ 86 V4L2_STD_NTSC | V4L2_STD_PAL_M | \ 87 V4L2_STD_PAL_60) 88 /* ---------------------------------------------------------- */ 89 90 struct bttv_tvnorm { 91 int v4l2_id; 92 char *name; 93 u32 Fsc; 94 u16 swidth, sheight; /* scaled standard width, height */ 95 u16 totalwidth; 96 u8 adelay, bdelay, iform; 97 u32 scaledtwidth; 98 u16 hdelayx1, hactivex1; 99 u16 vdelay; 100 u8 vbipack; 101 u16 vtotal; 102 int sram; 103 /* ITU-R frame line number of the first VBI line we can 104 capture, of the first and second field. The last possible line 105 is determined by cropcap.bounds. */ 106 u16 vbistart[2]; 107 /* Horizontally this counts fCLKx1 samples following the leading 108 edge of the horizontal sync pulse, vertically ITU-R frame line 109 numbers of the first field times two (2, 4, 6, ... 524 or 624). */ 110 struct v4l2_cropcap cropcap; 111 }; 112 extern const struct bttv_tvnorm bttv_tvnorms[]; 113 114 struct bttv_format { 115 char *name; 116 int fourcc; /* video4linux 2 */ 117 int btformat; /* BT848_COLOR_FMT_* */ 118 int btswap; /* BT848_COLOR_CTL_* */ 119 int depth; /* bit/pixel */ 120 int flags; 121 int hshift,vshift; /* for planar modes */ 122 }; 123 124 /* ---------------------------------------------------------- */ 125 126 struct bttv_geometry { 127 u8 vtc,crop,comb; 128 u16 width,hscale,hdelay; 129 u16 sheight,vscale,vdelay,vtotal; 130 }; 131 132 struct bttv_buffer { 133 /* common v4l buffer stuff -- must be first */ 134 struct videobuf_buffer vb; 135 136 /* bttv specific */ 137 const struct bttv_format *fmt; 138 int tvnorm; 139 int btformat; 140 int btswap; 141 struct bttv_geometry geo; 142 struct btcx_riscmem top; 143 struct btcx_riscmem bottom; 144 struct v4l2_rect crop; 145 unsigned int vbi_skip[2]; 146 unsigned int vbi_count[2]; 147 }; 148 149 struct bttv_buffer_set { 150 struct bttv_buffer *top; /* top field buffer */ 151 struct bttv_buffer *bottom; /* bottom field buffer */ 152 unsigned int top_irq; 153 unsigned int frame_irq; 154 }; 155 156 struct bttv_overlay { 157 int tvnorm; 158 struct v4l2_rect w; 159 enum v4l2_field field; 160 struct v4l2_clip *clips; 161 int nclips; 162 int setup_ok; 163 }; 164 165 struct bttv_vbi_fmt { 166 struct v4l2_vbi_format fmt; 167 168 /* fmt.start[] and count[] refer to this video standard. */ 169 const struct bttv_tvnorm *tvnorm; 170 171 /* Earliest possible start of video capturing with this 172 v4l2_vbi_format, in struct bttv_crop.rect units. */ 173 __s32 end; 174 }; 175 176 /* bttv-vbi.c */ 177 void bttv_vbi_fmt_reset(struct bttv_vbi_fmt *f, int norm); 178 179 struct bttv_crop { 180 /* A cropping rectangle in struct bttv_tvnorm.cropcap units. */ 181 struct v4l2_rect rect; 182 183 /* Scaled image size limits with this crop rect. Divide 184 max_height, but not min_height, by two when capturing 185 single fields. See also bttv_crop_reset() and 186 bttv_crop_adjust() in bttv-driver.c. */ 187 __s32 min_scaled_width; 188 __s32 min_scaled_height; 189 __s32 max_scaled_width; 190 __s32 max_scaled_height; 191 }; 192 193 struct bttv_fh { 194 struct bttv *btv; 195 int resources; 196 #ifdef VIDIOC_G_PRIORITY 197 enum v4l2_priority prio; 198 #endif 199 enum v4l2_buf_type type; 200 201 /* video capture */ 202 struct videobuf_queue cap; 203 const struct bttv_format *fmt; 204 int width; 205 int height; 206 207 /* video overlay */ 208 const struct bttv_format *ovfmt; 209 struct bttv_overlay ov; 210 211 /* Application called VIDIOC_S_CROP. */ 212 int do_crop; 213 214 /* vbi capture */ 215 struct videobuf_queue vbi; 216 /* Current VBI capture window as seen through this fh (cannot 217 be global for compatibility with earlier drivers). Protected 218 by struct bttv.lock and struct bttv_fh.vbi.lock. */ 219 struct bttv_vbi_fmt vbi_fmt; 220 }; 221 222 /* ---------------------------------------------------------- */ 223 /* bttv-risc.c */ 224 225 /* risc code generators - capture */ 226 int bttv_risc_packed(struct bttv *btv, struct btcx_riscmem *risc, 227 struct scatterlist *sglist, 228 unsigned int offset, unsigned int bpl, 229 unsigned int pitch, unsigned int skip_lines, 230 unsigned int store_lines); 231 232 /* control dma register + risc main loop */ 233 void bttv_set_dma(struct bttv *btv, int override); 234 int bttv_risc_init_main(struct bttv *btv); 235 int bttv_risc_hook(struct bttv *btv, int slot, struct btcx_riscmem *risc, 236 int irqflags); 237 238 /* capture buffer handling */ 239 int bttv_buffer_risc(struct bttv *btv, struct bttv_buffer *buf); 240 int bttv_buffer_activate_video(struct bttv *btv, 241 struct bttv_buffer_set *set); 242 int bttv_buffer_activate_vbi(struct bttv *btv, 243 struct bttv_buffer *vbi); 244 void bttv_dma_free(struct videobuf_queue *q, struct bttv *btv, 245 struct bttv_buffer *buf); 246 247 /* overlay handling */ 248 int bttv_overlay_risc(struct bttv *btv, struct bttv_overlay *ov, 249 const struct bttv_format *fmt, 250 struct bttv_buffer *buf); 251 252 253 /* ---------------------------------------------------------- */ 254 /* bttv-vbi.c */ 255 256 int bttv_try_fmt_vbi_cap(struct file *file, void *fh, struct v4l2_format *f); 257 int bttv_g_fmt_vbi_cap(struct file *file, void *fh, struct v4l2_format *f); 258 int bttv_s_fmt_vbi_cap(struct file *file, void *fh, struct v4l2_format *f); 259 260 extern struct videobuf_queue_ops bttv_vbi_qops; 261 262 /* ---------------------------------------------------------- */ 263 /* bttv-gpio.c */ 264 265 extern struct bus_type bttv_sub_bus_type; 266 int bttv_sub_add_device(struct bttv_core *core, char *name); 267 int bttv_sub_del_devices(struct bttv_core *core); 268 269 /* ---------------------------------------------------------- */ 270 /* bttv-cards.c */ 271 272 extern int no_overlay; 273 274 /* ---------------------------------------------------------- */ 275 /* bttv-driver.c */ 276 277 /* insmod options */ 278 extern unsigned int bttv_verbose; 279 extern unsigned int bttv_debug; 280 extern unsigned int bttv_gpio; 281 extern void bttv_gpio_tracking(struct bttv *btv, char *comment); 282 extern int init_bttv_i2c(struct bttv *btv); 283 extern int fini_bttv_i2c(struct bttv *btv); 284 285 #define bttv_printk if (bttv_verbose) printk 286 #define dprintk if (bttv_debug >= 1) printk 287 #define d2printk if (bttv_debug >= 2) printk 288 289 #define BTTV_MAX_FBUF 0x208000 290 #define BTTV_TIMEOUT msecs_to_jiffies(500) /* 0.5 seconds */ 291 #define BTTV_FREE_IDLE msecs_to_jiffies(1000) /* one second */ 292 293 294 struct bttv_pll_info { 295 unsigned int pll_ifreq; /* PLL input frequency */ 296 unsigned int pll_ofreq; /* PLL output frequency */ 297 unsigned int pll_crystal; /* Crystal used for input */ 298 unsigned int pll_current; /* Currently programmed ofreq */ 299 }; 300 301 /* for gpio-connected remote control */ 302 struct bttv_input { 303 struct input_dev *dev; 304 struct ir_input_state ir; 305 char name[32]; 306 char phys[32]; 307 u32 mask_keycode; 308 u32 mask_keydown; 309 }; 310 311 struct bttv_suspend_state { 312 u32 gpio_enable; 313 u32 gpio_data; 314 int disabled; 315 int loop_irq; 316 struct bttv_buffer_set video; 317 struct bttv_buffer *vbi; 318 }; 319 320 struct bttv { 321 struct bttv_core c; 322 323 /* pci device config */ 324 unsigned short id; 325 unsigned char revision; 326 unsigned char __iomem *bt848_mmio; /* pointer to mmio */ 327 328 /* card configuration info */ 329 unsigned int cardid; /* pci subsystem id (bt878 based ones) */ 330 unsigned int tuner_type; /* tuner chip type */ 331 unsigned int tda9887_conf; 332 unsigned int svhs; 333 struct bttv_pll_info pll; 334 int triton1; 335 int gpioirq; 336 int (*custom_irq)(struct bttv *btv); 337 338 int use_i2c_hw; 339 340 /* old gpio interface */ 341 wait_queue_head_t gpioq; 342 int shutdown; 343 344 void (*volume_gpio)(struct bttv *btv, __u16 volume); 345 void (*audio_mode_gpio)(struct bttv *btv, struct v4l2_tuner *tuner, int set); 346 347 /* new gpio interface */ 348 spinlock_t gpio_lock; 349 350 /* i2c layer */ 351 struct i2c_algo_bit_data i2c_algo; 352 struct i2c_client i2c_client; 353 int i2c_state, i2c_rc; 354 int i2c_done; 355 wait_queue_head_t i2c_queue; 356 struct i2c_client *i2c_msp34xx_client; 357 struct i2c_client *i2c_tvaudio_client; 358 359 /* video4linux (1) */ 360 struct video_device *video_dev; 361 struct video_device *radio_dev; 362 struct video_device *vbi_dev; 363 364 /* infrared remote */ 365 int has_remote; 366 struct card_ir *remote; 367 368 /* locking */ 369 spinlock_t s_lock; 370 struct mutex lock; 371 int resources; 372 #ifdef VIDIOC_G_PRIORITY 373 struct v4l2_prio_state prio; 374 #endif 375 376 /* video state */ 377 unsigned int input; 378 unsigned int audio; 379 unsigned int mute; 380 unsigned long freq; 381 int tvnorm,hue,contrast,bright,saturation; 382 struct v4l2_framebuffer fbuf; 383 unsigned int field_count; 384 385 /* various options */ 386 int opt_combfilter; 387 int opt_lumafilter; 388 int opt_automute; 389 int opt_chroma_agc; 390 int opt_adc_crush; 391 int opt_vcr_hack; 392 int opt_whitecrush_upper; 393 int opt_whitecrush_lower; 394 int opt_uv_ratio; 395 int opt_full_luma_range; 396 int opt_coring; 397 398 /* radio data/state */ 399 int has_radio; 400 int radio_user; 401 402 /* miro/pinnacle + Aimslab VHX 403 philips matchbox (tea5757 radio tuner) support */ 404 int has_matchbox; 405 int mbox_we; 406 int mbox_data; 407 int mbox_clk; 408 int mbox_most; 409 int mbox_mask; 410 411 /* ISA stuff (Terratec Active Radio Upgrade) */ 412 int mbox_ior; 413 int mbox_iow; 414 int mbox_csel; 415 416 /* risc memory management data 417 - must acquire s_lock before changing these 418 - only the irq handler is supported to touch top + bottom + vcurr */ 419 struct btcx_riscmem main; 420 struct bttv_buffer *screen; /* overlay */ 421 struct list_head capture; /* video capture queue */ 422 struct list_head vcapture; /* vbi capture queue */ 423 struct bttv_buffer_set curr; /* active buffers */ 424 struct bttv_buffer *cvbi; /* active vbi buffer */ 425 int loop_irq; 426 int new_input; 427 428 unsigned long cap_ctl; 429 unsigned long dma_on; 430 struct timer_list timeout; 431 struct bttv_suspend_state state; 432 433 /* stats */ 434 unsigned int errors; 435 unsigned int framedrop; 436 unsigned int irq_total; 437 unsigned int irq_me; 438 439 unsigned int users; 440 struct bttv_fh init; 441 442 /* used to make dvb-bt8xx autoloadable */ 443 struct work_struct request_module_wk; 444 445 /* Default (0) and current (1) video capturing and overlay 446 cropping parameters in bttv_tvnorm.cropcap units. Protected 447 by bttv.lock. */ 448 struct bttv_crop crop[2]; 449 450 /* Earliest possible start of video capturing in 451 bttv_tvnorm.cropcap line units. Set by check_alloc_btres() 452 and free_btres(). Protected by bttv.lock. */ 453 __s32 vbi_end; 454 455 /* Latest possible end of VBI capturing (= crop[x].rect.top when 456 VIDEO_RESOURCES are locked). Set by check_alloc_btres() 457 and free_btres(). Protected by bttv.lock. */ 458 __s32 crop_start; 459 }; 460 461 /* our devices */ 462 #define BTTV_MAX 32 463 extern unsigned int bttv_num; 464 extern struct bttv bttvs[BTTV_MAX]; 465 466 #endif 467 468 #define btwrite(dat,adr) writel((dat), btv->bt848_mmio+(adr)) 469 #define btread(adr) readl(btv->bt848_mmio+(adr)) 470 471 #define btand(dat,adr) btwrite((dat) & btread(adr), adr) 472 #define btor(dat,adr) btwrite((dat) | btread(adr), adr) 473 #define btaor(dat,mask,adr) btwrite((dat) | ((mask) & btread(adr)), adr) 474 475 #endif /* _BTTVP_H_ */ 476 477 /* 478 * Local variables: 479 * c-basic-offset: 8 480 * End: 481 */ 482