zoran.h revision 6165894fb6293072848e5699f3fcbe88b7c60815
1d56410e0a594150c5ca06319da7bc8901c4d455eMauro Carvalho Chehab/*
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * zoran - Iomega Buz driver
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 1999 Rainer Johanni <Rainer@Johanni.de>
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * based on
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * zoran.0.0.3 Copyright (C) 1998 Dave Perks <dperks@ibm.net>
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * and
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * bttv - Bt848 frame grabber driver
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 1996,97,98 Ralph  Metzler (rjkm@thp.uni-koeln.de)
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *                        & Marcus Metzler (mocm@thp.uni-koeln.de)
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is free software; you can redistribute it and/or modify
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * it under the terms of the GNU General Public License as published by
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * the Free Software Foundation; either version 2 of the License, or
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * (at your option) any later version.
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is distributed in the hope that it will be useful,
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * but WITHOUT ANY WARRANTY; without even the implied warranty of
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * GNU General Public License for more details.
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * You should have received a copy of the GNU General Public License
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * along with this program; if not, write to the Free Software
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _BUZ_H_
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _BUZ_H_
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct zoran_requestbuffers {
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long count;	/* Number of buffers for MJPEG grabbing */
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long size;	/* Size PER BUFFER in bytes */
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct zoran_sync {
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long frame;	/* number of buffer that has been free'd */
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long length;	/* number of code bytes in buffer (capture only) */
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long seq;	/* frame sequence number */
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct timeval timestamp;	/* timestamp */
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct zoran_status {
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int input;		/* Input channel, has to be set prior to BUZIOC_G_STATUS */
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int signal;		/* Returned: 1 if valid video signal detected */
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int norm;		/* Returned: VIDEO_MODE_PAL or VIDEO_MODE_NTSC */
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int color;		/* Returned: 1 if color signal detected */
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct zoran_params {
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* The following parameters can only be queried */
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int major_version;	/* Major version number of driver */
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int minor_version;	/* Minor version number of driver */
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Main control parameters */
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int input;		/* Input channel: 0 = Composite, 1 = S-VHS */
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int norm;		/* Norm: VIDEO_MODE_PAL or VIDEO_MODE_NTSC */
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int decimation;		/* decimation of captured video,
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				 * enlargement of video played back.
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				 * Valid values are 1, 2, 4 or 0.
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				 * 0 is a special value where the user
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				 * has full control over video scaling */
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* The following parameters only have to be set if decimation==0,
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * for other values of decimation they provide the data how the image is captured */
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int HorDcm;		/* Horizontal decimation: 1, 2 or 4 */
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int VerDcm;		/* Vertical decimation: 1 or 2 */
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int TmpDcm;		/* Temporal decimation: 1 or 2,
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				 * if TmpDcm==2 in capture every second frame is dropped,
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				 * in playback every frame is played twice */
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int field_per_buff;	/* Number of fields per buffer: 1 or 2 */
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int img_x;		/* start of image in x direction */
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int img_y;		/* start of image in y direction */
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int img_width;		/* image width BEFORE decimation,
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				 * must be a multiple of HorDcm*16 */
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int img_height;		/* image height BEFORE decimation,
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				 * must be a multiple of VerDcm*8 */
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* --- End of parameters for decimation==0 only --- */
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* JPEG control parameters */
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int quality;		/* Measure for quality of compressed images.
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				 * Scales linearly with the size of the compressed images.
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				 * Must be beetween 0 and 100, 100 is a compression
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				 * ratio of 1:4 */
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int odd_even;		/* Which field should come first ??? */
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int APPn;		/* Number of APP segment to be written, must be 0..15 */
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int APP_len;		/* Length of data in JPEG APPn segment */
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char APP_data[60];	/* Data in the JPEG APPn segment. */
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int COM_len;		/* Length of data in JPEG COM segment */
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char COM_data[60];	/* Data in JPEG COM segment */
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long jpeg_markers;	/* Which markers should go into the JPEG output.
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					 * Unless you exactly know what you do, leave them untouched.
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					 * Inluding less markers will make the resulting code
1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					 * smaller, but there will be fewer aplications
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					 * which can read it.
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					 * The presence of the APP and COM marker is
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					 * influenced by APP0_len and COM_len ONLY! */
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define JPEG_MARKER_DHT (1<<3)	/* Define Huffman Tables */
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define JPEG_MARKER_DQT (1<<4)	/* Define Quantization Tables */
1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define JPEG_MARKER_DRI (1<<5)	/* Define Restart Interval */
1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define JPEG_MARKER_COM (1<<6)	/* Comment segment */
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define JPEG_MARKER_APP (1<<7)	/* App segment, driver will allways use APP0 */
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int VFIFO_FB;		/* Flag for enabling Video Fifo Feedback.
1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				 * If this flag is turned on and JPEG decompressing
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				 * is going to the screen, the decompress process
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				 * is stopped every time the Video Fifo is full.
1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				 * This enables a smooth decompress to the screen
1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				 * but the video output signal will get scrambled */
1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Misc */
1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char reserved[312];	/* Makes 512 bytes for this structure */
1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsPrivate IOCTL to set up for displaying MJPEG
1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*/
1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BUZIOC_G_PARAMS       _IOR ('v', BASE_VIDIOCPRIVATE+0,  struct zoran_params)
1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BUZIOC_S_PARAMS       _IOWR('v', BASE_VIDIOCPRIVATE+1,  struct zoran_params)
1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BUZIOC_REQBUFS        _IOWR('v', BASE_VIDIOCPRIVATE+2,  struct zoran_requestbuffers)
1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BUZIOC_QBUF_CAPT      _IOW ('v', BASE_VIDIOCPRIVATE+3,  int)
1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BUZIOC_QBUF_PLAY      _IOW ('v', BASE_VIDIOCPRIVATE+4,  int)
1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BUZIOC_SYNC           _IOR ('v', BASE_VIDIOCPRIVATE+5,  struct zoran_sync)
1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BUZIOC_G_STATUS       _IOWR('v', BASE_VIDIOCPRIVATE+6,  struct zoran_status)
1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef __KERNEL__
1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAJOR_VERSION 0		/* driver major version */
1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MINOR_VERSION 9		/* driver minor version */
1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RELEASE_VERSION 5	/* release version */
1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ZORAN_NAME    "ZORAN"	/* name of the device */
1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ZR_DEVNAME(zr) ((zr)->name)
1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define   BUZ_MAX_WIDTH   (zr->timing->Wa)
1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define   BUZ_MAX_HEIGHT  (zr->timing->Ha)
1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define   BUZ_MIN_WIDTH    32	/* never display less than 32 pixels */
1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define   BUZ_MIN_HEIGHT   24	/* never display less than 24 rows */
1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BUZ_NUM_STAT_COM    4
1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BUZ_MASK_STAT_COM   3
1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BUZ_MAX_FRAME     256	/* Must be a power of 2 */
1601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BUZ_MASK_FRAME    255	/* Must be BUZ_MAX_FRAME-1 */
1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
162fbe60daac4c34e39d1ca69684bcb76e62461ac21Martin Samuelsson#define BUZ_MAX_INPUT       16
1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if VIDEO_MAX_FRAME <= 32
1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#   define   V4L_MAX_FRAME   32
1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#elif VIDEO_MAX_FRAME <= 64
1671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#   define   V4L_MAX_FRAME   64
1681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
1691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#   error   "Too many video frame buffers to handle"
1701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
1711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define   V4L_MASK_FRAME   (V4L_MAX_FRAME - 1)
1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_KMALLOC_MEM (128*1024)
1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "zr36057.h"
1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsenum card_type {
1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	UNKNOWN = -1,
1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Pinnacle/Miro */
1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	DC10_old,		/* DC30 like */
1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	DC10_new,		/* DC10plus like */
1831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	DC10plus,
1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	DC30,
1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	DC30plus,
1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Linux Media Labs */
1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	LML33,
1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	LML33R10,
1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Iomega */
1921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	BUZ,
1931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
194fbe60daac4c34e39d1ca69684bcb76e62461ac21Martin Samuelsson	/* AverMedia */
195fbe60daac4c34e39d1ca69684bcb76e62461ac21Martin Samuelsson	AVS6EYES,
196fbe60daac4c34e39d1ca69684bcb76e62461ac21Martin Samuelsson
1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* total number of cards */
1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	NUM_CARDS
1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsenum zoran_codec_mode {
2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	BUZ_MODE_IDLE,		/* nothing going on */
2031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	BUZ_MODE_MOTION_COMPRESS,	/* grabbing frames */
2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	BUZ_MODE_MOTION_DECOMPRESS,	/* playing frames */
2051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	BUZ_MODE_STILL_COMPRESS,	/* still frame conversion */
2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	BUZ_MODE_STILL_DECOMPRESS	/* still frame conversion */
2071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsenum zoran_buffer_state {
2101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	BUZ_STATE_USER,		/* buffer is owned by application */
2111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	BUZ_STATE_PEND,		/* buffer is queued in pend[] ready to feed to I/O */
2121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	BUZ_STATE_DMA,		/* buffer is queued in dma[] for I/O */
2131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	BUZ_STATE_DONE		/* buffer is ready to return to application */
2141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsenum zoran_map_mode {
2171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ZORAN_MAP_MODE_RAW,
2181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ZORAN_MAP_MODE_JPG_REC,
2191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ZORAN_MAP_MODE_JPG ZORAN_MAP_MODE_JPG_REC
2201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ZORAN_MAP_MODE_JPG_PLAY,
2211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsenum gpio_type {
2246165894fb6293072848e5699f3fcbe88b7c60815Mauro Carvalho Chehab	ZR_GPIO_JPEG_SLEEP = 0,
2256165894fb6293072848e5699f3fcbe88b7c60815Mauro Carvalho Chehab	ZR_GPIO_JPEG_RESET,
2266165894fb6293072848e5699f3fcbe88b7c60815Mauro Carvalho Chehab	ZR_GPIO_JPEG_FRAME,
2276165894fb6293072848e5699f3fcbe88b7c60815Mauro Carvalho Chehab	ZR_GPIO_VID_DIR,
2286165894fb6293072848e5699f3fcbe88b7c60815Mauro Carvalho Chehab	ZR_GPIO_VID_EN,
2296165894fb6293072848e5699f3fcbe88b7c60815Mauro Carvalho Chehab	ZR_GPIO_VID_RESET,
2306165894fb6293072848e5699f3fcbe88b7c60815Mauro Carvalho Chehab	ZR_GPIO_CLK_SEL1,
2316165894fb6293072848e5699f3fcbe88b7c60815Mauro Carvalho Chehab	ZR_GPIO_CLK_SEL2,
2326165894fb6293072848e5699f3fcbe88b7c60815Mauro Carvalho Chehab	ZR_GPIO_MAX,
2331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsenum gpcs_type {
2361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	GPCS_JPEG_RESET = 0,
2371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	GPCS_JPEG_START,
2381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	GPCS_MAX,
2391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct zoran_format {
2421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char *name;
243603d6f2c8f9f3604f9c6c1f8903efc2df30a000fTrent Piepho#ifdef CONFIG_VIDEO_V4L1_COMPAT
2441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int palette;
245603d6f2c8f9f3604f9c6c1f8903efc2df30a000fTrent Piepho#endif
246603d6f2c8f9f3604f9c6c1f8903efc2df30a000fTrent Piepho#ifdef CONFIG_VIDEO_V4L2
2471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u32 fourcc;
2481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int colorspace;
249603d6f2c8f9f3604f9c6c1f8903efc2df30a000fTrent Piepho#endif
2501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int depth;
2511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u32 flags;
252603d6f2c8f9f3604f9c6c1f8903efc2df30a000fTrent Piepho	__u32 vfespfr;
2531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* flags */
2551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ZORAN_FORMAT_COMPRESSED 1<<0
2561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ZORAN_FORMAT_OVERLAY    1<<1
2571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ZORAN_FORMAT_CAPTURE	1<<2
2581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ZORAN_FORMAT_PLAYBACK	1<<3
2591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* overlay-settings */
2611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct zoran_overlay_settings {
2621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int is_set;
2631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int x, y, width, height;	/* position */
2641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int clipcount;		/* position and number of clips */
2651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	const struct zoran_format *format;	/* overlay format */
2661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* v4l-capture settings */
2691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct zoran_v4l_settings {
2701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int width, height, bytesperline;	/* capture size */
2711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	const struct zoran_format *format;	/* capture format */
2721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* whoops, this one is undeclared if !v4l2 */
2758a905162e038367503bac732bf1e3e01c19158b9Mauro Carvalho Chehab#ifndef CONFIG_VIDEO_V4L2
2761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct v4l2_jpegcompression {
2771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int quality;
2781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int APPn;
2791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int APP_len;
2801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char APP_data[60];
2811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int COM_len;
2821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char COM_data[60];
2831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u32 jpeg_markers;
2841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u8 reserved[116];
2851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
2871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* jpg-capture/-playback settings */
2891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct zoran_jpg_settings {
2901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int decimation;		/* this bit is used to set everything to default */
2911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int HorDcm, VerDcm, TmpDcm;	/* capture decimation settings (TmpDcm=1 means both fields) */
2921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int field_per_buff, odd_even;	/* field-settings (odd_even=1 (+TmpDcm=1) means top-field-first) */
2931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int img_x, img_y, img_width, img_height;	/* crop settings (subframe capture) */
2941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct v4l2_jpegcompression jpg_comp;	/* JPEG-specific capture settings */
2951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct zoran_mapping {
2981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct file *file;
2991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int count;
3001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct zoran_jpg_buffer {
3031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct zoran_mapping *map;
3041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 *frag_tab;		/* addresses of frag table */
3051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 frag_tab_bus;	/* same value cached to save time in ISR */
3061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	enum zoran_buffer_state state;	/* non-zero if corresponding buffer is in use in grab queue */
3071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct zoran_sync bs;	/* DONE: info to return to application */
3081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct zoran_v4l_buffer {
3111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct zoran_mapping *map;
3121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char *fbuffer;		/* virtual  address of frame buffer */
3131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long fbuffer_phys;	/* physical address of frame buffer */
3141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long fbuffer_bus;	/* bus      address of frame buffer */
3151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	enum zoran_buffer_state state;	/* state: unused/pending/done */
3161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct zoran_sync bs;	/* DONE: info to return to application */
3171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsenum zoran_lock_activity {
3201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ZORAN_FREE,		/* free for use */
3211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ZORAN_ACTIVE,		/* active but unlocked */
3221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ZORAN_LOCKED,		/* locked */
3231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* buffer collections */
3261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct zoran_jpg_struct {
3271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	enum zoran_lock_activity active;	/* feature currently in use? */
3281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct zoran_jpg_buffer buffer[BUZ_MAX_FRAME];	/* buffers */
3291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int num_buffers, buffer_size;
3301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u8 allocated;		/* Flag if buffers are allocated  */
3311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u8 ready_to_be_freed;	/* hack - see zoran_driver.c */
3321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u8 need_contiguous;	/* Flag if contiguous buffers are needed */
3331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct zoran_v4l_struct {
3361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	enum zoran_lock_activity active;	/* feature currently in use? */
3371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct zoran_v4l_buffer buffer[VIDEO_MAX_FRAME];	/* buffers */
3381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int num_buffers, buffer_size;
3391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u8 allocated;		/* Flag if buffers are allocated  */
3401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u8 ready_to_be_freed;	/* hack - see zoran_driver.c */
3411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct zoran;
3441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* zoran_fh contains per-open() settings */
3461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct zoran_fh {
3471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct zoran *zr;
3481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	enum zoran_map_mode map_mode;	/* Flag which bufferset will map by next mmap() */
3501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct zoran_overlay_settings overlay_settings;
3521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 *overlay_mask;	/* overlay mask */
3531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	enum zoran_lock_activity overlay_active;	/* feature currently in use? */
3541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct zoran_v4l_settings v4l_settings;	/* structure with a lot of things to play with */
3561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct zoran_v4l_struct v4l_buffers;	/* V4L buffers' info */
3571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct zoran_jpg_settings jpg_settings;	/* structure with a lot of things to play with */
3591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct zoran_jpg_struct jpg_buffers;	/* MJPEG buffers' info */
3601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct card_info {
3631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	enum card_type type;
3641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char name[32];
3651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u16 i2c_decoder, i2c_encoder;			/* I2C types */
3661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u16 video_vfe, video_codec;			/* videocodec types */
3671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u16 audio_chip;					/* audio type */
3681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u16 vendor_id, device_id;	/* subsystem vendor/device ID */
3691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int inputs;		/* number of video inputs */
3711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct input {
3721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		int muxsel;
3731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		char name[32];
3741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} input[BUZ_MAX_INPUT];
3751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int norms;
3771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct tvnorm *tvn[3];	/* supported TV norms */
3781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 jpeg_int;		/* JPEG interrupt */
3801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 vsync_int;		/* VSYNC interrupt */
3816165894fb6293072848e5699f3fcbe88b7c60815Mauro Carvalho Chehab	s8 gpio[ZR_GPIO_MAX];
3821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u8 gpcs[GPCS_MAX];
3831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct vfe_polarity vfe_pol;
3856165894fb6293072848e5699f3fcbe88b7c60815Mauro Carvalho Chehab	u8 gpio_pol[ZR_GPIO_MAX];
3861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* is the /GWS line conected? */
3881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u8 gws_not_connected;
3891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
390fbe60daac4c34e39d1ca69684bcb76e62461ac21Martin Samuelsson	/* avs6eyes mux setting */
391fbe60daac4c34e39d1ca69684bcb76e62461ac21Martin Samuelsson	u8 input_mux;
392fbe60daac4c34e39d1ca69684bcb76e62461ac21Martin Samuelsson
3931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*init) (struct zoran * zr);
3941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct zoran {
3971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct video_device *video_dev;
3981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct i2c_adapter i2c_adapter;	/* */
4001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct i2c_algo_bit_data i2c_algo;	/* */
4011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 i2cbr;
4021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct i2c_client *decoder;	/* video decoder i2c client */
4041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct i2c_client *encoder;	/* video encoder i2c client */
4051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct videocodec *codec;	/* video codec */
4071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct videocodec *vfe;	/* video front end */
4081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
409384c36893f94e0e2145832cf2f20684ae372aee5Ingo Molnar	struct mutex resource_lock;	/* prevent evil stuff */
4101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u8 initialized;		/* flag if zoran has been correctly initalized */
4121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int user;		/* number of current users */
4131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct card_info card;
4141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct tvnorm *timing;
4151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned short id;	/* number of this device */
4171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char name[32];		/* name of this device */
4181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct pci_dev *pci_dev;	/* PCI device */
4191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char revision;	/* revision of zr36057 */
4201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int zr36057_adr;	/* bus address of IO mem returned by PCI BIOS */
4211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char __iomem *zr36057_mem;/* pointer to mapped IO memory */
4221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	spinlock_t spinlock;	/* Spinlock */
4241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Video for Linux parameters */
4261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int input, norm;	/* card's norm and input - norm=VIDEO_MODE_* */
4271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int hue, saturation, contrast, brightness;	/* Current picture params */
4281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct video_buffer buffer;	/* Current buffer params */
4291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct zoran_overlay_settings overlay_settings;
4301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 *overlay_mask;	/* overlay mask */
4311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	enum zoran_lock_activity overlay_active;	/* feature currently in use? */
4321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	wait_queue_head_t v4l_capq;
4341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int v4l_overlay_active;	/* Overlay grab is activated */
4361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int v4l_memgrab_active;	/* Memory grab is activated */
4371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int v4l_grab_frame;	/* Frame number being currently grabbed */
4391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NO_GRAB_ACTIVE (-1)
4401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long v4l_grab_seq;	/* Number of frames grabbed */
4411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct zoran_v4l_settings v4l_settings;	/* structure with a lot of things to play with */
4421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* V4L grab queue of frames pending */
4441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long v4l_pend_head;
4451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long v4l_pend_tail;
4461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long v4l_sync_tail;
4471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int v4l_pend[V4L_MAX_FRAME];
4481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct zoran_v4l_struct v4l_buffers;	/* V4L buffers' info */
4491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Buz MJPEG parameters */
4511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	enum zoran_codec_mode codec_mode;	/* status of codec */
4521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct zoran_jpg_settings jpg_settings;	/* structure with a lot of things to play with */
4531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	wait_queue_head_t jpg_capq;	/* wait here for grab to finish */
4551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* grab queue counts/indices, mask with BUZ_MASK_STAT_COM before using as index */
4571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* (dma_head - dma_tail) is number active in DMA, must be <= BUZ_NUM_STAT_COM */
4581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* (value & BUZ_MASK_STAT_COM) corresponds to index in stat_com table */
4591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long jpg_que_head;	/* Index where to put next buffer which is queued */
4601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long jpg_dma_head;	/* Index of next buffer which goes into stat_com  */
4611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long jpg_dma_tail;	/* Index of last buffer in stat_com               */
4621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long jpg_que_tail;	/* Index of last buffer in queue                  */
4631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long jpg_seq_num;	/* count of frames since grab/play started        */
4641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long jpg_err_seq;	/* last seq_num before error                      */
4651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long jpg_err_shift;
4661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long jpg_queued_num;	/* count of frames queued since grab/play started */
4671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* zr36057's code buffer table */
4691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 *stat_com;		/* stat_com[i] is indexed by dma_head/tail & BUZ_MASK_STAT_COM */
4701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* (value & BUZ_MASK_FRAME) corresponds to index in pend[] queue */
4721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int jpg_pend[BUZ_MAX_FRAME];
4731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* array indexed by frame number */
4751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct zoran_jpg_struct jpg_buffers;	/* MJPEG buffers' info */
4761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Additional stuff for testing */
4781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_PROC_FS
4791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct proc_dir_entry *zoran_proc;
4801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
4811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void *zoran_proc;
4821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
4831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int testing;
4841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int jpeg_error;
4851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int intr_counter_GIRQ1;
4861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int intr_counter_GIRQ0;
4871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int intr_counter_CodRepIRQ;
4881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int intr_counter_JPEGRepIRQ;
4891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int field_counter;
4901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int IRQ1_in;
4911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int IRQ1_out;
4921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int JPEG_in;
4931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int JPEG_out;
4941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int JPEG_0;
4951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int JPEG_1;
4961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int END_event_missed;
4971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int JPEG_missed;
4981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int JPEG_error;
4991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int num_errors;
5001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int JPEG_max_missed;
5011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int JPEG_min_missed;
5021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 last_isr;
5041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long frame_num;
5051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	wait_queue_head_t test_q;
5071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
5081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*The following should be done in more portable way. It depends on define
5101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  of _ALPHA_BUZ in the Makefile.*/
5111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef _ALPHA_BUZ
5131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define btwrite(dat,adr)    writel((dat), zr->zr36057_adr+(adr))
5141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define btread(adr)         readl(zr->zr36057_adr+(adr))
5151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
5161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define btwrite(dat,adr)    writel((dat), zr->zr36057_mem+(adr))
5171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define btread(adr)         readl(zr->zr36057_mem+(adr))
5181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
5191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define btand(dat,adr)      btwrite((dat) & btread(adr), adr)
5211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define btor(dat,adr)       btwrite((dat) | btread(adr), adr)
5221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define btaor(dat,mask,adr) btwrite((dat) | ((mask) & btread(adr)), adr)
5231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif				/* __kernel__ */
5251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
527