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