Creation of Cybook 2416 (actually Gen4) repository
This commit is contained in:
26
include/media/audiochip.h
Normal file
26
include/media/audiochip.h
Normal file
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
*/
|
||||
|
||||
#ifndef AUDIOCHIP_H
|
||||
#define AUDIOCHIP_H
|
||||
|
||||
enum audiochip {
|
||||
AUDIO_CHIP_NONE,
|
||||
AUDIO_CHIP_UNKNOWN,
|
||||
/* Provided by video chip */
|
||||
AUDIO_CHIP_INTERNAL,
|
||||
/* Provided by tvaudio.c */
|
||||
AUDIO_CHIP_TDA8425,
|
||||
AUDIO_CHIP_TEA6300,
|
||||
AUDIO_CHIP_TEA6420,
|
||||
AUDIO_CHIP_TDA9840,
|
||||
AUDIO_CHIP_TDA985X,
|
||||
AUDIO_CHIP_TDA9874,
|
||||
AUDIO_CHIP_PIC16C54,
|
||||
/* Provided by msp3400.c */
|
||||
AUDIO_CHIP_MSP34XX,
|
||||
/* Provided by wm8775.c */
|
||||
AUDIO_CHIP_WM8775
|
||||
};
|
||||
|
||||
#endif /* AUDIOCHIP_H */
|
||||
34
include/media/cs53l32a.h
Normal file
34
include/media/cs53l32a.h
Normal file
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
cs53l32a.h - definition for cs53l32a inputs and outputs
|
||||
|
||||
Copyright (C) 2006 Hans Verkuil (hverkuil@xs4all.nl)
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef _CS53L32A_H_
|
||||
#define _CS53L32A_H_
|
||||
|
||||
/* There are 2 physical inputs, but the second input can be
|
||||
placed in two modes, the first mode bypasses the PGA (gain),
|
||||
the second goes through the PGA. Hence there are three
|
||||
possible inputs to choose from. */
|
||||
|
||||
/* CS53L32A HW inputs */
|
||||
#define CS53L32A_IN0 0
|
||||
#define CS53L32A_IN1 1
|
||||
#define CS53L32A_IN2 2
|
||||
|
||||
#endif
|
||||
191
include/media/cx2341x.h
Normal file
191
include/media/cx2341x.h
Normal file
@@ -0,0 +1,191 @@
|
||||
/*
|
||||
cx23415/6 header containing common defines.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef CX2341X_H
|
||||
#define CX2341X_H
|
||||
|
||||
enum cx2341x_port {
|
||||
CX2341X_PORT_MEMORY = 0,
|
||||
CX2341X_PORT_STREAMING = 1,
|
||||
CX2341X_PORT_SERIAL = 2
|
||||
};
|
||||
|
||||
enum cx2341x_cap {
|
||||
CX2341X_CAP_HAS_SLICED_VBI = 1 << 0,
|
||||
};
|
||||
|
||||
struct cx2341x_mpeg_params {
|
||||
/* misc */
|
||||
u32 capabilities;
|
||||
enum cx2341x_port port;
|
||||
u16 width;
|
||||
u16 height;
|
||||
u16 is_50hz;
|
||||
|
||||
/* stream */
|
||||
enum v4l2_mpeg_stream_type stream_type;
|
||||
enum v4l2_mpeg_stream_vbi_fmt stream_vbi_fmt;
|
||||
|
||||
/* audio */
|
||||
enum v4l2_mpeg_audio_sampling_freq audio_sampling_freq;
|
||||
enum v4l2_mpeg_audio_encoding audio_encoding;
|
||||
enum v4l2_mpeg_audio_l2_bitrate audio_l2_bitrate;
|
||||
enum v4l2_mpeg_audio_mode audio_mode;
|
||||
enum v4l2_mpeg_audio_mode_extension audio_mode_extension;
|
||||
enum v4l2_mpeg_audio_emphasis audio_emphasis;
|
||||
enum v4l2_mpeg_audio_crc audio_crc;
|
||||
u16 audio_properties;
|
||||
|
||||
/* video */
|
||||
enum v4l2_mpeg_video_encoding video_encoding;
|
||||
enum v4l2_mpeg_video_aspect video_aspect;
|
||||
u16 video_b_frames;
|
||||
u16 video_gop_size;
|
||||
u16 video_gop_closure;
|
||||
enum v4l2_mpeg_video_bitrate_mode video_bitrate_mode;
|
||||
u32 video_bitrate;
|
||||
u32 video_bitrate_peak;
|
||||
u16 video_temporal_decimation;
|
||||
|
||||
/* encoding filters */
|
||||
enum v4l2_mpeg_cx2341x_video_spatial_filter_mode video_spatial_filter_mode;
|
||||
u16 video_spatial_filter;
|
||||
enum v4l2_mpeg_cx2341x_video_luma_spatial_filter_type video_luma_spatial_filter_type;
|
||||
enum v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type video_chroma_spatial_filter_type;
|
||||
enum v4l2_mpeg_cx2341x_video_temporal_filter_mode video_temporal_filter_mode;
|
||||
u16 video_temporal_filter;
|
||||
enum v4l2_mpeg_cx2341x_video_median_filter_type video_median_filter_type;
|
||||
u16 video_luma_median_filter_top;
|
||||
u16 video_luma_median_filter_bottom;
|
||||
u16 video_chroma_median_filter_top;
|
||||
u16 video_chroma_median_filter_bottom;
|
||||
};
|
||||
|
||||
#define CX2341X_MBOX_MAX_DATA 16
|
||||
|
||||
extern const u32 cx2341x_mpeg_ctrls[];
|
||||
typedef int (*cx2341x_mbox_func)(void *priv, int cmd, int in, int out,
|
||||
u32 data[CX2341X_MBOX_MAX_DATA]);
|
||||
int cx2341x_update(void *priv, cx2341x_mbox_func func,
|
||||
const struct cx2341x_mpeg_params *old,
|
||||
const struct cx2341x_mpeg_params *new);
|
||||
int cx2341x_ctrl_query(struct cx2341x_mpeg_params *params,
|
||||
struct v4l2_queryctrl *qctrl);
|
||||
const char **cx2341x_ctrl_get_menu(u32 id);
|
||||
int cx2341x_ext_ctrls(struct cx2341x_mpeg_params *params,
|
||||
struct v4l2_ext_controls *ctrls, unsigned int cmd);
|
||||
void cx2341x_fill_defaults(struct cx2341x_mpeg_params *p);
|
||||
void cx2341x_log_status(struct cx2341x_mpeg_params *p, const char *prefix);
|
||||
|
||||
/* Firmware names */
|
||||
#define CX2341X_FIRM_ENC_FILENAME "v4l-cx2341x-enc.fw"
|
||||
/* Decoder firmware for the cx23415 only */
|
||||
#define CX2341X_FIRM_DEC_FILENAME "v4l-cx2341x-dec.fw"
|
||||
|
||||
/* Firmware API commands */
|
||||
|
||||
/* MPEG decoder API, specific to the cx23415 */
|
||||
#define CX2341X_DEC_PING_FW 0x00
|
||||
#define CX2341X_DEC_START_PLAYBACK 0x01
|
||||
#define CX2341X_DEC_STOP_PLAYBACK 0x02
|
||||
#define CX2341X_DEC_SET_PLAYBACK_SPEED 0x03
|
||||
#define CX2341X_DEC_STEP_VIDEO 0x05
|
||||
#define CX2341X_DEC_SET_DMA_BLOCK_SIZE 0x08
|
||||
#define CX2341X_DEC_GET_XFER_INFO 0x09
|
||||
#define CX2341X_DEC_GET_DMA_STATUS 0x0a
|
||||
#define CX2341X_DEC_SCHED_DMA_FROM_HOST 0x0b
|
||||
#define CX2341X_DEC_PAUSE_PLAYBACK 0x0d
|
||||
#define CX2341X_DEC_HALT_FW 0x0e
|
||||
#define CX2341X_DEC_SET_STANDARD 0x10
|
||||
#define CX2341X_DEC_GET_VERSION 0x11
|
||||
#define CX2341X_DEC_SET_STREAM_INPUT 0x14
|
||||
#define CX2341X_DEC_GET_TIMING_INFO 0x15
|
||||
#define CX2341X_DEC_SET_AUDIO_MODE 0x16
|
||||
#define CX2341X_DEC_SET_EVENT_NOTIFICATION 0x17
|
||||
#define CX2341X_DEC_SET_DISPLAY_BUFFERS 0x18
|
||||
#define CX2341X_DEC_EXTRACT_VBI 0x19
|
||||
#define CX2341X_DEC_SET_DECODER_SOURCE 0x1a
|
||||
#define CX2341X_DEC_SET_PREBUFFERING 0x1e
|
||||
|
||||
/* MPEG encoder API */
|
||||
#define CX2341X_ENC_PING_FW 0x80
|
||||
#define CX2341X_ENC_START_CAPTURE 0x81
|
||||
#define CX2341X_ENC_STOP_CAPTURE 0x82
|
||||
#define CX2341X_ENC_SET_AUDIO_ID 0x89
|
||||
#define CX2341X_ENC_SET_VIDEO_ID 0x8b
|
||||
#define CX2341X_ENC_SET_PCR_ID 0x8d
|
||||
#define CX2341X_ENC_SET_FRAME_RATE 0x8f
|
||||
#define CX2341X_ENC_SET_FRAME_SIZE 0x91
|
||||
#define CX2341X_ENC_SET_BIT_RATE 0x95
|
||||
#define CX2341X_ENC_SET_GOP_PROPERTIES 0x97
|
||||
#define CX2341X_ENC_SET_ASPECT_RATIO 0x99
|
||||
#define CX2341X_ENC_SET_DNR_FILTER_MODE 0x9b
|
||||
#define CX2341X_ENC_SET_DNR_FILTER_PROPS 0x9d
|
||||
#define CX2341X_ENC_SET_CORING_LEVELS 0x9f
|
||||
#define CX2341X_ENC_SET_SPATIAL_FILTER_TYPE 0xa1
|
||||
#define CX2341X_ENC_SET_VBI_LINE 0xb7
|
||||
#define CX2341X_ENC_SET_STREAM_TYPE 0xb9
|
||||
#define CX2341X_ENC_SET_OUTPUT_PORT 0xbb
|
||||
#define CX2341X_ENC_SET_AUDIO_PROPERTIES 0xbd
|
||||
#define CX2341X_ENC_HALT_FW 0xc3
|
||||
#define CX2341X_ENC_GET_VERSION 0xc4
|
||||
#define CX2341X_ENC_SET_GOP_CLOSURE 0xc5
|
||||
#define CX2341X_ENC_GET_SEQ_END 0xc6
|
||||
#define CX2341X_ENC_SET_PGM_INDEX_INFO 0xc7
|
||||
#define CX2341X_ENC_SET_VBI_CONFIG 0xc8
|
||||
#define CX2341X_ENC_SET_DMA_BLOCK_SIZE 0xc9
|
||||
#define CX2341X_ENC_GET_PREV_DMA_INFO_MB_10 0xca
|
||||
#define CX2341X_ENC_GET_PREV_DMA_INFO_MB_9 0xcb
|
||||
#define CX2341X_ENC_SCHED_DMA_TO_HOST 0xcc
|
||||
#define CX2341X_ENC_INITIALIZE_INPUT 0xcd
|
||||
#define CX2341X_ENC_SET_FRAME_DROP_RATE 0xd0
|
||||
#define CX2341X_ENC_PAUSE_ENCODER 0xd2
|
||||
#define CX2341X_ENC_REFRESH_INPUT 0xd3
|
||||
#define CX2341X_ENC_SET_COPYRIGHT 0xd4
|
||||
#define CX2341X_ENC_SET_EVENT_NOTIFICATION 0xd5
|
||||
#define CX2341X_ENC_SET_NUM_VSYNC_LINES 0xd6
|
||||
#define CX2341X_ENC_SET_PLACEHOLDER 0xd7
|
||||
#define CX2341X_ENC_MUTE_VIDEO 0xd9
|
||||
#define CX2341X_ENC_MUTE_AUDIO 0xda
|
||||
#define CX2341X_ENC_UNKNOWN 0xdb
|
||||
#define CX2341X_ENC_MISC 0xdc
|
||||
|
||||
/* OSD API, specific to the cx23415 */
|
||||
#define CX2341X_OSD_GET_FRAMEBUFFER 0x41
|
||||
#define CX2341X_OSD_GET_PIXEL_FORMAT 0x42
|
||||
#define CX2341X_OSD_SET_PIXEL_FORMAT 0x43
|
||||
#define CX2341X_OSD_GET_STATE 0x44
|
||||
#define CX2341X_OSD_SET_STATE 0x45
|
||||
#define CX2341X_OSD_GET_OSD_COORDS 0x46
|
||||
#define CX2341X_OSD_SET_OSD_COORDS 0x47
|
||||
#define CX2341X_OSD_GET_SCREEN_COORDS 0x48
|
||||
#define CX2341X_OSD_SET_SCREEN_COORDS 0x49
|
||||
#define CX2341X_OSD_GET_GLOBAL_ALPHA 0x4a
|
||||
#define CX2341X_OSD_SET_GLOBAL_ALPHA 0x4b
|
||||
#define CX2341X_OSD_SET_BLEND_COORDS 0x4c
|
||||
#define CX2341X_OSD_GET_FLICKER_STATE 0x4f
|
||||
#define CX2341X_OSD_SET_FLICKER_STATE 0x50
|
||||
#define CX2341X_OSD_BLT_COPY 0x52
|
||||
#define CX2341X_OSD_BLT_FILL 0x53
|
||||
#define CX2341X_OSD_BLT_TEXT 0x54
|
||||
#define CX2341X_OSD_SET_FRAMEBUFFER_WINDOW 0x56
|
||||
#define CX2341X_OSD_SET_CHROMA_KEY 0x60
|
||||
#define CX2341X_OSD_GET_ALPHA_CONTENT_INDEX 0x61
|
||||
#define CX2341X_OSD_SET_ALPHA_CONTENT_INDEX 0x62
|
||||
|
||||
#endif /* CX2341X_H */
|
||||
64
include/media/cx25840.h
Normal file
64
include/media/cx25840.h
Normal file
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
cx25840.h - definition for cx25840/1/2/3 inputs
|
||||
|
||||
Copyright (C) 2006 Hans Verkuil (hverkuil@xs4all.nl)
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef _CX25840_H_
|
||||
#define _CX25840_H_
|
||||
|
||||
enum cx25840_video_input {
|
||||
/* Composite video inputs In1-In8 */
|
||||
CX25840_COMPOSITE1 = 1,
|
||||
CX25840_COMPOSITE2,
|
||||
CX25840_COMPOSITE3,
|
||||
CX25840_COMPOSITE4,
|
||||
CX25840_COMPOSITE5,
|
||||
CX25840_COMPOSITE6,
|
||||
CX25840_COMPOSITE7,
|
||||
CX25840_COMPOSITE8,
|
||||
|
||||
/* S-Video inputs consist of one luma input (In1-In4) ORed with one
|
||||
chroma input (In5-In8) */
|
||||
CX25840_SVIDEO_LUMA1 = 0x10,
|
||||
CX25840_SVIDEO_LUMA2 = 0x20,
|
||||
CX25840_SVIDEO_LUMA3 = 0x30,
|
||||
CX25840_SVIDEO_LUMA4 = 0x40,
|
||||
CX25840_SVIDEO_CHROMA4 = 0x400,
|
||||
CX25840_SVIDEO_CHROMA5 = 0x500,
|
||||
CX25840_SVIDEO_CHROMA6 = 0x600,
|
||||
CX25840_SVIDEO_CHROMA7 = 0x700,
|
||||
CX25840_SVIDEO_CHROMA8 = 0x800,
|
||||
|
||||
/* S-Video aliases for common luma/chroma combinations */
|
||||
CX25840_SVIDEO1 = 0x510,
|
||||
CX25840_SVIDEO2 = 0x620,
|
||||
CX25840_SVIDEO3 = 0x730,
|
||||
CX25840_SVIDEO4 = 0x840,
|
||||
};
|
||||
|
||||
enum cx25840_audio_input {
|
||||
/* Audio inputs: serial or In4-In8 */
|
||||
CX25840_AUDIO_SERIAL,
|
||||
CX25840_AUDIO4 = 4,
|
||||
CX25840_AUDIO5,
|
||||
CX25840_AUDIO6,
|
||||
CX25840_AUDIO7,
|
||||
CX25840_AUDIO8,
|
||||
};
|
||||
|
||||
#endif
|
||||
44
include/media/i2c-addr.h
Normal file
44
include/media/i2c-addr.h
Normal file
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* V4L I2C address list
|
||||
*
|
||||
*
|
||||
* Copyright (C) 2006 Mauro Carvalho Chehab <mchehab@infradead.org>
|
||||
* Based on a previous mapping by
|
||||
* Ralph Metzler (rjkm@thp.uni-koeln.de)
|
||||
* Gerd Knorr <kraxel@goldbach.in-berlin.de>
|
||||
*
|
||||
*/
|
||||
|
||||
/* bttv address list */
|
||||
#define I2C_ADDR_TSA5522 0xc2
|
||||
#define I2C_ADDR_TDA7432 0x8a
|
||||
#define I2C_ADDR_BT832_ALT1 0x88
|
||||
#define I2C_ADDR_BT832_ALT2 0x8a // alternate setting
|
||||
#define I2C_ADDR_TDA8425 0x82
|
||||
#define I2C_ADDR_TDA9840 0x84
|
||||
#define I2C_ADDR_TDA9850 0xb6 /* also used by 9855,9873 */
|
||||
#define I2C_ADDR_TDA9874 0xb0 /* also used by 9875 */
|
||||
#define I2C_ADDR_TDA9875 0xb0
|
||||
#define I2C_ADDR_HAUPEE 0xa0
|
||||
#define I2C_ADDR_STBEE 0xae
|
||||
#define I2C_ADDR_VHX 0xc0
|
||||
#define I2C_ADDR_MSP3400 0x80
|
||||
#define I2C_ADDR_MSP3400_ALT 0x88
|
||||
#define I2C_ADDR_TEA6300 0x80 /* also used by 6320 */
|
||||
#define I2C_ADDR_DPL3518 0x84
|
||||
#define I2C_ADDR_TDA9887 0x86
|
||||
|
||||
/*
|
||||
* i2c bus addresses for the chips supported by tvaudio.c
|
||||
*/
|
||||
|
||||
#define I2C_ADDR_TDA8425 0x82
|
||||
#define I2C_ADDR_TDA9840 0x84 /* also used by TA8874Z */
|
||||
#define I2C_ADDR_TDA985x_L 0xb4 /* also used by 9873 */
|
||||
#define I2C_ADDR_TDA985x_H 0xb6
|
||||
#define I2C_ADDR_TDA9874 0xb0 /* also used by 9875 */
|
||||
|
||||
#define I2C_ADDR_TEA6300 0x80 /* also used by 6320 */
|
||||
#define I2C_ADDR_TEA6420 0x98
|
||||
|
||||
#define I2C_ADDR_PIC16C54 0x96 /* PV951 */
|
||||
150
include/media/ir-common.h
Normal file
150
include/media/ir-common.h
Normal file
@@ -0,0 +1,150 @@
|
||||
/*
|
||||
*
|
||||
* some common structs and functions to handle infrared remotes via
|
||||
* input layer ...
|
||||
*
|
||||
* (c) 2003 Gerd Knorr <kraxel@bytesex.org> [SuSE Labs]
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef _IR_COMMON
|
||||
#define _IR_COMMON
|
||||
|
||||
#include <linux/input.h>
|
||||
#include <linux/workqueue.h>
|
||||
|
||||
#define IR_TYPE_RC5 1
|
||||
#define IR_TYPE_PD 2 /* Pulse distance encoded IR */
|
||||
#define IR_TYPE_OTHER 99
|
||||
|
||||
#define IR_KEYTAB_TYPE u32
|
||||
#define IR_KEYTAB_SIZE 128 // enougth for rc5, probably need more some day ...
|
||||
|
||||
#define IR_KEYCODE(tab,code) (((unsigned)code < IR_KEYTAB_SIZE) \
|
||||
? tab[code] : KEY_RESERVED)
|
||||
|
||||
#define RC5_START(x) (((x)>>12)&3)
|
||||
#define RC5_TOGGLE(x) (((x)>>11)&1)
|
||||
#define RC5_ADDR(x) (((x)>>6)&31)
|
||||
#define RC5_INSTR(x) ((x)&63)
|
||||
|
||||
struct ir_input_state {
|
||||
/* configuration */
|
||||
int ir_type;
|
||||
IR_KEYTAB_TYPE ir_codes[IR_KEYTAB_SIZE];
|
||||
|
||||
/* key info */
|
||||
u32 ir_raw; /* raw data */
|
||||
u32 ir_key; /* ir key code */
|
||||
u32 keycode; /* linux key code */
|
||||
int keypressed; /* current state */
|
||||
};
|
||||
|
||||
/* this was saa7134_ir and bttv_ir, moved here for
|
||||
* rc5 decoding. */
|
||||
struct card_ir {
|
||||
struct input_dev *dev;
|
||||
struct ir_input_state ir;
|
||||
char name[32];
|
||||
char phys[32];
|
||||
|
||||
/* Usual gpio signalling */
|
||||
|
||||
u32 mask_keycode;
|
||||
u32 mask_keydown;
|
||||
u32 mask_keyup;
|
||||
u32 polling;
|
||||
u32 last_gpio;
|
||||
int shift_by;
|
||||
int start; // What should RC5_START() be
|
||||
int addr; // What RC5_ADDR() should be.
|
||||
int rc5_key_timeout;
|
||||
int rc5_remote_gap;
|
||||
struct work_struct work;
|
||||
struct timer_list timer;
|
||||
|
||||
/* RC5 gpio */
|
||||
u32 rc5_gpio;
|
||||
struct timer_list timer_end; /* timer_end for code completion */
|
||||
struct timer_list timer_keyup; /* timer_end for key release */
|
||||
u32 last_rc5; /* last good rc5 code */
|
||||
u32 last_bit; /* last raw bit seen */
|
||||
u32 code; /* raw code under construction */
|
||||
struct timeval base_time; /* time of last seen code */
|
||||
int active; /* building raw code */
|
||||
};
|
||||
|
||||
void ir_input_init(struct input_dev *dev, struct ir_input_state *ir,
|
||||
int ir_type, IR_KEYTAB_TYPE *ir_codes);
|
||||
void ir_input_nokey(struct input_dev *dev, struct ir_input_state *ir);
|
||||
void ir_input_keydown(struct input_dev *dev, struct ir_input_state *ir,
|
||||
u32 ir_key, u32 ir_raw);
|
||||
u32 ir_extract_bits(u32 data, u32 mask);
|
||||
int ir_dump_samples(u32 *samples, int count);
|
||||
int ir_decode_biphase(u32 *samples, int count, int low, int high);
|
||||
int ir_decode_pulsedistance(u32 *samples, int count, int low, int high);
|
||||
|
||||
u32 ir_rc5_decode(unsigned int code);
|
||||
void ir_rc5_timer_end(unsigned long data);
|
||||
void ir_rc5_timer_keyup(unsigned long data);
|
||||
|
||||
/* Keymaps to be used by other modules */
|
||||
|
||||
extern IR_KEYTAB_TYPE ir_codes_empty[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_avermedia[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_avermedia_dvbt[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_apac_viewcomp[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_pixelview[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_nebula[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_dntv_live_dvb_t[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_iodata_bctv7e[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_adstech_dvb_t_pci[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_msi_tvanywhere[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_cinergy_1400[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_avertv_303[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_dntv_live_dvbt_pro[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_em_terratec[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_pinnacle_grey[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_flyvideo[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_flydvb[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_cinergy[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_eztv[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_avermedia[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_videomate_tv_pvr[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_manli[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_gotview7135[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_purpletv[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_pctv_sedna[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_pv951[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_rc5_tv[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_winfast[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_pinnacle_color[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_hauppauge_new[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_npgtech[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_norwood[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_proteus_2309[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_budget_ci_old[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_asus_pc39[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_encore_enltv[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_tt_1500[IR_KEYTAB_SIZE];
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* c-basic-offset: 8
|
||||
* End:
|
||||
*/
|
||||
25
include/media/ir-kbd-i2c.h
Normal file
25
include/media/ir-kbd-i2c.h
Normal file
@@ -0,0 +1,25 @@
|
||||
#ifndef _IR_I2C
|
||||
#define _IR_I2C
|
||||
|
||||
#include <media/ir-common.h>
|
||||
|
||||
struct IR_i2c;
|
||||
|
||||
struct IR_i2c {
|
||||
IR_KEYTAB_TYPE *ir_codes;
|
||||
struct i2c_client c;
|
||||
struct input_dev *input;
|
||||
struct ir_input_state ir;
|
||||
|
||||
/* Used to avoid fast repeating */
|
||||
unsigned char old;
|
||||
|
||||
struct work_struct work;
|
||||
struct timer_list timer;
|
||||
char phys[32];
|
||||
int (*get_key)(struct IR_i2c*, u32*, u32*);
|
||||
};
|
||||
|
||||
int get_key_pinnacle_grey(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw);
|
||||
int get_key_pinnacle_color(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw);
|
||||
#endif
|
||||
226
include/media/msp3400.h
Normal file
226
include/media/msp3400.h
Normal file
@@ -0,0 +1,226 @@
|
||||
/*
|
||||
msp3400.h - definition for msp3400 inputs and outputs
|
||||
|
||||
Copyright (C) 2006 Hans Verkuil (hverkuil@xs4all.nl)
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef _MSP3400_H_
|
||||
#define _MSP3400_H_
|
||||
|
||||
/* msp3400 routing
|
||||
===============
|
||||
|
||||
The msp3400 has a complicated routing scheme with many possible
|
||||
combinations. The details are all in the datasheets but I will try
|
||||
to give a short description here.
|
||||
|
||||
Inputs
|
||||
======
|
||||
|
||||
There are 1) tuner inputs, 2) I2S inputs, 3) SCART inputs. You will have
|
||||
to select which tuner input to use and which SCART input to use. The
|
||||
selected tuner input, the selected SCART input and all I2S inputs go to
|
||||
the DSP (the tuner input first goes through the demodulator).
|
||||
|
||||
The DSP handles things like volume, bass/treble, balance, and some chips
|
||||
have support for surround sound. It has several outputs: MAIN, AUX, I2S
|
||||
and SCART1/2. Each output can select which DSP input to use. So the MAIN
|
||||
output can select the tuner input while at the same time the SCART1 output
|
||||
uses the I2S input.
|
||||
|
||||
Outputs
|
||||
=======
|
||||
|
||||
Most DSP outputs are also the outputs of the msp3400. However, the SCART
|
||||
outputs of the msp3400 can select which input to use: either the SCART1 or
|
||||
SCART2 output from the DSP, or the msp3400 SCART inputs, thus completely
|
||||
bypassing the DSP.
|
||||
|
||||
Summary
|
||||
=======
|
||||
|
||||
So to specify a complete routing scheme for the msp3400 you will have to
|
||||
specify in the 'input' field of the v4l2_routing struct:
|
||||
|
||||
1) which tuner input to use
|
||||
2) which SCART input to use
|
||||
3) which DSP input to use for each DSP output
|
||||
|
||||
And in the 'output' field of the v4l2_routing struct you specify:
|
||||
|
||||
1) which SCART input to use for each SCART output
|
||||
|
||||
Depending on how the msp is wired to the other components you can
|
||||
ignore or mute certain inputs or outputs.
|
||||
|
||||
Also, depending on the msp version only a subset of the inputs or
|
||||
outputs may be present. At the end of this header some tables are
|
||||
added containing a list of what is available for each msp version.
|
||||
*/
|
||||
|
||||
/* Inputs to the DSP unit: two independent selections have to be made:
|
||||
1) the tuner (SIF) input
|
||||
2) the SCART input
|
||||
Bits 0-2 are used for the SCART input select, bit 3 is used for the tuner
|
||||
input, bits 4-7 are reserved.
|
||||
*/
|
||||
|
||||
/* SCART input to DSP selection */
|
||||
#define MSP_IN_SCART1 0 /* Pin SC1_IN */
|
||||
#define MSP_IN_SCART2 1 /* Pin SC2_IN */
|
||||
#define MSP_IN_SCART3 2 /* Pin SC3_IN */
|
||||
#define MSP_IN_SCART4 3 /* Pin SC4_IN */
|
||||
#define MSP_IN_MONO 6 /* Pin MONO_IN */
|
||||
#define MSP_IN_MUTE 7 /* Mute DSP input */
|
||||
#define MSP_SCART_TO_DSP(in) (in)
|
||||
/* Tuner input to demodulator and DSP selection */
|
||||
#define MSP_IN_TUNER1 0 /* Analog Sound IF input pin ANA_IN1 */
|
||||
#define MSP_IN_TUNER2 1 /* Analog Sound IF input pin ANA_IN2 */
|
||||
#define MSP_TUNER_TO_DSP(in) ((in) << 3)
|
||||
|
||||
/* The msp has up to 5 DSP outputs, each output can independently select
|
||||
a DSP input.
|
||||
|
||||
The DSP outputs are: loudspeaker output (aka MAIN), headphones output
|
||||
(aka AUX), SCART1 DA output, SCART2 DA output and an I2S output.
|
||||
There also is a quasi-peak detector output, but that is not used by
|
||||
this driver and is set to the same input as the loudspeaker output.
|
||||
Not all outputs are supported by all msp models. Setting the input
|
||||
of an unsupported output will be ignored by the driver.
|
||||
|
||||
There are up to 16 DSP inputs to choose from, so each output is
|
||||
assigned 4 bits.
|
||||
|
||||
Note: the 44x8G can mix two inputs and feed the result back to the
|
||||
DSP. This is currently not implemented. Also not implemented is the
|
||||
multi-channel capable I2S3 input of the 44x0G. If someone can demonstrate
|
||||
a need for one of those features then additional support can be added. */
|
||||
#define MSP_DSP_IN_TUNER 0 /* Tuner DSP input */
|
||||
#define MSP_DSP_IN_SCART 2 /* SCART DSP input */
|
||||
#define MSP_DSP_IN_I2S1 5 /* I2S1 DSP input */
|
||||
#define MSP_DSP_IN_I2S2 6 /* I2S2 DSP input */
|
||||
#define MSP_DSP_IN_I2S3 7 /* I2S3 DSP input */
|
||||
#define MSP_DSP_IN_MAIN_AVC 11 /* MAIN AVC processed DSP input */
|
||||
#define MSP_DSP_IN_MAIN 12 /* MAIN DSP input */
|
||||
#define MSP_DSP_IN_AUX 13 /* AUX DSP input */
|
||||
#define MSP_DSP_TO_MAIN(in) ((in) << 4)
|
||||
#define MSP_DSP_TO_AUX(in) ((in) << 8)
|
||||
#define MSP_DSP_TO_SCART1(in) ((in) << 12)
|
||||
#define MSP_DSP_TO_SCART2(in) ((in) << 16)
|
||||
#define MSP_DSP_TO_I2S(in) ((in) << 20)
|
||||
|
||||
/* Output SCART select: the SCART outputs can select which input
|
||||
to use. */
|
||||
#define MSP_SC_IN_SCART1 0 /* SCART1 input, bypassing the DSP */
|
||||
#define MSP_SC_IN_SCART2 1 /* SCART2 input, bypassing the DSP */
|
||||
#define MSP_SC_IN_SCART3 2 /* SCART3 input, bypassing the DSP */
|
||||
#define MSP_SC_IN_SCART4 3 /* SCART4 input, bypassing the DSP */
|
||||
#define MSP_SC_IN_DSP_SCART1 4 /* DSP SCART1 input */
|
||||
#define MSP_SC_IN_DSP_SCART2 5 /* DSP SCART2 input */
|
||||
#define MSP_SC_IN_MONO 6 /* MONO input, bypassing the DSP */
|
||||
#define MSP_SC_IN_MUTE 7 /* MUTE output */
|
||||
#define MSP_SC_TO_SCART1(in) (in)
|
||||
#define MSP_SC_TO_SCART2(in) ((in) << 4)
|
||||
|
||||
/* Shortcut macros */
|
||||
#define MSP_INPUT(sc, t, main_aux_src, sc_i2s_src) \
|
||||
(MSP_SCART_TO_DSP(sc) | \
|
||||
MSP_TUNER_TO_DSP(t) | \
|
||||
MSP_DSP_TO_MAIN(main_aux_src) | \
|
||||
MSP_DSP_TO_AUX(main_aux_src) | \
|
||||
MSP_DSP_TO_SCART1(sc_i2s_src) | \
|
||||
MSP_DSP_TO_SCART2(sc_i2s_src) | \
|
||||
MSP_DSP_TO_I2S(sc_i2s_src))
|
||||
#define MSP_INPUT_DEFAULT MSP_INPUT(MSP_IN_SCART1, MSP_IN_TUNER1, \
|
||||
MSP_DSP_IN_TUNER, MSP_DSP_IN_TUNER)
|
||||
#define MSP_OUTPUT(sc) \
|
||||
(MSP_SC_TO_SCART1(sc) | \
|
||||
MSP_SC_TO_SCART2(sc))
|
||||
/* This equals the RESET position of the msp3400 ACB register */
|
||||
#define MSP_OUTPUT_DEFAULT (MSP_SC_TO_SCART1(MSP_SC_IN_SCART3) | \
|
||||
MSP_SC_TO_SCART2(MSP_SC_IN_DSP_SCART1))
|
||||
|
||||
/* Tuner inputs vs. msp version */
|
||||
/* Chip TUNER_1 TUNER_2
|
||||
-------------------------
|
||||
msp34x0b y y
|
||||
msp34x0c y y
|
||||
msp34x0d y y
|
||||
msp34x5d y n
|
||||
msp34x7d y n
|
||||
msp34x0g y y
|
||||
msp34x1g y y
|
||||
msp34x2g y y
|
||||
msp34x5g y n
|
||||
msp34x7g y n
|
||||
msp44x0g y y
|
||||
msp44x8g y y
|
||||
*/
|
||||
|
||||
/* SCART inputs vs. msp version */
|
||||
/* Chip SC1 SC2 SC3 SC4
|
||||
-------------------------
|
||||
msp34x0b y y y n
|
||||
msp34x0c y y y n
|
||||
msp34x0d y y y y
|
||||
msp34x5d y y n n
|
||||
msp34x7d y n n n
|
||||
msp34x0g y y y y
|
||||
msp34x1g y y y y
|
||||
msp34x2g y y y y
|
||||
msp34x5g y y n n
|
||||
msp34x7g y n n n
|
||||
msp44x0g y y y y
|
||||
msp44x8g y y y y
|
||||
*/
|
||||
|
||||
/* DSP inputs vs. msp version (tuner and SCART inputs are always available) */
|
||||
/* Chip I2S1 I2S2 I2S3 MAIN_AVC MAIN AUX
|
||||
------------------------------------------
|
||||
msp34x0b y n n n n n
|
||||
msp34x0c y y n n n n
|
||||
msp34x0d y y n n n n
|
||||
msp34x5d y y n n n n
|
||||
msp34x7d n n n n n n
|
||||
msp34x0g y y n n n n
|
||||
msp34x1g y y n n n n
|
||||
msp34x2g y y n y y y
|
||||
msp34x5g y y n n n n
|
||||
msp34x7g n n n n n n
|
||||
msp44x0g y y y y y y
|
||||
msp44x8g y y y n n n
|
||||
*/
|
||||
|
||||
/* DSP outputs vs. msp version */
|
||||
/* Chip MAIN AUX SCART1 SCART2 I2S
|
||||
------------------------------------
|
||||
msp34x0b y y y n y
|
||||
msp34x0c y y y n y
|
||||
msp34x0d y y y y y
|
||||
msp34x5d y n y n y
|
||||
msp34x7d y n y n n
|
||||
msp34x0g y y y y y
|
||||
msp34x1g y y y y y
|
||||
msp34x2g y y y y y
|
||||
msp34x5g y n y n y
|
||||
msp34x7g y n y n n
|
||||
msp44x0g y y y y y
|
||||
msp44x8g y y y y y
|
||||
*/
|
||||
|
||||
#endif /* MSP3400_H */
|
||||
|
||||
91
include/media/ovcamchip.h
Normal file
91
include/media/ovcamchip.h
Normal file
@@ -0,0 +1,91 @@
|
||||
/* OmniVision* camera chip driver API
|
||||
*
|
||||
* Copyright (c) 1999-2004 Mark McClelland
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version. NO WARRANTY OF ANY KIND is expressed or implied.
|
||||
*
|
||||
* * OmniVision is a trademark of OmniVision Technologies, Inc. This driver
|
||||
* is not sponsored or developed by them.
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_OVCAMCHIP_H
|
||||
#define __LINUX_OVCAMCHIP_H
|
||||
|
||||
#include <linux/videodev.h>
|
||||
#include <media/v4l2-common.h>
|
||||
#include <linux/i2c.h>
|
||||
|
||||
/* --------------------------------- */
|
||||
/* ENUMERATIONS */
|
||||
/* --------------------------------- */
|
||||
|
||||
/* Controls */
|
||||
enum {
|
||||
OVCAMCHIP_CID_CONT, /* Contrast */
|
||||
OVCAMCHIP_CID_BRIGHT, /* Brightness */
|
||||
OVCAMCHIP_CID_SAT, /* Saturation */
|
||||
OVCAMCHIP_CID_HUE, /* Hue */
|
||||
OVCAMCHIP_CID_EXP, /* Exposure */
|
||||
OVCAMCHIP_CID_FREQ, /* Light frequency */
|
||||
OVCAMCHIP_CID_BANDFILT, /* Banding filter */
|
||||
OVCAMCHIP_CID_AUTOBRIGHT, /* Auto brightness */
|
||||
OVCAMCHIP_CID_AUTOEXP, /* Auto exposure */
|
||||
OVCAMCHIP_CID_BACKLIGHT, /* Back light compensation */
|
||||
OVCAMCHIP_CID_MIRROR, /* Mirror horizontally */
|
||||
};
|
||||
|
||||
/* Chip types */
|
||||
#define NUM_CC_TYPES 9
|
||||
enum {
|
||||
CC_UNKNOWN,
|
||||
CC_OV76BE,
|
||||
CC_OV7610,
|
||||
CC_OV7620,
|
||||
CC_OV7620AE,
|
||||
CC_OV6620,
|
||||
CC_OV6630,
|
||||
CC_OV6630AE,
|
||||
CC_OV6630AF,
|
||||
};
|
||||
|
||||
/* --------------------------------- */
|
||||
/* I2C ADDRESSES */
|
||||
/* --------------------------------- */
|
||||
|
||||
#define OV7xx0_SID (0x42 >> 1)
|
||||
#define OV6xx0_SID (0xC0 >> 1)
|
||||
|
||||
/* --------------------------------- */
|
||||
/* API */
|
||||
/* --------------------------------- */
|
||||
|
||||
struct ovcamchip_control {
|
||||
__u32 id;
|
||||
__s32 value;
|
||||
};
|
||||
|
||||
struct ovcamchip_window {
|
||||
int x;
|
||||
int y;
|
||||
int width;
|
||||
int height;
|
||||
int format;
|
||||
int quarter; /* Scale width and height down 2x */
|
||||
|
||||
/* This stuff will be removed eventually */
|
||||
int clockdiv; /* Clock divisor setting */
|
||||
};
|
||||
|
||||
/* Commands */
|
||||
#define OVCAMCHIP_CMD_Q_SUBTYPE _IOR (0x88, 0x00, int)
|
||||
#define OVCAMCHIP_CMD_INITIALIZE _IOW (0x88, 0x01, int)
|
||||
/* You must call OVCAMCHIP_CMD_INITIALIZE before any of commands below! */
|
||||
#define OVCAMCHIP_CMD_S_CTRL _IOW (0x88, 0x02, struct ovcamchip_control)
|
||||
#define OVCAMCHIP_CMD_G_CTRL _IOWR (0x88, 0x03, struct ovcamchip_control)
|
||||
#define OVCAMCHIP_CMD_S_MODE _IOW (0x88, 0x04, struct ovcamchip_window)
|
||||
#define OVCAMCHIP_MAX_CMD _IO (0x88, 0x3f)
|
||||
|
||||
#endif
|
||||
325
include/media/pwc-ioctl.h
Normal file
325
include/media/pwc-ioctl.h
Normal file
@@ -0,0 +1,325 @@
|
||||
#ifndef PWC_IOCTL_H
|
||||
#define PWC_IOCTL_H
|
||||
|
||||
/* (C) 2001-2004 Nemosoft Unv.
|
||||
(C) 2004-2006 Luc Saillard (luc@saillard.org)
|
||||
|
||||
NOTE: this version of pwc is an unofficial (modified) release of pwc & pcwx
|
||||
driver and thus may have bugs that are not present in the original version.
|
||||
Please send bug reports and support requests to <luc@saillard.org>.
|
||||
The decompression routines have been implemented by reverse-engineering the
|
||||
Nemosoft binary pwcx module. Caveat emptor.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/* This is pwc-ioctl.h belonging to PWC 10.0.10
|
||||
It contains structures and defines to communicate from user space
|
||||
directly to the driver.
|
||||
*/
|
||||
|
||||
/*
|
||||
Changes
|
||||
2001/08/03 Alvarado Added ioctl constants to access methods for
|
||||
changing white balance and red/blue gains
|
||||
2002/12/15 G. H. Fernandez-Toribio VIDIOCGREALSIZE
|
||||
2003/12/13 Nemosft Unv. Some modifications to make interfacing to
|
||||
PWCX easier
|
||||
2006/01/01 Luc Saillard Add raw format definition
|
||||
*/
|
||||
|
||||
/* These are private ioctl() commands, specific for the Philips webcams.
|
||||
They contain functions not found in other webcams, and settings not
|
||||
specified in the Video4Linux API.
|
||||
|
||||
The #define names are built up like follows:
|
||||
VIDIOC VIDeo IOCtl prefix
|
||||
PWC Philps WebCam
|
||||
G optional: Get
|
||||
S optional: Set
|
||||
... the function
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/version.h>
|
||||
|
||||
|
||||
/* Enumeration of image sizes */
|
||||
#define PSZ_SQCIF 0x00
|
||||
#define PSZ_QSIF 0x01
|
||||
#define PSZ_QCIF 0x02
|
||||
#define PSZ_SIF 0x03
|
||||
#define PSZ_CIF 0x04
|
||||
#define PSZ_VGA 0x05
|
||||
#define PSZ_MAX 6
|
||||
|
||||
|
||||
/* The frame rate is encoded in the video_window.flags parameter using
|
||||
the upper 16 bits, since some flags are defined nowadays. The following
|
||||
defines provide a mask and shift to filter out this value.
|
||||
This value can also be passing using the private flag when using v4l2 and
|
||||
VIDIOC_S_FMT ioctl.
|
||||
|
||||
In 'Snapshot' mode the camera freezes its automatic exposure and colour
|
||||
balance controls.
|
||||
*/
|
||||
#define PWC_FPS_SHIFT 16
|
||||
#define PWC_FPS_MASK 0x00FF0000
|
||||
#define PWC_FPS_FRMASK 0x003F0000
|
||||
#define PWC_FPS_SNAPSHOT 0x00400000
|
||||
#define PWC_QLT_MASK 0x03000000
|
||||
#define PWC_QLT_SHIFT 24
|
||||
|
||||
|
||||
/* structure for transferring x & y coordinates */
|
||||
struct pwc_coord
|
||||
{
|
||||
int x, y; /* guess what */
|
||||
int size; /* size, or offset */
|
||||
};
|
||||
|
||||
|
||||
/* Used with VIDIOCPWCPROBE */
|
||||
struct pwc_probe
|
||||
{
|
||||
char name[32];
|
||||
int type;
|
||||
};
|
||||
|
||||
struct pwc_serial
|
||||
{
|
||||
char serial[30]; /* String with serial number. Contains terminating 0 */
|
||||
};
|
||||
|
||||
/* pwc_whitebalance.mode values */
|
||||
#define PWC_WB_INDOOR 0
|
||||
#define PWC_WB_OUTDOOR 1
|
||||
#define PWC_WB_FL 2
|
||||
#define PWC_WB_MANUAL 3
|
||||
#define PWC_WB_AUTO 4
|
||||
|
||||
/* Used with VIDIOCPWC[SG]AWB (Auto White Balance).
|
||||
Set mode to one of the PWC_WB_* values above.
|
||||
*red and *blue are the respective gains of these colour components inside
|
||||
the camera; range 0..65535
|
||||
When 'mode' == PWC_WB_MANUAL, 'manual_red' and 'manual_blue' are set or read;
|
||||
otherwise undefined.
|
||||
'read_red' and 'read_blue' are read-only.
|
||||
*/
|
||||
struct pwc_whitebalance
|
||||
{
|
||||
int mode;
|
||||
int manual_red, manual_blue; /* R/W */
|
||||
int read_red, read_blue; /* R/O */
|
||||
};
|
||||
|
||||
/*
|
||||
'control_speed' and 'control_delay' are used in automatic whitebalance mode,
|
||||
and tell the camera how fast it should react to changes in lighting, and
|
||||
with how much delay. Valid values are 0..65535.
|
||||
*/
|
||||
struct pwc_wb_speed
|
||||
{
|
||||
int control_speed;
|
||||
int control_delay;
|
||||
|
||||
};
|
||||
|
||||
/* Used with VIDIOCPWC[SG]LED */
|
||||
struct pwc_leds
|
||||
{
|
||||
int led_on; /* Led on-time; range = 0..25000 */
|
||||
int led_off; /* Led off-time; range = 0..25000 */
|
||||
};
|
||||
|
||||
/* Image size (used with GREALSIZE) */
|
||||
struct pwc_imagesize
|
||||
{
|
||||
int width;
|
||||
int height;
|
||||
};
|
||||
|
||||
/* Defines and structures for Motorized Pan & Tilt */
|
||||
#define PWC_MPT_PAN 0x01
|
||||
#define PWC_MPT_TILT 0x02
|
||||
#define PWC_MPT_TIMEOUT 0x04 /* for status */
|
||||
|
||||
/* Set angles; when absolute != 0, the angle is absolute and the
|
||||
driver calculates the relative offset for you. This can only
|
||||
be used with VIDIOCPWCSANGLE; VIDIOCPWCGANGLE always returns
|
||||
absolute angles.
|
||||
*/
|
||||
struct pwc_mpt_angles
|
||||
{
|
||||
int absolute; /* write-only */
|
||||
int pan; /* degrees * 100 */
|
||||
int tilt; /* degress * 100 */
|
||||
};
|
||||
|
||||
/* Range of angles of the camera, both horizontally and vertically.
|
||||
*/
|
||||
struct pwc_mpt_range
|
||||
{
|
||||
int pan_min, pan_max; /* degrees * 100 */
|
||||
int tilt_min, tilt_max;
|
||||
};
|
||||
|
||||
struct pwc_mpt_status
|
||||
{
|
||||
int status;
|
||||
int time_pan;
|
||||
int time_tilt;
|
||||
};
|
||||
|
||||
|
||||
/* This is used for out-of-kernel decompression. With it, you can get
|
||||
all the necessary information to initialize and use the decompressor
|
||||
routines in standalone applications.
|
||||
*/
|
||||
struct pwc_video_command
|
||||
{
|
||||
int type; /* camera type (645, 675, 730, etc.) */
|
||||
int release; /* release number */
|
||||
|
||||
int size; /* one of PSZ_* */
|
||||
int alternate;
|
||||
int command_len; /* length of USB video command */
|
||||
unsigned char command_buf[13]; /* Actual USB video command */
|
||||
int bandlength; /* >0 = compressed */
|
||||
int frame_size; /* Size of one (un)compressed frame */
|
||||
};
|
||||
|
||||
/* Flags for PWCX subroutines. Not all modules honour all flags. */
|
||||
#define PWCX_FLAG_PLANAR 0x0001
|
||||
#define PWCX_FLAG_BAYER 0x0008
|
||||
|
||||
|
||||
/* IOCTL definitions */
|
||||
|
||||
/* Restore user settings */
|
||||
#define VIDIOCPWCRUSER _IO('v', 192)
|
||||
/* Save user settings */
|
||||
#define VIDIOCPWCSUSER _IO('v', 193)
|
||||
/* Restore factory settings */
|
||||
#define VIDIOCPWCFACTORY _IO('v', 194)
|
||||
|
||||
/* You can manipulate the compression factor. A compression preference of 0
|
||||
means use uncompressed modes when available; 1 is low compression, 2 is
|
||||
medium and 3 is high compression preferred. Of course, the higher the
|
||||
compression, the lower the bandwidth used but more chance of artefacts
|
||||
in the image. The driver automatically chooses a higher compression when
|
||||
the preferred mode is not available.
|
||||
*/
|
||||
/* Set preferred compression quality (0 = uncompressed, 3 = highest compression) */
|
||||
#define VIDIOCPWCSCQUAL _IOW('v', 195, int)
|
||||
/* Get preferred compression quality */
|
||||
#define VIDIOCPWCGCQUAL _IOR('v', 195, int)
|
||||
|
||||
|
||||
/* Retrieve serial number of camera */
|
||||
#define VIDIOCPWCGSERIAL _IOR('v', 198, struct pwc_serial)
|
||||
|
||||
/* This is a probe function; since so many devices are supported, it
|
||||
becomes difficult to include all the names in programs that want to
|
||||
check for the enhanced Philips stuff. So in stead, try this PROBE;
|
||||
it returns a structure with the original name, and the corresponding
|
||||
Philips type.
|
||||
To use, fill the structure with zeroes, call PROBE and if that succeeds,
|
||||
compare the name with that returned from VIDIOCGCAP; they should be the
|
||||
same. If so, you can be assured it is a Philips (OEM) cam and the type
|
||||
is valid.
|
||||
*/
|
||||
#define VIDIOCPWCPROBE _IOR('v', 199, struct pwc_probe)
|
||||
|
||||
/* Set AGC (Automatic Gain Control); int < 0 = auto, 0..65535 = fixed */
|
||||
#define VIDIOCPWCSAGC _IOW('v', 200, int)
|
||||
/* Get AGC; int < 0 = auto; >= 0 = fixed, range 0..65535 */
|
||||
#define VIDIOCPWCGAGC _IOR('v', 200, int)
|
||||
/* Set shutter speed; int < 0 = auto; >= 0 = fixed, range 0..65535 */
|
||||
#define VIDIOCPWCSSHUTTER _IOW('v', 201, int)
|
||||
|
||||
/* Color compensation (Auto White Balance) */
|
||||
#define VIDIOCPWCSAWB _IOW('v', 202, struct pwc_whitebalance)
|
||||
#define VIDIOCPWCGAWB _IOR('v', 202, struct pwc_whitebalance)
|
||||
|
||||
/* Auto WB speed */
|
||||
#define VIDIOCPWCSAWBSPEED _IOW('v', 203, struct pwc_wb_speed)
|
||||
#define VIDIOCPWCGAWBSPEED _IOR('v', 203, struct pwc_wb_speed)
|
||||
|
||||
/* LEDs on/off/blink; int range 0..65535 */
|
||||
#define VIDIOCPWCSLED _IOW('v', 205, struct pwc_leds)
|
||||
#define VIDIOCPWCGLED _IOR('v', 205, struct pwc_leds)
|
||||
|
||||
/* Contour (sharpness); int < 0 = auto, 0..65536 = fixed */
|
||||
#define VIDIOCPWCSCONTOUR _IOW('v', 206, int)
|
||||
#define VIDIOCPWCGCONTOUR _IOR('v', 206, int)
|
||||
|
||||
/* Backlight compensation; 0 = off, otherwise on */
|
||||
#define VIDIOCPWCSBACKLIGHT _IOW('v', 207, int)
|
||||
#define VIDIOCPWCGBACKLIGHT _IOR('v', 207, int)
|
||||
|
||||
/* Flickerless mode; = 0 off, otherwise on */
|
||||
#define VIDIOCPWCSFLICKER _IOW('v', 208, int)
|
||||
#define VIDIOCPWCGFLICKER _IOR('v', 208, int)
|
||||
|
||||
/* Dynamic noise reduction; 0 off, 3 = high noise reduction */
|
||||
#define VIDIOCPWCSDYNNOISE _IOW('v', 209, int)
|
||||
#define VIDIOCPWCGDYNNOISE _IOR('v', 209, int)
|
||||
|
||||
/* Real image size as used by the camera; tells you whether or not there's a gray border around the image */
|
||||
#define VIDIOCPWCGREALSIZE _IOR('v', 210, struct pwc_imagesize)
|
||||
|
||||
/* Motorized pan & tilt functions */
|
||||
#define VIDIOCPWCMPTRESET _IOW('v', 211, int)
|
||||
#define VIDIOCPWCMPTGRANGE _IOR('v', 211, struct pwc_mpt_range)
|
||||
#define VIDIOCPWCMPTSANGLE _IOW('v', 212, struct pwc_mpt_angles)
|
||||
#define VIDIOCPWCMPTGANGLE _IOR('v', 212, struct pwc_mpt_angles)
|
||||
#define VIDIOCPWCMPTSTATUS _IOR('v', 213, struct pwc_mpt_status)
|
||||
|
||||
/* Get the USB set-video command; needed for initializing libpwcx */
|
||||
#define VIDIOCPWCGVIDCMD _IOR('v', 215, struct pwc_video_command)
|
||||
struct pwc_table_init_buffer {
|
||||
int len;
|
||||
char *buffer;
|
||||
|
||||
};
|
||||
#define VIDIOCPWCGVIDTABLE _IOR('v', 216, struct pwc_table_init_buffer)
|
||||
|
||||
/*
|
||||
* This is private command used when communicating with v4l2.
|
||||
* In the future all private ioctl will be remove/replace to
|
||||
* use interface offer by v4l2.
|
||||
*/
|
||||
|
||||
#define V4L2_CID_PRIVATE_SAVE_USER (V4L2_CID_PRIVATE_BASE + 0)
|
||||
#define V4L2_CID_PRIVATE_RESTORE_USER (V4L2_CID_PRIVATE_BASE + 1)
|
||||
#define V4L2_CID_PRIVATE_RESTORE_FACTORY (V4L2_CID_PRIVATE_BASE + 2)
|
||||
#define V4L2_CID_PRIVATE_COLOUR_MODE (V4L2_CID_PRIVATE_BASE + 3)
|
||||
#define V4L2_CID_PRIVATE_AUTOCONTOUR (V4L2_CID_PRIVATE_BASE + 4)
|
||||
#define V4L2_CID_PRIVATE_CONTOUR (V4L2_CID_PRIVATE_BASE + 5)
|
||||
#define V4L2_CID_PRIVATE_BACKLIGHT (V4L2_CID_PRIVATE_BASE + 6)
|
||||
#define V4L2_CID_PRIVATE_FLICKERLESS (V4L2_CID_PRIVATE_BASE + 7)
|
||||
#define V4L2_CID_PRIVATE_NOISE_REDUCTION (V4L2_CID_PRIVATE_BASE + 8)
|
||||
|
||||
struct pwc_raw_frame {
|
||||
__le16 type; /* type of the webcam */
|
||||
__le16 vbandlength; /* Size of 4lines compressed (used by the decompressor) */
|
||||
__u8 cmd[4]; /* the four byte of the command (in case of nala,
|
||||
only the first 3 bytes is filled) */
|
||||
__u8 rawframe[0]; /* frame_size = H/4*vbandlength */
|
||||
} __attribute__ ((packed));
|
||||
|
||||
|
||||
#endif
|
||||
44
include/media/rds.h
Normal file
44
include/media/rds.h
Normal file
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
|
||||
Types and defines needed for RDS. This is included by
|
||||
saa6588.c and every driver (e.g. bttv-driver.c) that wants
|
||||
to use the saa6588 module.
|
||||
|
||||
Instead of having a seperate rds.h, I'd prefer to include
|
||||
this stuff in one of the already existing files like tuner.h
|
||||
|
||||
(c) 2005 by Hans J. Koch
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef _RDS_H
|
||||
#define _RDS_H
|
||||
|
||||
struct rds_command {
|
||||
unsigned int block_count;
|
||||
int result;
|
||||
unsigned char __user *buffer;
|
||||
struct file *instance;
|
||||
poll_table *event_list;
|
||||
};
|
||||
|
||||
#define RDS_CMD_OPEN _IOW('R',1,int)
|
||||
#define RDS_CMD_CLOSE _IOW('R',2,int)
|
||||
#define RDS_CMD_READ _IOR('R',3,int)
|
||||
#define RDS_CMD_POLL _IOR('R',4,int)
|
||||
|
||||
#endif
|
||||
26
include/media/saa6752hs.h
Normal file
26
include/media/saa6752hs.h
Normal file
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
saa6752hs.h - definition for saa6752hs MPEG encoder
|
||||
|
||||
Copyright (C) 2003 Andrew de Quincey <adq@lidskialf.net>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* c-basic-offset: 8
|
||||
* End:
|
||||
*/
|
||||
49
include/media/saa7115.h
Normal file
49
include/media/saa7115.h
Normal file
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
saa7115.h - definition for saa7113/4/5 inputs and frequency flags
|
||||
|
||||
Copyright (C) 2006 Hans Verkuil (hverkuil@xs4all.nl)
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef _SAA7115_H_
|
||||
#define _SAA7115_H_
|
||||
|
||||
/* SAA7113/4/5 HW inputs */
|
||||
#define SAA7115_COMPOSITE0 0
|
||||
#define SAA7115_COMPOSITE1 1
|
||||
#define SAA7115_COMPOSITE2 2
|
||||
#define SAA7115_COMPOSITE3 3
|
||||
#define SAA7115_COMPOSITE4 4 /* not available for the saa7113 */
|
||||
#define SAA7115_COMPOSITE5 5 /* not available for the saa7113 */
|
||||
#define SAA7115_SVIDEO0 6
|
||||
#define SAA7115_SVIDEO1 7
|
||||
#define SAA7115_SVIDEO2 8
|
||||
#define SAA7115_SVIDEO3 9
|
||||
|
||||
/* SAA7115 v4l2_crystal_freq frequency values */
|
||||
#define SAA7115_FREQ_32_11_MHZ 32110000 /* 32.11 MHz crystal, SAA7114/5 only */
|
||||
#define SAA7115_FREQ_24_576_MHZ 24576000 /* 24.576 MHz crystal */
|
||||
|
||||
/* SAA7115 v4l2_crystal_freq audio clock control flags */
|
||||
#define SAA7115_FREQ_FL_UCGC (1 << 0) /* SA 3A[7], UCGC, SAA7115 only */
|
||||
#define SAA7115_FREQ_FL_CGCDIV (1 << 1) /* SA 3A[6], CGCDIV, SAA7115 only */
|
||||
#define SAA7115_FREQ_FL_APLL (1 << 2) /* SA 3A[3], APLL, SAA7114/5 only */
|
||||
|
||||
#define SAA7115_IPORT_ON 1
|
||||
#define SAA7115_IPORT_OFF 0
|
||||
|
||||
#endif
|
||||
|
||||
41
include/media/saa7127.h
Normal file
41
include/media/saa7127.h
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
saa7127.h - definition for saa7126/7/8/9 inputs/outputs
|
||||
|
||||
Copyright (C) 2006 Hans Verkuil (hverkuil@xs4all.nl)
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef _SAA7127_H_
|
||||
#define _SAA7127_H_
|
||||
|
||||
/* Enumeration for the supported input types */
|
||||
enum saa7127_input_type {
|
||||
SAA7127_INPUT_TYPE_NORMAL,
|
||||
SAA7127_INPUT_TYPE_TEST_IMAGE
|
||||
};
|
||||
|
||||
/* Enumeration for the supported output signal types */
|
||||
enum saa7127_output_type {
|
||||
SAA7127_OUTPUT_TYPE_BOTH,
|
||||
SAA7127_OUTPUT_TYPE_COMPOSITE,
|
||||
SAA7127_OUTPUT_TYPE_SVIDEO,
|
||||
SAA7127_OUTPUT_TYPE_RGB,
|
||||
SAA7127_OUTPUT_TYPE_YUV_C,
|
||||
SAA7127_OUTPUT_TYPE_YUV_V
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
456
include/media/saa7146.h
Normal file
456
include/media/saa7146.h
Normal file
@@ -0,0 +1,456 @@
|
||||
#ifndef __SAA7146__
|
||||
#define __SAA7146__
|
||||
|
||||
#include <linux/module.h> /* for module-version */
|
||||
#include <linux/delay.h> /* for delay-stuff */
|
||||
#include <linux/slab.h> /* for kmalloc/kfree */
|
||||
#include <linux/pci.h> /* for pci-config-stuff, vendor ids etc. */
|
||||
#include <linux/init.h> /* for "__init" */
|
||||
#include <linux/interrupt.h> /* for IMMEDIATE_BH */
|
||||
#include <linux/kmod.h> /* for kernel module loader */
|
||||
#include <linux/i2c.h> /* for i2c subsystem */
|
||||
#include <asm/io.h> /* for accessing devices */
|
||||
#include <linux/stringify.h>
|
||||
#include <linux/mutex.h>
|
||||
|
||||
#include <linux/vmalloc.h> /* for vmalloc() */
|
||||
#include <linux/mm.h> /* for vmalloc_to_page() */
|
||||
|
||||
#define SAA7146_VERSION_CODE 0x000500 /* 0.5.0 */
|
||||
|
||||
#define saa7146_write(sxy,adr,dat) writel((dat),(sxy->mem+(adr)))
|
||||
#define saa7146_read(sxy,adr) readl(sxy->mem+(adr))
|
||||
|
||||
extern unsigned int saa7146_debug;
|
||||
|
||||
//#define DEBUG_PROLOG printk("(0x%08x)(0x%08x) %s: %s(): ",(dev==0?-1:(dev->mem==0?-1:saa7146_read(dev,RPS_ADDR0))),(dev==0?-1:(dev->mem==0?-1:saa7146_read(dev,IER))),KBUILD_MODNAME,__FUNCTION__)
|
||||
|
||||
#ifndef DEBUG_VARIABLE
|
||||
#define DEBUG_VARIABLE saa7146_debug
|
||||
#endif
|
||||
|
||||
#define DEBUG_PROLOG printk("%s: %s(): ",KBUILD_MODNAME,__FUNCTION__)
|
||||
#define INFO(x) { printk("%s: ",KBUILD_MODNAME); printk x; }
|
||||
|
||||
#define ERR(x) { DEBUG_PROLOG; printk x; }
|
||||
|
||||
#define DEB_S(x) if (0!=(DEBUG_VARIABLE&0x01)) { DEBUG_PROLOG; printk x; } /* simple debug messages */
|
||||
#define DEB_D(x) if (0!=(DEBUG_VARIABLE&0x02)) { DEBUG_PROLOG; printk x; } /* more detailed debug messages */
|
||||
#define DEB_EE(x) if (0!=(DEBUG_VARIABLE&0x04)) { DEBUG_PROLOG; printk x; } /* print enter and exit of functions */
|
||||
#define DEB_I2C(x) if (0!=(DEBUG_VARIABLE&0x08)) { DEBUG_PROLOG; printk x; } /* i2c debug messages */
|
||||
#define DEB_VBI(x) if (0!=(DEBUG_VARIABLE&0x10)) { DEBUG_PROLOG; printk x; } /* vbi debug messages */
|
||||
#define DEB_INT(x) if (0!=(DEBUG_VARIABLE&0x20)) { DEBUG_PROLOG; printk x; } /* interrupt debug messages */
|
||||
#define DEB_CAP(x) if (0!=(DEBUG_VARIABLE&0x40)) { DEBUG_PROLOG; printk x; } /* capture debug messages */
|
||||
|
||||
#define SAA7146_ISR_CLEAR(x,y) \
|
||||
saa7146_write(x, ISR, (y));
|
||||
|
||||
struct saa7146_dev;
|
||||
struct saa7146_extension;
|
||||
struct saa7146_vv;
|
||||
|
||||
/* saa7146 page table */
|
||||
struct saa7146_pgtable {
|
||||
unsigned int size;
|
||||
u32 *cpu;
|
||||
dma_addr_t dma;
|
||||
/* used for offsets for u,v planes for planar capture modes */
|
||||
unsigned long offset;
|
||||
/* used for custom pagetables (used for example by budget dvb cards) */
|
||||
struct scatterlist *slist;
|
||||
};
|
||||
|
||||
struct saa7146_pci_extension_data {
|
||||
struct saa7146_extension *ext;
|
||||
void *ext_priv; /* most likely a name string */
|
||||
};
|
||||
|
||||
#define MAKE_EXTENSION_PCI(x_var, x_vendor, x_device) \
|
||||
{ \
|
||||
.vendor = PCI_VENDOR_ID_PHILIPS, \
|
||||
.device = PCI_DEVICE_ID_PHILIPS_SAA7146, \
|
||||
.subvendor = x_vendor, \
|
||||
.subdevice = x_device, \
|
||||
.driver_data = (unsigned long)& x_var, \
|
||||
}
|
||||
|
||||
struct saa7146_extension
|
||||
{
|
||||
char name[32]; /* name of the device */
|
||||
#define SAA7146_USE_I2C_IRQ 0x1
|
||||
#define SAA7146_I2C_SHORT_DELAY 0x2
|
||||
int flags;
|
||||
|
||||
/* pairs of subvendor and subdevice ids for
|
||||
supported devices, last entry 0xffff, 0xfff */
|
||||
struct module *module;
|
||||
struct pci_driver driver;
|
||||
struct pci_device_id *pci_tbl;
|
||||
|
||||
/* extension functions */
|
||||
int (*probe)(struct saa7146_dev *);
|
||||
int (*attach)(struct saa7146_dev *, struct saa7146_pci_extension_data *);
|
||||
int (*detach)(struct saa7146_dev*);
|
||||
|
||||
u32 irq_mask; /* mask to indicate, which irq-events are handled by the extension */
|
||||
void (*irq_func)(struct saa7146_dev*, u32* irq_mask);
|
||||
};
|
||||
|
||||
struct saa7146_dma
|
||||
{
|
||||
dma_addr_t dma_handle;
|
||||
u32 *cpu_addr;
|
||||
};
|
||||
|
||||
struct saa7146_dev
|
||||
{
|
||||
struct module *module;
|
||||
|
||||
struct list_head item;
|
||||
|
||||
/* different device locks */
|
||||
spinlock_t slock;
|
||||
struct mutex lock;
|
||||
|
||||
unsigned char __iomem *mem; /* pointer to mapped IO memory */
|
||||
int revision; /* chip revision; needed for bug-workarounds*/
|
||||
|
||||
/* pci-device & irq stuff*/
|
||||
char name[32];
|
||||
struct pci_dev *pci;
|
||||
u32 int_todo;
|
||||
spinlock_t int_slock;
|
||||
|
||||
/* extension handling */
|
||||
struct saa7146_extension *ext; /* indicates if handled by extension */
|
||||
void *ext_priv; /* pointer for extension private use (most likely some private data) */
|
||||
struct saa7146_ext_vv *ext_vv_data;
|
||||
|
||||
/* per device video/vbi informations (if available) */
|
||||
struct saa7146_vv *vv_data;
|
||||
void (*vv_callback)(struct saa7146_dev *dev, unsigned long status);
|
||||
|
||||
/* i2c-stuff */
|
||||
struct mutex i2c_lock;
|
||||
|
||||
u32 i2c_bitrate;
|
||||
struct saa7146_dma d_i2c; /* pointer to i2c memory */
|
||||
wait_queue_head_t i2c_wq;
|
||||
int i2c_op;
|
||||
|
||||
/* memories */
|
||||
struct saa7146_dma d_rps0;
|
||||
struct saa7146_dma d_rps1;
|
||||
};
|
||||
|
||||
/* from saa7146_i2c.c */
|
||||
int saa7146_i2c_adapter_prepare(struct saa7146_dev *dev, struct i2c_adapter *i2c_adapter, u32 bitrate);
|
||||
int saa7146_i2c_transfer(struct saa7146_dev *saa, const struct i2c_msg *msgs, int num, int retries);
|
||||
|
||||
/* from saa7146_core.c */
|
||||
extern struct list_head saa7146_devices;
|
||||
extern struct mutex saa7146_devices_lock;
|
||||
int saa7146_register_extension(struct saa7146_extension*);
|
||||
int saa7146_unregister_extension(struct saa7146_extension*);
|
||||
struct saa7146_format* format_by_fourcc(struct saa7146_dev *dev, int fourcc);
|
||||
int saa7146_pgtable_alloc(struct pci_dev *pci, struct saa7146_pgtable *pt);
|
||||
void saa7146_pgtable_free(struct pci_dev *pci, struct saa7146_pgtable *pt);
|
||||
int saa7146_pgtable_build_single(struct pci_dev *pci, struct saa7146_pgtable *pt, struct scatterlist *list, int length );
|
||||
char *saa7146_vmalloc_build_pgtable(struct pci_dev *pci, long length, struct saa7146_pgtable *pt);
|
||||
void saa7146_setgpio(struct saa7146_dev *dev, int port, u32 data);
|
||||
int saa7146_wait_for_debi_done(struct saa7146_dev *dev, int nobusyloop);
|
||||
|
||||
/* some memory sizes */
|
||||
#define SAA7146_I2C_MEM ( 1*PAGE_SIZE)
|
||||
#define SAA7146_RPS_MEM ( 1*PAGE_SIZE)
|
||||
|
||||
/* some i2c constants */
|
||||
#define SAA7146_I2C_TIMEOUT 100 /* i2c-timeout-value in ms */
|
||||
#define SAA7146_I2C_RETRIES 3 /* how many times shall we retry an i2c-operation? */
|
||||
#define SAA7146_I2C_DELAY 5 /* time we wait after certain i2c-operations */
|
||||
|
||||
/* unsorted defines */
|
||||
#define ME1 0x0000000800
|
||||
#define PV1 0x0000000008
|
||||
|
||||
/* gpio defines */
|
||||
#define SAA7146_GPIO_INPUT 0x00
|
||||
#define SAA7146_GPIO_IRQHI 0x10
|
||||
#define SAA7146_GPIO_IRQLO 0x20
|
||||
#define SAA7146_GPIO_IRQHL 0x30
|
||||
#define SAA7146_GPIO_OUTLO 0x40
|
||||
#define SAA7146_GPIO_OUTHI 0x50
|
||||
|
||||
/* debi defines */
|
||||
#define DEBINOSWAP 0x000e0000
|
||||
|
||||
/* define for the register programming sequencer (rps) */
|
||||
#define CMD_NOP 0x00000000 /* No operation */
|
||||
#define CMD_CLR_EVENT 0x00000000 /* Clear event */
|
||||
#define CMD_SET_EVENT 0x10000000 /* Set signal event */
|
||||
#define CMD_PAUSE 0x20000000 /* Pause */
|
||||
#define CMD_CHECK_LATE 0x30000000 /* Check late */
|
||||
#define CMD_UPLOAD 0x40000000 /* Upload */
|
||||
#define CMD_STOP 0x50000000 /* Stop */
|
||||
#define CMD_INTERRUPT 0x60000000 /* Interrupt */
|
||||
#define CMD_JUMP 0x80000000 /* Jump */
|
||||
#define CMD_WR_REG 0x90000000 /* Write (load) register */
|
||||
#define CMD_RD_REG 0xa0000000 /* Read (store) register */
|
||||
#define CMD_WR_REG_MASK 0xc0000000 /* Write register with mask */
|
||||
|
||||
#define CMD_OAN MASK_27
|
||||
#define CMD_INV MASK_26
|
||||
#define CMD_SIG4 MASK_25
|
||||
#define CMD_SIG3 MASK_24
|
||||
#define CMD_SIG2 MASK_23
|
||||
#define CMD_SIG1 MASK_22
|
||||
#define CMD_SIG0 MASK_21
|
||||
#define CMD_O_FID_B MASK_14
|
||||
#define CMD_E_FID_B MASK_13
|
||||
#define CMD_O_FID_A MASK_12
|
||||
#define CMD_E_FID_A MASK_11
|
||||
|
||||
/* some events and command modifiers for rps1 squarewave generator */
|
||||
#define EVT_HS (1<<15) // Source Line Threshold reached
|
||||
#define EVT_VBI_B (1<<9) // VSYNC Event
|
||||
#define RPS_OAN (1<<27) // 1: OR events, 0: AND events
|
||||
#define RPS_INV (1<<26) // Invert (compound) event
|
||||
#define GPIO3_MSK 0xFF000000 // GPIO #3 control bits
|
||||
|
||||
/* Bit mask constants */
|
||||
#define MASK_00 0x00000001 /* Mask value for bit 0 */
|
||||
#define MASK_01 0x00000002 /* Mask value for bit 1 */
|
||||
#define MASK_02 0x00000004 /* Mask value for bit 2 */
|
||||
#define MASK_03 0x00000008 /* Mask value for bit 3 */
|
||||
#define MASK_04 0x00000010 /* Mask value for bit 4 */
|
||||
#define MASK_05 0x00000020 /* Mask value for bit 5 */
|
||||
#define MASK_06 0x00000040 /* Mask value for bit 6 */
|
||||
#define MASK_07 0x00000080 /* Mask value for bit 7 */
|
||||
#define MASK_08 0x00000100 /* Mask value for bit 8 */
|
||||
#define MASK_09 0x00000200 /* Mask value for bit 9 */
|
||||
#define MASK_10 0x00000400 /* Mask value for bit 10 */
|
||||
#define MASK_11 0x00000800 /* Mask value for bit 11 */
|
||||
#define MASK_12 0x00001000 /* Mask value for bit 12 */
|
||||
#define MASK_13 0x00002000 /* Mask value for bit 13 */
|
||||
#define MASK_14 0x00004000 /* Mask value for bit 14 */
|
||||
#define MASK_15 0x00008000 /* Mask value for bit 15 */
|
||||
#define MASK_16 0x00010000 /* Mask value for bit 16 */
|
||||
#define MASK_17 0x00020000 /* Mask value for bit 17 */
|
||||
#define MASK_18 0x00040000 /* Mask value for bit 18 */
|
||||
#define MASK_19 0x00080000 /* Mask value for bit 19 */
|
||||
#define MASK_20 0x00100000 /* Mask value for bit 20 */
|
||||
#define MASK_21 0x00200000 /* Mask value for bit 21 */
|
||||
#define MASK_22 0x00400000 /* Mask value for bit 22 */
|
||||
#define MASK_23 0x00800000 /* Mask value for bit 23 */
|
||||
#define MASK_24 0x01000000 /* Mask value for bit 24 */
|
||||
#define MASK_25 0x02000000 /* Mask value for bit 25 */
|
||||
#define MASK_26 0x04000000 /* Mask value for bit 26 */
|
||||
#define MASK_27 0x08000000 /* Mask value for bit 27 */
|
||||
#define MASK_28 0x10000000 /* Mask value for bit 28 */
|
||||
#define MASK_29 0x20000000 /* Mask value for bit 29 */
|
||||
#define MASK_30 0x40000000 /* Mask value for bit 30 */
|
||||
#define MASK_31 0x80000000 /* Mask value for bit 31 */
|
||||
|
||||
#define MASK_B0 0x000000ff /* Mask value for byte 0 */
|
||||
#define MASK_B1 0x0000ff00 /* Mask value for byte 1 */
|
||||
#define MASK_B2 0x00ff0000 /* Mask value for byte 2 */
|
||||
#define MASK_B3 0xff000000 /* Mask value for byte 3 */
|
||||
|
||||
#define MASK_W0 0x0000ffff /* Mask value for word 0 */
|
||||
#define MASK_W1 0xffff0000 /* Mask value for word 1 */
|
||||
|
||||
#define MASK_PA 0xfffffffc /* Mask value for physical address */
|
||||
#define MASK_PR 0xfffffffe /* Mask value for protection register */
|
||||
#define MASK_ER 0xffffffff /* Mask value for the entire register */
|
||||
|
||||
#define MASK_NONE 0x00000000 /* No mask */
|
||||
|
||||
/* register aliases */
|
||||
#define BASE_ODD1 0x00 /* Video DMA 1 registers */
|
||||
#define BASE_EVEN1 0x04
|
||||
#define PROT_ADDR1 0x08
|
||||
#define PITCH1 0x0C
|
||||
#define BASE_PAGE1 0x10 /* Video DMA 1 base page */
|
||||
#define NUM_LINE_BYTE1 0x14
|
||||
|
||||
#define BASE_ODD2 0x18 /* Video DMA 2 registers */
|
||||
#define BASE_EVEN2 0x1C
|
||||
#define PROT_ADDR2 0x20
|
||||
#define PITCH2 0x24
|
||||
#define BASE_PAGE2 0x28 /* Video DMA 2 base page */
|
||||
#define NUM_LINE_BYTE2 0x2C
|
||||
|
||||
#define BASE_ODD3 0x30 /* Video DMA 3 registers */
|
||||
#define BASE_EVEN3 0x34
|
||||
#define PROT_ADDR3 0x38
|
||||
#define PITCH3 0x3C
|
||||
#define BASE_PAGE3 0x40 /* Video DMA 3 base page */
|
||||
#define NUM_LINE_BYTE3 0x44
|
||||
|
||||
#define PCI_BT_V1 0x48 /* Video/FIFO 1 */
|
||||
#define PCI_BT_V2 0x49 /* Video/FIFO 2 */
|
||||
#define PCI_BT_V3 0x4A /* Video/FIFO 3 */
|
||||
#define PCI_BT_DEBI 0x4B /* DEBI */
|
||||
#define PCI_BT_A 0x4C /* Audio */
|
||||
|
||||
#define DD1_INIT 0x50 /* Init setting of DD1 interface */
|
||||
|
||||
#define DD1_STREAM_B 0x54 /* DD1 B video data stream handling */
|
||||
#define DD1_STREAM_A 0x56 /* DD1 A video data stream handling */
|
||||
|
||||
#define BRS_CTRL 0x58 /* BRS control register */
|
||||
#define HPS_CTRL 0x5C /* HPS control register */
|
||||
#define HPS_V_SCALE 0x60 /* HPS vertical scale */
|
||||
#define HPS_V_GAIN 0x64 /* HPS vertical ACL and gain */
|
||||
#define HPS_H_PRESCALE 0x68 /* HPS horizontal prescale */
|
||||
#define HPS_H_SCALE 0x6C /* HPS horizontal scale */
|
||||
#define BCS_CTRL 0x70 /* BCS control */
|
||||
#define CHROMA_KEY_RANGE 0x74
|
||||
#define CLIP_FORMAT_CTRL 0x78 /* HPS outputs formats & clipping */
|
||||
|
||||
#define DEBI_CONFIG 0x7C
|
||||
#define DEBI_COMMAND 0x80
|
||||
#define DEBI_PAGE 0x84
|
||||
#define DEBI_AD 0x88
|
||||
|
||||
#define I2C_TRANSFER 0x8C
|
||||
#define I2C_STATUS 0x90
|
||||
|
||||
#define BASE_A1_IN 0x94 /* Audio 1 input DMA */
|
||||
#define PROT_A1_IN 0x98
|
||||
#define PAGE_A1_IN 0x9C
|
||||
|
||||
#define BASE_A1_OUT 0xA0 /* Audio 1 output DMA */
|
||||
#define PROT_A1_OUT 0xA4
|
||||
#define PAGE_A1_OUT 0xA8
|
||||
|
||||
#define BASE_A2_IN 0xAC /* Audio 2 input DMA */
|
||||
#define PROT_A2_IN 0xB0
|
||||
#define PAGE_A2_IN 0xB4
|
||||
|
||||
#define BASE_A2_OUT 0xB8 /* Audio 2 output DMA */
|
||||
#define PROT_A2_OUT 0xBC
|
||||
#define PAGE_A2_OUT 0xC0
|
||||
|
||||
#define RPS_PAGE0 0xC4 /* RPS task 0 page register */
|
||||
#define RPS_PAGE1 0xC8 /* RPS task 1 page register */
|
||||
|
||||
#define RPS_THRESH0 0xCC /* HBI threshold for task 0 */
|
||||
#define RPS_THRESH1 0xD0 /* HBI threshold for task 1 */
|
||||
|
||||
#define RPS_TOV0 0xD4 /* RPS timeout for task 0 */
|
||||
#define RPS_TOV1 0xD8 /* RPS timeout for task 1 */
|
||||
|
||||
#define IER 0xDC /* Interrupt enable register */
|
||||
|
||||
#define GPIO_CTRL 0xE0 /* GPIO 0-3 register */
|
||||
|
||||
#define EC1SSR 0xE4 /* Event cnt set 1 source select */
|
||||
#define EC2SSR 0xE8 /* Event cnt set 2 source select */
|
||||
#define ECT1R 0xEC /* Event cnt set 1 thresholds */
|
||||
#define ECT2R 0xF0 /* Event cnt set 2 thresholds */
|
||||
|
||||
#define ACON1 0xF4
|
||||
#define ACON2 0xF8
|
||||
|
||||
#define MC1 0xFC /* Main control register 1 */
|
||||
#define MC2 0x100 /* Main control register 2 */
|
||||
|
||||
#define RPS_ADDR0 0x104 /* RPS task 0 address register */
|
||||
#define RPS_ADDR1 0x108 /* RPS task 1 address register */
|
||||
|
||||
#define ISR 0x10C /* Interrupt status register */
|
||||
#define PSR 0x110 /* Primary status register */
|
||||
#define SSR 0x114 /* Secondary status register */
|
||||
|
||||
#define EC1R 0x118 /* Event counter set 1 register */
|
||||
#define EC2R 0x11C /* Event counter set 2 register */
|
||||
|
||||
#define PCI_VDP1 0x120 /* Video DMA pointer of FIFO 1 */
|
||||
#define PCI_VDP2 0x124 /* Video DMA pointer of FIFO 2 */
|
||||
#define PCI_VDP3 0x128 /* Video DMA pointer of FIFO 3 */
|
||||
#define PCI_ADP1 0x12C /* Audio DMA pointer of audio out 1 */
|
||||
#define PCI_ADP2 0x130 /* Audio DMA pointer of audio in 1 */
|
||||
#define PCI_ADP3 0x134 /* Audio DMA pointer of audio out 2 */
|
||||
#define PCI_ADP4 0x138 /* Audio DMA pointer of audio in 2 */
|
||||
#define PCI_DMA_DDP 0x13C /* DEBI DMA pointer */
|
||||
|
||||
#define LEVEL_REP 0x140,
|
||||
#define A_TIME_SLOT1 0x180, /* from 180 - 1BC */
|
||||
#define A_TIME_SLOT2 0x1C0, /* from 1C0 - 1FC */
|
||||
|
||||
/* isr masks */
|
||||
#define SPCI_PPEF 0x80000000 /* PCI parity error */
|
||||
#define SPCI_PABO 0x40000000 /* PCI access error (target or master abort) */
|
||||
#define SPCI_PPED 0x20000000 /* PCI parity error on 'real time data' */
|
||||
#define SPCI_RPS_I1 0x10000000 /* Interrupt issued by RPS1 */
|
||||
#define SPCI_RPS_I0 0x08000000 /* Interrupt issued by RPS0 */
|
||||
#define SPCI_RPS_LATE1 0x04000000 /* RPS task 1 is late */
|
||||
#define SPCI_RPS_LATE0 0x02000000 /* RPS task 0 is late */
|
||||
#define SPCI_RPS_E1 0x01000000 /* RPS error from task 1 */
|
||||
#define SPCI_RPS_E0 0x00800000 /* RPS error from task 0 */
|
||||
#define SPCI_RPS_TO1 0x00400000 /* RPS timeout task 1 */
|
||||
#define SPCI_RPS_TO0 0x00200000 /* RPS timeout task 0 */
|
||||
#define SPCI_UPLD 0x00100000 /* RPS in upload */
|
||||
#define SPCI_DEBI_S 0x00080000 /* DEBI status */
|
||||
#define SPCI_DEBI_E 0x00040000 /* DEBI error */
|
||||
#define SPCI_IIC_S 0x00020000 /* I2C status */
|
||||
#define SPCI_IIC_E 0x00010000 /* I2C error */
|
||||
#define SPCI_A2_IN 0x00008000 /* Audio 2 input DMA protection / limit */
|
||||
#define SPCI_A2_OUT 0x00004000 /* Audio 2 output DMA protection / limit */
|
||||
#define SPCI_A1_IN 0x00002000 /* Audio 1 input DMA protection / limit */
|
||||
#define SPCI_A1_OUT 0x00001000 /* Audio 1 output DMA protection / limit */
|
||||
#define SPCI_AFOU 0x00000800 /* Audio FIFO over- / underflow */
|
||||
#define SPCI_V_PE 0x00000400 /* Video protection address */
|
||||
#define SPCI_VFOU 0x00000200 /* Video FIFO over- / underflow */
|
||||
#define SPCI_FIDA 0x00000100 /* Field ID video port A */
|
||||
#define SPCI_FIDB 0x00000080 /* Field ID video port B */
|
||||
#define SPCI_PIN3 0x00000040 /* GPIO pin 3 */
|
||||
#define SPCI_PIN2 0x00000020 /* GPIO pin 2 */
|
||||
#define SPCI_PIN1 0x00000010 /* GPIO pin 1 */
|
||||
#define SPCI_PIN0 0x00000008 /* GPIO pin 0 */
|
||||
#define SPCI_ECS 0x00000004 /* Event counter 1, 2, 4, 5 */
|
||||
#define SPCI_EC3S 0x00000002 /* Event counter 3 */
|
||||
#define SPCI_EC0S 0x00000001 /* Event counter 0 */
|
||||
|
||||
/* i2c */
|
||||
#define SAA7146_I2C_ABORT (1<<7)
|
||||
#define SAA7146_I2C_SPERR (1<<6)
|
||||
#define SAA7146_I2C_APERR (1<<5)
|
||||
#define SAA7146_I2C_DTERR (1<<4)
|
||||
#define SAA7146_I2C_DRERR (1<<3)
|
||||
#define SAA7146_I2C_AL (1<<2)
|
||||
#define SAA7146_I2C_ERR (1<<1)
|
||||
#define SAA7146_I2C_BUSY (1<<0)
|
||||
|
||||
#define SAA7146_I2C_START (0x3)
|
||||
#define SAA7146_I2C_CONT (0x2)
|
||||
#define SAA7146_I2C_STOP (0x1)
|
||||
#define SAA7146_I2C_NOP (0x0)
|
||||
|
||||
#define SAA7146_I2C_BUS_BIT_RATE_6400 (0x500)
|
||||
#define SAA7146_I2C_BUS_BIT_RATE_3200 (0x100)
|
||||
#define SAA7146_I2C_BUS_BIT_RATE_480 (0x400)
|
||||
#define SAA7146_I2C_BUS_BIT_RATE_320 (0x600)
|
||||
#define SAA7146_I2C_BUS_BIT_RATE_240 (0x700)
|
||||
#define SAA7146_I2C_BUS_BIT_RATE_120 (0x000)
|
||||
#define SAA7146_I2C_BUS_BIT_RATE_80 (0x200)
|
||||
#define SAA7146_I2C_BUS_BIT_RATE_60 (0x300)
|
||||
|
||||
static inline void SAA7146_IER_DISABLE(struct saa7146_dev *x, unsigned y)
|
||||
{
|
||||
unsigned long flags;
|
||||
spin_lock_irqsave(&x->int_slock, flags);
|
||||
saa7146_write(x, IER, saa7146_read(x, IER) & ~y);
|
||||
spin_unlock_irqrestore(&x->int_slock, flags);
|
||||
}
|
||||
|
||||
static inline void SAA7146_IER_ENABLE(struct saa7146_dev *x, unsigned y)
|
||||
{
|
||||
unsigned long flags;
|
||||
spin_lock_irqsave(&x->int_slock, flags);
|
||||
saa7146_write(x, IER, saa7146_read(x, IER) | y);
|
||||
spin_unlock_irqrestore(&x->int_slock, flags);
|
||||
}
|
||||
|
||||
#endif
|
||||
274
include/media/saa7146_vv.h
Normal file
274
include/media/saa7146_vv.h
Normal file
@@ -0,0 +1,274 @@
|
||||
#ifndef __SAA7146_VV__
|
||||
#define __SAA7146_VV__
|
||||
|
||||
#include <linux/videodev.h>
|
||||
#include <media/v4l2-common.h>
|
||||
#include <media/saa7146.h>
|
||||
#include <media/video-buf.h>
|
||||
|
||||
#define MAX_SAA7146_CAPTURE_BUFFERS 32 /* arbitrary */
|
||||
#define BUFFER_TIMEOUT (HZ/2) /* 0.5 seconds */
|
||||
|
||||
#define WRITE_RPS0(x) do { \
|
||||
dev->d_rps0.cpu_addr[ count++ ] = cpu_to_le32(x); \
|
||||
} while (0);
|
||||
|
||||
#define WRITE_RPS1(x) do { \
|
||||
dev->d_rps1.cpu_addr[ count++ ] = cpu_to_le32(x); \
|
||||
} while (0);
|
||||
|
||||
struct saa7146_video_dma {
|
||||
u32 base_odd;
|
||||
u32 base_even;
|
||||
u32 prot_addr;
|
||||
u32 pitch;
|
||||
u32 base_page;
|
||||
u32 num_line_byte;
|
||||
};
|
||||
|
||||
#define FORMAT_BYTE_SWAP 0x1
|
||||
#define FORMAT_IS_PLANAR 0x2
|
||||
|
||||
struct saa7146_format {
|
||||
char *name;
|
||||
u32 pixelformat;
|
||||
u32 trans;
|
||||
u8 depth;
|
||||
u8 flags;
|
||||
u8 swap;
|
||||
};
|
||||
|
||||
struct saa7146_standard
|
||||
{
|
||||
char *name;
|
||||
v4l2_std_id id;
|
||||
|
||||
int v_offset; /* number of lines of vertical offset before processing */
|
||||
int v_field; /* number of lines in a field for HPS to process */
|
||||
|
||||
int h_offset; /* horizontal offset of processing window */
|
||||
int h_pixels; /* number of horizontal pixels to process */
|
||||
|
||||
int v_max_out;
|
||||
int h_max_out;
|
||||
};
|
||||
|
||||
/* buffer for one video/vbi frame */
|
||||
struct saa7146_buf {
|
||||
/* common v4l buffer stuff -- must be first */
|
||||
struct videobuf_buffer vb;
|
||||
|
||||
/* saa7146 specific */
|
||||
struct v4l2_pix_format *fmt;
|
||||
int (*activate)(struct saa7146_dev *dev,
|
||||
struct saa7146_buf *buf,
|
||||
struct saa7146_buf *next);
|
||||
|
||||
/* page tables */
|
||||
struct saa7146_pgtable pt[3];
|
||||
};
|
||||
|
||||
struct saa7146_dmaqueue {
|
||||
struct saa7146_dev *dev;
|
||||
struct saa7146_buf *curr;
|
||||
struct list_head queue;
|
||||
struct timer_list timeout;
|
||||
};
|
||||
|
||||
struct saa7146_overlay {
|
||||
struct saa7146_fh *fh;
|
||||
struct v4l2_window win;
|
||||
struct v4l2_clip clips[16];
|
||||
int nclips;
|
||||
};
|
||||
|
||||
/* per open data */
|
||||
struct saa7146_fh {
|
||||
struct saa7146_dev *dev;
|
||||
/* if this is a vbi or capture open */
|
||||
enum v4l2_buf_type type;
|
||||
|
||||
/* video overlay */
|
||||
struct saa7146_overlay ov;
|
||||
|
||||
/* video capture */
|
||||
struct videobuf_queue video_q;
|
||||
struct v4l2_pix_format video_fmt;
|
||||
|
||||
/* vbi capture */
|
||||
struct videobuf_queue vbi_q;
|
||||
struct v4l2_vbi_format vbi_fmt;
|
||||
struct timer_list vbi_read_timeout;
|
||||
|
||||
unsigned int resources; /* resource management for device open */
|
||||
};
|
||||
|
||||
#define STATUS_OVERLAY 0x01
|
||||
#define STATUS_CAPTURE 0x02
|
||||
|
||||
struct saa7146_vv
|
||||
{
|
||||
int vbi_minor;
|
||||
|
||||
/* vbi capture */
|
||||
struct saa7146_dmaqueue vbi_q;
|
||||
/* vbi workaround interrupt queue */
|
||||
wait_queue_head_t vbi_wq;
|
||||
int vbi_fieldcount;
|
||||
struct saa7146_fh *vbi_streaming;
|
||||
|
||||
int video_minor;
|
||||
|
||||
int video_status;
|
||||
struct saa7146_fh *video_fh;
|
||||
|
||||
/* video overlay */
|
||||
struct v4l2_framebuffer ov_fb;
|
||||
struct saa7146_format *ov_fmt;
|
||||
struct saa7146_overlay *ov_data;
|
||||
struct saa7146_fh *ov_suspend;
|
||||
|
||||
/* video capture */
|
||||
struct saa7146_dmaqueue video_q;
|
||||
enum v4l2_field last_field;
|
||||
|
||||
/* common: fixme? shouldn't this be in saa7146_fh?
|
||||
(this leads to a more complicated question: shall the driver
|
||||
store the different settings (for example S_INPUT) for every open
|
||||
and restore it appropriately, or should all settings be common for
|
||||
all opens? currently, we do the latter, like all other
|
||||
drivers do... */
|
||||
struct saa7146_standard *standard;
|
||||
|
||||
int vflip;
|
||||
int hflip;
|
||||
int current_hps_source;
|
||||
int current_hps_sync;
|
||||
|
||||
struct saa7146_dma d_clipping; /* pointer to clipping memory */
|
||||
|
||||
unsigned int resources; /* resource management for device */
|
||||
};
|
||||
|
||||
#define SAA7146_EXCLUSIVE 0x1
|
||||
#define SAA7146_BEFORE 0x2
|
||||
#define SAA7146_AFTER 0x4
|
||||
|
||||
struct saa7146_extension_ioctls
|
||||
{
|
||||
unsigned int cmd;
|
||||
int flags;
|
||||
};
|
||||
|
||||
/* flags */
|
||||
#define SAA7146_USE_PORT_B_FOR_VBI 0x2 /* use input port b for vbi hardware bug workaround */
|
||||
|
||||
struct saa7146_ext_vv
|
||||
{
|
||||
/* informations about the video capabilities of the device */
|
||||
int inputs;
|
||||
int audios;
|
||||
u32 capabilities;
|
||||
int flags;
|
||||
|
||||
/* additionally supported transmission standards */
|
||||
struct saa7146_standard *stds;
|
||||
int num_stds;
|
||||
int (*std_callback)(struct saa7146_dev*, struct saa7146_standard *);
|
||||
|
||||
struct saa7146_extension_ioctls *ioctls;
|
||||
int (*ioctl)(struct saa7146_fh*, unsigned int cmd, void *arg);
|
||||
|
||||
struct file_operations vbi_fops;
|
||||
};
|
||||
|
||||
struct saa7146_use_ops {
|
||||
void (*init)(struct saa7146_dev *, struct saa7146_vv *);
|
||||
int(*open)(struct saa7146_dev *, struct file *);
|
||||
void (*release)(struct saa7146_dev *, struct file *);
|
||||
void (*irq_done)(struct saa7146_dev *, unsigned long status);
|
||||
ssize_t (*read)(struct file *, char __user *, size_t, loff_t *);
|
||||
};
|
||||
|
||||
/* from saa7146_fops.c */
|
||||
int saa7146_register_device(struct video_device **vid, struct saa7146_dev* dev, char *name, int type);
|
||||
int saa7146_unregister_device(struct video_device **vid, struct saa7146_dev* dev);
|
||||
void saa7146_buffer_finish(struct saa7146_dev *dev, struct saa7146_dmaqueue *q, int state);
|
||||
void saa7146_buffer_next(struct saa7146_dev *dev, struct saa7146_dmaqueue *q,int vbi);
|
||||
int saa7146_buffer_queue(struct saa7146_dev *dev, struct saa7146_dmaqueue *q, struct saa7146_buf *buf);
|
||||
void saa7146_buffer_timeout(unsigned long data);
|
||||
void saa7146_dma_free(struct saa7146_dev* dev,struct videobuf_queue *q,
|
||||
struct saa7146_buf *buf);
|
||||
|
||||
int saa7146_vv_init(struct saa7146_dev* dev, struct saa7146_ext_vv *ext_vv);
|
||||
int saa7146_vv_release(struct saa7146_dev* dev);
|
||||
|
||||
/* from saa7146_hlp.c */
|
||||
int saa7146_enable_overlay(struct saa7146_fh *fh);
|
||||
void saa7146_disable_overlay(struct saa7146_fh *fh);
|
||||
|
||||
void saa7146_set_capture(struct saa7146_dev *dev, struct saa7146_buf *buf, struct saa7146_buf *next);
|
||||
void saa7146_write_out_dma(struct saa7146_dev* dev, int which, struct saa7146_video_dma* vdma) ;
|
||||
void saa7146_set_hps_source_and_sync(struct saa7146_dev *saa, int source, int sync);
|
||||
void saa7146_set_gpio(struct saa7146_dev *saa, u8 pin, u8 data);
|
||||
|
||||
/* from saa7146_video.c */
|
||||
extern struct saa7146_use_ops saa7146_video_uops;
|
||||
int saa7146_start_preview(struct saa7146_fh *fh);
|
||||
int saa7146_stop_preview(struct saa7146_fh *fh);
|
||||
|
||||
/* from saa7146_vbi.c */
|
||||
extern struct saa7146_use_ops saa7146_vbi_uops;
|
||||
|
||||
/* resource management functions */
|
||||
int saa7146_res_get(struct saa7146_fh *fh, unsigned int bit);
|
||||
void saa7146_res_free(struct saa7146_fh *fh, unsigned int bits);
|
||||
|
||||
#define RESOURCE_DMA1_HPS 0x1
|
||||
#define RESOURCE_DMA2_CLP 0x2
|
||||
#define RESOURCE_DMA3_BRS 0x4
|
||||
|
||||
/* saa7146 source inputs */
|
||||
#define SAA7146_HPS_SOURCE_PORT_A 0x00
|
||||
#define SAA7146_HPS_SOURCE_PORT_B 0x01
|
||||
#define SAA7146_HPS_SOURCE_YPB_CPA 0x02
|
||||
#define SAA7146_HPS_SOURCE_YPA_CPB 0x03
|
||||
|
||||
/* sync inputs */
|
||||
#define SAA7146_HPS_SYNC_PORT_A 0x00
|
||||
#define SAA7146_HPS_SYNC_PORT_B 0x01
|
||||
|
||||
/* some memory sizes */
|
||||
/* max. 16 clipping rectangles */
|
||||
#define SAA7146_CLIPPING_MEM (16 * 4 * sizeof(u32))
|
||||
|
||||
/* some defines for the various clipping-modes */
|
||||
#define SAA7146_CLIPPING_RECT 0x4
|
||||
#define SAA7146_CLIPPING_RECT_INVERTED 0x5
|
||||
#define SAA7146_CLIPPING_MASK 0x6
|
||||
#define SAA7146_CLIPPING_MASK_INVERTED 0x7
|
||||
|
||||
/* output formats: each entry holds four informations */
|
||||
#define RGB08_COMPOSED 0x0217 /* composed is used in the sense of "not-planar" */
|
||||
/* this means: planar?=0, yuv2rgb-conversation-mode=2, dither=yes(=1), format-mode = 7 */
|
||||
#define RGB15_COMPOSED 0x0213
|
||||
#define RGB16_COMPOSED 0x0210
|
||||
#define RGB24_COMPOSED 0x0201
|
||||
#define RGB32_COMPOSED 0x0202
|
||||
|
||||
#define Y8 0x0006
|
||||
#define YUV411_COMPOSED 0x0003
|
||||
#define YUV422_COMPOSED 0x0000
|
||||
/* this means: planar?=1, yuv2rgb-conversion-mode=0, dither=no(=0), format-mode = b */
|
||||
#define YUV411_DECOMPOSED 0x100b
|
||||
#define YUV422_DECOMPOSED 0x1009
|
||||
#define YUV420_DECOMPOSED 0x100a
|
||||
|
||||
#define IS_PLANAR(x) (x & 0xf000)
|
||||
|
||||
/* misc defines */
|
||||
#define SAA7146_NO_SWAP (0x0)
|
||||
#define SAA7146_TWO_BYTE_SWAP (0x1)
|
||||
#define SAA7146_FOUR_BYTE_SWAP (0x2)
|
||||
|
||||
#endif
|
||||
118
include/media/tuner-types.h
Normal file
118
include/media/tuner-types.h
Normal file
@@ -0,0 +1,118 @@
|
||||
/*
|
||||
* descriptions for simple tuners.
|
||||
*/
|
||||
|
||||
#ifndef __TUNER_TYPES_H__
|
||||
#define __TUNER_TYPES_H__
|
||||
|
||||
enum param_type {
|
||||
TUNER_PARAM_TYPE_RADIO, \
|
||||
TUNER_PARAM_TYPE_PAL, \
|
||||
TUNER_PARAM_TYPE_SECAM, \
|
||||
TUNER_PARAM_TYPE_NTSC
|
||||
};
|
||||
|
||||
struct tuner_range {
|
||||
unsigned short limit;
|
||||
unsigned char config;
|
||||
unsigned char cb;
|
||||
};
|
||||
|
||||
struct tuner_params {
|
||||
enum param_type type;
|
||||
|
||||
/* Many Philips based tuners have a comment like this in their
|
||||
* datasheet:
|
||||
*
|
||||
* For channel selection involving band switching, and to ensure
|
||||
* smooth tuning to the desired channel without causing
|
||||
* unnecessary charge pump action, it is recommended to consider
|
||||
* the difference between wanted channel frequency and the
|
||||
* current channel frequency. Unnecessary charge pump action
|
||||
* will result in very low tuning voltage which may drive the
|
||||
* oscillator to extreme conditions.
|
||||
*
|
||||
* Set cb_first_if_lower_freq to 1, if this check is
|
||||
* required for this tuner.
|
||||
*
|
||||
* I tested this for PAL by first setting the TV frequency to
|
||||
* 203 MHz and then switching to 96.6 MHz FM radio. The result was
|
||||
* static unless the control byte was sent first.
|
||||
*/
|
||||
unsigned int cb_first_if_lower_freq:1;
|
||||
/* Set to 1 if this tuner uses a tda9887 */
|
||||
unsigned int has_tda9887:1;
|
||||
/* Many Philips tuners use tda9887 PORT1 to select the FM radio
|
||||
sensitivity. If this setting is 1, then set PORT1 to 1 to
|
||||
get proper FM reception. */
|
||||
unsigned int port1_fm_high_sensitivity:1;
|
||||
/* Some Philips tuners use tda9887 PORT2 to select the FM radio
|
||||
sensitivity. If this setting is 1, then set PORT2 to 1 to
|
||||
get proper FM reception. */
|
||||
unsigned int port2_fm_high_sensitivity:1;
|
||||
/* Some Philips tuners use tda9887 cGainNormal to select the FM radio
|
||||
sensitivity. If this setting is 1, e register will use cGainNormal
|
||||
instead of cGainLow. */
|
||||
unsigned int fm_gain_normal:1;
|
||||
/* Most tuners with a tda9887 use QSS mode. Some (cheaper) tuners
|
||||
use Intercarrier mode. If this setting is 1, then the tuner
|
||||
needs to be set to intercarrier mode. */
|
||||
unsigned int intercarrier_mode:1;
|
||||
/* This setting sets the default value for PORT1.
|
||||
0 means inactive, 1 means active. Note: the actual bit
|
||||
value written to the tda9887 is inverted. So a 0 here
|
||||
means a 1 in the B6 bit. */
|
||||
unsigned int port1_active:1;
|
||||
/* This setting sets the default value for PORT2.
|
||||
0 means inactive, 1 means active. Note: the actual bit
|
||||
value written to the tda9887 is inverted. So a 0 here
|
||||
means a 1 in the B7 bit. */
|
||||
unsigned int port2_active:1;
|
||||
/* Sometimes PORT1 is inverted when the SECAM-L' standard is selected.
|
||||
Set this bit to 1 if this is needed. */
|
||||
unsigned int port1_invert_for_secam_lc:1;
|
||||
/* Sometimes PORT2 is inverted when the SECAM-L' standard is selected.
|
||||
Set this bit to 1 if this is needed. */
|
||||
unsigned int port2_invert_for_secam_lc:1;
|
||||
/* Some cards require PORT1 to be 1 for mono Radio FM and 0 for stereo. */
|
||||
unsigned int port1_set_for_fm_mono:1;
|
||||
/* Select 18% (or according to datasheet 0%) L standard PLL gating,
|
||||
vs the driver default of 36%. */
|
||||
unsigned int default_pll_gating_18:1;
|
||||
/* Default tda9887 TOP value in dB for the low band. Default is 0.
|
||||
Range: -16:+15 */
|
||||
signed int default_top_low:5;
|
||||
/* Default tda9887 TOP value in dB for the mid band. Default is 0.
|
||||
Range: -16:+15 */
|
||||
signed int default_top_mid:5;
|
||||
/* Default tda9887 TOP value in dB for the high band. Default is 0.
|
||||
Range: -16:+15 */
|
||||
signed int default_top_high:5;
|
||||
/* Default tda9887 TOP value in dB for SECAM-L/L' for the low band.
|
||||
Default is 0. Several tuners require a different TOP value for
|
||||
the SECAM-L/L' standards. Range: -16:+15 */
|
||||
signed int default_top_secam_low:5;
|
||||
/* Default tda9887 TOP value in dB for SECAM-L/L' for the mid band.
|
||||
Default is 0. Several tuners require a different TOP value for
|
||||
the SECAM-L/L' standards. Range: -16:+15 */
|
||||
signed int default_top_secam_mid:5;
|
||||
/* Default tda9887 TOP value in dB for SECAM-L/L' for the high band.
|
||||
Default is 0. Several tuners require a different TOP value for
|
||||
the SECAM-L/L' standards. Range: -16:+15 */
|
||||
signed int default_top_secam_high:5;
|
||||
|
||||
|
||||
unsigned int count;
|
||||
struct tuner_range *ranges;
|
||||
};
|
||||
|
||||
struct tunertype {
|
||||
char *name;
|
||||
unsigned int count;
|
||||
struct tuner_params *params;
|
||||
};
|
||||
|
||||
extern struct tunertype tuners[];
|
||||
extern unsigned const int tuner_count;
|
||||
|
||||
#endif
|
||||
257
include/media/tuner.h
Normal file
257
include/media/tuner.h
Normal file
@@ -0,0 +1,257 @@
|
||||
/*
|
||||
tuner.h - definition for different tuners
|
||||
|
||||
Copyright (C) 1997 Markus Schroeder (schroedm@uni-duesseldorf.de)
|
||||
minor modifications by Ralph Metzler (rjkm@thp.uni-koeln.de)
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef _TUNER_H
|
||||
#define _TUNER_H
|
||||
|
||||
#include <linux/videodev2.h>
|
||||
#include <media/tuner-types.h>
|
||||
|
||||
extern int tuner_debug;
|
||||
|
||||
#define ADDR_UNSET (255)
|
||||
|
||||
#define TUNER_TEMIC_PAL 0 /* 4002 FH5 (3X 7756, 9483) */
|
||||
#define TUNER_PHILIPS_PAL_I 1
|
||||
#define TUNER_PHILIPS_NTSC 2
|
||||
#define TUNER_PHILIPS_SECAM 3 /* you must actively select B/G, L, L` */
|
||||
|
||||
#define TUNER_ABSENT 4
|
||||
#define TUNER_PHILIPS_PAL 5
|
||||
#define TUNER_TEMIC_NTSC 6 /* 4032 FY5 (3X 7004, 9498, 9789) */
|
||||
#define TUNER_TEMIC_PAL_I 7 /* 4062 FY5 (3X 8501, 9957) */
|
||||
|
||||
#define TUNER_TEMIC_4036FY5_NTSC 8 /* 4036 FY5 (3X 1223, 1981, 7686) */
|
||||
#define TUNER_ALPS_TSBH1_NTSC 9
|
||||
#define TUNER_ALPS_TSBE1_PAL 10
|
||||
#define TUNER_ALPS_TSBB5_PAL_I 11
|
||||
|
||||
#define TUNER_ALPS_TSBE5_PAL 12
|
||||
#define TUNER_ALPS_TSBC5_PAL 13
|
||||
#define TUNER_TEMIC_4006FH5_PAL 14 /* 4006 FH5 (3X 9500, 9501, 7291) */
|
||||
#define TUNER_ALPS_TSHC6_NTSC 15
|
||||
|
||||
#define TUNER_TEMIC_PAL_DK 16 /* 4016 FY5 (3X 1392, 1393) */
|
||||
#define TUNER_PHILIPS_NTSC_M 17
|
||||
#define TUNER_TEMIC_4066FY5_PAL_I 18 /* 4066 FY5 (3X 7032, 7035) */
|
||||
#define TUNER_TEMIC_4006FN5_MULTI_PAL 19 /* B/G, I and D/K autodetected (3X 7595, 7606, 7657) */
|
||||
|
||||
#define TUNER_TEMIC_4009FR5_PAL 20 /* incl. FM radio (3X 7607, 7488, 7711) */
|
||||
#define TUNER_TEMIC_4039FR5_NTSC 21 /* incl. FM radio (3X 7246, 7578, 7732) */
|
||||
#define TUNER_TEMIC_4046FM5 22 /* you must actively select B/G, D/K, I, L, L` ! (3X 7804, 7806, 8103, 8104) */
|
||||
#define TUNER_PHILIPS_PAL_DK 23
|
||||
|
||||
#define TUNER_PHILIPS_FQ1216ME 24 /* you must actively select B/G/D/K, I, L, L` */
|
||||
#define TUNER_LG_PAL_I_FM 25
|
||||
#define TUNER_LG_PAL_I 26
|
||||
#define TUNER_LG_NTSC_FM 27
|
||||
|
||||
#define TUNER_LG_PAL_FM 28
|
||||
#define TUNER_LG_PAL 29
|
||||
#define TUNER_TEMIC_4009FN5_MULTI_PAL_FM 30 /* B/G, I and D/K autodetected (3X 8155, 8160, 8163) */
|
||||
#define TUNER_SHARP_2U5JF5540_NTSC 31
|
||||
|
||||
#define TUNER_Samsung_PAL_TCPM9091PD27 32
|
||||
#define TUNER_MT2032 33
|
||||
#define TUNER_TEMIC_4106FH5 34 /* 4106 FH5 (3X 7808, 7865) */
|
||||
#define TUNER_TEMIC_4012FY5 35 /* 4012 FY5 (3X 0971, 1099) */
|
||||
|
||||
#define TUNER_TEMIC_4136FY5 36 /* 4136 FY5 (3X 7708, 7746) */
|
||||
#define TUNER_LG_PAL_NEW_TAPC 37
|
||||
#define TUNER_PHILIPS_FM1216ME_MK3 38
|
||||
#define TUNER_LG_NTSC_NEW_TAPC 39
|
||||
|
||||
#define TUNER_HITACHI_NTSC 40
|
||||
#define TUNER_PHILIPS_PAL_MK 41
|
||||
#define TUNER_PHILIPS_ATSC 42
|
||||
#define TUNER_PHILIPS_FM1236_MK3 43
|
||||
|
||||
#define TUNER_PHILIPS_4IN1 44 /* ATI TV Wonder Pro - Conexant */
|
||||
/* Microtune merged with Temic 12/31/1999 partially financed by Alps - these may be similar to Temic */
|
||||
#define TUNER_MICROTUNE_4049FM5 45
|
||||
#define TUNER_PANASONIC_VP27 46
|
||||
#define TUNER_LG_NTSC_TAPE 47
|
||||
|
||||
#define TUNER_TNF_8831BGFF 48
|
||||
#define TUNER_MICROTUNE_4042FI5 49 /* DViCO FusionHDTV 3 Gold-Q - 4042 FI5 (3X 8147) */
|
||||
#define TUNER_TCL_2002N 50
|
||||
#define TUNER_PHILIPS_FM1256_IH3 51
|
||||
|
||||
#define TUNER_THOMSON_DTT7610 52
|
||||
#define TUNER_PHILIPS_FQ1286 53
|
||||
#define TUNER_PHILIPS_TDA8290 54
|
||||
#define TUNER_TCL_2002MB 55 /* Hauppauge PVR-150 PAL */
|
||||
|
||||
#define TUNER_PHILIPS_FQ1216AME_MK4 56 /* Hauppauge PVR-150 PAL */
|
||||
#define TUNER_PHILIPS_FQ1236A_MK4 57 /* Hauppauge PVR-500MCE NTSC */
|
||||
#define TUNER_YMEC_TVF_8531MF 58
|
||||
#define TUNER_YMEC_TVF_5533MF 59 /* Pixelview Pro Ultra NTSC */
|
||||
|
||||
#define TUNER_THOMSON_DTT761X 60 /* DTT 7611 7611A 7612 7613 7613A 7614 7615 7615A */
|
||||
#define TUNER_TENA_9533_DI 61
|
||||
#define TUNER_TEA5767 62 /* Only FM Radio Tuner */
|
||||
#define TUNER_PHILIPS_FMD1216ME_MK3 63
|
||||
|
||||
#define TUNER_LG_TDVS_H06XF 64 /* TDVS H061F, H062F, H064F */
|
||||
#define TUNER_YMEC_TVF66T5_B_DFF 65 /* Acorp Y878F */
|
||||
#define TUNER_LG_TALN 66
|
||||
#define TUNER_PHILIPS_TD1316 67
|
||||
|
||||
#define TUNER_PHILIPS_TUV1236D 68 /* ATI HDTV Wonder */
|
||||
#define TUNER_TNF_5335MF 69 /* Sabrent Bt848 */
|
||||
#define TUNER_SAMSUNG_TCPN_2121P30A 70 /* Hauppauge PVR-500MCE NTSC */
|
||||
#define TUNER_XCEIVE_XC3028 71
|
||||
|
||||
#define TUNER_THOMSON_FE6600 72 /* DViCO FusionHDTV DVB-T Hybrid */
|
||||
#define TUNER_SAMSUNG_TCPG_6121P30A 73 /* Hauppauge PVR-500 PAL */
|
||||
#define TUNER_TDA9887 74 /* This tuner should be used only internally */
|
||||
|
||||
/* tv card specific */
|
||||
#define TDA9887_PRESENT (1<<0)
|
||||
#define TDA9887_PORT1_INACTIVE (1<<1)
|
||||
#define TDA9887_PORT2_INACTIVE (1<<2)
|
||||
#define TDA9887_QSS (1<<3)
|
||||
#define TDA9887_INTERCARRIER (1<<4)
|
||||
#define TDA9887_PORT1_ACTIVE (1<<5)
|
||||
#define TDA9887_PORT2_ACTIVE (1<<6)
|
||||
#define TDA9887_INTERCARRIER_NTSC (1<<7)
|
||||
/* Tuner takeover point adjustment, in dB, -16 <= top <= 15 */
|
||||
#define TDA9887_TOP_MASK (0x3f << 8)
|
||||
#define TDA9887_TOP_SET (1 << 13)
|
||||
#define TDA9887_TOP(top) (TDA9887_TOP_SET | (((16 + (top)) & 0x1f) << 8))
|
||||
|
||||
/* config options */
|
||||
#define TDA9887_DEEMPHASIS_MASK (3<<16)
|
||||
#define TDA9887_DEEMPHASIS_NONE (1<<16)
|
||||
#define TDA9887_DEEMPHASIS_50 (2<<16)
|
||||
#define TDA9887_DEEMPHASIS_75 (3<<16)
|
||||
#define TDA9887_AUTOMUTE (1<<18)
|
||||
#define TDA9887_GATING_18 (1<<19)
|
||||
#define TDA9887_GAIN_NORMAL (1<<20)
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
enum tuner_mode {
|
||||
T_UNINITIALIZED = 0,
|
||||
T_RADIO = 1 << V4L2_TUNER_RADIO,
|
||||
T_ANALOG_TV = 1 << V4L2_TUNER_ANALOG_TV,
|
||||
T_DIGITAL_TV = 1 << V4L2_TUNER_DIGITAL_TV,
|
||||
T_STANDBY = 1 << 31
|
||||
};
|
||||
|
||||
/* Older boards only had a single tuner device. Nowadays multiple tuner
|
||||
devices may be present on a single board. Using TUNER_SET_TYPE_ADDR
|
||||
to pass the tuner_setup structure it is possible to setup each tuner
|
||||
device in turn.
|
||||
|
||||
Since multiple devices may be present it is no longer sufficient to
|
||||
send a command to a single i2c device. Instead you should broadcast
|
||||
the command to all i2c devices.
|
||||
|
||||
By setting the mode_mask correctly you can select which commands are
|
||||
accepted by a specific tuner device. For example, set mode_mask to
|
||||
T_RADIO if the device is a radio-only tuner. That specific tuner will
|
||||
only accept commands when the tuner is in radio mode and ignore them
|
||||
when the tuner is set to TV mode.
|
||||
*/
|
||||
|
||||
struct tuner_setup {
|
||||
unsigned short addr; /* I2C address */
|
||||
unsigned int type; /* Tuner type */
|
||||
unsigned int mode_mask; /* Allowed tuner modes */
|
||||
};
|
||||
|
||||
struct tuner {
|
||||
/* device */
|
||||
struct i2c_client i2c;
|
||||
|
||||
unsigned int type; /* chip type */
|
||||
|
||||
unsigned int mode;
|
||||
unsigned int mode_mask; /* Combination of allowable modes */
|
||||
|
||||
unsigned int tv_freq; /* keep track of the current settings */
|
||||
unsigned int radio_freq;
|
||||
u16 last_div;
|
||||
unsigned int audmode;
|
||||
v4l2_std_id std;
|
||||
|
||||
int using_v4l2;
|
||||
|
||||
/* used by tda9887 */
|
||||
unsigned int tda9887_config;
|
||||
unsigned char tda9887_data[4];
|
||||
|
||||
/* used by MT2032 */
|
||||
unsigned int xogc;
|
||||
unsigned int radio_if2;
|
||||
|
||||
/* used by tda8290 */
|
||||
unsigned char tda8290_easy_mode;
|
||||
unsigned char tda827x_lpsel;
|
||||
unsigned char tda827x_addr;
|
||||
unsigned char tda827x_ver;
|
||||
unsigned int sgIF;
|
||||
|
||||
/* function ptrs */
|
||||
void (*set_tv_freq)(struct i2c_client *c, unsigned int freq);
|
||||
void (*set_radio_freq)(struct i2c_client *c, unsigned int freq);
|
||||
int (*has_signal)(struct i2c_client *c);
|
||||
int (*is_stereo)(struct i2c_client *c);
|
||||
int (*get_afc)(struct i2c_client *c);
|
||||
void (*tuner_status)(struct i2c_client *c);
|
||||
void (*standby)(struct i2c_client *c);
|
||||
};
|
||||
|
||||
extern unsigned const int tuner_count;
|
||||
|
||||
extern int microtune_init(struct i2c_client *c);
|
||||
extern int xc3028_init(struct i2c_client *c);
|
||||
extern int tda8290_init(struct i2c_client *c);
|
||||
extern int tda8290_probe(struct i2c_client *c);
|
||||
extern int tea5767_tuner_init(struct i2c_client *c);
|
||||
extern int default_tuner_init(struct i2c_client *c);
|
||||
extern int tea5767_autodetection(struct i2c_client *c);
|
||||
extern int tda9887_tuner_init(struct i2c_client *c);
|
||||
|
||||
#define tuner_warn(fmt, arg...) do {\
|
||||
printk(KERN_WARNING "%s %d-%04x: " fmt, t->i2c.driver->driver.name, \
|
||||
i2c_adapter_id(t->i2c.adapter), t->i2c.addr , ##arg); } while (0)
|
||||
#define tuner_info(fmt, arg...) do {\
|
||||
printk(KERN_INFO "%s %d-%04x: " fmt, t->i2c.driver->driver.name, \
|
||||
i2c_adapter_id(t->i2c.adapter), t->i2c.addr , ##arg); } while (0)
|
||||
#define tuner_dbg(fmt, arg...) do {\
|
||||
extern int tuner_debug; \
|
||||
if (tuner_debug) \
|
||||
printk(KERN_DEBUG "%s %d-%04x: " fmt, t->i2c.driver->driver.name, \
|
||||
i2c_adapter_id(t->i2c.adapter), t->i2c.addr , ##arg); } while (0)
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _TUNER_H */
|
||||
|
||||
/*
|
||||
* Overrides for Emacs so that we follow Linus's tabbing style.
|
||||
* ---------------------------------------------------------------------------
|
||||
* Local variables:
|
||||
* c-basic-offset: 8
|
||||
* End:
|
||||
*/
|
||||
30
include/media/tvaudio.h
Normal file
30
include/media/tvaudio.h
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
tvaudio.h - definition for tvaudio inputs
|
||||
|
||||
Copyright (C) 2006 Hans Verkuil (hverkuil@xs4all.nl)
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef _TVAUDIO_H
|
||||
#define _TVAUDIO_H
|
||||
|
||||
/* The tvaudio module accepts the following inputs: */
|
||||
#define TVAUDIO_INPUT_TUNER 0
|
||||
#define TVAUDIO_INPUT_RADIO 1
|
||||
#define TVAUDIO_INPUT_EXTERN 2
|
||||
#define TVAUDIO_INPUT_INTERN 3
|
||||
|
||||
#endif
|
||||
33
include/media/tveeprom.h
Normal file
33
include/media/tveeprom.h
Normal file
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
*/
|
||||
|
||||
struct tveeprom {
|
||||
u32 has_radio;
|
||||
u32 has_ir; /* bit 0: IR receiver present, bit 1: IR transmitter (blaster) present. -1 == unknown */
|
||||
u32 has_MAC_address; /* 0: no MAC, 1: MAC present, 2: unknown */
|
||||
|
||||
u32 tuner_type;
|
||||
u32 tuner_formats;
|
||||
u32 tuner_hauppauge_model;
|
||||
|
||||
u32 tuner2_type;
|
||||
u32 tuner2_formats;
|
||||
u32 tuner2_hauppauge_model;
|
||||
|
||||
u32 digitizer;
|
||||
u32 digitizer_formats;
|
||||
|
||||
u32 audio_processor;
|
||||
u32 decoder_processor;
|
||||
|
||||
u32 model;
|
||||
u32 revision;
|
||||
u32 serial_number;
|
||||
char rev_str[5];
|
||||
u8 MAC_address[6];
|
||||
};
|
||||
|
||||
void tveeprom_hauppauge_analog(struct i2c_client *c, struct tveeprom *tvee,
|
||||
unsigned char *eeprom_data);
|
||||
|
||||
int tveeprom_read(struct i2c_client *c, unsigned char *eedata, int len);
|
||||
34
include/media/tvp5150.h
Normal file
34
include/media/tvp5150.h
Normal file
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
tvp5150.h - definition for tvp5150 inputs
|
||||
|
||||
Copyright (C) 2006 Hans Verkuil (hverkuil@xs4all.nl)
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef _TVP5150_H_
|
||||
#define _TVP5150_H_
|
||||
|
||||
/* TVP5150 HW inputs */
|
||||
#define TVP5150_COMPOSITE0 0
|
||||
#define TVP5150_COMPOSITE1 1
|
||||
#define TVP5150_SVIDEO 2
|
||||
|
||||
/* TVP5150 HW outputs */
|
||||
#define TVP5150_NORMAL 0
|
||||
#define TVP5150_BLACK_SCREEN 1
|
||||
|
||||
#endif
|
||||
|
||||
40
include/media/upd64031a.h
Normal file
40
include/media/upd64031a.h
Normal file
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* upd64031a - NEC Electronics Ghost Reduction input defines
|
||||
*
|
||||
* 2006 by Hans Verkuil (hverkuil@xs4all.nl)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifndef _UPD64031A_H_
|
||||
#define _UPD64031A_H_
|
||||
|
||||
/* Ghost reduction modes */
|
||||
#define UPD64031A_GR_ON 0
|
||||
#define UPD64031A_GR_OFF 1
|
||||
#define UPD64031A_GR_THROUGH 3
|
||||
|
||||
/* Direct 3D/YCS Connection */
|
||||
#define UPD64031A_3DYCS_DISABLE (0 << 2)
|
||||
#define UPD64031A_3DYCS_COMPOSITE (2 << 2)
|
||||
#define UPD64031A_3DYCS_SVIDEO (3 << 2)
|
||||
|
||||
/* Composite sync digital separation circuit */
|
||||
#define UPD64031A_COMPOSITE_EXTERNAL (1 << 4)
|
||||
|
||||
/* Vertical sync digital separation circuit */
|
||||
#define UPD64031A_VERTICAL_EXTERNAL (1 << 5)
|
||||
|
||||
#endif
|
||||
58
include/media/upd64083.h
Normal file
58
include/media/upd64083.h
Normal file
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* upd6408x - NEC Electronics 3-Dimensional Y/C separation input defines
|
||||
*
|
||||
* 2006 by Hans Verkuil (hverkuil@xs4all.nl)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifndef _UPD64083_H_
|
||||
#define _UPD64083_H_
|
||||
|
||||
/* There are two bits of information that the driver needs in order
|
||||
to select the correct routing: the operating mode and the selection
|
||||
of the Y input (external or internal).
|
||||
|
||||
The first two operating modes expect a composite signal on the Y input,
|
||||
the second two operating modes use both the Y and C inputs.
|
||||
|
||||
Normally YCS_MODE is used for tuner and composite inputs, and the
|
||||
YCNR mode is used for S-Video inputs.
|
||||
|
||||
The external Y-ADC is selected when the composite input comes from a
|
||||
upd64031a ghost reduction device. If this device is not present, or
|
||||
the input is a S-Video signal, then the internal Y-ADC input should
|
||||
be used. */
|
||||
|
||||
/* Operating modes: */
|
||||
|
||||
/* YCS mode: Y/C separation (burst locked clocking) */
|
||||
#define UPD64083_YCS_MODE 0
|
||||
/* YCS+ mode: 2D Y/C separation and YCNR (burst locked clocking) */
|
||||
#define UPD64083_YCS_PLUS_MODE 1
|
||||
|
||||
/* Note: the following two modes cannot be used in combination with the
|
||||
external Y-ADC. */
|
||||
/* MNNR mode: frame comb type YNR+C delay (line locked clocking) */
|
||||
#define UPD64083_MNNR_MODE 2
|
||||
/* YCNR mode: frame recursive YCNR (burst locked clocking) */
|
||||
#define UPD64083_YCNR_MODE 3
|
||||
|
||||
/* Select external Y-ADC: this should be set if this device is used in
|
||||
combination with the upd64031a ghost reduction device.
|
||||
Otherwise leave at 0 (use internal Y-ADC). */
|
||||
#define UPD64083_EXT_Y_ADC (1 << 2)
|
||||
|
||||
#endif
|
||||
257
include/media/v4l2-common.h
Normal file
257
include/media/v4l2-common.h
Normal file
@@ -0,0 +1,257 @@
|
||||
/*
|
||||
v4l2 common internal API header
|
||||
|
||||
This header contains internal shared ioctl definitions for use by the
|
||||
internal low-level v4l2 drivers.
|
||||
Each ioctl begins with VIDIOC_INT_ to clearly mark that it is an internal
|
||||
define,
|
||||
|
||||
Copyright (C) 2005 Hans Verkuil <hverkuil@xs4all.nl>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef V4L2_COMMON_H_
|
||||
#define V4L2_COMMON_H_
|
||||
|
||||
#include <media/v4l2-dev.h>
|
||||
|
||||
/* v4l debugging and diagnostics */
|
||||
|
||||
/* Debug bitmask flags to be used on V4L2 */
|
||||
#define V4L2_DEBUG_IOCTL 0x01
|
||||
#define V4L2_DEBUG_IOCTL_ARG 0x02
|
||||
|
||||
/* Common printk constucts for v4l-i2c drivers. These macros create a unique
|
||||
prefix consisting of the driver name, the adapter number and the i2c
|
||||
address. */
|
||||
#define v4l_printk(level, name, adapter, addr, fmt, arg...) \
|
||||
printk(level "%s %d-%04x: " fmt, name, i2c_adapter_id(adapter), addr , ## arg)
|
||||
|
||||
#define v4l_client_printk(level, client, fmt, arg...) \
|
||||
v4l_printk(level, (client)->driver->driver.name, (client)->adapter, \
|
||||
(client)->addr, fmt , ## arg)
|
||||
|
||||
#define v4l_err(client, fmt, arg...) \
|
||||
v4l_client_printk(KERN_ERR, client, fmt , ## arg)
|
||||
|
||||
#define v4l_warn(client, fmt, arg...) \
|
||||
v4l_client_printk(KERN_WARNING, client, fmt , ## arg)
|
||||
|
||||
#define v4l_info(client, fmt, arg...) \
|
||||
v4l_client_printk(KERN_INFO, client, fmt , ## arg)
|
||||
|
||||
/* These three macros assume that the debug level is set with a module
|
||||
parameter called 'debug'. */
|
||||
#define v4l_dbg(level, debug, client, fmt, arg...) \
|
||||
do { \
|
||||
if (debug >= (level)) \
|
||||
v4l_client_printk(KERN_DEBUG, client, fmt , ## arg); \
|
||||
} while (0)
|
||||
|
||||
/* Prints the ioctl in a human-readable format */
|
||||
extern void v4l_printk_ioctl(unsigned int cmd);
|
||||
|
||||
/* Use this macro for non-I2C drivers. Pass the driver name as the first arg. */
|
||||
#define v4l_print_ioctl(name, cmd) \
|
||||
do { \
|
||||
printk(KERN_DEBUG "%s: ", name); \
|
||||
v4l_printk_ioctl(cmd); \
|
||||
} while (0)
|
||||
|
||||
/* Use this macro in I2C drivers where 'client' is the struct i2c_client
|
||||
pointer */
|
||||
#define v4l_i2c_print_ioctl(client, cmd) \
|
||||
do { \
|
||||
v4l_client_printk(KERN_DEBUG, client, ""); \
|
||||
v4l_printk_ioctl(cmd); \
|
||||
} while (0)
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
/* Control helper functions */
|
||||
|
||||
int v4l2_ctrl_check(struct v4l2_ext_control *ctrl, struct v4l2_queryctrl *qctrl,
|
||||
const char **menu_items);
|
||||
const char **v4l2_ctrl_get_menu(u32 id);
|
||||
int v4l2_ctrl_query_fill(struct v4l2_queryctrl *qctrl, s32 min, s32 max, s32 step, s32 def);
|
||||
int v4l2_ctrl_query_fill_std(struct v4l2_queryctrl *qctrl);
|
||||
int v4l2_ctrl_query_menu(struct v4l2_querymenu *qmenu,
|
||||
struct v4l2_queryctrl *qctrl, const char **menu_items);
|
||||
u32 v4l2_ctrl_next(const u32 * const *ctrl_classes, u32 id);
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
/* Register/chip ident helper function */
|
||||
|
||||
struct i2c_client; /* forward reference */
|
||||
int v4l2_chip_match_i2c_client(struct i2c_client *c, u32 id_type, u32 chip_id);
|
||||
int v4l2_chip_match_host(u32 id_type, u32 chip_id);
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
/* Internal ioctls */
|
||||
|
||||
/* VIDIOC_INT_DECODE_VBI_LINE */
|
||||
struct v4l2_decode_vbi_line {
|
||||
u32 is_second_field; /* Set to 0 for the first (odd) field,
|
||||
set to 1 for the second (even) field. */
|
||||
u8 *p; /* Pointer to the sliced VBI data from the decoder.
|
||||
On exit points to the start of the payload. */
|
||||
u32 line; /* Line number of the sliced VBI data (1-23) */
|
||||
u32 type; /* VBI service type (V4L2_SLICED_*). 0 if no service found */
|
||||
};
|
||||
|
||||
/* VIDIOC_INT_G_CHIP_IDENT: identifies the actual chip installed on the board */
|
||||
enum v4l2_chip_ident {
|
||||
/* general idents: reserved range 0-49 */
|
||||
V4L2_IDENT_UNKNOWN = 0,
|
||||
|
||||
/* module saa7110: just ident= 100 */
|
||||
V4L2_IDENT_SAA7110 = 100,
|
||||
|
||||
/* module saa7111: just ident= 101 */
|
||||
V4L2_IDENT_SAA7111 = 101,
|
||||
|
||||
/* module saa7115: reserved range 102-149 */
|
||||
V4L2_IDENT_SAA7113 = 103,
|
||||
V4L2_IDENT_SAA7114 = 104,
|
||||
V4L2_IDENT_SAA7115 = 105,
|
||||
V4L2_IDENT_SAA7118 = 108,
|
||||
|
||||
/* module saa7127: reserved range 150-199 */
|
||||
V4L2_IDENT_SAA7127 = 157,
|
||||
V4L2_IDENT_SAA7129 = 159,
|
||||
|
||||
/* module cx25840: reserved range 200-249 */
|
||||
V4L2_IDENT_CX25836 = 236,
|
||||
V4L2_IDENT_CX25837 = 237,
|
||||
V4L2_IDENT_CX25840 = 240,
|
||||
V4L2_IDENT_CX25841 = 241,
|
||||
V4L2_IDENT_CX25842 = 242,
|
||||
V4L2_IDENT_CX25843 = 243,
|
||||
|
||||
/* OmniVision sensors - range 250-299 */
|
||||
V4L2_IDENT_OV7670 = 250,
|
||||
};
|
||||
|
||||
/* audio ioctls */
|
||||
|
||||
/* v4l device was opened in Radio mode, to be replaced by VIDIOC_INT_S_TUNER_MODE */
|
||||
#define AUDC_SET_RADIO _IO('d',88)
|
||||
|
||||
/* tuner ioctls */
|
||||
|
||||
/* Sets tuner type and its I2C addr */
|
||||
#define TUNER_SET_TYPE_ADDR _IOW('d', 90, int)
|
||||
|
||||
/* Puts tuner on powersaving state, disabling it, except for i2c. To be replaced
|
||||
by VIDIOC_INT_S_STANDBY. */
|
||||
#define TUNER_SET_STANDBY _IOW('d', 91, int)
|
||||
|
||||
/* Sets tda9887 specific stuff, like port1, port2 and qss */
|
||||
#define TDA9887_SET_CONFIG _IOW('d', 92, int)
|
||||
|
||||
/* Switch the tuner to a specific tuner mode. Replacement of AUDC_SET_RADIO */
|
||||
#define VIDIOC_INT_S_TUNER_MODE _IOW('d', 93, enum v4l2_tuner_type)
|
||||
|
||||
/* Generic standby command. Passing -1 (all bits set to 1) will put the whole
|
||||
chip into standby mode, value 0 will make the chip fully active. Specific
|
||||
bits can be used by certain chips to enable/disable specific subsystems.
|
||||
Replacement of TUNER_SET_STANDBY. */
|
||||
#define VIDIOC_INT_S_STANDBY _IOW('d', 94, u32)
|
||||
|
||||
/* 100, 101 used by VIDIOC_DBG_[SG]_REGISTER */
|
||||
|
||||
/* Generic reset command. The argument selects which subsystems to reset.
|
||||
Passing 0 will always reset the whole chip. */
|
||||
#define VIDIOC_INT_RESET _IOW ('d', 102, u32)
|
||||
|
||||
/* Set the frequency (in Hz) of the audio clock output.
|
||||
Used to slave an audio processor to the video decoder, ensuring that audio
|
||||
and video remain synchronized.
|
||||
Usual values for the frequency are 48000, 44100 or 32000 Hz.
|
||||
If the frequency is not supported, then -EINVAL is returned. */
|
||||
#define VIDIOC_INT_AUDIO_CLOCK_FREQ _IOW ('d', 103, u32)
|
||||
|
||||
/* Video decoders that support sliced VBI need to implement this ioctl.
|
||||
Field p of the v4l2_sliced_vbi_line struct is set to the start of the VBI
|
||||
data that was generated by the decoder. The driver then parses the sliced
|
||||
VBI data and sets the other fields in the struct accordingly. The pointer p
|
||||
is updated to point to the start of the payload which can be copied
|
||||
verbatim into the data field of the v4l2_sliced_vbi_data struct. If no
|
||||
valid VBI data was found, then the type field is set to 0 on return. */
|
||||
#define VIDIOC_INT_DECODE_VBI_LINE _IOWR('d', 104, struct v4l2_decode_vbi_line)
|
||||
|
||||
/* Used to generate VBI signals on a video signal. v4l2_sliced_vbi_data is
|
||||
filled with the data packets that should be output. Note that if you set
|
||||
the line field to 0, then that VBI signal is disabled. If no
|
||||
valid VBI data was found, then the type field is set to 0 on return. */
|
||||
#define VIDIOC_INT_S_VBI_DATA _IOW ('d', 105, struct v4l2_sliced_vbi_data)
|
||||
|
||||
/* Used to obtain the sliced VBI packet from a readback register. Not all
|
||||
video decoders support this. If no data is available because the readback
|
||||
register contains invalid or erroneous data -EIO is returned. Note that
|
||||
you must fill in the 'id' member and the 'field' member (to determine
|
||||
whether CC data from the first or second field should be obtained). */
|
||||
#define VIDIOC_INT_G_VBI_DATA _IOWR('d', 106, struct v4l2_sliced_vbi_data)
|
||||
|
||||
/* Returns the chip identifier or V4L2_IDENT_UNKNOWN if no identification can
|
||||
be made. */
|
||||
#define VIDIOC_INT_G_CHIP_IDENT _IOR ('d', 107, enum v4l2_chip_ident)
|
||||
|
||||
/* Sets I2S speed in bps. This is used to provide a standard way to select I2S
|
||||
clock used by driving digital audio streams at some board designs.
|
||||
Usual values for the frequency are 1024000 and 2048000.
|
||||
If the frequency is not supported, then -EINVAL is returned. */
|
||||
#define VIDIOC_INT_I2S_CLOCK_FREQ _IOW ('d', 108, u32)
|
||||
|
||||
/* Routing definition, device dependent. It specifies which inputs (if any)
|
||||
should be routed to which outputs (if any). */
|
||||
struct v4l2_routing {
|
||||
u32 input;
|
||||
u32 output;
|
||||
};
|
||||
|
||||
/* These internal commands should be used to define the inputs and outputs
|
||||
of an audio/video chip. They will replace the v4l2 API commands
|
||||
VIDIOC_S/G_INPUT, VIDIOC_S/G_OUTPUT, VIDIOC_S/G_AUDIO and VIDIOC_S/G_AUDOUT
|
||||
that are meant to be used by the user.
|
||||
The internal commands should be used to switch inputs/outputs
|
||||
because only the driver knows how to map a 'Television' input to the precise
|
||||
input/output routing of an A/D converter, or a DSP, or a video digitizer.
|
||||
These four commands should only be sent directly to an i2c device, they
|
||||
should not be broadcast as the routing is very device specific. */
|
||||
#define VIDIOC_INT_S_AUDIO_ROUTING _IOW ('d', 109, struct v4l2_routing)
|
||||
#define VIDIOC_INT_G_AUDIO_ROUTING _IOR ('d', 110, struct v4l2_routing)
|
||||
#define VIDIOC_INT_S_VIDEO_ROUTING _IOW ('d', 111, struct v4l2_routing)
|
||||
#define VIDIOC_INT_G_VIDEO_ROUTING _IOR ('d', 112, struct v4l2_routing)
|
||||
|
||||
struct v4l2_crystal_freq {
|
||||
u32 freq; /* frequency in Hz of the crystal */
|
||||
u32 flags; /* device specific flags */
|
||||
};
|
||||
|
||||
/* Sets the frequency of the crystal used to generate the clocks.
|
||||
An extra flags field allows device specific configuration regarding
|
||||
clock frequency dividers, etc. If not used, then set flags to 0.
|
||||
If the frequency is not supported, then -EINVAL is returned. */
|
||||
#define VIDIOC_INT_S_CRYSTAL_FREQ _IOW ('d', 113, struct v4l2_crystal_freq)
|
||||
|
||||
/* Initialize the sensor registors to some sort of reasonable
|
||||
default values. */
|
||||
#define VIDIOC_INT_INIT _IOW ('d', 114, u32)
|
||||
|
||||
#endif /* V4L2_COMMON_H_ */
|
||||
391
include/media/v4l2-dev.h
Normal file
391
include/media/v4l2-dev.h
Normal file
@@ -0,0 +1,391 @@
|
||||
/*
|
||||
*
|
||||
* V 4 L 2 D R I V E R H E L P E R A P I
|
||||
*
|
||||
* Moved from videodev2.h
|
||||
*
|
||||
* Some commonly needed functions for drivers (v4l2-common.o module)
|
||||
*/
|
||||
#ifndef _V4L2_DEV_H
|
||||
#define _V4L2_DEV_H
|
||||
|
||||
#define OBSOLETE_OWNER 1 /* to be removed soon */
|
||||
#define OBSOLETE_DEVDATA 1 /* to be removed soon */
|
||||
|
||||
#include <linux/poll.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/compiler.h> /* need __user */
|
||||
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||
#include <linux/videodev.h>
|
||||
#else
|
||||
#include <linux/videodev2.h>
|
||||
#endif
|
||||
|
||||
#include <linux/fs.h>
|
||||
|
||||
#define VIDEO_MAJOR 81
|
||||
/* Minor device allocation */
|
||||
#define MINOR_VFL_TYPE_GRABBER_MIN 0
|
||||
#define MINOR_VFL_TYPE_GRABBER_MAX 63
|
||||
#define MINOR_VFL_TYPE_RADIO_MIN 64
|
||||
#define MINOR_VFL_TYPE_RADIO_MAX 127
|
||||
#define MINOR_VFL_TYPE_VTX_MIN 192
|
||||
#define MINOR_VFL_TYPE_VTX_MAX 223
|
||||
#define MINOR_VFL_TYPE_VBI_MIN 224
|
||||
#define MINOR_VFL_TYPE_VBI_MAX 255
|
||||
|
||||
#define VFL_TYPE_GRABBER 0
|
||||
#define VFL_TYPE_VBI 1
|
||||
#define VFL_TYPE_RADIO 2
|
||||
#define VFL_TYPE_VTX 3
|
||||
|
||||
/* Video standard functions */
|
||||
extern unsigned int v4l2_video_std_fps(struct v4l2_standard *vs);
|
||||
extern char *v4l2_norm_to_name(v4l2_std_id id);
|
||||
extern int v4l2_video_std_construct(struct v4l2_standard *vs,
|
||||
int id, char *name);
|
||||
|
||||
/* prority handling */
|
||||
struct v4l2_prio_state {
|
||||
atomic_t prios[4];
|
||||
};
|
||||
int v4l2_prio_init(struct v4l2_prio_state *global);
|
||||
int v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local,
|
||||
enum v4l2_priority new);
|
||||
int v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local);
|
||||
int v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority *local);
|
||||
enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global);
|
||||
int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority *local);
|
||||
|
||||
/* names for fancy debug output */
|
||||
extern char *v4l2_field_names[];
|
||||
extern char *v4l2_type_names[];
|
||||
|
||||
/* Compatibility layer interface -- v4l1-compat module */
|
||||
typedef int (*v4l2_kioctl)(struct inode *inode, struct file *file,
|
||||
unsigned int cmd, void *arg);
|
||||
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||
int v4l_compat_translate_ioctl(struct inode *inode, struct file *file,
|
||||
int cmd, void *arg, v4l2_kioctl driver_ioctl);
|
||||
#else
|
||||
#define v4l_compat_translate_ioctl(inode,file,cmd,arg,ioctl) -EINVAL
|
||||
#endif
|
||||
|
||||
/* 32 Bits compatibility layer for 64 bits processors */
|
||||
extern long v4l_compat_ioctl32(struct file *file, unsigned int cmd,
|
||||
unsigned long arg);
|
||||
|
||||
/*
|
||||
* Newer version of video_device, handled by videodev2.c
|
||||
* This version moves redundant code from video device code to
|
||||
* the common handler
|
||||
*/
|
||||
|
||||
struct video_device
|
||||
{
|
||||
/* device ops */
|
||||
const struct file_operations *fops;
|
||||
|
||||
/* device info */
|
||||
struct device *dev;
|
||||
char name[32];
|
||||
int type; /* v4l1 */
|
||||
int type2; /* v4l2 */
|
||||
int hardware;
|
||||
int minor;
|
||||
|
||||
int debug; /* Activates debug level*/
|
||||
|
||||
/* Video standard vars */
|
||||
v4l2_std_id tvnorms; /* Supported tv norms */
|
||||
v4l2_std_id current_norm; /* Current tvnorm */
|
||||
|
||||
/* callbacks */
|
||||
void (*release)(struct video_device *vfd);
|
||||
|
||||
/* ioctl callbacks */
|
||||
|
||||
/* VIDIOC_QUERYCAP handler */
|
||||
int (*vidioc_querycap)(struct file *file, void *fh, struct v4l2_capability *cap);
|
||||
|
||||
/* Priority handling */
|
||||
int (*vidioc_g_priority) (struct file *file, void *fh,
|
||||
enum v4l2_priority *p);
|
||||
int (*vidioc_s_priority) (struct file *file, void *fh,
|
||||
enum v4l2_priority p);
|
||||
|
||||
/* VIDIOC_ENUM_FMT handlers */
|
||||
int (*vidioc_enum_fmt_cap) (struct file *file, void *fh,
|
||||
struct v4l2_fmtdesc *f);
|
||||
int (*vidioc_enum_fmt_overlay) (struct file *file, void *fh,
|
||||
struct v4l2_fmtdesc *f);
|
||||
int (*vidioc_enum_fmt_vbi) (struct file *file, void *fh,
|
||||
struct v4l2_fmtdesc *f);
|
||||
int (*vidioc_enum_fmt_vbi_capture) (struct file *file, void *fh,
|
||||
struct v4l2_fmtdesc *f);
|
||||
int (*vidioc_enum_fmt_video_output)(struct file *file, void *fh,
|
||||
struct v4l2_fmtdesc *f);
|
||||
int (*vidioc_enum_fmt_vbi_output) (struct file *file, void *fh,
|
||||
struct v4l2_fmtdesc *f);
|
||||
int (*vidioc_enum_fmt_type_private)(struct file *file, void *fh,
|
||||
struct v4l2_fmtdesc *f);
|
||||
|
||||
/* VIDIOC_G_FMT handlers */
|
||||
int (*vidioc_g_fmt_cap) (struct file *file, void *fh,
|
||||
struct v4l2_format *f);
|
||||
int (*vidioc_g_fmt_overlay) (struct file *file, void *fh,
|
||||
struct v4l2_format *f);
|
||||
int (*vidioc_g_fmt_vbi) (struct file *file, void *fh,
|
||||
struct v4l2_format *f);
|
||||
int (*vidioc_g_fmt_vbi_output) (struct file *file, void *fh,
|
||||
struct v4l2_format *f);
|
||||
int (*vidioc_g_fmt_vbi_capture)(struct file *file, void *fh,
|
||||
struct v4l2_format *f);
|
||||
int (*vidioc_g_fmt_video_output)(struct file *file, void *fh,
|
||||
struct v4l2_format *f);
|
||||
int (*vidioc_g_fmt_type_private)(struct file *file, void *fh,
|
||||
struct v4l2_format *f);
|
||||
|
||||
/* VIDIOC_S_FMT handlers */
|
||||
int (*vidioc_s_fmt_cap) (struct file *file, void *fh,
|
||||
struct v4l2_format *f);
|
||||
|
||||
int (*vidioc_s_fmt_overlay) (struct file *file, void *fh,
|
||||
struct v4l2_format *f);
|
||||
int (*vidioc_s_fmt_vbi) (struct file *file, void *fh,
|
||||
struct v4l2_format *f);
|
||||
int (*vidioc_s_fmt_vbi_output) (struct file *file, void *fh,
|
||||
struct v4l2_format *f);
|
||||
int (*vidioc_s_fmt_vbi_capture)(struct file *file, void *fh,
|
||||
struct v4l2_format *f);
|
||||
int (*vidioc_s_fmt_video_output)(struct file *file, void *fh,
|
||||
struct v4l2_format *f);
|
||||
int (*vidioc_s_fmt_type_private)(struct file *file, void *fh,
|
||||
struct v4l2_format *f);
|
||||
|
||||
/* VIDIOC_TRY_FMT handlers */
|
||||
int (*vidioc_try_fmt_cap) (struct file *file, void *fh,
|
||||
struct v4l2_format *f);
|
||||
int (*vidioc_try_fmt_overlay) (struct file *file, void *fh,
|
||||
struct v4l2_format *f);
|
||||
int (*vidioc_try_fmt_vbi) (struct file *file, void *fh,
|
||||
struct v4l2_format *f);
|
||||
int (*vidioc_try_fmt_vbi_output) (struct file *file, void *fh,
|
||||
struct v4l2_format *f);
|
||||
int (*vidioc_try_fmt_vbi_capture)(struct file *file, void *fh,
|
||||
struct v4l2_format *f);
|
||||
int (*vidioc_try_fmt_video_output)(struct file *file, void *fh,
|
||||
struct v4l2_format *f);
|
||||
int (*vidioc_try_fmt_type_private)(struct file *file, void *fh,
|
||||
struct v4l2_format *f);
|
||||
|
||||
/* Buffer handlers */
|
||||
int (*vidioc_reqbufs) (struct file *file, void *fh, struct v4l2_requestbuffers *b);
|
||||
int (*vidioc_querybuf)(struct file *file, void *fh, struct v4l2_buffer *b);
|
||||
int (*vidioc_qbuf) (struct file *file, void *fh, struct v4l2_buffer *b);
|
||||
int (*vidioc_dqbuf) (struct file *file, void *fh, struct v4l2_buffer *b);
|
||||
|
||||
|
||||
int (*vidioc_overlay) (struct file *file, void *fh, unsigned int i);
|
||||
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||
/* buffer type is struct vidio_mbuf * */
|
||||
int (*vidiocgmbuf) (struct file *file, void *fh, struct video_mbuf *p);
|
||||
#endif
|
||||
int (*vidioc_g_fbuf) (struct file *file, void *fh,
|
||||
struct v4l2_framebuffer *a);
|
||||
int (*vidioc_s_fbuf) (struct file *file, void *fh,
|
||||
struct v4l2_framebuffer *a);
|
||||
|
||||
/* Stream on/off */
|
||||
int (*vidioc_streamon) (struct file *file, void *fh, enum v4l2_buf_type i);
|
||||
int (*vidioc_streamoff)(struct file *file, void *fh, enum v4l2_buf_type i);
|
||||
|
||||
/* Standard handling
|
||||
G_STD and ENUMSTD are handled by videodev.c
|
||||
*/
|
||||
int (*vidioc_s_std) (struct file *file, void *fh, v4l2_std_id *norm);
|
||||
int (*vidioc_querystd) (struct file *file, void *fh, v4l2_std_id *a);
|
||||
|
||||
/* Input handling */
|
||||
int (*vidioc_enum_input)(struct file *file, void *fh,
|
||||
struct v4l2_input *inp);
|
||||
int (*vidioc_g_input) (struct file *file, void *fh, unsigned int *i);
|
||||
int (*vidioc_s_input) (struct file *file, void *fh, unsigned int i);
|
||||
|
||||
/* Output handling */
|
||||
int (*vidioc_enumoutput) (struct file *file, void *fh,
|
||||
struct v4l2_output *a);
|
||||
int (*vidioc_g_output) (struct file *file, void *fh, unsigned int *i);
|
||||
int (*vidioc_s_output) (struct file *file, void *fh, unsigned int i);
|
||||
|
||||
/* Control handling */
|
||||
int (*vidioc_queryctrl) (struct file *file, void *fh,
|
||||
struct v4l2_queryctrl *a);
|
||||
int (*vidioc_g_ctrl) (struct file *file, void *fh,
|
||||
struct v4l2_control *a);
|
||||
int (*vidioc_s_ctrl) (struct file *file, void *fh,
|
||||
struct v4l2_control *a);
|
||||
int (*vidioc_g_ext_ctrls) (struct file *file, void *fh,
|
||||
struct v4l2_ext_controls *a);
|
||||
int (*vidioc_s_ext_ctrls) (struct file *file, void *fh,
|
||||
struct v4l2_ext_controls *a);
|
||||
int (*vidioc_try_ext_ctrls) (struct file *file, void *fh,
|
||||
struct v4l2_ext_controls *a);
|
||||
int (*vidioc_querymenu) (struct file *file, void *fh,
|
||||
struct v4l2_querymenu *a);
|
||||
|
||||
/* Audio ioctls */
|
||||
int (*vidioc_enumaudio) (struct file *file, void *fh,
|
||||
struct v4l2_audio *a);
|
||||
int (*vidioc_g_audio) (struct file *file, void *fh,
|
||||
struct v4l2_audio *a);
|
||||
int (*vidioc_s_audio) (struct file *file, void *fh,
|
||||
struct v4l2_audio *a);
|
||||
|
||||
/* Audio out ioctls */
|
||||
int (*vidioc_enumaudout) (struct file *file, void *fh,
|
||||
struct v4l2_audioout *a);
|
||||
int (*vidioc_g_audout) (struct file *file, void *fh,
|
||||
struct v4l2_audioout *a);
|
||||
int (*vidioc_s_audout) (struct file *file, void *fh,
|
||||
struct v4l2_audioout *a);
|
||||
int (*vidioc_g_modulator) (struct file *file, void *fh,
|
||||
struct v4l2_modulator *a);
|
||||
int (*vidioc_s_modulator) (struct file *file, void *fh,
|
||||
struct v4l2_modulator *a);
|
||||
/* Crop ioctls */
|
||||
int (*vidioc_cropcap) (struct file *file, void *fh,
|
||||
struct v4l2_cropcap *a);
|
||||
int (*vidioc_g_crop) (struct file *file, void *fh,
|
||||
struct v4l2_crop *a);
|
||||
int (*vidioc_s_crop) (struct file *file, void *fh,
|
||||
struct v4l2_crop *a);
|
||||
/* Compression ioctls */
|
||||
int (*vidioc_g_mpegcomp) (struct file *file, void *fh,
|
||||
struct v4l2_mpeg_compression *a);
|
||||
int (*vidioc_s_mpegcomp) (struct file *file, void *fh,
|
||||
struct v4l2_mpeg_compression *a);
|
||||
int (*vidioc_g_jpegcomp) (struct file *file, void *fh,
|
||||
struct v4l2_jpegcompression *a);
|
||||
int (*vidioc_s_jpegcomp) (struct file *file, void *fh,
|
||||
struct v4l2_jpegcompression *a);
|
||||
int (*vidioc_g_enc_index) (struct file *file, void *fh,
|
||||
struct v4l2_enc_idx *a);
|
||||
int (*vidioc_encoder_cmd) (struct file *file, void *fh,
|
||||
struct v4l2_encoder_cmd *a);
|
||||
int (*vidioc_try_encoder_cmd) (struct file *file, void *fh,
|
||||
struct v4l2_encoder_cmd *a);
|
||||
|
||||
/* Stream type-dependent parameter ioctls */
|
||||
int (*vidioc_g_parm) (struct file *file, void *fh,
|
||||
struct v4l2_streamparm *a);
|
||||
int (*vidioc_s_parm) (struct file *file, void *fh,
|
||||
struct v4l2_streamparm *a);
|
||||
|
||||
/* Tuner ioctls */
|
||||
int (*vidioc_g_tuner) (struct file *file, void *fh,
|
||||
struct v4l2_tuner *a);
|
||||
int (*vidioc_s_tuner) (struct file *file, void *fh,
|
||||
struct v4l2_tuner *a);
|
||||
int (*vidioc_g_frequency) (struct file *file, void *fh,
|
||||
struct v4l2_frequency *a);
|
||||
int (*vidioc_s_frequency) (struct file *file, void *fh,
|
||||
struct v4l2_frequency *a);
|
||||
|
||||
/* Sliced VBI cap */
|
||||
int (*vidioc_g_sliced_vbi_cap) (struct file *file, void *fh,
|
||||
struct v4l2_sliced_vbi_cap *a);
|
||||
|
||||
/* Log status ioctl */
|
||||
int (*vidioc_log_status) (struct file *file, void *fh);
|
||||
|
||||
|
||||
/* Debugging ioctls */
|
||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||
int (*vidioc_g_register) (struct file *file, void *fh,
|
||||
struct v4l2_register *reg);
|
||||
int (*vidioc_s_register) (struct file *file, void *fh,
|
||||
struct v4l2_register *reg);
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef OBSOLETE_OWNER /* to be removed soon */
|
||||
/* obsolete -- fops->owner is used instead */
|
||||
struct module *owner;
|
||||
/* dev->driver_data will be used instead some day.
|
||||
* Use the video_{get|set}_drvdata() helper functions,
|
||||
* so the switch over will be transparent for you.
|
||||
* Or use {pci|usb}_{get|set}_drvdata() directly. */
|
||||
void *priv;
|
||||
#endif
|
||||
|
||||
/* for videodev.c intenal usage -- please don't touch */
|
||||
int users; /* video_exclusive_{open|close} ... */
|
||||
struct mutex lock; /* ... helper function uses these */
|
||||
struct class_device class_dev; /* sysfs */
|
||||
};
|
||||
|
||||
/* Version 2 functions */
|
||||
extern int video_register_device(struct video_device *vfd, int type, int nr);
|
||||
void video_unregister_device(struct video_device *);
|
||||
extern int video_ioctl2(struct inode *inode, struct file *file,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
|
||||
/* helper functions to alloc / release struct video_device, the
|
||||
later can be used for video_device->release() */
|
||||
struct video_device *video_device_alloc(void);
|
||||
void video_device_release(struct video_device *vfd);
|
||||
|
||||
/* Include support for obsoleted stuff */
|
||||
extern int video_usercopy(struct inode *inode, struct file *file,
|
||||
unsigned int cmd, unsigned long arg,
|
||||
int (*func)(struct inode *inode, struct file *file,
|
||||
unsigned int cmd, void *arg));
|
||||
|
||||
|
||||
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||
#include <linux/mm.h>
|
||||
|
||||
#define to_video_device(cd) container_of(cd, struct video_device, class_dev)
|
||||
static inline int __must_check
|
||||
video_device_create_file(struct video_device *vfd,
|
||||
struct class_device_attribute *attr)
|
||||
{
|
||||
int ret = class_device_create_file(&vfd->class_dev, attr);
|
||||
if (ret < 0)
|
||||
printk(KERN_WARNING "%s error: %d\n", __FUNCTION__, ret);
|
||||
return ret;
|
||||
}
|
||||
static inline void
|
||||
video_device_remove_file(struct video_device *vfd,
|
||||
struct class_device_attribute *attr)
|
||||
{
|
||||
class_device_remove_file(&vfd->class_dev, attr);
|
||||
}
|
||||
|
||||
#endif /* CONFIG_VIDEO_V4L1_COMPAT */
|
||||
|
||||
#ifdef OBSOLETE_OWNER /* to be removed soon */
|
||||
/* helper functions to access driver private data. */
|
||||
static inline void *video_get_drvdata(struct video_device *dev)
|
||||
{
|
||||
return dev->priv;
|
||||
}
|
||||
|
||||
static inline void video_set_drvdata(struct video_device *dev, void *data)
|
||||
{
|
||||
dev->priv = data;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef OBSOLETE_DEVDATA /* to be removed soon */
|
||||
/* Obsolete stuff - Still needed for radio devices and obsolete drivers */
|
||||
extern struct video_device* video_devdata(struct file*);
|
||||
extern int video_exclusive_open(struct inode *inode, struct file *file);
|
||||
extern int video_exclusive_release(struct inode *inode, struct file *file);
|
||||
#endif
|
||||
|
||||
#endif /* _V4L2_DEV_H */
|
||||
37
include/media/video-buf-dvb.h
Normal file
37
include/media/video-buf-dvb.h
Normal file
@@ -0,0 +1,37 @@
|
||||
#include <dvbdev.h>
|
||||
#include <dmxdev.h>
|
||||
#include <dvb_demux.h>
|
||||
#include <dvb_net.h>
|
||||
#include <dvb_frontend.h>
|
||||
|
||||
struct videobuf_dvb {
|
||||
/* filling that the job of the driver */
|
||||
char *name;
|
||||
struct dvb_frontend *frontend;
|
||||
struct videobuf_queue dvbq;
|
||||
|
||||
/* video-buf-dvb state info */
|
||||
struct mutex lock;
|
||||
struct task_struct *thread;
|
||||
int nfeeds;
|
||||
|
||||
/* videobuf_dvb_(un)register manges this */
|
||||
struct dvb_adapter adapter;
|
||||
struct dvb_demux demux;
|
||||
struct dmxdev dmxdev;
|
||||
struct dmx_frontend fe_hw;
|
||||
struct dmx_frontend fe_mem;
|
||||
struct dvb_net net;
|
||||
};
|
||||
|
||||
int videobuf_dvb_register(struct videobuf_dvb *dvb,
|
||||
struct module *module,
|
||||
void *adapter_priv,
|
||||
struct device *device);
|
||||
void videobuf_dvb_unregister(struct videobuf_dvb *dvb);
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* c-basic-offset: 8
|
||||
* End:
|
||||
*/
|
||||
289
include/media/video-buf.h
Normal file
289
include/media/video-buf.h
Normal file
@@ -0,0 +1,289 @@
|
||||
/*
|
||||
*
|
||||
* generic helper functions for video4linux capture buffers, to handle
|
||||
* memory management and PCI DMA.
|
||||
* Right now, bttv, saa7134, saa7146 and cx88 use it.
|
||||
*
|
||||
* The functions expect the hardware being able to scatter gatter
|
||||
* (i.e. the buffers are not linear in physical memory, but fragmented
|
||||
* into PAGE_SIZE chunks). They also assume the driver does not need
|
||||
* to touch the video data.
|
||||
*
|
||||
* device specific map/unmap/sync stuff now are mapped as file operations
|
||||
* to allow its usage by USB and virtual devices.
|
||||
*
|
||||
* (c) 2001,02 Gerd Knorr <kraxel@bytesex.org>
|
||||
* (c) 2006 Mauro Carvalho Chehab, <mchehab@infradead.org>
|
||||
* (c) 2006 Ted Walther and John Sokol
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*/
|
||||
|
||||
#include <linux/videodev2.h>
|
||||
#include <linux/poll.h>
|
||||
|
||||
#define UNSET (-1U)
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Return a scatterlist for some page-aligned vmalloc()'ed memory
|
||||
* block (NULL on errors). Memory for the scatterlist is allocated
|
||||
* using kmalloc. The caller must free the memory.
|
||||
*/
|
||||
struct scatterlist* videobuf_vmalloc_to_sg(unsigned char *virt, int nr_pages);
|
||||
|
||||
/*
|
||||
* Return a scatterlist for a an array of userpages (NULL on errors).
|
||||
* Memory for the scatterlist is allocated using kmalloc. The caller
|
||||
* must free the memory.
|
||||
*/
|
||||
struct scatterlist* videobuf_pages_to_sg(struct page **pages, int nr_pages,
|
||||
int offset);
|
||||
|
||||
struct videobuf_buffer;
|
||||
struct videobuf_queue;
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* A small set of helper functions to manage buffers (both userland
|
||||
* and kernel) for DMA.
|
||||
*
|
||||
* videobuf_dma_init_*()
|
||||
* creates a buffer. The userland version takes a userspace
|
||||
* pointer + length. The kernel version just wants the size and
|
||||
* does memory allocation too using vmalloc_32().
|
||||
*
|
||||
* videobuf_dma_*()
|
||||
* see Documentation/DMA-mapping.txt, these functions to
|
||||
* basically the same. The map function does also build a
|
||||
* scatterlist for the buffer (and unmap frees it ...)
|
||||
*
|
||||
* videobuf_dma_free()
|
||||
* no comment ...
|
||||
*
|
||||
*/
|
||||
|
||||
struct videobuf_dmabuf {
|
||||
u32 magic;
|
||||
|
||||
/* for userland buffer */
|
||||
int offset;
|
||||
struct page **pages;
|
||||
|
||||
/* for kernel buffers */
|
||||
void *vmalloc;
|
||||
|
||||
/* Stores the userspace pointer to vmalloc area */
|
||||
void *varea;
|
||||
|
||||
/* for overlay buffers (pci-pci dma) */
|
||||
dma_addr_t bus_addr;
|
||||
|
||||
/* common */
|
||||
struct scatterlist *sglist;
|
||||
int sglen;
|
||||
int nr_pages;
|
||||
int direction;
|
||||
};
|
||||
|
||||
void videobuf_dma_init(struct videobuf_dmabuf *dma);
|
||||
int videobuf_dma_init_user(struct videobuf_dmabuf *dma, int direction,
|
||||
unsigned long data, unsigned long size);
|
||||
int videobuf_dma_init_kernel(struct videobuf_dmabuf *dma, int direction,
|
||||
int nr_pages);
|
||||
int videobuf_dma_init_overlay(struct videobuf_dmabuf *dma, int direction,
|
||||
dma_addr_t addr, int nr_pages);
|
||||
int videobuf_dma_free(struct videobuf_dmabuf *dma);
|
||||
|
||||
int videobuf_dma_map(struct videobuf_queue* q,struct videobuf_dmabuf *dma);
|
||||
int videobuf_dma_sync(struct videobuf_queue* q,struct videobuf_dmabuf *dma);
|
||||
int videobuf_dma_unmap(struct videobuf_queue* q,struct videobuf_dmabuf *dma);
|
||||
|
||||
/*FIXME: these variants are used only on *-alsa code, where videobuf is
|
||||
* used without queue
|
||||
*/
|
||||
int videobuf_pci_dma_map(struct pci_dev *pci,struct videobuf_dmabuf *dma);
|
||||
int videobuf_pci_dma_unmap(struct pci_dev *pci,struct videobuf_dmabuf *dma);
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* A small set of helper functions to manage video4linux buffers.
|
||||
*
|
||||
* struct videobuf_buffer holds the data structures used by the helper
|
||||
* functions, additionally some commonly used fields for v4l buffers
|
||||
* (width, height, lists, waitqueue) are in there. That struct should
|
||||
* be used as first element in the drivers buffer struct.
|
||||
*
|
||||
* about the mmap helpers (videobuf_mmap_*):
|
||||
*
|
||||
* The mmaper function allows to map any subset of contingous buffers.
|
||||
* This includes one mmap() call for all buffers (which the original
|
||||
* video4linux API uses) as well as one mmap() for every single buffer
|
||||
* (which v4l2 uses).
|
||||
*
|
||||
* If there is a valid mapping for a buffer, buffer->baddr/bsize holds
|
||||
* userspace address + size which can be feeded into the
|
||||
* videobuf_dma_init_user function listed above.
|
||||
*
|
||||
*/
|
||||
|
||||
struct videobuf_mapping {
|
||||
unsigned int count;
|
||||
unsigned long start;
|
||||
unsigned long end;
|
||||
struct videobuf_queue *q;
|
||||
};
|
||||
|
||||
enum videobuf_state {
|
||||
STATE_NEEDS_INIT = 0,
|
||||
STATE_PREPARED = 1,
|
||||
STATE_QUEUED = 2,
|
||||
STATE_ACTIVE = 3,
|
||||
STATE_DONE = 4,
|
||||
STATE_ERROR = 5,
|
||||
STATE_IDLE = 6,
|
||||
};
|
||||
|
||||
struct videobuf_buffer {
|
||||
unsigned int i;
|
||||
u32 magic;
|
||||
|
||||
/* info about the buffer */
|
||||
unsigned int width;
|
||||
unsigned int height;
|
||||
unsigned int bytesperline; /* use only if != 0 */
|
||||
unsigned long size;
|
||||
unsigned int input;
|
||||
enum v4l2_field field;
|
||||
enum videobuf_state state;
|
||||
struct videobuf_dmabuf dma;
|
||||
struct list_head stream; /* QBUF/DQBUF list */
|
||||
|
||||
/* for mmap'ed buffers */
|
||||
enum v4l2_memory memory;
|
||||
size_t boff; /* buffer offset (mmap + overlay) */
|
||||
size_t bsize; /* buffer size */
|
||||
unsigned long baddr; /* buffer addr (userland ptr!) */
|
||||
struct videobuf_mapping *map;
|
||||
|
||||
/* touched by irq handler */
|
||||
struct list_head queue;
|
||||
wait_queue_head_t done;
|
||||
unsigned int field_count;
|
||||
struct timeval ts;
|
||||
};
|
||||
|
||||
typedef int (vb_map_sg_t)(void *dev,struct scatterlist *sglist,int nr_pages,
|
||||
int direction);
|
||||
|
||||
|
||||
struct videobuf_queue_ops {
|
||||
int (*buf_setup)(struct videobuf_queue *q,
|
||||
unsigned int *count, unsigned int *size);
|
||||
int (*buf_prepare)(struct videobuf_queue *q,
|
||||
struct videobuf_buffer *vb,
|
||||
enum v4l2_field field);
|
||||
void (*buf_queue)(struct videobuf_queue *q,
|
||||
struct videobuf_buffer *vb);
|
||||
void (*buf_release)(struct videobuf_queue *q,
|
||||
struct videobuf_buffer *vb);
|
||||
|
||||
/* Helper operations - device dependent.
|
||||
* If null, videobuf_init defaults all to PCI handling
|
||||
*/
|
||||
|
||||
vb_map_sg_t *vb_map_sg;
|
||||
vb_map_sg_t *vb_dma_sync_sg;
|
||||
vb_map_sg_t *vb_unmap_sg;
|
||||
};
|
||||
|
||||
struct videobuf_queue {
|
||||
struct mutex lock;
|
||||
spinlock_t *irqlock;
|
||||
void *dev; /* on pci, points to struct pci_dev */
|
||||
|
||||
enum v4l2_buf_type type;
|
||||
unsigned int inputs; /* for V4L2_BUF_FLAG_INPUT */
|
||||
unsigned int msize;
|
||||
enum v4l2_field field;
|
||||
enum v4l2_field last; /* for field=V4L2_FIELD_ALTERNATE */
|
||||
struct videobuf_buffer *bufs[VIDEO_MAX_FRAME];
|
||||
struct videobuf_queue_ops *ops;
|
||||
|
||||
/* capture via mmap() + ioctl(QBUF/DQBUF) */
|
||||
unsigned int streaming;
|
||||
struct list_head stream;
|
||||
|
||||
/* capture via read() */
|
||||
unsigned int reading;
|
||||
unsigned int read_off;
|
||||
struct videobuf_buffer *read_buf;
|
||||
|
||||
/* driver private data */
|
||||
void *priv_data;
|
||||
};
|
||||
|
||||
void* videobuf_alloc(unsigned int size);
|
||||
int videobuf_waiton(struct videobuf_buffer *vb, int non_blocking, int intr);
|
||||
int videobuf_iolock(struct videobuf_queue* q, struct videobuf_buffer *vb,
|
||||
struct v4l2_framebuffer *fbuf);
|
||||
|
||||
/* Maps fops to PCI stuff */
|
||||
void videobuf_queue_pci(struct videobuf_queue* q);
|
||||
|
||||
void videobuf_queue_init(struct videobuf_queue *q,
|
||||
struct videobuf_queue_ops *ops,
|
||||
void *dev,
|
||||
spinlock_t *irqlock,
|
||||
enum v4l2_buf_type type,
|
||||
enum v4l2_field field,
|
||||
unsigned int msize,
|
||||
void *priv);
|
||||
int videobuf_queue_is_busy(struct videobuf_queue *q);
|
||||
void videobuf_queue_cancel(struct videobuf_queue *q);
|
||||
|
||||
enum v4l2_field videobuf_next_field(struct videobuf_queue *q);
|
||||
void videobuf_status(struct v4l2_buffer *b, struct videobuf_buffer *vb,
|
||||
enum v4l2_buf_type type);
|
||||
int videobuf_reqbufs(struct videobuf_queue *q,
|
||||
struct v4l2_requestbuffers *req);
|
||||
int videobuf_querybuf(struct videobuf_queue *q, struct v4l2_buffer *b);
|
||||
int videobuf_qbuf(struct videobuf_queue *q,
|
||||
struct v4l2_buffer *b);
|
||||
int videobuf_dqbuf(struct videobuf_queue *q,
|
||||
struct v4l2_buffer *b, int nonblocking);
|
||||
int videobuf_streamon(struct videobuf_queue *q);
|
||||
int videobuf_streamoff(struct videobuf_queue *q);
|
||||
|
||||
int videobuf_read_start(struct videobuf_queue *q);
|
||||
void videobuf_read_stop(struct videobuf_queue *q);
|
||||
ssize_t videobuf_read_stream(struct videobuf_queue *q,
|
||||
char __user *data, size_t count, loff_t *ppos,
|
||||
int vbihack, int nonblocking);
|
||||
ssize_t videobuf_read_one(struct videobuf_queue *q,
|
||||
char __user *data, size_t count, loff_t *ppos,
|
||||
int nonblocking);
|
||||
unsigned int videobuf_poll_stream(struct file *file,
|
||||
struct videobuf_queue *q,
|
||||
poll_table *wait);
|
||||
|
||||
int videobuf_mmap_setup(struct videobuf_queue *q,
|
||||
unsigned int bcount, unsigned int bsize,
|
||||
enum v4l2_memory memory);
|
||||
int videobuf_mmap_free(struct videobuf_queue *q);
|
||||
int videobuf_mmap_mapper(struct videobuf_queue *q,
|
||||
struct vm_area_struct *vma);
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* c-basic-offset: 8
|
||||
* End:
|
||||
*/
|
||||
35
include/media/wm8775.h
Normal file
35
include/media/wm8775.h
Normal file
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
wm8775.h - definition for wm8775 inputs and outputs
|
||||
|
||||
Copyright (C) 2006 Hans Verkuil (hverkuil@xs4all.nl)
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef _WM8775_H_
|
||||
#define _WM8775_H_
|
||||
|
||||
/* The WM8775 has 4 inputs and one output. Zero or more inputs
|
||||
are multiplexed together to the output. Hence there are
|
||||
16 combinations.
|
||||
If only one input is active (the normal case) then the
|
||||
input values 1, 2, 4 or 8 should be used. */
|
||||
|
||||
#define WM8775_AIN1 1
|
||||
#define WM8775_AIN2 2
|
||||
#define WM8775_AIN3 4
|
||||
#define WM8775_AIN4 8
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user