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 76struct 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}; 98extern const struct bttv_tvnorm bttv_tvnorms[]; 99 100struct 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 109struct 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 137struct bttv_geometry { 138 u8 vtc,crop,comb; 139 u16 width,hscale,hdelay; 140 u16 sheight,vscale,vdelay,vtotal; 141}; 142 143struct 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 156struct 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 163struct 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 */ 175extern const struct vb2_ops bttv_vbi_qops; 176 177void bttv_vbi_fmt_reset(struct bttv_vbi_fmt *f, unsigned int norm); 178 179struct 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 */ 197int 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 */ 204void bttv_set_dma(struct bttv *btv, int override); 205int bttv_risc_init_main(struct bttv *btv); 206int bttv_risc_hook(struct bttv *btv, int slot, struct btcx_riscmem *risc, 207 int irqflags); 208 209/* capture buffer handling */ 210int bttv_buffer_risc(struct bttv *btv, struct bttv_buffer *buf); 211int bttv_buffer_activate_video(struct bttv *btv, 212 struct bttv_buffer_set *set); 213int bttv_buffer_risc_vbi(struct bttv *btv, struct bttv_buffer *buf); 214int 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 230int bttv_try_fmt_vbi_cap(struct file *file, void *fh, struct v4l2_format *f); 231int bttv_g_fmt_vbi_cap(struct file *file, void *fh, struct v4l2_format *f); 232int bttv_s_fmt_vbi_cap(struct file *file, void *fh, struct v4l2_format *f); 233 234/* ---------------------------------------------------------- */ 235/* bttv-gpio.c */ 236 237extern struct bus_type bttv_sub_bus_type; 238int bttv_sub_add_device(struct bttv_core *core, char *name); 239int bttv_sub_del_devices(struct bttv_core *core); 240 241/* ---------------------------------------------------------- */ 242/* bttv-input.c */ 243 244extern void init_bttv_i2c_ir(struct bttv *btv); 245 246/* ---------------------------------------------------------- */ 247/* bttv-i2c.c */ 248extern int init_bttv_i2c(struct bttv *btv); 249extern int fini_bttv_i2c(struct bttv *btv); 250 251/* ---------------------------------------------------------- */ 252/* bttv-driver.c */ 253 254/* insmod options */ 255extern unsigned int bttv_verbose; 256extern unsigned int bttv_debug; 257extern unsigned int bttv_gpio; 258int check_alloc_btres_lock(struct bttv *btv, int bit); 259void free_btres_lock(struct bttv *btv, int bits); 260extern void bttv_gpio_tracking(struct bttv *btv, char *comment); 261 262#define dprintk(fmt, ...) \ 263do { \ 264 if (bttv_debug >= 1) \ 265 pr_debug(fmt, ##__VA_ARGS__); \ 266} while (0) 267#define dprintk_cont(fmt, ...) \ 268do { \ 269 if (bttv_debug >= 1) \ 270 pr_cont(fmt, ##__VA_ARGS__); \ 271} while (0) 272#define d2printk(fmt, ...) \ 273do { \ 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 283struct 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 */ 291struct 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 299struct 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 308struct bttv_tea575x_gpio { 309 u8 data, clk, wren, most; 310}; 311 312struct 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 471static 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 478extern unsigned int bttv_num; 479extern struct bttv *bttvs[BTTV_MAX]; 480 481static 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 489void 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