1ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox/**************************************************************************** 2ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * 3ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * Filename: cpia2.h 4ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * 5ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * Copyright 2001, STMicrolectronics, Inc. 6ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * 7ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * Contact: steve.miller@st.com 8ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * 9ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * Description: 10ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * This is a USB driver for CPiA2 based video cameras. 11ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * 12ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * This driver is modelled on the cpia usb driver by 13ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * Jochen Scharrlach and Johannes Erdfeldt. 14ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * 15ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * This program is free software; you can redistribute it and/or modify 16ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * it under the terms of the GNU General Public License as published by 17ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * the Free Software Foundation; either version 2 of the License, or 18ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * (at your option) any later version. 19ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * 20ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * This program is distributed in the hope that it will be useful, 21ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * but WITHOUT ANY WARRANTY; without even the implied warranty of 22ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 23ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * GNU General Public License for more details. 24ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * 25ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * You should have received a copy of the GNU General Public License 26ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * along with this program; if not, write to the Free Software 27ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 28ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * 29ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox ****************************************************************************/ 30ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 31ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#ifndef __CPIA2_H__ 32ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define __CPIA2_H__ 33ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 34873ecd8f8f5eed877df74e54e7c20aee9ef887e5Hans Verkuil#include <linux/videodev2.h> 35ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#include <linux/usb.h> 36ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#include <linux/poll.h> 376c493f8b28c6744995e92801a20dca192635dd22Hans Verkuil#include <media/v4l2-common.h> 386c493f8b28c6744995e92801a20dca192635dd22Hans Verkuil#include <media/v4l2-device.h> 396c493f8b28c6744995e92801a20dca192635dd22Hans Verkuil#include <media/v4l2-ctrls.h> 40ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 41ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#include "cpia2_registers.h" 42ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 43ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox/* define for verbose debug output */ 44ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox//#define _CPIA2_DEBUG_ 45ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 46ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox/*** 47ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * Image defines 48ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox ***/ 49ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 50ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox/* Misc constants */ 51ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define ALLOW_CORRUPT 0 /* Causes collater to discard checksum */ 52ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 53ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox/* USB Transfer mode */ 54ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define XFER_ISOC 0 55ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define XFER_BULK 1 56ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 57ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox/* USB Alternates */ 58ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define USBIF_CMDONLY 0 59ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define USBIF_BULK 1 60ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define USBIF_ISO_1 2 /* 128 bytes/ms */ 61ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define USBIF_ISO_2 3 /* 384 bytes/ms */ 62ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define USBIF_ISO_3 4 /* 640 bytes/ms */ 63ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define USBIF_ISO_4 5 /* 768 bytes/ms */ 64ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define USBIF_ISO_5 6 /* 896 bytes/ms */ 65ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define USBIF_ISO_6 7 /* 1023 bytes/ms */ 66ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 67ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox/* Flicker Modes */ 68ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define NEVER_FLICKER 0 69ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define FLICKER_60 60 70ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define FLICKER_50 50 71ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 72ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox/* Debug flags */ 73ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define DEBUG_NONE 0 74ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define DEBUG_REG 0x00000001 75ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define DEBUG_DUMP_PATCH 0x00000002 76ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define DEBUG_DUMP_REGS 0x00000004 77ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 78ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox/*** 79ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * Video frame sizes 80ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox ***/ 81ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxenum { 82ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox VIDEOSIZE_VGA = 0, /* 640x480 */ 83ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox VIDEOSIZE_CIF, /* 352x288 */ 84ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox VIDEOSIZE_QVGA, /* 320x240 */ 85ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox VIDEOSIZE_QCIF, /* 176x144 */ 86ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox VIDEOSIZE_288_216, 87ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox VIDEOSIZE_256_192, 88ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox VIDEOSIZE_224_168, 89ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox VIDEOSIZE_192_144, 90ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox}; 91ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 92ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define STV_IMAGE_CIF_ROWS 288 93ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define STV_IMAGE_CIF_COLS 352 94ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 95ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define STV_IMAGE_QCIF_ROWS 144 96ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define STV_IMAGE_QCIF_COLS 176 97ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 98ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define STV_IMAGE_VGA_ROWS 480 99ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define STV_IMAGE_VGA_COLS 640 100ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 101ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define STV_IMAGE_QVGA_ROWS 240 102ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define STV_IMAGE_QVGA_COLS 320 103ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 104ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define JPEG_MARKER_COM (1<<6) /* Comment segment */ 105ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 106ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox/*** 107ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * Enums 108ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox ***/ 109ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox/* Sensor types available with cpia2 asics */ 110ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxenum sensors { 111ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_SENSOR_410, 112ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_SENSOR_500 113ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox}; 114ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 115ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox/* Asic types available in the CPiA2 architecture */ 116ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define CPIA2_ASIC_672 0x67 117ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 118ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox/* Device types (stv672, stv676, etc) */ 119ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define DEVICE_STV_672 0x0001 120ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define DEVICE_STV_676 0x0002 121ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 122ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxenum frame_status { 123ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox FRAME_EMPTY, 124ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox FRAME_READING, /* In the process of being grabbed into */ 125ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox FRAME_READY, /* Ready to be read */ 126ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox FRAME_ERROR, 127ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox}; 128ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 129ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox/*** 130ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * Register access (for USB request byte) 131ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox ***/ 132ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxenum { 133ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CAMERAACCESS_SYSTEM = 0, 134ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CAMERAACCESS_VC, 135ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CAMERAACCESS_VP, 136ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CAMERAACCESS_IDATA 137ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox}; 138ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 139ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define CAMERAACCESS_TYPE_BLOCK 0x00 140ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define CAMERAACCESS_TYPE_RANDOM 0x04 141ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define CAMERAACCESS_TYPE_MASK 0x08 142ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define CAMERAACCESS_TYPE_REPEAT 0x0C 143ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 144ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define TRANSFER_READ 0 145ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define TRANSFER_WRITE 1 146ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 147ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define DEFAULT_ALT USBIF_ISO_6 148ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define DEFAULT_BRIGHTNESS 0x46 149ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define DEFAULT_CONTRAST 0x93 150ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define DEFAULT_SATURATION 0x7f 151ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 152ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox/* Power state */ 153ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define HI_POWER_MODE CPIA2_SYSTEM_CONTROL_HIGH_POWER 154ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define LO_POWER_MODE CPIA2_SYSTEM_CONTROL_LOW_POWER 155ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 156ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 157ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox/******** 158ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * Commands 159ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox *******/ 160ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxenum { 161ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_NONE = 0, 162ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_GET_VERSION, 163ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_GET_PNP_ID, 164ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_GET_ASIC_TYPE, 165ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_GET_SENSOR, 166ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_GET_VP_DEVICE, 167ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_GET_VP_BRIGHTNESS, 168ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_SET_VP_BRIGHTNESS, 169ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_GET_CONTRAST, 170ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_SET_CONTRAST, 171ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_GET_VP_SATURATION, 172ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_SET_VP_SATURATION, 173ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_GET_VP_GPIO_DIRECTION, 174ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_SET_VP_GPIO_DIRECTION, 175ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_GET_VP_GPIO_DATA, 176ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_SET_VP_GPIO_DATA, 177ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_GET_VC_MP_GPIO_DIRECTION, 178ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_SET_VC_MP_GPIO_DIRECTION, 179ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_GET_VC_MP_GPIO_DATA, 180ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_SET_VC_MP_GPIO_DATA, 181ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_ENABLE_PACKET_CTRL, 182ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_GET_FLICKER_MODES, 183ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_SET_FLICKER_MODES, 184ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_RESET_FIFO, /* clear fifo and enable stream block */ 185ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_SET_HI_POWER, 186ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_SET_LOW_POWER, 187ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_CLEAR_V2W_ERR, 188ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_SET_USER_MODE, 189ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_GET_USER_MODE, 190ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_FRAMERATE_REQ, 191ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_SET_COMPRESSION_STATE, 192ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_GET_WAKEUP, 193ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_SET_WAKEUP, 194ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_GET_PW_CONTROL, 195ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_SET_PW_CONTROL, 196ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_GET_SYSTEM_CTRL, 197ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_SET_SYSTEM_CTRL, 198ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_GET_VP_SYSTEM_STATE, 199ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_GET_VP_SYSTEM_CTRL, 200ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_SET_VP_SYSTEM_CTRL, 201ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_GET_VP_EXP_MODES, 202ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_SET_VP_EXP_MODES, 203ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_GET_DEVICE_CONFIG, 204ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_SET_DEVICE_CONFIG, 205ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_SET_SERIAL_ADDR, 206ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_SET_SENSOR_CR1, 207ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_GET_VC_CONTROL, 208ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_SET_VC_CONTROL, 209ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_SET_TARGET_KB, 210ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_SET_DEF_JPEG_OPT, 211ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_REHASH_VP4, 212ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_GET_USER_EFFECTS, 213ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox CPIA2_CMD_SET_USER_EFFECTS 214ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox}; 215ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 216ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxenum user_cmd { 217ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox COMMAND_NONE = 0x00000001, 218ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox COMMAND_SET_FPS = 0x00000002, 219ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox COMMAND_SET_COLOR_PARAMS = 0x00000004, 220ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox COMMAND_GET_COLOR_PARAMS = 0x00000008, 221ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox COMMAND_SET_FORMAT = 0x00000010, /* size, etc */ 222ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox COMMAND_SET_FLICKER = 0x00000020 223ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox}; 224ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 225ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox/*** 226ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * Some defines specific to the 676 chip 227ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox ***/ 228ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define CAMACC_CIF 0x01 229ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define CAMACC_VGA 0x02 230ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define CAMACC_QCIF 0x04 231ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define CAMACC_QVGA 0x08 232ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 233ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 234ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxstruct cpia2_register { 235ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 index; 236ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 value; 237ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox}; 238ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 239ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxstruct cpia2_reg_mask { 240ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 index; 241ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 and_mask; 242ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 or_mask; 243ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 fill; 244ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox}; 245ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 246ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxstruct cpia2_command { 247ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u32 command; 248ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 req_mode; /* (Block or random) | registerBank */ 249ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 reg_count; 250ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 direction; 251ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 start; 252ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox union reg_types { 253ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox struct cpia2_register registers[32]; 254ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox struct cpia2_reg_mask masks[16]; 255ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 block_data[64]; 256ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 *patch_data; /* points to function defined block */ 257ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox } buffer; 258ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox}; 259ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 260ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxstruct camera_params { 261ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox struct { 262ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 firmware_revision_hi; /* For system register set (bank 0) */ 263ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 firmware_revision_lo; 264ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 asic_id; /* Video Compressor set (bank 1) */ 265ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 asic_rev; 266ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 vp_device_hi; /* Video Processor set (bank 2) */ 267ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 vp_device_lo; 268ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 sensor_flags; 269ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 sensor_rev; 270ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox } version; 271ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 272ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox struct { 273ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u32 device_type; /* enumerated from vendor/product ids. 274ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox * Currently, either STV_672 or STV_676 */ 275ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u16 vendor; 276ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u16 product; 277ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u16 device_revision; 278ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox } pnp_id; 279ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 280ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox struct { 281ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 brightness; /* CPIA2_VP_EXPOSURE_TARGET */ 282ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 contrast; /* Note: this is CPIA2_VP_YRANGE */ 283ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 saturation; /* CPIA2_VP_SATURATION */ 284ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox } color_params; 285ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 286ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox struct { 287ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 cam_register; 288ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 flicker_mode_req; /* 1 if flicker on, else never flicker */ 289ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox } flicker_control; 290ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 291ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox struct { 292ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 jpeg_options; 293ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 creep_period; 294ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 user_squeeze; 295ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 inhibit_htables; 296ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox } compression; 297ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 298ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox struct { 299ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 ohsize; /* output image size */ 300ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 ovsize; 301ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 hcrop; /* cropping start_pos/4 */ 302ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 vcrop; 303ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 hphase; /* scaling registers */ 304ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 vphase; 305ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 hispan; 306ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 vispan; 307ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 hicrop; 308ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 vicrop; 309ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 hifraction; 310ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 vifraction; 311ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox } image_size; 312ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 313ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox struct { 314ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox int width; /* actual window width */ 315ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox int height; /* actual window height */ 316ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox } roi; 317ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 318ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox struct { 319ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 video_mode; 320ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 frame_rate; 321ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 video_size; /* Not a register, just a convenience for cropped sizes */ 322ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 gpio_direction; 323ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 gpio_data; 324ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 system_ctrl; 325ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 system_state; 326ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 lowlight_boost; /* Bool: 0 = off, 1 = on */ 327ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 device_config; 328ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 exposure_modes; 329ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 user_effects; 330ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox } vp_params; 331ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 332ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox struct { 333ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 pw_control; 334ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 wakeup; 335ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 vc_control; 336ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 vc_mp_direction; 337ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 vc_mp_data; 3386c493f8b28c6744995e92801a20dca192635dd22Hans Verkuil u8 quality; 339ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox } vc_params; 340ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 341ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox struct { 342ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 power_mode; 343ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 system_ctrl; 344ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 stream_mode; /* This is the current alternate for usb drivers */ 345ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 allow_corrupt; 346ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox } camera_state; 347ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox}; 348ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 349ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define NUM_SBUF 2 350ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 351ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxstruct cpia2_sbuf { 352ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox char *data; 353ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox struct urb *urb; 354ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox}; 355ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 356ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxstruct framebuf { 357ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox struct timeval timestamp; 358ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox unsigned long seq; 359ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox int num; 360ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox int length; 361ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox int max_length; 362ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox volatile enum frame_status status; 363ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 *data; 364ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox struct framebuf *next; 365ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox}; 366ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 367ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxstruct camera_data { 368ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox /* locks */ 3696c493f8b28c6744995e92801a20dca192635dd22Hans Verkuil struct v4l2_device v4l2_dev; 370d2db8fee0d77f43f64e4e97ccc1558a9f59fab41Hans Verkuil struct mutex v4l2_lock; /* serialize file operations */ 3716c493f8b28c6744995e92801a20dca192635dd22Hans Verkuil struct v4l2_ctrl_handler hdl; 3726c493f8b28c6744995e92801a20dca192635dd22Hans Verkuil struct { 3736c493f8b28c6744995e92801a20dca192635dd22Hans Verkuil /* Lights control cluster */ 3746c493f8b28c6744995e92801a20dca192635dd22Hans Verkuil struct v4l2_ctrl *top_light; 3756c493f8b28c6744995e92801a20dca192635dd22Hans Verkuil struct v4l2_ctrl *bottom_light; 3766c493f8b28c6744995e92801a20dca192635dd22Hans Verkuil }; 3776c493f8b28c6744995e92801a20dca192635dd22Hans Verkuil struct v4l2_ctrl *usb_alt; 378ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 379ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox /* camera status */ 380ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox int first_image_seen; 381ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox enum sensors sensor_type; 382ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 flush; 3836c493f8b28c6744995e92801a20dca192635dd22Hans Verkuil struct v4l2_fh *stream_fh; 384ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 mmapped; 385ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox int streaming; /* 0 = no, 1 = yes */ 386ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox int xfer_mode; /* XFER_BULK or XFER_ISOC */ 387ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox struct camera_params params; /* camera settings */ 388ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 389ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox /* v4l */ 390ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox int video_size; /* VIDEO_SIZE_ */ 3916c493f8b28c6744995e92801a20dca192635dd22Hans Verkuil struct video_device vdev; /* v4l videodev */ 392873ecd8f8f5eed877df74e54e7c20aee9ef887e5Hans Verkuil u32 width; 393873ecd8f8f5eed877df74e54e7c20aee9ef887e5Hans Verkuil u32 height; /* Its size */ 394ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox __u32 pixelformat; /* Format fourcc */ 395ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 396ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox /* USB */ 397ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox struct usb_device *dev; 398ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox unsigned char iface; 399ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox unsigned int cur_alt; 400ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox unsigned int old_alt; 401ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox struct cpia2_sbuf sbuf[NUM_SBUF]; /* Double buffering */ 402ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 403ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox wait_queue_head_t wq_stream; 404ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 405ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox /* Buffering */ 406ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u32 frame_size; 407ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox int num_frames; 408ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox unsigned long frame_count; 409ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 *frame_buffer; /* frame buffer data */ 410ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox struct framebuf *buffers; 411ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox struct framebuf * volatile curbuff; 412ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox struct framebuf *workbuff; 413ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 414ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox /* MJPEG Extension */ 415ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox int APPn; /* Number of APP segment to be written, must be 0..15 */ 416ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox int APP_len; /* Length of data in JPEG APPn segment */ 417ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox char APP_data[60]; /* Data in the JPEG APPn segment. */ 418ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 419ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox int COM_len; /* Length of data in JPEG COM segment */ 420ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox char COM_data[60]; /* Data in JPEG COM segment */ 421ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox}; 422ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 423ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox/* v4l */ 424ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxint cpia2_register_camera(struct camera_data *cam); 425ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxvoid cpia2_unregister_camera(struct camera_data *cam); 4266c493f8b28c6744995e92801a20dca192635dd22Hans Verkuilvoid cpia2_camera_release(struct v4l2_device *v4l2_dev); 427ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 428ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox/* core */ 429ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxint cpia2_reset_camera(struct camera_data *cam); 430ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxint cpia2_set_low_power(struct camera_data *cam); 431ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxvoid cpia2_dbg_dump_registers(struct camera_data *cam); 432ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxint cpia2_match_video_size(int width, int height); 433ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxvoid cpia2_set_camera_state(struct camera_data *cam); 434ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxvoid cpia2_save_camera_state(struct camera_data *cam); 435ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxvoid cpia2_set_color_params(struct camera_data *cam); 436ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxvoid cpia2_set_brightness(struct camera_data *cam, unsigned char value); 437ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxvoid cpia2_set_contrast(struct camera_data *cam, unsigned char value); 438ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxvoid cpia2_set_saturation(struct camera_data *cam, unsigned char value); 439ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxint cpia2_set_flicker_mode(struct camera_data *cam, int mode); 440ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxvoid cpia2_set_format(struct camera_data *cam); 441ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxint cpia2_send_command(struct camera_data *cam, struct cpia2_command *cmd); 442ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxint cpia2_do_command(struct camera_data *cam, 443ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox unsigned int command, 444ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox unsigned char direction, unsigned char param); 4456c493f8b28c6744995e92801a20dca192635dd22Hans Verkuilstruct camera_data *cpia2_init_camera_struct(struct usb_interface *intf); 446ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxint cpia2_init_camera(struct camera_data *cam); 447ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxint cpia2_allocate_buffers(struct camera_data *cam); 448ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxvoid cpia2_free_buffers(struct camera_data *cam); 449ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxlong cpia2_read(struct camera_data *cam, 450fb9c280d4c6d4586670e3dfd041d8258db36b330Randy Dunlap char __user *buf, unsigned long count, int noblock); 451ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxunsigned int cpia2_poll(struct camera_data *cam, 452ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox struct file *filp, poll_table *wait); 453ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxint cpia2_remap_buffer(struct camera_data *cam, struct vm_area_struct *vma); 454ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxvoid cpia2_set_property_flip(struct camera_data *cam, int prop_val); 455ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxvoid cpia2_set_property_mirror(struct camera_data *cam, int prop_val); 456ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxint cpia2_set_gpio(struct camera_data *cam, unsigned char setting); 457ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxint cpia2_set_fps(struct camera_data *cam, int framerate); 458ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 459ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox/* usb */ 460ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxint cpia2_usb_init(void); 461ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxvoid cpia2_usb_cleanup(void); 462ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxint cpia2_usb_transfer_cmd(struct camera_data *cam, void *registers, 463ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox u8 request, u8 start, u8 count, u8 direction); 464ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxint cpia2_usb_stream_start(struct camera_data *cam, unsigned int alternate); 465ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxint cpia2_usb_stream_stop(struct camera_data *cam); 466ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxint cpia2_usb_stream_pause(struct camera_data *cam); 467ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxint cpia2_usb_stream_resume(struct camera_data *cam); 468ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Coxint cpia2_usb_change_streaming_alternate(struct camera_data *cam, 469ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox unsigned int alt); 470ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 471ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 472ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox/* ----------------------- debug functions ---------------------- */ 473ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#ifdef _CPIA2_DEBUG_ 474ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define ALOG(lev, fmt, args...) printk(lev "%s:%d %s(): " fmt, __FILE__, __LINE__, __func__, ## args) 475ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define LOG(fmt, args...) ALOG(KERN_INFO, fmt, ## args) 476ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define ERR(fmt, args...) ALOG(KERN_ERR, fmt, ## args) 477ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define DBG(fmt, args...) ALOG(KERN_DEBUG, fmt, ## args) 478ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#else 479ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define ALOG(fmt,args...) printk(fmt,##args) 480ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define LOG(fmt,args...) ALOG(KERN_INFO "cpia2: "fmt,##args) 481ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define ERR(fmt,args...) ALOG(KERN_ERR "cpia2: "fmt,##args) 482ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define DBG(fmn,args...) do {} while(0) 483ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#endif 484ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox/* No function or lineno, for shorter lines */ 485ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#define KINFO(fmt, args...) printk(KERN_INFO fmt,##args) 486ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox 487ab33d5071de7a33616842882c11b5eb52a6c26a1Alan Cox#endif 488