1702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/***************************************************************************** 2702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas* * 3702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas* easycap.h * 4702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas* * 5702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas*****************************************************************************/ 6702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/* 7702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * 8702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * Copyright (C) 2010 R.M. Thomas <rmthomas@sciolus.org> 9702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * 10702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * 11702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * This is free software; you can redistribute it and/or modify 12702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * it under the terms of the GNU General Public License as published by 13702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * the Free Software Foundation; either version 2 of the License, or 14702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * (at your option) any later version. 15702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * 16702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * The software is distributed in the hope that it will be useful, 17702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * but WITHOUT ANY WARRANTY; without even the implied warranty of 18702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * GNU General Public License for more details. 20702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * 21702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * You should have received a copy of the GNU General Public License 22702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * along with this software; if not, write to the Free Software 23702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 24702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * 25702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas*/ 26702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*****************************************************************************/ 27702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 28702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/* 29702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * THE FOLLOWING PARAMETERS ARE UNDEFINED: 30702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * 31702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * EASYCAP_DEBUG 32702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * 33702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * IF REQUIRED THEY MUST BE EXTERNALLY DEFINED, FOR EXAMPLE AS COMPILER 34702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * OPTIONS. 35702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas */ 36702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 37702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas 383dbab7331209d5d85c448675053d3e9e7a4bcd41Tomas Winkler#ifndef __EASYCAP_H__ 393dbab7331209d5d85c448675053d3e9e7a4bcd41Tomas Winkler#define __EASYCAP_H__ 40702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas 41702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 42702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/* 43f36bc37a48148f31f936557b811431b98dbfe347Mike Thomas * THESE ARE NORMALLY DEFINED 44f36bc37a48148f31f936557b811431b98dbfe347Mike Thomas */ 45f36bc37a48148f31f936557b811431b98dbfe347Mike Thomas/*---------------------------------------------------------------------------*/ 46f36bc37a48148f31f936557b811431b98dbfe347Mike Thomas#define PATIENCE 500 47f36bc37a48148f31f936557b811431b98dbfe347Mike Thomas#define PERSEVERE 48f36bc37a48148f31f936557b811431b98dbfe347Mike Thomas/*---------------------------------------------------------------------------*/ 49f36bc37a48148f31f936557b811431b98dbfe347Mike Thomas/* 50702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * THESE ARE FOR MAINTENANCE ONLY - NORMALLY UNDEFINED: 51702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas */ 52702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 53702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#undef EASYCAP_TESTCARD 54702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 55702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#include <linux/kernel.h> 56702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#include <linux/errno.h> 57702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#include <linux/init.h> 58702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#include <linux/slab.h> 59702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#include <linux/module.h> 60702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#include <linux/kref.h> 61702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#include <linux/usb.h> 62702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#include <linux/uaccess.h> 63702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas 64702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#include <linux/i2c.h> 65702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#include <linux/workqueue.h> 66702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#include <linux/poll.h> 67702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#include <linux/mm.h> 68702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#include <linux/fs.h> 69702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#include <linux/delay.h> 70702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#include <linux/types.h> 71702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas 72a9855917290fc40dbfd67d3ee06c190667d6c5b5Mike Thomas#include <linux/vmalloc.h> 73a9855917290fc40dbfd67d3ee06c190667d6c5b5Mike Thomas#include <linux/sound.h> 74a9855917290fc40dbfd67d3ee06c190667d6c5b5Mike Thomas#include <sound/core.h> 75a9855917290fc40dbfd67d3ee06c190667d6c5b5Mike Thomas#include <sound/pcm.h> 76a9855917290fc40dbfd67d3ee06c190667d6c5b5Mike Thomas#include <sound/pcm_params.h> 77a9855917290fc40dbfd67d3ee06c190667d6c5b5Mike Thomas#include <sound/info.h> 78a9855917290fc40dbfd67d3ee06c190667d6c5b5Mike Thomas#include <sound/initval.h> 79a9855917290fc40dbfd67d3ee06c190667d6c5b5Mike Thomas#include <sound/control.h> 80702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#include <media/v4l2-dev.h> 81702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#include <media/v4l2-device.h> 82702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#include <linux/videodev2.h> 83702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#include <linux/soundcard.h> 84702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas 85702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 86702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/* VENDOR, PRODUCT: Syntek Semiconductor Co., Ltd 87702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * 88702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * EITHER EasyCAP USB 2.0 Video Adapter with Audio, Model No. DC60 89702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * with input cabling: AUDIO(L), AUDIO(R), CVBS, S-VIDEO. 90702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * 91702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * OR EasyCAP 4CHANNEL USB 2.0 DVR, Model No. EasyCAP002 92702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * with input cabling: MICROPHONE, CVBS1, CVBS2, CVBS3, CVBS4. 93702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas */ 94702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 95702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#define USB_EASYCAP_VENDOR_ID 0x05e1 96702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#define USB_EASYCAP_PRODUCT_ID 0x0408 97702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas 98a9855917290fc40dbfd67d3ee06c190667d6c5b5Mike Thomas#define EASYCAP_DRIVER_VERSION "0.9.01" 99702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#define EASYCAP_DRIVER_DESCRIPTION "easycapdc60" 100702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas 101e68703cfe8dd2f5605c53b46fae6c9c027e7ef50Mike Thomas#define DONGLE_MANY 8 102f36bc37a48148f31f936557b811431b98dbfe347Mike Thomas#define INPUT_MANY 6 103702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 104702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/* 105702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * DEFAULT LUMINANCE, CONTRAST, SATURATION AND HUE 106702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas */ 107702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 108702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#define SAA_0A_DEFAULT 0x7F 109702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#define SAA_0B_DEFAULT 0x3F 110702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#define SAA_0C_DEFAULT 0x2F 111702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#define SAA_0D_DEFAULT 0x00 112702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 113702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/* 114702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * VIDEO STREAMING PARAMETERS: 115702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * USB 2.0 PROVIDES FOR HIGH-BANDWIDTH ENDPOINTS WITH AN UPPER LIMIT 116702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * OF 3072 BYTES PER MICROFRAME for wMaxPacketSize. 117702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas */ 118702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 119702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#define VIDEO_ISOC_BUFFER_MANY 16 120702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#define VIDEO_ISOC_ORDER 3 121702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#define VIDEO_ISOC_FRAMESPERDESC ((unsigned int) 1 << VIDEO_ISOC_ORDER) 122702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#define USB_2_0_MAXPACKETSIZE 3072 123702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#if (USB_2_0_MAXPACKETSIZE > PAGE_SIZE) 124702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#error video_isoc_buffer[.] will not be big enough 125702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#endif 126f36bc37a48148f31f936557b811431b98dbfe347Mike Thomas#define VIDEO_JUNK_TOLERATE VIDEO_ISOC_BUFFER_MANY 127849322a0f114e52d05e16fe8349843c980cff2c6Mike Thomas#define VIDEO_LOST_TOLERATE 50 128702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 129702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/* 130702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * VIDEO BUFFERS 131702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas */ 132702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 133702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#define FIELD_BUFFER_SIZE (203 * PAGE_SIZE) 134702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#define FRAME_BUFFER_SIZE (405 * PAGE_SIZE) 135702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#define FIELD_BUFFER_MANY 4 136702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#define FRAME_BUFFER_MANY 6 137702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 138702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/* 139702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * AUDIO STREAMING PARAMETERS 140702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas */ 141702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 142702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#define AUDIO_ISOC_BUFFER_MANY 16 143a9855917290fc40dbfd67d3ee06c190667d6c5b5Mike Thomas#define AUDIO_ISOC_ORDER 1 144a9855917290fc40dbfd67d3ee06c190667d6c5b5Mike Thomas#define AUDIO_ISOC_FRAMESPERDESC 32 145702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#define AUDIO_ISOC_BUFFER_SIZE (PAGE_SIZE << AUDIO_ISOC_ORDER) 146702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 147702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/* 148702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * AUDIO BUFFERS 149702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas */ 150702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 151702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#define AUDIO_FRAGMENT_MANY 32 152a9855917290fc40dbfd67d3ee06c190667d6c5b5Mike Thomas#define PAGES_PER_AUDIO_FRAGMENT 4 153702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 154702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/* 1553d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas * IT IS ESSENTIAL THAT EVEN-NUMBERED STANDARDS ARE 25 FRAMES PER SECOND, 1563d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas * ODD-NUMBERED STANDARDS ARE 30 FRAMES PER SECOND. 1573d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas * THE NUMBERING OF STANDARDS MUST NOT BE CHANGED WITHOUT DUE CARE. NOT 1583d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas * ONLY MUST THE PARAMETER 1593d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas * STANDARD_MANY 1603d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas * BE CHANGED TO CORRESPOND TO THE NEW NUMBER OF STANDARDS, BUT ALSO THE 1613d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas * NUMBERING MUST REMAIN AN UNBROKEN ASCENDING SEQUENCE: DUMMY STANDARDS 1623d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas * MAY NEED TO BE ADDED. APPROPRIATE CHANGES WILL ALWAYS BE REQUIRED IN 1633d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas * ROUTINE fillin_formats() AND POSSIBLY ELSEWHERE. BEWARE. 1643d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas */ 1653d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas/*---------------------------------------------------------------------------*/ 1663d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas#define PAL_BGHIN 0 1673d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas#define PAL_Nc 2 1683d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas#define SECAM 4 1693d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas#define NTSC_N 6 1703d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas#define NTSC_N_443 8 1713d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas#define NTSC_M 1 1723d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas#define NTSC_443 3 1733d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas#define NTSC_M_JP 5 1743d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas#define PAL_60 7 1753d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas#define PAL_M 9 17640b8d50ac98f8c8779aea7459f805e5a69fdb726Mike Thomas#define PAL_BGHIN_SLOW 10 17740b8d50ac98f8c8779aea7459f805e5a69fdb726Mike Thomas#define PAL_Nc_SLOW 12 17840b8d50ac98f8c8779aea7459f805e5a69fdb726Mike Thomas#define SECAM_SLOW 14 17940b8d50ac98f8c8779aea7459f805e5a69fdb726Mike Thomas#define NTSC_N_SLOW 16 18040b8d50ac98f8c8779aea7459f805e5a69fdb726Mike Thomas#define NTSC_N_443_SLOW 18 18140b8d50ac98f8c8779aea7459f805e5a69fdb726Mike Thomas#define NTSC_M_SLOW 11 18240b8d50ac98f8c8779aea7459f805e5a69fdb726Mike Thomas#define NTSC_443_SLOW 13 18340b8d50ac98f8c8779aea7459f805e5a69fdb726Mike Thomas#define NTSC_M_JP_SLOW 15 18440b8d50ac98f8c8779aea7459f805e5a69fdb726Mike Thomas#define PAL_60_SLOW 17 18540b8d50ac98f8c8779aea7459f805e5a69fdb726Mike Thomas#define PAL_M_SLOW 19 18640b8d50ac98f8c8779aea7459f805e5a69fdb726Mike Thomas#define STANDARD_MANY 20 1873d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas/*---------------------------------------------------------------------------*/ 1883d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas/* 1893d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas * ENUMS 1903d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas */ 1913d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas/*---------------------------------------------------------------------------*/ 1923d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomasenum { 19303389996e086fe61216692f0a2bb445051082902Tomas Winkler AT_720x576, 19403389996e086fe61216692f0a2bb445051082902Tomas Winkler AT_704x576, 19503389996e086fe61216692f0a2bb445051082902Tomas Winkler AT_640x480, 19603389996e086fe61216692f0a2bb445051082902Tomas Winkler AT_720x480, 19703389996e086fe61216692f0a2bb445051082902Tomas Winkler AT_360x288, 19803389996e086fe61216692f0a2bb445051082902Tomas Winkler AT_320x240, 19903389996e086fe61216692f0a2bb445051082902Tomas Winkler AT_360x240, 20003389996e086fe61216692f0a2bb445051082902Tomas Winkler RESOLUTION_MANY 2013d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas}; 2023d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomasenum { 20303389996e086fe61216692f0a2bb445051082902Tomas Winkler FMT_UYVY, 20403389996e086fe61216692f0a2bb445051082902Tomas Winkler FMT_YUY2, 20503389996e086fe61216692f0a2bb445051082902Tomas Winkler FMT_RGB24, 20603389996e086fe61216692f0a2bb445051082902Tomas Winkler FMT_RGB32, 20703389996e086fe61216692f0a2bb445051082902Tomas Winkler FMT_BGR24, 20803389996e086fe61216692f0a2bb445051082902Tomas Winkler FMT_BGR32, 20903389996e086fe61216692f0a2bb445051082902Tomas Winkler PIXELFORMAT_MANY 2103d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas}; 2113d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomasenum { 21203389996e086fe61216692f0a2bb445051082902Tomas Winkler FIELD_NONE, 21303389996e086fe61216692f0a2bb445051082902Tomas Winkler FIELD_INTERLACED, 21403389996e086fe61216692f0a2bb445051082902Tomas Winkler INTERLACE_MANY 2153d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas}; 2163d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas#define SETTINGS_MANY (STANDARD_MANY * \ 2173d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas RESOLUTION_MANY * \ 2183d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas 2 * \ 2193d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas PIXELFORMAT_MANY * \ 2203d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas INTERLACE_MANY) 2213d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas/*---------------------------------------------------------------------------*/ 2223d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas/* 223702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * STRUCTURE DEFINITIONS 224702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas */ 225702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 226ae59dad4fef271222d65ac6afe2889eb12ea6ca9Mike Thomasstruct easycap_dongle { 22703389996e086fe61216692f0a2bb445051082902Tomas Winkler struct easycap *peasycap; 22803389996e086fe61216692f0a2bb445051082902Tomas Winkler struct mutex mutex_video; 22903389996e086fe61216692f0a2bb445051082902Tomas Winkler struct mutex mutex_audio; 230ae59dad4fef271222d65ac6afe2889eb12ea6ca9Mike Thomas}; 231ae59dad4fef271222d65ac6afe2889eb12ea6ca9Mike Thomas/*---------------------------------------------------------------------------*/ 232702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomasstruct data_buffer { 23303389996e086fe61216692f0a2bb445051082902Tomas Winkler struct list_head list_head; 23403389996e086fe61216692f0a2bb445051082902Tomas Winkler void *pgo; 23503389996e086fe61216692f0a2bb445051082902Tomas Winkler void *pto; 236055e3a3a2cdcb7d39d14857e2fb2175c11168ee7Tomas Winkler u16 kount; 237055e3a3a2cdcb7d39d14857e2fb2175c11168ee7Tomas Winkler u16 input; 238702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas}; 239702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 240702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomasstruct data_urb { 24103389996e086fe61216692f0a2bb445051082902Tomas Winkler struct list_head list_head; 24203389996e086fe61216692f0a2bb445051082902Tomas Winkler struct urb *purb; 24303389996e086fe61216692f0a2bb445051082902Tomas Winkler int isbuf; 24403389996e086fe61216692f0a2bb445051082902Tomas Winkler int length; 245702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas}; 246702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 2473d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomasstruct easycap_standard { 248055e3a3a2cdcb7d39d14857e2fb2175c11168ee7Tomas Winkler u16 mask; 2493d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomasstruct v4l2_standard v4l2_standard; 2503d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas}; 2513d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomasstruct easycap_format { 252055e3a3a2cdcb7d39d14857e2fb2175c11168ee7Tomas Winkler u16 mask; 25303389996e086fe61216692f0a2bb445051082902Tomas Winkler char name[128]; 2543d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomasstruct v4l2_format v4l2_format; 2553d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas}; 256f36bc37a48148f31f936557b811431b98dbfe347Mike Thomasstruct inputset { 25703389996e086fe61216692f0a2bb445051082902Tomas Winkler int input; 25803389996e086fe61216692f0a2bb445051082902Tomas Winkler int input_ok; 25903389996e086fe61216692f0a2bb445051082902Tomas Winkler int standard_offset; 26003389996e086fe61216692f0a2bb445051082902Tomas Winkler int standard_offset_ok; 26103389996e086fe61216692f0a2bb445051082902Tomas Winkler int format_offset; 26203389996e086fe61216692f0a2bb445051082902Tomas Winkler int format_offset_ok; 26303389996e086fe61216692f0a2bb445051082902Tomas Winkler int brightness; 26403389996e086fe61216692f0a2bb445051082902Tomas Winkler int brightness_ok; 26503389996e086fe61216692f0a2bb445051082902Tomas Winkler int contrast; 26603389996e086fe61216692f0a2bb445051082902Tomas Winkler int contrast_ok; 26703389996e086fe61216692f0a2bb445051082902Tomas Winkler int saturation; 26803389996e086fe61216692f0a2bb445051082902Tomas Winkler int saturation_ok; 26903389996e086fe61216692f0a2bb445051082902Tomas Winkler int hue; 27003389996e086fe61216692f0a2bb445051082902Tomas Winkler int hue_ok; 271f36bc37a48148f31f936557b811431b98dbfe347Mike Thomas}; 2723d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas/*---------------------------------------------------------------------------*/ 273702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/* 274702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * easycap.ilk == 0 => CVBS+S-VIDEO HARDWARE, AUDIO wMaxPacketSize=256 275702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * easycap.ilk == 2 => CVBS+S-VIDEO HARDWARE, AUDIO wMaxPacketSize=9 276702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * easycap.ilk == 3 => FOUR-CVBS HARDWARE, AUDIO wMaxPacketSize=9 277702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas */ 278702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 279702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomasstruct easycap { 28003389996e086fe61216692f0a2bb445051082902Tomas Winkler int isdongle; 28103389996e086fe61216692f0a2bb445051082902Tomas Winkler int minor; 282e68703cfe8dd2f5605c53b46fae6c9c027e7ef50Mike Thomas 28303389996e086fe61216692f0a2bb445051082902Tomas Winkler struct video_device video_device; 28403389996e086fe61216692f0a2bb445051082902Tomas Winkler struct v4l2_device v4l2_device; 285cb81fa07f8beaead14ce500a0e43171591a03ea7Tomas Winkler 28603389996e086fe61216692f0a2bb445051082902Tomas Winkler int status; 28703389996e086fe61216692f0a2bb445051082902Tomas Winkler unsigned int audio_pages_per_fragment; 28803389996e086fe61216692f0a2bb445051082902Tomas Winkler unsigned int audio_bytes_per_fragment; 28903389996e086fe61216692f0a2bb445051082902Tomas Winkler unsigned int audio_buffer_page_many; 2903d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas 2913d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas#define UPSAMPLE 2923fc0dae888ee216036ae1898fc9186f1dd04f185Tomas Winkler#ifdef UPSAMPLE 293055e3a3a2cdcb7d39d14857e2fb2175c11168ee7Tomas Winkler s16 oldaudio; 2943d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas#endif /*UPSAMPLE*/ 2953d423e91b498b71bfdf4bcfac52c3c27e0f2f39fMike Thomas 29603389996e086fe61216692f0a2bb445051082902Tomas Winkler int ilk; 29703389996e086fe61216692f0a2bb445051082902Tomas Winkler bool microphone; 29803389996e086fe61216692f0a2bb445051082902Tomas Winkler 29903389996e086fe61216692f0a2bb445051082902Tomas Winkler struct usb_device *pusb_device; 30003389996e086fe61216692f0a2bb445051082902Tomas Winkler struct usb_interface *pusb_interface; 30103389996e086fe61216692f0a2bb445051082902Tomas Winkler 30203389996e086fe61216692f0a2bb445051082902Tomas Winkler struct kref kref; 30303389996e086fe61216692f0a2bb445051082902Tomas Winkler 30403389996e086fe61216692f0a2bb445051082902Tomas Winkler int queued[FRAME_BUFFER_MANY]; 30503389996e086fe61216692f0a2bb445051082902Tomas Winkler int done[FRAME_BUFFER_MANY]; 30603389996e086fe61216692f0a2bb445051082902Tomas Winkler 30703389996e086fe61216692f0a2bb445051082902Tomas Winkler wait_queue_head_t wq_video; 30803389996e086fe61216692f0a2bb445051082902Tomas Winkler wait_queue_head_t wq_audio; 30903389996e086fe61216692f0a2bb445051082902Tomas Winkler wait_queue_head_t wq_trigger; 31003389996e086fe61216692f0a2bb445051082902Tomas Winkler 31103389996e086fe61216692f0a2bb445051082902Tomas Winkler int input; 31203389996e086fe61216692f0a2bb445051082902Tomas Winkler int polled; 31303389996e086fe61216692f0a2bb445051082902Tomas Winkler int standard_offset; 31403389996e086fe61216692f0a2bb445051082902Tomas Winkler int format_offset; 31503389996e086fe61216692f0a2bb445051082902Tomas Winkler struct inputset inputset[INPUT_MANY]; 31603389996e086fe61216692f0a2bb445051082902Tomas Winkler 31703389996e086fe61216692f0a2bb445051082902Tomas Winkler bool ntsc; 31803389996e086fe61216692f0a2bb445051082902Tomas Winkler int fps; 31903389996e086fe61216692f0a2bb445051082902Tomas Winkler int usec; 32003389996e086fe61216692f0a2bb445051082902Tomas Winkler int tolerate; 32103389996e086fe61216692f0a2bb445051082902Tomas Winkler int skip; 32203389996e086fe61216692f0a2bb445051082902Tomas Winkler int skipped; 32303389996e086fe61216692f0a2bb445051082902Tomas Winkler int lost[INPUT_MANY]; 32403389996e086fe61216692f0a2bb445051082902Tomas Winkler int merit[180]; 32503389996e086fe61216692f0a2bb445051082902Tomas Winkler 32603389996e086fe61216692f0a2bb445051082902Tomas Winkler int video_interface; 32703389996e086fe61216692f0a2bb445051082902Tomas Winkler int video_altsetting_on; 32803389996e086fe61216692f0a2bb445051082902Tomas Winkler int video_altsetting_off; 32903389996e086fe61216692f0a2bb445051082902Tomas Winkler int video_endpointnumber; 33003389996e086fe61216692f0a2bb445051082902Tomas Winkler int video_isoc_maxframesize; 33103389996e086fe61216692f0a2bb445051082902Tomas Winkler int video_isoc_buffer_size; 33203389996e086fe61216692f0a2bb445051082902Tomas Winkler int video_isoc_framesperdesc; 33303389996e086fe61216692f0a2bb445051082902Tomas Winkler 33403389996e086fe61216692f0a2bb445051082902Tomas Winkler int video_isoc_streaming; 33503389996e086fe61216692f0a2bb445051082902Tomas Winkler int video_isoc_sequence; 33603389996e086fe61216692f0a2bb445051082902Tomas Winkler int video_idle; 33703389996e086fe61216692f0a2bb445051082902Tomas Winkler int video_eof; 33803389996e086fe61216692f0a2bb445051082902Tomas Winkler int video_junk; 33903389996e086fe61216692f0a2bb445051082902Tomas Winkler 34003389996e086fe61216692f0a2bb445051082902Tomas Winkler struct data_buffer video_isoc_buffer[VIDEO_ISOC_BUFFER_MANY]; 34103389996e086fe61216692f0a2bb445051082902Tomas Winkler struct data_buffer field_buffer[FIELD_BUFFER_MANY] 34203389996e086fe61216692f0a2bb445051082902Tomas Winkler [(FIELD_BUFFER_SIZE/PAGE_SIZE)]; 34303389996e086fe61216692f0a2bb445051082902Tomas Winkler struct data_buffer frame_buffer[FRAME_BUFFER_MANY] 34403389996e086fe61216692f0a2bb445051082902Tomas Winkler [(FRAME_BUFFER_SIZE/PAGE_SIZE)]; 34503389996e086fe61216692f0a2bb445051082902Tomas Winkler 34603389996e086fe61216692f0a2bb445051082902Tomas Winkler struct list_head urb_video_head; 34703389996e086fe61216692f0a2bb445051082902Tomas Winkler struct list_head *purb_video_head; 34803389996e086fe61216692f0a2bb445051082902Tomas Winkler 349055e3a3a2cdcb7d39d14857e2fb2175c11168ee7Tomas Winkler u8 cache[8]; 350055e3a3a2cdcb7d39d14857e2fb2175c11168ee7Tomas Winkler u8 *pcache; 35103389996e086fe61216692f0a2bb445051082902Tomas Winkler int video_mt; 35203389996e086fe61216692f0a2bb445051082902Tomas Winkler int audio_mt; 353055e3a3a2cdcb7d39d14857e2fb2175c11168ee7Tomas Winkler u32 isequence; 35403389996e086fe61216692f0a2bb445051082902Tomas Winkler 35503389996e086fe61216692f0a2bb445051082902Tomas Winkler int vma_many; 356702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 357702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/* 358702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * BUFFER INDICATORS 359702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas */ 360702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 36103389996e086fe61216692f0a2bb445051082902Tomas Winkler int field_fill; /* Field buffer being filled by easycap_complete(). */ 362702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas /* Bumped only by easycap_complete(). */ 36303389996e086fe61216692f0a2bb445051082902Tomas Winkler int field_page; /* Page of field buffer page being filled by */ 364702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas /* easycap_complete(). */ 36503389996e086fe61216692f0a2bb445051082902Tomas Winkler int field_read; /* Field buffer to be read by field2frame(). */ 366702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas /* Bumped only by easycap_complete(). */ 36703389996e086fe61216692f0a2bb445051082902Tomas Winkler int frame_fill; /* Frame buffer being filled by field2frame(). */ 368702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas /* Bumped only by easycap_dqbuf() when */ 369702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas /* field2frame() has created a complete frame. */ 37003389996e086fe61216692f0a2bb445051082902Tomas Winkler int frame_read; /* Frame buffer offered to user by DQBUF. */ 371702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas /* Set only by easycap_dqbuf() to trail frame_fill.*/ 37203389996e086fe61216692f0a2bb445051082902Tomas Winkler int frame_lock; /* Flag set to 1 by DQBUF and cleared by QBUF */ 373702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 374702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/* 375702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * IMAGE PROPERTIES 376702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas */ 377702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 378055e3a3a2cdcb7d39d14857e2fb2175c11168ee7Tomas Winkler u32 pixelformat; 37903389996e086fe61216692f0a2bb445051082902Tomas Winkler int width; 38003389996e086fe61216692f0a2bb445051082902Tomas Winkler int height; 38103389996e086fe61216692f0a2bb445051082902Tomas Winkler int bytesperpixel; 38203389996e086fe61216692f0a2bb445051082902Tomas Winkler bool byteswaporder; 38303389996e086fe61216692f0a2bb445051082902Tomas Winkler bool decimatepixel; 38403389996e086fe61216692f0a2bb445051082902Tomas Winkler bool offerfields; 38503389996e086fe61216692f0a2bb445051082902Tomas Winkler int frame_buffer_used; 38603389996e086fe61216692f0a2bb445051082902Tomas Winkler int frame_buffer_many; 38703389996e086fe61216692f0a2bb445051082902Tomas Winkler int videofieldamount; 38803389996e086fe61216692f0a2bb445051082902Tomas Winkler 38903389996e086fe61216692f0a2bb445051082902Tomas Winkler int brightness; 39003389996e086fe61216692f0a2bb445051082902Tomas Winkler int contrast; 39103389996e086fe61216692f0a2bb445051082902Tomas Winkler int saturation; 39203389996e086fe61216692f0a2bb445051082902Tomas Winkler int hue; 39303389996e086fe61216692f0a2bb445051082902Tomas Winkler 39403389996e086fe61216692f0a2bb445051082902Tomas Winkler int allocation_video_urb; 39503389996e086fe61216692f0a2bb445051082902Tomas Winkler int allocation_video_page; 39603389996e086fe61216692f0a2bb445051082902Tomas Winkler int allocation_video_struct; 39703389996e086fe61216692f0a2bb445051082902Tomas Winkler int registered_video; 398702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 399702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/* 400a9855917290fc40dbfd67d3ee06c190667d6c5b5Mike Thomas * ALSA 401a9855917290fc40dbfd67d3ee06c190667d6c5b5Mike Thomas */ 402a9855917290fc40dbfd67d3ee06c190667d6c5b5Mike Thomas/*---------------------------------------------------------------------------*/ 40303389996e086fe61216692f0a2bb445051082902Tomas Winkler struct snd_pcm_hardware alsa_hardware; 40403389996e086fe61216692f0a2bb445051082902Tomas Winkler struct snd_card *psnd_card; 40503389996e086fe61216692f0a2bb445051082902Tomas Winkler struct snd_pcm *psnd_pcm; 40603389996e086fe61216692f0a2bb445051082902Tomas Winkler struct snd_pcm_substream *psubstream; 40703389996e086fe61216692f0a2bb445051082902Tomas Winkler int dma_fill; 40803389996e086fe61216692f0a2bb445051082902Tomas Winkler int dma_next; 40903389996e086fe61216692f0a2bb445051082902Tomas Winkler int dma_read; 410a9855917290fc40dbfd67d3ee06c190667d6c5b5Mike Thomas/*---------------------------------------------------------------------------*/ 411a9855917290fc40dbfd67d3ee06c190667d6c5b5Mike Thomas/* 412702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * SOUND PROPERTIES 413702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas */ 414702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 41503389996e086fe61216692f0a2bb445051082902Tomas Winkler int audio_interface; 41603389996e086fe61216692f0a2bb445051082902Tomas Winkler int audio_altsetting_on; 41703389996e086fe61216692f0a2bb445051082902Tomas Winkler int audio_altsetting_off; 41803389996e086fe61216692f0a2bb445051082902Tomas Winkler int audio_endpointnumber; 41903389996e086fe61216692f0a2bb445051082902Tomas Winkler int audio_isoc_maxframesize; 42003389996e086fe61216692f0a2bb445051082902Tomas Winkler int audio_isoc_buffer_size; 42103389996e086fe61216692f0a2bb445051082902Tomas Winkler int audio_isoc_framesperdesc; 422702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas 42303389996e086fe61216692f0a2bb445051082902Tomas Winkler int audio_isoc_streaming; 42403389996e086fe61216692f0a2bb445051082902Tomas Winkler int audio_idle; 42503389996e086fe61216692f0a2bb445051082902Tomas Winkler int audio_eof; 42603389996e086fe61216692f0a2bb445051082902Tomas Winkler int volume; 42703389996e086fe61216692f0a2bb445051082902Tomas Winkler int mute; 42803389996e086fe61216692f0a2bb445051082902Tomas Winkler s8 gain; 429702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas 43003389996e086fe61216692f0a2bb445051082902Tomas Winkler struct data_buffer audio_isoc_buffer[AUDIO_ISOC_BUFFER_MANY]; 431702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas 43203389996e086fe61216692f0a2bb445051082902Tomas Winkler struct list_head urb_audio_head; 43303389996e086fe61216692f0a2bb445051082902Tomas Winkler struct list_head *purb_audio_head; 434702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 435702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/* 436702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * BUFFER INDICATORS 437702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas */ 438702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 43903389996e086fe61216692f0a2bb445051082902Tomas Winkler int audio_fill; /* Audio buffer being filled by easycap_complete(). */ 440a9855917290fc40dbfd67d3ee06c190667d6c5b5Mike Thomas /* Bumped only by easycap_complete(). */ 44103389996e086fe61216692f0a2bb445051082902Tomas Winkler int audio_read; /* Audio buffer page being read by easycap_read(). */ 442a9855917290fc40dbfd67d3ee06c190667d6c5b5Mike Thomas /* Set by easycap_read() to trail audio_fill by */ 443702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas /* one fragment. */ 444702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 445702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/* 446702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * SOUND PROPERTIES 447702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas */ 448702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 44903389996e086fe61216692f0a2bb445051082902Tomas Winkler int allocation_audio_urb; 45003389996e086fe61216692f0a2bb445051082902Tomas Winkler int allocation_audio_page; 45103389996e086fe61216692f0a2bb445051082902Tomas Winkler int allocation_audio_struct; 45203389996e086fe61216692f0a2bb445051082902Tomas Winkler int registered_audio; 453702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas 45403389996e086fe61216692f0a2bb445051082902Tomas Winkler long long int audio_sample; 45503389996e086fe61216692f0a2bb445051082902Tomas Winkler long long int audio_niveau; 45603389996e086fe61216692f0a2bb445051082902Tomas Winkler long long int audio_square; 457702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas 45803389996e086fe61216692f0a2bb445051082902Tomas Winkler struct data_buffer audio_buffer[]; 459702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas}; 460702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 461702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/* 462702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * VIDEO FUNCTION PROTOTYPES 463702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas */ 464702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/ 46596bec7dd72511e3c16588d9af52da2cc937f7ea1Tomas Winklerint easycap_newinput(struct easycap *, int); 46696bec7dd72511e3c16588d9af52da2cc937f7ea1Tomas Winklervoid easycap_testcard(struct easycap *, int); 46796bec7dd72511e3c16588d9af52da2cc937f7ea1Tomas Winklerint easycap_isdongle(struct easycap *); 46896bec7dd72511e3c16588d9af52da2cc937f7ea1Tomas Winkler 469f2b3c685b9b1c048cfa8bef98dac037275b9d20dTomas Winklerlong easycap_unlocked_ioctl(struct file *, unsigned int, unsigned long); 47096bec7dd72511e3c16588d9af52da2cc937f7ea1Tomas Winkler 47196bec7dd72511e3c16588d9af52da2cc937f7ea1Tomas Winklerint easycap_video_dqbuf(struct easycap *, int); 47296bec7dd72511e3c16588d9af52da2cc937f7ea1Tomas Winklerint easycap_video_submit_urbs(struct easycap *); 4738b1fad2f046fb825046fee3a41885a70123de988Tomas Winklerint easycap_video_kill_urbs(struct easycap *); 47496bec7dd72511e3c16588d9af52da2cc937f7ea1Tomas Winklerint easycap_video_fillin_formats(void); 47598680557f3ce7eadae0ceda4484fd6c7a13ba3beTomas Winkler 47698680557f3ce7eadae0ceda4484fd6c7a13ba3beTomas Winklerint adjust_standard(struct easycap *, v4l2_std_id); 47798680557f3ce7eadae0ceda4484fd6c7a13ba3beTomas Winklerint adjust_format(struct easycap *, u32, u32, u32, int, bool); 47898680557f3ce7eadae0ceda4484fd6c7a13ba3beTomas Winklerint adjust_brightness(struct easycap *, int); 47998680557f3ce7eadae0ceda4484fd6c7a13ba3beTomas Winklerint adjust_contrast(struct easycap *, int); 48098680557f3ce7eadae0ceda4484fd6c7a13ba3beTomas Winklerint adjust_saturation(struct easycap *, int); 48198680557f3ce7eadae0ceda4484fd6c7a13ba3beTomas Winklerint adjust_hue(struct easycap *, int); 482702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 483702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/* 484702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * AUDIO FUNCTION PROTOTYPES 485702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas */ 486702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 48798680557f3ce7eadae0ceda4484fd6c7a13ba3beTomas Winklerint easycap_alsa_probe(struct easycap *); 4888b1fad2f046fb825046fee3a41885a70123de988Tomas Winklerint easycap_audio_kill_urbs(struct easycap *); 48998680557f3ce7eadae0ceda4484fd6c7a13ba3beTomas Winklervoid easycap_alsa_complete(struct urb *); 490702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 491702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/* 492702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas * LOW-LEVEL FUNCTION PROTOTYPES 493702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas */ 494702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 49596bec7dd72511e3c16588d9af52da2cc937f7ea1Tomas Winklerint easycap_audio_gainset(struct usb_device *, s8); 49696bec7dd72511e3c16588d9af52da2cc937f7ea1Tomas Winklerint easycap_audio_setup(struct easycap *); 49798680557f3ce7eadae0ceda4484fd6c7a13ba3beTomas Winkler 49896bec7dd72511e3c16588d9af52da2cc937f7ea1Tomas Winklerint easycap_wakeup_device(struct usb_device *); 49998680557f3ce7eadae0ceda4484fd6c7a13ba3beTomas Winkler 50098680557f3ce7eadae0ceda4484fd6c7a13ba3beTomas Winklerint setup_stk(struct usb_device *, bool); 50198680557f3ce7eadae0ceda4484fd6c7a13ba3beTomas Winklerint setup_saa(struct usb_device *, bool); 50298680557f3ce7eadae0ceda4484fd6c7a13ba3beTomas Winklerint ready_saa(struct usb_device *); 50398680557f3ce7eadae0ceda4484fd6c7a13ba3beTomas Winklerint merit_saa(struct usb_device *); 50498680557f3ce7eadae0ceda4484fd6c7a13ba3beTomas Winklerint check_vt(struct usb_device *); 50598680557f3ce7eadae0ceda4484fd6c7a13ba3beTomas Winklerint select_input(struct usb_device *, int, int); 50698680557f3ce7eadae0ceda4484fd6c7a13ba3beTomas Winklerint set_resolution(struct usb_device *, u16, u16, u16, u16); 50798680557f3ce7eadae0ceda4484fd6c7a13ba3beTomas Winkler 50898680557f3ce7eadae0ceda4484fd6c7a13ba3beTomas Winklerint read_saa(struct usb_device *, u16); 50998680557f3ce7eadae0ceda4484fd6c7a13ba3beTomas Winklerint write_saa(struct usb_device *, u16, u16); 51098680557f3ce7eadae0ceda4484fd6c7a13ba3beTomas Winklerint start_100(struct usb_device *); 51198680557f3ce7eadae0ceda4484fd6c7a13ba3beTomas Winklerint stop_100(struct usb_device *); 512702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 5132a9a05c43294d703e351753da49231c47e0aad0dTomas Winkler 5142a9a05c43294d703e351753da49231c47e0aad0dTomas Winkler 515702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 516702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/* 517e68703cfe8dd2f5605c53b46fae6c9c027e7ef50Mike Thomas * MACROS SAM(...) AND JOM(...) ALLOW DIAGNOSTIC OUTPUT TO BE TAGGED WITH 518e68703cfe8dd2f5605c53b46fae6c9c027e7ef50Mike Thomas * THE IDENTITY OF THE DONGLE TO WHICH IT APPLIES, BUT IF INVOKED WHEN THE 519e68703cfe8dd2f5605c53b46fae6c9c027e7ef50Mike Thomas * POINTER peasycap IS INVALID AN Oops IS LIKELY, AND ITS CAUSE MAY NOT BE 520e68703cfe8dd2f5605c53b46fae6c9c027e7ef50Mike Thomas * IMMEDIATELY OBVIOUS FROM A CASUAL READING OF THE SOURCE CODE. BEWARE. 521e68703cfe8dd2f5605c53b46fae6c9c027e7ef50Mike Thomas*/ 522e68703cfe8dd2f5605c53b46fae6c9c027e7ef50Mike Thomas/*---------------------------------------------------------------------------*/ 5235c0c6c395ea8ad2f831c0717f67f957ba84550adTomas Winklerconst char *strerror(int err); 5245c0c6c395ea8ad2f831c0717f67f957ba84550adTomas Winkler 525702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#define SAY(format, args...) do { \ 526e68703cfe8dd2f5605c53b46fae6c9c027e7ef50Mike Thomas printk(KERN_DEBUG "easycap:: %s: " \ 527e68703cfe8dd2f5605c53b46fae6c9c027e7ef50Mike Thomas format, __func__, ##args); \ 528e68703cfe8dd2f5605c53b46fae6c9c027e7ef50Mike Thomas} while (0) 529e68703cfe8dd2f5605c53b46fae6c9c027e7ef50Mike Thomas#define SAM(format, args...) do { \ 530e68703cfe8dd2f5605c53b46fae6c9c027e7ef50Mike Thomas printk(KERN_DEBUG "easycap::%i%s: " \ 531e68703cfe8dd2f5605c53b46fae6c9c027e7ef50Mike Thomas format, peasycap->isdongle, __func__, ##args);\ 532702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas} while (0) 533702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas 53402149cf7c7fd1ece5ada28f5a95914f4348df44fTomas Winkler#ifdef CONFIG_EASYCAP_DEBUG 53502149cf7c7fd1ece5ada28f5a95914f4348df44fTomas Winklerextern int easycap_debug; 536702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#define JOT(n, format, args...) do { \ 53762af33ec6e73d658720ea1190861c8c0609a94b3Randy Dunlap if (n <= easycap_debug) { \ 538e68703cfe8dd2f5605c53b46fae6c9c027e7ef50Mike Thomas printk(KERN_DEBUG "easycap:: %s: " \ 539e68703cfe8dd2f5605c53b46fae6c9c027e7ef50Mike Thomas format, __func__, ##args);\ 540702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas } \ 541702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas} while (0) 542e68703cfe8dd2f5605c53b46fae6c9c027e7ef50Mike Thomas#define JOM(n, format, args...) do { \ 54362af33ec6e73d658720ea1190861c8c0609a94b3Randy Dunlap if (n <= easycap_debug) { \ 544e68703cfe8dd2f5605c53b46fae6c9c027e7ef50Mike Thomas printk(KERN_DEBUG "easycap::%i%s: " \ 545e68703cfe8dd2f5605c53b46fae6c9c027e7ef50Mike Thomas format, peasycap->isdongle, __func__, ##args);\ 546e68703cfe8dd2f5605c53b46fae6c9c027e7ef50Mike Thomas } \ 547e68703cfe8dd2f5605c53b46fae6c9c027e7ef50Mike Thomas} while (0) 548e68703cfe8dd2f5605c53b46fae6c9c027e7ef50Mike Thomas 549702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#else 550702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas#define JOT(n, format, args...) do {} while (0) 551e68703cfe8dd2f5605c53b46fae6c9c027e7ef50Mike Thomas#define JOM(n, format, args...) do {} while (0) 55202149cf7c7fd1ece5ada28f5a95914f4348df44fTomas Winkler#endif /* CONFIG_EASYCAP_DEBUG */ 553702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas 554702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas/*---------------------------------------------------------------------------*/ 555702422bd2d3f44e454a97ca7054edde84cc18126R.M. Thomas 556b4f63e9a0f1ca7c6df1f77fdabd4905f4639e8c6Tomas Winkler/*---------------------------------------------------------------------------*/ 557b4f63e9a0f1ca7c6df1f77fdabd4905f4639e8c6Tomas Winkler/* globals 558b4f63e9a0f1ca7c6df1f77fdabd4905f4639e8c6Tomas Winkler */ 559b4f63e9a0f1ca7c6df1f77fdabd4905f4639e8c6Tomas Winkler/*---------------------------------------------------------------------------*/ 560b4f63e9a0f1ca7c6df1f77fdabd4905f4639e8c6Tomas Winkler 5612ef0c05e80cf59315f6f0a4e5a950899f169f2d0Tomas Winklerextern bool easycap_readback; 562b4f63e9a0f1ca7c6df1f77fdabd4905f4639e8c6Tomas Winklerextern const struct easycap_standard easycap_standard[]; 563b4f63e9a0f1ca7c6df1f77fdabd4905f4639e8c6Tomas Winklerextern struct easycap_format easycap_format[]; 564b4f63e9a0f1ca7c6df1f77fdabd4905f4639e8c6Tomas Winklerextern struct v4l2_queryctrl easycap_control[]; 565b4f63e9a0f1ca7c6df1f77fdabd4905f4639e8c6Tomas Winklerextern struct easycap_dongle easycapdc60_dongle[]; 566b4f63e9a0f1ca7c6df1f77fdabd4905f4639e8c6Tomas Winkler 5673dbab7331209d5d85c448675053d3e9e7a4bcd41Tomas Winkler#endif /* !__EASYCAP_H__ */ 568