brintos

brintos / linux-shallow public Read only

0
0
Text · 13.7 KiB · a534e63 Raw
499 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 4    bttv - Bt848 frame grabber driver5 6    bttv's *private* header file  --  nobody other than bttv itself7    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       0x0142#define FORMAT_FLAGS_PACKED       0x0243#define FORMAT_FLAGS_PLANAR       0x0444#define FORMAT_FLAGS_RAW          0x0845#define FORMAT_FLAGS_CrCb         0x1046 47#define RISC_SLOT_O_VBI        448#define RISC_SLOT_O_FIELD      649#define RISC_SLOT_E_VBI       1050#define RISC_SLOT_E_FIELD     1251#define RISC_SLOT_LOOP        1452 53#define RESOURCE_VIDEO_STREAM  254#define RESOURCE_VBI           455#define RESOURCE_VIDEO_READ    856 57#define RAW_LINES            64058#define RAW_BPL             102459 60#define UNSET (-1U)61 62/* Min. value in VDELAY register. */63#define MIN_VDELAY 264/* 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 can90	   capture, of the first and second field. The last possible line91	   is determined by cropcap.bounds. */92	u16   vbistart[2];93	/* Horizontally this counts fCLKx1 samples following the leading94	   edge of the horizontal sync pulse, vertically ITU-R frame line95	   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 this170	   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. Divide184	   max_height, but not min_height, by two when capturing185	   single fields. See also bttv_crop_reset() and186	   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 really222 * stores 1024 + tvnorm->vbipack * 4 samples per line in the buffer. Note223 * tvnorm->vbipack is <= 0xFF (limit of VBIPACK_LO + HI is 0x1FF DWORDs) and224 * VBI read()s store a frame counter in the last four bytes of the VBI image.225 */226#define VBI_BPL 2048227 228#define VBI_DEFLINES 16229 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 const 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   0x208000279#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 VHX397	   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 data411	   - must acquire s_lock before changing these412	   - 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 capturing456	   cropping parameters in bttv_tvnorm.cropcap units. Protected457	   by bttv.lock. */458	struct bttv_crop crop[2];459 460	/* Earliest possible start of video capturing in461	   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 when466	   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 32478extern 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#endif488 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