mirror of
https://github.com/torvalds/linux.git
synced 2026-09-21 20:17:00 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb
* git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb: (509 commits) V4L/DVB (7078): radio: fix sf16fmi section mismatch V4L/DVB (7077): bt878: remove handcrafted PCI subsystem ID check V4L/DVB (7075): Make a local function static V4L/DVB (7074): DiB7000P: correct tuning problem for 7MHz channel V4L/DVB (7073): DiB7070: Reception quality improved V4L/DVB (7072): sets the MT2060 IF1 frequency according to EEPROM V4L/DVB (7071): DiB0700: Start streaming the right way V4L/DVB (7070): Fix some tuning problems V4L/DVB (7069): Support for myTV.t V4L/DVB (7068): Add support for WinTV Nova-T-CE driver V4L/DVB (7067): fix autoserach in the Hauppauge NOVA-T 500 V4L/DVB (7066): ASUS My Cinema U3000 Mini DVBT Tuner V4L/DVB (7065): Artec T14BR patches V4L/DVB (7063): xc5000: Fix OOPS caused by missing firmware V4L/DVB (7062): radio-si570x: Some fixes and new USB ID addition V4L/DVB (7061): radio-si470x: Some cleanups V4L/DVB (7060): em28xx: remove has_tuner V4L/DVB (7059): cx88: Ensure the tuner is reset correctly V4L/DVB (7058): IR corrections for the Pinnacle 800i V4L/DVB (7056): tuner: suppress obsolete tuner i2c address warning for XC5000 tuners ...
This commit is contained in:
@@ -125,6 +125,8 @@
|
||||
#define I2C_DRIVERID_LM4857 92 /* LM4857 Audio Amplifier */
|
||||
#define I2C_DRIVERID_VP27SMPX 93 /* Panasonic VP27s tuner internal MPX */
|
||||
#define I2C_DRIVERID_CS4270 94 /* Cirrus Logic 4270 audio codec */
|
||||
#define I2C_DRIVERID_M52790 95 /* Mitsubishi M52790SP/FP AV switch */
|
||||
#define I2C_DRIVERID_CS5345 96 /* cs5345 audio processor */
|
||||
|
||||
#define I2C_DRIVERID_I2CDEV 900
|
||||
#define I2C_DRIVERID_ARP 902 /* SMBus ARP Client */
|
||||
|
||||
39
include/media/cs5345.h
Normal file
39
include/media/cs5345.h
Normal file
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
cs5345.h - definition for cs5345 inputs and outputs
|
||||
|
||||
Copyright (C) 2007 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 _CS5345_H_
|
||||
#define _CS5345_H_
|
||||
|
||||
/* CS5345 HW inputs */
|
||||
#define CS5345_IN_MIC 0
|
||||
#define CS5345_IN_1 1
|
||||
#define CS5345_IN_2 2
|
||||
#define CS5345_IN_3 3
|
||||
#define CS5345_IN_4 4
|
||||
#define CS5345_IN_5 5
|
||||
#define CS5345_IN_6 6
|
||||
|
||||
#define CS5345_MCLK_1 0x00
|
||||
#define CS5345_MCLK_1_5 0x10
|
||||
#define CS5345_MCLK_2 0x20
|
||||
#define CS5345_MCLK_3 0x30
|
||||
#define CS5345_MCLK_4 0x40
|
||||
|
||||
#endif
|
||||
@@ -83,7 +83,7 @@ struct cx2341x_mpeg_params {
|
||||
#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,
|
||||
typedef int (*cx2341x_mbox_func)(void *priv, u32 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,
|
||||
|
||||
@@ -49,6 +49,25 @@ enum cx25840_video_input {
|
||||
CX25840_SVIDEO2 = 0x620,
|
||||
CX25840_SVIDEO3 = 0x730,
|
||||
CX25840_SVIDEO4 = 0x840,
|
||||
|
||||
/* Allow frames to specify specific input configurations */
|
||||
CX25840_VIN1_CH1 = 0x80000000,
|
||||
CX25840_VIN2_CH1 = 0x80000001,
|
||||
CX25840_VIN3_CH1 = 0x80000002,
|
||||
CX25840_VIN4_CH1 = 0x80000003,
|
||||
CX25840_VIN5_CH1 = 0x80000004,
|
||||
CX25840_VIN6_CH1 = 0x80000005,
|
||||
CX25840_VIN7_CH1 = 0x80000006,
|
||||
CX25840_VIN8_CH1 = 0x80000007,
|
||||
CX25840_VIN4_CH2 = 0x80000000,
|
||||
CX25840_VIN5_CH2 = 0x80000010,
|
||||
CX25840_VIN6_CH2 = 0x80000020,
|
||||
CX25840_NONE_CH2 = 0x80000030,
|
||||
CX25840_VIN7_CH3 = 0x80000000,
|
||||
CX25840_VIN8_CH3 = 0x80000040,
|
||||
CX25840_NONE0_CH3 = 0x80000080,
|
||||
CX25840_NONE1_CH3 = 0x800000c0,
|
||||
CX25840_SVIDEO_ON = 0x80000100,
|
||||
};
|
||||
|
||||
enum cx25840_audio_input {
|
||||
|
||||
@@ -97,7 +97,6 @@ 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);
|
||||
|
||||
@@ -141,6 +140,8 @@ 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];
|
||||
extern IR_KEYTAB_TYPE ir_codes_fusionhdtv_mce[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_behold[IR_KEYTAB_SIZE];
|
||||
extern IR_KEYTAB_TYPE ir_codes_pinnacle_pctv_hd[IR_KEYTAB_SIZE];
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
93
include/media/m52790.h
Normal file
93
include/media/m52790.h
Normal file
@@ -0,0 +1,93 @@
|
||||
/*
|
||||
m52790.h - definition for m52790 inputs and outputs
|
||||
|
||||
Copyright (C) 2007 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 _M52790_H_
|
||||
#define _M52790_H_
|
||||
|
||||
/* Input routing switch 1 */
|
||||
|
||||
#define M52790_SW1_IN_MASK 0x0003
|
||||
#define M52790_SW1_IN_TUNER 0x0000
|
||||
#define M52790_SW1_IN_V2 0x0001
|
||||
#define M52790_SW1_IN_V3 0x0002
|
||||
#define M52790_SW1_IN_V4 0x0003
|
||||
|
||||
/* Selects component input instead of composite */
|
||||
#define M52790_SW1_YCMIX 0x0004
|
||||
|
||||
|
||||
/* Input routing switch 2 */
|
||||
|
||||
#define M52790_SW2_IN_MASK 0x0300
|
||||
#define M52790_SW2_IN_TUNER 0x0000
|
||||
#define M52790_SW2_IN_V2 0x0100
|
||||
#define M52790_SW2_IN_V3 0x0200
|
||||
#define M52790_SW2_IN_V4 0x0300
|
||||
|
||||
/* Selects component input instead of composite */
|
||||
#define M52790_SW2_YCMIX 0x0400
|
||||
|
||||
|
||||
/* Output routing switch 1 */
|
||||
|
||||
/* Enable 6dB amplifier for composite out */
|
||||
#define M52790_SW1_V_AMP 0x0008
|
||||
|
||||
/* Enable 6dB amplifier for component out */
|
||||
#define M52790_SW1_YC_AMP 0x0010
|
||||
|
||||
/* Audio output mode */
|
||||
#define M52790_SW1_AUDIO_MASK 0x00c0
|
||||
#define M52790_SW1_AUDIO_MUTE 0x0000
|
||||
#define M52790_SW1_AUDIO_R 0x0040
|
||||
#define M52790_SW1_AUDIO_L 0x0080
|
||||
#define M52790_SW1_AUDIO_STEREO 0x00c0
|
||||
|
||||
|
||||
/* Output routing switch 2 */
|
||||
|
||||
/* Enable 6dB amplifier for composite out */
|
||||
#define M52790_SW2_V_AMP 0x0800
|
||||
|
||||
/* Enable 6dB amplifier for component out */
|
||||
#define M52790_SW2_YC_AMP 0x1000
|
||||
|
||||
/* Audio output mode */
|
||||
#define M52790_SW2_AUDIO_MASK 0xc000
|
||||
#define M52790_SW2_AUDIO_MUTE 0x0000
|
||||
#define M52790_SW2_AUDIO_R 0x4000
|
||||
#define M52790_SW2_AUDIO_L 0x8000
|
||||
#define M52790_SW2_AUDIO_STEREO 0xc000
|
||||
|
||||
|
||||
/* Common values */
|
||||
#define M52790_IN_TUNER (M52790_SW1_IN_TUNER | M52790_SW2_IN_TUNER)
|
||||
#define M52790_IN_V2 (M52790_SW1_IN_V2 | M52790_SW2_IN_V2)
|
||||
#define M52790_IN_V3 (M52790_SW1_IN_V3 | M52790_SW2_IN_V3)
|
||||
#define M52790_IN_V4 (M52790_SW1_IN_V4 | M52790_SW2_IN_V4)
|
||||
|
||||
#define M52790_OUT_STEREO (M52790_SW1_AUDIO_STEREO | \
|
||||
M52790_SW2_AUDIO_STEREO)
|
||||
#define M52790_OUT_AMP_STEREO (M52790_SW1_AUDIO_STEREO | \
|
||||
M52790_SW1_V_AMP | \
|
||||
M52790_SW2_AUDIO_STEREO | \
|
||||
M52790_SW2_V_AMP)
|
||||
|
||||
#endif
|
||||
@@ -1,7 +1,6 @@
|
||||
#ifndef __SAA7146_VV__
|
||||
#define __SAA7146_VV__
|
||||
|
||||
#include <linux/videodev.h>
|
||||
#include <media/v4l2-common.h>
|
||||
#include <media/saa7146.h>
|
||||
#include <media/videobuf-dma-sg.h>
|
||||
|
||||
@@ -24,8 +24,6 @@
|
||||
|
||||
#include <linux/videodev2.h>
|
||||
|
||||
extern int tuner_debug;
|
||||
|
||||
#define ADDR_UNSET (255)
|
||||
|
||||
#define TUNER_TEMIC_PAL 0 /* 4002 FH5 (3X 7756, 9483) */
|
||||
@@ -117,12 +115,13 @@ extern int tuner_debug;
|
||||
#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_XC2028 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 */
|
||||
#define TUNER_TEA5761 75 /* Only FM Radio Tuner */
|
||||
#define TUNER_XC5000 76 /* Xceive Silicon Tuner */
|
||||
|
||||
/* tv card specific */
|
||||
#define TDA9887_PRESENT (1<<0)
|
||||
|
||||
@@ -68,6 +68,9 @@ enum {
|
||||
/* module vp27smpx: just ident 2700 */
|
||||
V4L2_IDENT_VP27SMPX = 2700,
|
||||
|
||||
/* module cs5345: just ident 5345 */
|
||||
V4L2_IDENT_CS5345 = 5345,
|
||||
|
||||
/* module wm8739: just ident 8739 */
|
||||
V4L2_IDENT_WM8739 = 8739,
|
||||
|
||||
@@ -83,6 +86,9 @@ enum {
|
||||
/* module upd64083: just ident 64083 */
|
||||
V4L2_IDENT_UPD64083 = 64083,
|
||||
|
||||
/* module m52790: just ident 52790 */
|
||||
V4L2_IDENT_M52790 = 52790,
|
||||
|
||||
/* module msp34xx: reserved range 34000-34999 */
|
||||
V4L2_IDENT_MSP3400B = 34002,
|
||||
V4L2_IDENT_MSP3410B = 34102,
|
||||
|
||||
@@ -104,6 +104,17 @@ int v4l2_chip_match_host(u32 id_type, u32 chip_id);
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
/* Helper function for I2C legacy drivers */
|
||||
|
||||
struct i2c_driver;
|
||||
struct i2c_adapter;
|
||||
struct i2c_client;
|
||||
|
||||
int v4l2_i2c_attach(struct i2c_adapter *adapter, int address, struct i2c_driver *driver,
|
||||
const char *name, int (*probe)(struct i2c_client *));
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
/* Internal ioctls */
|
||||
|
||||
/* VIDIOC_INT_DECODE_VBI_LINE */
|
||||
@@ -116,6 +127,11 @@ struct v4l2_decode_vbi_line {
|
||||
u32 type; /* VBI service type (V4L2_SLICED_*). 0 if no service found */
|
||||
};
|
||||
|
||||
struct v4l2_priv_tun_config {
|
||||
int tuner;
|
||||
void *priv;
|
||||
};
|
||||
|
||||
/* audio ioctls */
|
||||
|
||||
/* v4l device was opened in Radio mode, to be replaced by VIDIOC_INT_S_TUNER_MODE */
|
||||
@@ -131,7 +147,7 @@ struct v4l2_decode_vbi_line {
|
||||
#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)
|
||||
#define TUNER_SET_CONFIG _IOW('d', 92, struct v4l2_priv_tun_config)
|
||||
|
||||
/* 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)
|
||||
|
||||
140
include/media/v4l2-i2c-drv-legacy.h
Normal file
140
include/media/v4l2-i2c-drv-legacy.h
Normal file
@@ -0,0 +1,140 @@
|
||||
/*
|
||||
* v4l2-i2c-drv-legacy.h - contains I2C handling code that's identical
|
||||
* for all V4L2 I2C drivers. Use this header if the
|
||||
* I2C driver is used by both legacy drivers and
|
||||
* drivers converted to the bus-based I2C API.
|
||||
*
|
||||
* Copyright (C) 2007 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.
|
||||
*/
|
||||
|
||||
struct v4l2_i2c_driver_data {
|
||||
const char * const name;
|
||||
int driverid;
|
||||
int (*command)(struct i2c_client *client, unsigned int cmd, void *arg);
|
||||
int (*probe)(struct i2c_client *client);
|
||||
int (*remove)(struct i2c_client *client);
|
||||
int (*suspend)(struct i2c_client *client, pm_message_t state);
|
||||
int (*resume)(struct i2c_client *client);
|
||||
int (*legacy_probe)(struct i2c_adapter *adapter);
|
||||
int legacy_class;
|
||||
};
|
||||
|
||||
static struct v4l2_i2c_driver_data v4l2_i2c_data;
|
||||
static struct i2c_client_address_data addr_data;
|
||||
static struct i2c_driver v4l2_i2c_driver_legacy;
|
||||
static char v4l2_i2c_drv_name_legacy[32];
|
||||
|
||||
static int v4l2_i2c_drv_attach_legacy(struct i2c_adapter *adapter, int address, int kind)
|
||||
{
|
||||
return v4l2_i2c_attach(adapter, address, &v4l2_i2c_driver_legacy,
|
||||
v4l2_i2c_drv_name_legacy, v4l2_i2c_data.probe);
|
||||
}
|
||||
|
||||
static int v4l2_i2c_drv_probe_legacy(struct i2c_adapter *adapter)
|
||||
{
|
||||
if (v4l2_i2c_data.legacy_probe) {
|
||||
if (v4l2_i2c_data.legacy_probe(adapter))
|
||||
return i2c_probe(adapter, &addr_data, v4l2_i2c_drv_attach_legacy);
|
||||
return 0;
|
||||
}
|
||||
if (adapter->class & v4l2_i2c_data.legacy_class)
|
||||
return i2c_probe(adapter, &addr_data, v4l2_i2c_drv_attach_legacy);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int v4l2_i2c_drv_detach_legacy(struct i2c_client *client)
|
||||
{
|
||||
int err;
|
||||
|
||||
if (v4l2_i2c_data.remove)
|
||||
v4l2_i2c_data.remove(client);
|
||||
|
||||
err = i2c_detach_client(client);
|
||||
if (err)
|
||||
return err;
|
||||
kfree(client);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int v4l2_i2c_drv_suspend_helper(struct i2c_client *client, pm_message_t state)
|
||||
{
|
||||
return v4l2_i2c_data.suspend ? v4l2_i2c_data.suspend(client, state) : 0;
|
||||
}
|
||||
|
||||
static int v4l2_i2c_drv_resume_helper(struct i2c_client *client)
|
||||
{
|
||||
return v4l2_i2c_data.resume ? v4l2_i2c_data.resume(client) : 0;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
/* i2c implementation */
|
||||
static struct i2c_driver v4l2_i2c_driver_legacy = {
|
||||
.driver = {
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.attach_adapter = v4l2_i2c_drv_probe_legacy,
|
||||
.detach_client = v4l2_i2c_drv_detach_legacy,
|
||||
.suspend = v4l2_i2c_drv_suspend_helper,
|
||||
.resume = v4l2_i2c_drv_resume_helper,
|
||||
};
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
/* i2c implementation */
|
||||
static struct i2c_driver v4l2_i2c_driver = {
|
||||
.suspend = v4l2_i2c_drv_suspend_helper,
|
||||
.resume = v4l2_i2c_drv_resume_helper,
|
||||
};
|
||||
|
||||
static int __init v4l2_i2c_drv_init(void)
|
||||
{
|
||||
int err;
|
||||
|
||||
strlcpy(v4l2_i2c_drv_name_legacy, v4l2_i2c_data.name, sizeof(v4l2_i2c_drv_name_legacy));
|
||||
strlcat(v4l2_i2c_drv_name_legacy, "'", sizeof(v4l2_i2c_drv_name_legacy));
|
||||
|
||||
if (v4l2_i2c_data.legacy_class == 0)
|
||||
v4l2_i2c_data.legacy_class = I2C_CLASS_TV_ANALOG;
|
||||
|
||||
v4l2_i2c_driver_legacy.driver.name = v4l2_i2c_drv_name_legacy;
|
||||
v4l2_i2c_driver_legacy.id = v4l2_i2c_data.driverid;
|
||||
v4l2_i2c_driver_legacy.command = v4l2_i2c_data.command;
|
||||
err = i2c_add_driver(&v4l2_i2c_driver_legacy);
|
||||
|
||||
if (err)
|
||||
return err;
|
||||
v4l2_i2c_driver.driver.name = v4l2_i2c_data.name;
|
||||
v4l2_i2c_driver.id = v4l2_i2c_data.driverid;
|
||||
v4l2_i2c_driver.command = v4l2_i2c_data.command;
|
||||
v4l2_i2c_driver.probe = v4l2_i2c_data.probe;
|
||||
v4l2_i2c_driver.remove = v4l2_i2c_data.remove;
|
||||
err = i2c_add_driver(&v4l2_i2c_driver);
|
||||
if (err)
|
||||
i2c_del_driver(&v4l2_i2c_driver_legacy);
|
||||
return err;
|
||||
}
|
||||
|
||||
static void __exit v4l2_i2c_drv_cleanup(void)
|
||||
{
|
||||
i2c_del_driver(&v4l2_i2c_driver_legacy);
|
||||
i2c_del_driver(&v4l2_i2c_driver);
|
||||
}
|
||||
|
||||
module_init(v4l2_i2c_drv_init);
|
||||
module_exit(v4l2_i2c_drv_cleanup);
|
||||
68
include/media/v4l2-i2c-drv.h
Normal file
68
include/media/v4l2-i2c-drv.h
Normal file
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* v4l2-i2c-drv.h - contains I2C handling code that's identical for
|
||||
* all V4L2 I2C drivers. Use this header if the
|
||||
* I2C driver is only used by drivers converted
|
||||
* to the bus-based I2C API.
|
||||
*
|
||||
* Copyright (C) 2007 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 __V4L2_I2C_DRV_H__
|
||||
#define __V4L2_I2C_DRV_H__
|
||||
|
||||
#include <media/v4l2-common.h>
|
||||
|
||||
struct v4l2_i2c_driver_data {
|
||||
const char * const name;
|
||||
int driverid;
|
||||
int (*command)(struct i2c_client *client, unsigned int cmd, void *arg);
|
||||
int (*probe)(struct i2c_client *client);
|
||||
int (*remove)(struct i2c_client *client);
|
||||
int (*suspend)(struct i2c_client *client, pm_message_t state);
|
||||
int (*resume)(struct i2c_client *client);
|
||||
int (*legacy_probe)(struct i2c_adapter *adapter);
|
||||
int legacy_class;
|
||||
};
|
||||
|
||||
static struct v4l2_i2c_driver_data v4l2_i2c_data;
|
||||
static struct i2c_driver v4l2_i2c_driver;
|
||||
|
||||
|
||||
/* Bus-based I2C implementation for kernels >= 2.6.22 */
|
||||
|
||||
static int __init v4l2_i2c_drv_init(void)
|
||||
{
|
||||
v4l2_i2c_driver.driver.name = v4l2_i2c_data.name;
|
||||
v4l2_i2c_driver.id = v4l2_i2c_data.driverid;
|
||||
v4l2_i2c_driver.command = v4l2_i2c_data.command;
|
||||
v4l2_i2c_driver.probe = v4l2_i2c_data.probe;
|
||||
v4l2_i2c_driver.remove = v4l2_i2c_data.remove;
|
||||
v4l2_i2c_driver.suspend = v4l2_i2c_data.suspend;
|
||||
v4l2_i2c_driver.resume = v4l2_i2c_data.resume;
|
||||
return i2c_add_driver(&v4l2_i2c_driver);
|
||||
}
|
||||
|
||||
|
||||
static void __exit v4l2_i2c_drv_cleanup(void)
|
||||
{
|
||||
i2c_del_driver(&v4l2_i2c_driver);
|
||||
}
|
||||
|
||||
module_init(v4l2_i2c_drv_init);
|
||||
module_exit(v4l2_i2c_drv_cleanup);
|
||||
|
||||
#endif /* __V4L2_I2C_DRV_H__ */
|
||||
@@ -44,9 +44,8 @@ enum v4l2_int_type {
|
||||
struct v4l2_int_device;
|
||||
|
||||
struct v4l2_int_master {
|
||||
int (*attach)(struct v4l2_int_device *master,
|
||||
struct v4l2_int_device *slave);
|
||||
void (*detach)(struct v4l2_int_device *master);
|
||||
int (*attach)(struct v4l2_int_device *slave);
|
||||
void (*detach)(struct v4l2_int_device *slave);
|
||||
};
|
||||
|
||||
typedef int (v4l2_int_ioctl_func)(struct v4l2_int_device *);
|
||||
|
||||
@@ -56,13 +56,13 @@ struct videobuf_mapping {
|
||||
};
|
||||
|
||||
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,
|
||||
VIDEOBUF_NEEDS_INIT = 0,
|
||||
VIDEOBUF_PREPARED = 1,
|
||||
VIDEOBUF_QUEUED = 2,
|
||||
VIDEOBUF_ACTIVE = 3,
|
||||
VIDEOBUF_DONE = 4,
|
||||
VIDEOBUF_ERROR = 5,
|
||||
VIDEOBUF_IDLE = 6,
|
||||
};
|
||||
|
||||
struct videobuf_buffer {
|
||||
@@ -162,12 +162,14 @@ struct videobuf_queue {
|
||||
struct videobuf_queue_ops *ops;
|
||||
struct videobuf_qtype_ops *int_ops;
|
||||
|
||||
unsigned int streaming:1;
|
||||
unsigned int reading:1;
|
||||
unsigned int is_mmapped:1;
|
||||
|
||||
/* 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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user