1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 /* 3 4 bttv - Bt848 frame grabber driver 5 6 bttv's *private* header file -- nobody other than bttv itself 7 should ever include this file. 8 9 (c) 2000-2002 Gerd Knorr <kraxel@bytesex.org> 10 11 */ 12 13 #ifndef _BTTVP_H_ 14 #define _BTTVP_H_ 15 16 #include <linux/types.h> 17 #include <linux/wait.h> 18 #include <linux/i2c.h> 19 #include <linux/i2c-algo-bit.h> 20 #include <linux/pci.h> 21 #include <linux/input.h> 22 #include <linux/mutex.h> 23 #include <linux/scatterlist.h> 24 #include <linux/device.h> 25 #include <asm/io.h> 26 #include <media/v4l2-common.h> 27 #include <media/v4l2-ctrls.h> 28 #include <media/v4l2-fh.h> 29 #include <media/videobuf2-dma-sg.h> 30 #include <media/tveeprom.h> 31 #include <media/rc-core.h> 32 #include <media/i2c/ir-kbd-i2c.h> 33 #include <media/drv-intf/tea575x.h> 34 35 #include "bt848.h" 36 #include "bttv.h" 37 #include "btcx-risc.h" 38 39 #ifdef __KERNEL__ 40 41 #define FORMAT_FLAGS_DITHER 0x01 42 #define FORMAT_FLAGS_PACKED 0x02 43 #define FORMAT_FLAGS_PLANAR 0x04 44 #define FORMAT_FLAGS_RAW 0x08 45 #define FORMAT_FLAGS_CrCb 0x10 46 47 #define RISC_SLOT_O_VBI 4 48 #define RISC_SLOT_O_FIELD 6 49 #define RISC_SLOT_E_VBI 10 50 #define RISC_SLOT_E_FIELD 12 51 #define RISC_SLOT_LOOP 14 52 53 #define RESOURCE_VIDEO_STREAM 2 54 #define RESOURCE_VBI 4 55 #define RESOURCE_VIDEO_READ 8 56 57 #define RAW_LINES 640 58 #define RAW_BPL 1024 59 60 #define UNSET (-1U) 61 62 /* Min. value in VDELAY register. */ 63 #define MIN_VDELAY 2 64 /* Even to get Cb first, odd for Cr. */ 65 #define MAX_HDELAY (0x3FF & -2) 66 /* Limits scaled width, which must be a multiple of 4. */ 67 #define MAX_HACTIVE (0x3FF & -4) 68 69 #define BTTV_NORMS (\ 70 V4L2_STD_PAL | V4L2_STD_PAL_N | \ 71 V4L2_STD_PAL_Nc | V4L2_STD_SECAM | \ 72 V4L2_STD_NTSC | V4L2_STD_PAL_M | \ 73 V4L2_STD_PAL_60) 74 /* ---------------------------------------------------------- */ 75 76 struct bttv_tvnorm { 77 int v4l2_id; 78 char *name; 79 u32 Fsc; 80 u16 swidth, sheight; /* scaled standard width, height */ 81 u16 totalwidth; 82 u8 adelay, bdelay, iform; 83 u32 scaledtwidth; 84 u16 hdelayx1, hactivex1; 85 u16 vdelay; 86 u8 vbipack; 87 u16 vtotal; 88 int sram; 89 /* ITU-R frame line number of the first VBI line we can 90 capture, of the first and second field. The last possible line 91 is determined by cropcap.bounds. */ 92 u16 vbistart[2]; 93 /* Horizontally this counts fCLKx1 samples following the leading 94 edge of the horizontal sync pulse, vertically ITU-R frame line 95 numbers of the first field times two (2, 4, 6, ... 524 or 624). */ 96 struct v4l2_cropcap cropcap; 97 }; 98 extern const struct bttv_tvnorm bttv_tvnorms[]; 99 100 struct bttv_format { 101 int fourcc; /* video4linux 2 */ 102 int btformat; /* BT848_COLOR_FMT_* */ 103 int btswap; /* BT848_COLOR_CTL_* */ 104 int depth; /* bit/pixel */ 105 int flags; 106 int hshift,vshift; /* for planar modes */ 107 }; 108 109 struct bttv_ir { 110 struct rc_dev *dev; 111 struct bttv *btv; 112 struct timer_list timer; 113 114 char name[32]; 115 char phys[32]; 116 117 /* Usual gpio signalling */ 118 u32 mask_keycode; 119 u32 mask_keydown; 120 u32 mask_keyup; 121 u32 polling; 122 u32 last_gpio; 123 int shift_by; 124 int rc5_remote_gap; 125 126 /* RC5 gpio */ 127 bool rc5_gpio; /* Is RC5 legacy GPIO enabled? */ 128 u32 last_bit; /* last raw bit seen */ 129 u32 code; /* raw code under construction */ 130 ktime_t base_time; /* time of last seen code */ 131 bool active; /* building raw code */ 132 }; 133 134 135 /* ---------------------------------------------------------- */ 136 137 struct bttv_geometry { 138 u8 vtc,crop,comb; 139 u16 width,hscale,hdelay; 140 u16 sheight,vscale,vdelay,vtotal; 141 }; 142 143 struct bttv_buffer { 144 /* common v4l buffer stuff -- must be first */ 145 struct vb2_v4l2_buffer vbuf; 146 struct list_head list; 147 148 /* bttv specific */ 149 int btformat; 150 int btswap; 151 struct bttv_geometry geo; 152 struct btcx_riscmem top; 153 struct btcx_riscmem bottom; 154 }; 155 156 struct bttv_buffer_set { 157 struct bttv_buffer *top; /* top field buffer */ 158 struct bttv_buffer *bottom; /* bottom field buffer */ 159 unsigned int top_irq; 160 unsigned int frame_irq; 161 }; 162 163 struct bttv_vbi_fmt { 164 struct v4l2_vbi_format fmt; 165 166 /* fmt.start[] and count[] refer to this video standard. */ 167 const struct bttv_tvnorm *tvnorm; 168 169 /* Earliest possible start of video capturing with this 170 v4l2_vbi_format, in struct bttv_crop.rect units. */ 171 __s32 end; 172 }; 173 174 /* bttv-vbi.c */ 175 extern const struct vb2_ops bttv_vbi_qops; 176 177 void bttv_vbi_fmt_reset(struct bttv_vbi_fmt *f, unsigned 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 /* ---------------------------------------------------------- */ 194 /* bttv-risc.c */ 195 196 /* risc code generators - capture */ 197 int bttv_risc_packed(struct bttv *btv, struct btcx_riscmem *risc, 198 struct scatterlist *sglist, 199 unsigned int offset, unsigned int bpl, 200 unsigned int pitch, unsigned int skip_lines, 201 unsigned int store_lines); 202 203 /* control dma register + risc main loop */ 204 void bttv_set_dma(struct bttv *btv, int override); 205 int bttv_risc_init_main(struct bttv *btv); 206 int bttv_risc_hook(struct bttv *btv, int slot, struct btcx_riscmem *risc, 207 int irqflags); 208 209 /* capture buffer handling */ 210 int bttv_buffer_risc(struct bttv *btv, struct bttv_buffer *buf); 211 int bttv_buffer_activate_video(struct bttv *btv, 212 struct bttv_buffer_set *set); 213 int bttv_buffer_risc_vbi(struct bttv *btv, struct bttv_buffer *buf); 214 int bttv_buffer_activate_vbi(struct bttv *btv, 215 struct bttv_buffer *vbi); 216 217 /* ---------------------------------------------------------- */ 218 /* bttv-vbi.c */ 219 220 /* 221 * 2048 for compatibility with earlier driver versions. The driver really 222 * stores 1024 + tvnorm->vbipack * 4 samples per line in the buffer. Note 223 * tvnorm->vbipack is <= 0xFF (limit of VBIPACK_LO + HI is 0x1FF DWORDs) and 224 * VBI read()s store a frame counter in the last four bytes of the VBI image. 225 */ 226 #define VBI_BPL 2048 227 228 #define VBI_DEFLINES 16 229 230 int bttv_try_fmt_vbi_cap(struct file *file, void *fh, struct v4l2_format *f); 231 int bttv_g_fmt_vbi_cap(struct file *file, void *fh, struct v4l2_format *f); 232 int bttv_s_fmt_vbi_cap(struct file *file, void *fh, struct v4l2_format *f); 233 234 /* ---------------------------------------------------------- */ 235 /* bttv-gpio.c */ 236 237 extern struct bus_type bttv_sub_bus_type; 238 int bttv_sub_add_device(struct bttv_core *core, char *name); 239 int bttv_sub_del_devices(struct bttv_core *core); 240 241 /* ---------------------------------------------------------- */ 242 /* bttv-input.c */ 243 244 extern void init_bttv_i2c_ir(struct bttv *btv); 245 246 /* ---------------------------------------------------------- */ 247 /* bttv-i2c.c */ 248 extern int init_bttv_i2c(struct bttv *btv); 249 extern int fini_bttv_i2c(struct bttv *btv); 250 251 /* ---------------------------------------------------------- */ 252 /* bttv-driver.c */ 253 254 /* insmod options */ 255 extern unsigned int bttv_verbose; 256 extern unsigned int bttv_debug; 257 extern unsigned int bttv_gpio; 258 int check_alloc_btres_lock(struct bttv *btv, int bit); 259 void free_btres_lock(struct bttv *btv, int bits); 260 extern void bttv_gpio_tracking(struct bttv *btv, char *comment); 261 262 #define dprintk(fmt, ...) \ 263 do { \ 264 if (bttv_debug >= 1) \ 265 pr_debug(fmt, ##__VA_ARGS__); \ 266 } while (0) 267 #define dprintk_cont(fmt, ...) \ 268 do { \ 269 if (bttv_debug >= 1) \ 270 pr_cont(fmt, ##__VA_ARGS__); \ 271 } while (0) 272 #define d2printk(fmt, ...) \ 273 do { \ 274 if (bttv_debug >= 2) \ 275 printk(fmt, ##__VA_ARGS__); \ 276 } while (0) 277 278 #define BTTV_MAX_FBUF 0x208000 279 #define BTTV_TIMEOUT msecs_to_jiffies(500) /* 0.5 seconds */ 280 #define BTTV_FREE_IDLE msecs_to_jiffies(1000) /* one second */ 281 282 283 struct bttv_pll_info { 284 unsigned int pll_ifreq; /* PLL input frequency */ 285 unsigned int pll_ofreq; /* PLL output frequency */ 286 unsigned int pll_crystal; /* Crystal used for input */ 287 unsigned int pll_current; /* Currently programmed ofreq */ 288 }; 289 290 /* for gpio-connected remote control */ 291 struct bttv_input { 292 struct input_dev *dev; 293 char name[32]; 294 char phys[32]; 295 u32 mask_keycode; 296 u32 mask_keydown; 297 }; 298 299 struct bttv_suspend_state { 300 u32 gpio_enable; 301 u32 gpio_data; 302 int disabled; 303 int loop_irq; 304 struct bttv_buffer_set video; 305 struct bttv_buffer *vbi; 306 }; 307 308 struct bttv_tea575x_gpio { 309 u8 data, clk, wren, most; 310 }; 311 312 struct bttv { 313 struct bttv_core c; 314 315 /* pci device config */ 316 unsigned short id; 317 unsigned char revision; 318 unsigned char __iomem *bt848_mmio; /* pointer to mmio */ 319 320 /* card configuration info */ 321 unsigned int cardid; /* pci subsystem id (bt878 based ones) */ 322 unsigned int tuner_type; /* tuner chip type */ 323 unsigned int tda9887_conf; 324 unsigned int svhs, dig; 325 unsigned int has_saa6588:1; 326 struct bttv_pll_info pll; 327 int triton1; 328 int gpioirq; 329 330 int use_i2c_hw; 331 332 /* old gpio interface */ 333 int shutdown; 334 335 void (*volume_gpio)(struct bttv *btv, __u16 volume); 336 void (*audio_mode_gpio)(struct bttv *btv, struct v4l2_tuner *tuner, int set); 337 338 /* new gpio interface */ 339 spinlock_t gpio_lock; 340 341 /* i2c layer */ 342 struct i2c_algo_bit_data i2c_algo; 343 struct i2c_client i2c_client; 344 int i2c_state, i2c_rc; 345 int i2c_done; 346 wait_queue_head_t i2c_queue; 347 struct v4l2_subdev *sd_msp34xx; 348 struct v4l2_subdev *sd_tvaudio; 349 struct v4l2_subdev *sd_tda7432; 350 351 /* video4linux (1) */ 352 struct video_device video_dev; 353 struct video_device radio_dev; 354 struct video_device vbi_dev; 355 356 /* controls */ 357 struct v4l2_ctrl_handler ctrl_handler; 358 struct v4l2_ctrl_handler radio_ctrl_handler; 359 360 /* infrared remote */ 361 int has_remote; 362 struct bttv_ir *remote; 363 364 /* I2C remote data */ 365 struct IR_i2c_init_data init_data; 366 367 /* locking */ 368 spinlock_t s_lock; 369 struct mutex lock; 370 int resources; 371 372 /* video state */ 373 unsigned int input; 374 unsigned int audio_input; 375 unsigned int mute; 376 unsigned long tv_freq; 377 unsigned int tvnorm; 378 v4l2_std_id std; 379 int hue, contrast, bright, saturation; 380 struct v4l2_framebuffer fbuf; 381 __u32 field_count; 382 383 /* various options */ 384 int opt_combfilter; 385 int opt_automute; 386 int opt_vcr_hack; 387 int opt_uv_ratio; 388 389 /* radio data/state */ 390 int has_radio; 391 int has_radio_tuner; 392 int radio_user; 393 int radio_uses_msp_demodulator; 394 unsigned long radio_freq; 395 396 /* miro/pinnacle + Aimslab VHX 397 philips matchbox (tea5757 radio tuner) support */ 398 int has_tea575x; 399 struct bttv_tea575x_gpio tea_gpio; 400 struct snd_tea575x tea; 401 402 /* ISA stuff (Terratec Active Radio Upgrade) */ 403 int mbox_ior; 404 int mbox_iow; 405 int mbox_csel; 406 407 /* switch status for multi-controller cards */ 408 char sw_status[4]; 409 410 /* risc memory management data 411 - must acquire s_lock before changing these 412 - only the irq handler is supported to touch top + bottom + vcurr */ 413 struct btcx_riscmem main; 414 struct list_head capture; /* video capture queue */ 415 struct list_head vcapture; /* vbi capture queue */ 416 struct bttv_buffer_set curr; /* active buffers */ 417 struct bttv_buffer *cvbi; /* active vbi buffer */ 418 int loop_irq; 419 int new_input; 420 421 unsigned long dma_on; 422 struct timer_list timeout; 423 struct bttv_suspend_state state; 424 425 /* stats */ 426 unsigned int errors; 427 unsigned int framedrop; 428 unsigned int irq_total; 429 unsigned int irq_me; 430 431 unsigned int users; 432 struct v4l2_fh fh; 433 enum v4l2_buf_type type; 434 435 enum v4l2_field field; 436 int field_last; 437 438 /* video capture */ 439 struct vb2_queue capq; 440 const struct bttv_format *fmt; 441 int width; 442 int height; 443 444 /* vbi capture */ 445 struct vb2_queue vbiq; 446 struct bttv_vbi_fmt vbi_fmt; 447 unsigned int vbi_count[2]; 448 449 /* Application called VIDIOC_S_SELECTION. */ 450 int do_crop; 451 452 /* used to make dvb-bt8xx autoloadable */ 453 struct work_struct request_module_wk; 454 455 /* Default (0) and current (1) video capturing 456 cropping parameters in bttv_tvnorm.cropcap units. Protected 457 by bttv.lock. */ 458 struct bttv_crop crop[2]; 459 460 /* Earliest possible start of video capturing in 461 bttv_tvnorm.cropcap line units. Set by check_alloc_btres() 462 and free_btres(). Protected by bttv.lock. */ 463 __s32 vbi_end; 464 465 /* Latest possible end of VBI capturing (= crop[x].rect.top when 466 VIDEO_RESOURCES are locked). Set by check_alloc_btres() 467 and free_btres(). Protected by bttv.lock. */ 468 __s32 crop_start; 469 }; 470 471 static inline struct bttv *to_bttv(struct v4l2_device *v4l2_dev) 472 { 473 return container_of(v4l2_dev, struct bttv, c.v4l2_dev); 474 } 475 476 /* our devices */ 477 #define BTTV_MAX 32 478 extern unsigned int bttv_num; 479 extern struct bttv *bttvs[BTTV_MAX]; 480 481 static inline unsigned int bttv_muxsel(const struct bttv *btv, 482 unsigned int input) 483 { 484 return (bttv_tvcards[btv->c.type].muxsel >> (input * 2)) & 3; 485 } 486 487 #endif 488 489 void init_irqreg(struct bttv *btv); 490 491 #define btwrite(dat,adr) writel((dat), btv->bt848_mmio+(adr)) 492 #define btread(adr) readl(btv->bt848_mmio+(adr)) 493 494 #define btand(dat,adr) btwrite((dat) & btread(adr), adr) 495 #define btor(dat,adr) btwrite((dat) | btread(adr), adr) 496 #define btaor(dat,mask,adr) btwrite((dat) | ((mask) & btread(adr)), adr) 497 498 #endif /* _BTTVP_H_ */ 499