Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
d56410e0
cloud-kernel
项目概览
openanolis
/
cloud-kernel
11 个月 前同步成功
通知
150
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d56410e0
编写于
3月 25, 2006
作者:
M
Mauro Carvalho Chehab
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
V4L/DVB (3599b): Whitespace cleanups under drivers/media
Signed-off-by:
N
Mauro Carvalho Chehab
<
mchehab@infradead.org
>
上级
9f6933be
变更
102
展开全部
隐藏空白更改
内联
并排
Showing
102 changed file
with
3012 addition
and
3012 deletion
+3012
-3012
drivers/media/video/Kconfig
drivers/media/video/Kconfig
+14
-14
drivers/media/video/adv7170.c
drivers/media/video/adv7170.c
+5
-5
drivers/media/video/adv7175.c
drivers/media/video/adv7175.c
+3
-3
drivers/media/video/arv.c
drivers/media/video/arv.c
+27
-27
drivers/media/video/bt819.c
drivers/media/video/bt819.c
+5
-5
drivers/media/video/bt856.c
drivers/media/video/bt856.c
+2
-2
drivers/media/video/bw-qcam.c
drivers/media/video/bw-qcam.c
+53
-53
drivers/media/video/c-qcam.c
drivers/media/video/c-qcam.c
+33
-33
drivers/media/video/cpia.c
drivers/media/video/cpia.c
+328
-328
drivers/media/video/cpia.h
drivers/media/video/cpia.h
+26
-26
drivers/media/video/cpia_pp.c
drivers/media/video/cpia_pp.c
+53
-53
drivers/media/video/cpia_usb.c
drivers/media/video/cpia_usb.c
+20
-20
drivers/media/video/cs8420.h
drivers/media/video/cs8420.h
+1
-1
drivers/media/video/dabusb.c
drivers/media/video/dabusb.c
+9
-9
drivers/media/video/dabusb.h
drivers/media/video/dabusb.h
+2
-2
drivers/media/video/dsbr100.c
drivers/media/video/dsbr100.c
+22
-22
drivers/media/video/et61x251/et61x251.h
drivers/media/video/et61x251/et61x251.h
+4
-4
drivers/media/video/et61x251/et61x251_core.c
drivers/media/video/et61x251/et61x251_core.c
+105
-105
drivers/media/video/et61x251/et61x251_sensor.h
drivers/media/video/et61x251/et61x251_sensor.h
+10
-10
drivers/media/video/et61x251/et61x251_tas5130d1b.c
drivers/media/video/et61x251/et61x251_tas5130d1b.c
+5
-5
drivers/media/video/ov511.c
drivers/media/video/ov511.c
+46
-46
drivers/media/video/ov511.h
drivers/media/video/ov511.h
+4
-4
drivers/media/video/ovcamchip/Makefile
drivers/media/video/ovcamchip/Makefile
+1
-1
drivers/media/video/ovcamchip/ovcamchip_core.c
drivers/media/video/ovcamchip/ovcamchip_core.c
+3
-3
drivers/media/video/ovcamchip/ovcamchip_priv.h
drivers/media/video/ovcamchip/ovcamchip_priv.h
+1
-1
drivers/media/video/planb.c
drivers/media/video/planb.c
+64
-64
drivers/media/video/planb.h
drivers/media/video/planb.h
+3
-3
drivers/media/video/pms.c
drivers/media/video/pms.c
+68
-68
drivers/media/video/pwc/Makefile
drivers/media/video/pwc/Makefile
+1
-1
drivers/media/video/pwc/philips.txt
drivers/media/video/pwc/philips.txt
+33
-33
drivers/media/video/pwc/pwc-ctrl.c
drivers/media/video/pwc/pwc-ctrl.c
+187
-187
drivers/media/video/pwc/pwc-if.c
drivers/media/video/pwc/pwc-if.c
+151
-151
drivers/media/video/pwc/pwc-ioctl.h
drivers/media/video/pwc/pwc-ioctl.h
+20
-20
drivers/media/video/pwc/pwc-kiara.c
drivers/media/video/pwc/pwc-kiara.c
+144
-144
drivers/media/video/pwc/pwc-misc.c
drivers/media/video/pwc/pwc-misc.c
+13
-13
drivers/media/video/pwc/pwc-nala.h
drivers/media/video/pwc/pwc-nala.h
+1
-1
drivers/media/video/pwc/pwc-timon.c
drivers/media/video/pwc/pwc-timon.c
+144
-144
drivers/media/video/pwc/pwc-uncompress.c
drivers/media/video/pwc/pwc-uncompress.c
+3
-3
drivers/media/video/pwc/pwc-uncompress.h
drivers/media/video/pwc/pwc-uncompress.h
+1
-1
drivers/media/video/pwc/pwc.h
drivers/media/video/pwc/pwc.h
+2
-2
drivers/media/video/saa5249.c
drivers/media/video/saa5249.c
+56
-56
drivers/media/video/saa7110.c
drivers/media/video/saa7110.c
+2
-2
drivers/media/video/saa7111.c
drivers/media/video/saa7111.c
+2
-2
drivers/media/video/saa7114.c
drivers/media/video/saa7114.c
+6
-6
drivers/media/video/saa7121.h
drivers/media/video/saa7121.h
+3
-3
drivers/media/video/saa7146.h
drivers/media/video/saa7146.h
+5
-5
drivers/media/video/saa7146reg.h
drivers/media/video/saa7146reg.h
+2
-2
drivers/media/video/saa7185.c
drivers/media/video/saa7185.c
+2
-2
drivers/media/video/saa7196.h
drivers/media/video/saa7196.h
+2
-2
drivers/media/video/se401.c
drivers/media/video/se401.c
+108
-108
drivers/media/video/se401.h
drivers/media/video/se401.h
+3
-3
drivers/media/video/sn9c102/Makefile
drivers/media/video/sn9c102/Makefile
+3
-3
drivers/media/video/sn9c102/sn9c102.h
drivers/media/video/sn9c102/sn9c102.h
+4
-4
drivers/media/video/sn9c102/sn9c102_core.c
drivers/media/video/sn9c102/sn9c102_core.c
+132
-132
drivers/media/video/sn9c102/sn9c102_hv7131d.c
drivers/media/video/sn9c102/sn9c102_hv7131d.c
+8
-8
drivers/media/video/sn9c102/sn9c102_mi0343.c
drivers/media/video/sn9c102/sn9c102_mi0343.c
+53
-53
drivers/media/video/sn9c102/sn9c102_ov7630.c
drivers/media/video/sn9c102/sn9c102_ov7630.c
+7
-7
drivers/media/video/sn9c102/sn9c102_pas106b.c
drivers/media/video/sn9c102/sn9c102_pas106b.c
+8
-8
drivers/media/video/sn9c102/sn9c102_pas202bca.c
drivers/media/video/sn9c102/sn9c102_pas202bca.c
+3
-3
drivers/media/video/sn9c102/sn9c102_pas202bcb.c
drivers/media/video/sn9c102/sn9c102_pas202bcb.c
+9
-9
drivers/media/video/sn9c102/sn9c102_sensor.h
drivers/media/video/sn9c102/sn9c102_sensor.h
+35
-35
drivers/media/video/sn9c102/sn9c102_tas5110c1b.c
drivers/media/video/sn9c102/sn9c102_tas5110c1b.c
+6
-6
drivers/media/video/sn9c102/sn9c102_tas5130d1b.c
drivers/media/video/sn9c102/sn9c102_tas5130d1b.c
+6
-6
drivers/media/video/stradis.c
drivers/media/video/stradis.c
+5
-5
drivers/media/video/stv680.c
drivers/media/video/stv680.c
+24
-24
drivers/media/video/stv680.h
drivers/media/video/stv680.h
+71
-71
drivers/media/video/tda9840.c
drivers/media/video/tda9840.c
+1
-1
drivers/media/video/tea6415c.c
drivers/media/video/tea6415c.c
+1
-1
drivers/media/video/tea6420.c
drivers/media/video/tea6420.c
+1
-1
drivers/media/video/tuner-3036.c
drivers/media/video/tuner-3036.c
+25
-25
drivers/media/video/usbvideo/ibmcam.c
drivers/media/video/usbvideo/ibmcam.c
+5
-5
drivers/media/video/usbvideo/konicawc.c
drivers/media/video/usbvideo/konicawc.c
+24
-24
drivers/media/video/usbvideo/ultracam.c
drivers/media/video/usbvideo/ultracam.c
+1
-1
drivers/media/video/usbvideo/usbvideo.c
drivers/media/video/usbvideo/usbvideo.c
+21
-21
drivers/media/video/usbvideo/usbvideo.h
drivers/media/video/usbvideo/usbvideo.h
+5
-5
drivers/media/video/usbvideo/vicam.c
drivers/media/video/usbvideo/vicam.c
+14
-14
drivers/media/video/videocodec.h
drivers/media/video/videocodec.h
+26
-26
drivers/media/video/vino.c
drivers/media/video/vino.c
+2
-2
drivers/media/video/vpx3220.c
drivers/media/video/vpx3220.c
+10
-10
drivers/media/video/w9966.c
drivers/media/video/w9966.c
+51
-51
drivers/media/video/w9968cf.c
drivers/media/video/w9968cf.c
+465
-465
drivers/media/video/w9968cf.h
drivers/media/video/w9968cf.h
+6
-6
drivers/media/video/w9968cf_decoder.h
drivers/media/video/w9968cf_decoder.h
+4
-4
drivers/media/video/w9968cf_vpp.h
drivers/media/video/w9968cf_vpp.h
+1
-1
drivers/media/video/zc0301/zc0301.h
drivers/media/video/zc0301/zc0301.h
+3
-3
drivers/media/video/zc0301/zc0301_core.c
drivers/media/video/zc0301/zc0301_core.c
+74
-74
drivers/media/video/zc0301/zc0301_pas202bcb.c
drivers/media/video/zc0301/zc0301_pas202bcb.c
+6
-6
drivers/media/video/zc0301/zc0301_sensor.h
drivers/media/video/zc0301/zc0301_sensor.h
+2
-2
drivers/media/video/zoran.h
drivers/media/video/zoran.h
+1
-1
drivers/media/video/zoran_card.c
drivers/media/video/zoran_card.c
+1
-1
drivers/media/video/zoran_card.h
drivers/media/video/zoran_card.h
+1
-1
drivers/media/video/zoran_device.c
drivers/media/video/zoran_device.c
+8
-8
drivers/media/video/zoran_device.h
drivers/media/video/zoran_device.h
+1
-1
drivers/media/video/zoran_driver.c
drivers/media/video/zoran_driver.c
+8
-8
drivers/media/video/zoran_procfs.c
drivers/media/video/zoran_procfs.c
+1
-1
drivers/media/video/zoran_procfs.h
drivers/media/video/zoran_procfs.h
+1
-1
drivers/media/video/zr36016.c
drivers/media/video/zr36016.c
+11
-11
drivers/media/video/zr36050.c
drivers/media/video/zr36050.c
+8
-8
drivers/media/video/zr36057.h
drivers/media/video/zr36057.h
+5
-5
drivers/media/video/zr36060.c
drivers/media/video/zr36060.c
+10
-10
drivers/media/video/zr36120.c
drivers/media/video/zr36120.c
+23
-23
drivers/media/video/zr36120.h
drivers/media/video/zr36120.h
+3
-3
未找到文件。
drivers/media/video/Kconfig
浏览文件 @
d56410e0
...
...
@@ -370,7 +370,7 @@ config VIDEO_SAA7127
#
menu "V4L USB devices"
depends on USB && VIDEO_DEV
depends on USB && VIDEO_DEV
source "drivers/media/video/em28xx/Kconfig"
...
...
@@ -528,17 +528,17 @@ config USB_W9968CF
---help---
Say Y here if you want support for cameras based on OV681 or
Winbond W9967CF/W9968CF JPEG USB Dual Mode Camera Chips.
This driver has an optional plugin, which is distributed as a
separate module only (released under GPL). It allows to use higher
resolutions and framerates, but cannot be included in the official
separate module only (released under GPL). It allows to use higher
resolutions and framerates, but cannot be included in the official
Linux kernel for performance purposes.
See <file:Documentation/usb/w9968cf.txt> for more informations.
This driver uses the Video For Linux and the I2C APIs. It needs the
OmniVision Camera Chip support as well. You must say Y or M to
"Video For Linux", "I2C Support" and "OmniVision Camera Chip
"Video For Linux", "I2C Support" and "OmniVision Camera Chip
support" to use this driver.
To compile this driver as a module, choose M here: the
...
...
@@ -564,20 +564,20 @@ config USB_PWC
depends on USB && VIDEO_DEV
---help---
Say Y or M here if you want to use one of these Philips & OEM
webcams:
* Philips PCA645, PCA646
* Philips PCVC675, PCVC680, PCVC690
* Philips PCVC720/40, PCVC730, PCVC740, PCVC750
webcams:
* Philips PCA645, PCA646
* Philips PCVC675, PCVC680, PCVC690
* Philips PCVC720/40, PCVC730, PCVC740, PCVC750
* Askey VC010
* Logitech QuickCam Pro 3000, 4000, 'Zoom', 'Notebook Pro'
and 'Orbit'/'Sphere'
* Samsung MPC-C10, MPC-C30
* Logitech QuickCam Pro 3000, 4000, 'Zoom', 'Notebook Pro'
and 'Orbit'/'Sphere'
* Samsung MPC-C10, MPC-C30
* Creative Webcam 5, Pro Ex
* SOTEC Afina Eye
* Visionite VCS-UC300, VCS-UM100
The PCA635, PCVC665 and PCVC720/20 are not supported by this driver
and never will be, but the 665 and 720/20 are supported by other
and never will be, but the 665 and 720/20 are supported by other
drivers.
See <file:Documentation/usb/philips.txt> for more information and
...
...
drivers/media/video/adv7170.c
浏览文件 @
d56410e0
/*
/*
* adv7170 - adv7170, adv7171 video encoder driver version 0.0.1
*
* Copyright (C) 2002 Maxim Yevtyushkin <max@linuxmedialabs.com>
*
* Based on adv7176 driver by:
* Based on adv7176 driver by:
*
* Copyright (C) 1998 Dave Perks <dperks@ibm.net>
* Copyright (C) 1999 Wolfgang Scherr <scherr@net4you.net>
...
...
@@ -173,7 +173,7 @@ adv7170_write_block (struct i2c_client *client,
static
const
unsigned
char
init_NTSC
[]
=
{
0x00
,
0x10
,
// MR0
0x01
,
0x20
,
// MR1
0x02
,
0x0e
,
// MR2 RTC control: bits 2 and 1
0x02
,
0x0e
,
// MR2 RTC control: bits 2 and 1
0x03
,
0x80
,
// MR3
0x04
,
0x30
,
// MR4
0x05
,
0x00
,
// Reserved
...
...
@@ -196,7 +196,7 @@ static const unsigned char init_NTSC[] = {
0x16
,
0x00
,
// CGMS_WSS_0
0x17
,
0x00
,
// CGMS_WSS_1
0x18
,
0x00
,
// CGMS_WSS_2
0x19
,
0x00
,
// Teletext Ctl
0x19
,
0x00
,
// Teletext Ctl
};
static
const
unsigned
char
init_PAL
[]
=
{
...
...
@@ -381,7 +381,7 @@ static unsigned short normal_i2c[] =
};
static
unsigned
short
ignore
=
I2C_CLIENT_END
;
static
struct
i2c_client_address_data
addr_data
=
{
.
normal_i2c
=
normal_i2c
,
.
probe
=
&
ignore
,
...
...
drivers/media/video/adv7175.c
浏览文件 @
d56410e0
/*
/*
* adv7175 - adv7175a video encoder driver version 0.0.3
*
* Copyright (C) 1998 Dave Perks <dperks@ibm.net>
...
...
@@ -233,7 +233,7 @@ adv7175_command (struct i2c_client *client,
sizeof
(
init_common
));
adv7175_write
(
client
,
0x07
,
TR0MODE
|
TR0RST
);
adv7175_write
(
client
,
0x07
,
TR0MODE
);
break
;
break
;
case
ENCODER_GET_CAPABILITIES
:
{
...
...
@@ -399,7 +399,7 @@ static unsigned short normal_i2c[] =
};
static
unsigned
short
ignore
=
I2C_CLIENT_END
;
static
struct
i2c_client_address_data
addr_data
=
{
.
normal_i2c
=
normal_i2c
,
.
probe
=
&
ignore
,
...
...
drivers/media/video/arv.c
浏览文件 @
d56410e0
...
...
@@ -161,39 +161,39 @@ void iic(int n, unsigned long addr, unsigned long data1, unsigned long data2,
{
int
i
;
/* Slave Address */
ar_outl
(
addr
,
PLDI2CDATA
);
/* Slave Address */
ar_outl
(
addr
,
PLDI2CDATA
);
wait_for_vsync
();
/* Start */
ar_outl
(
1
,
PLDI2CCND
);
/* Start */
ar_outl
(
1
,
PLDI2CCND
);
wait_acknowledge
();
/* Transfer data 1 */
ar_outl
(
data1
,
PLDI2CDATA
);
ar_outl
(
data1
,
PLDI2CDATA
);
wait_for_vsync
();
ar_outl
(
PLDI2CSTEN_STEN
,
PLDI2CSTEN
);
ar_outl
(
PLDI2CSTEN_STEN
,
PLDI2CSTEN
);
wait_acknowledge
();
/* Transfer data 2 */
ar_outl
(
data2
,
PLDI2CDATA
);
ar_outl
(
data2
,
PLDI2CDATA
);
wait_for_vsync
();
ar_outl
(
PLDI2CSTEN_STEN
,
PLDI2CSTEN
);
ar_outl
(
PLDI2CSTEN_STEN
,
PLDI2CSTEN
);
wait_acknowledge
();
if
(
n
==
3
)
{
/* Transfer data 3 */
ar_outl
(
data3
,
PLDI2CDATA
);
ar_outl
(
data3
,
PLDI2CDATA
);
wait_for_vsync
();
ar_outl
(
PLDI2CSTEN_STEN
,
PLDI2CSTEN
);
ar_outl
(
PLDI2CSTEN_STEN
,
PLDI2CSTEN
);
wait_acknowledge
();
}
}
/* Stop */
/* Stop */
for
(
i
=
0
;
i
<
100
;
i
++
)
cpu_relax
();
ar_outl
(
2
,
PLDI2CCND
);
ar_outl
(
2
,
PLDI2CCND
);
ar_outl
(
2
,
PLDI2CCND
);
ar_outl
(
2
,
PLDI2CCND
);
while
(
ar_inl
(
PLDI2CSTS
)
&
PLDI2CSTS_BB
)
cpu_relax
();
...
...
@@ -204,24 +204,24 @@ void init_iic(void)
{
DEBUG
(
1
,
"init_iic:
\n
"
);
/*
/*
* ICU Setting (iic)
*/
/* I2C Setting */
ar_outl
(
0x0
,
PLDI2CCR
);
/* I2CCR Disable */
ar_outl
(
0x0300
,
PLDI2CMOD
);
/* I2CMOD ACK/8b-data/7b-addr/auto */
ar_outl
(
0x1
,
PLDI2CACK
);
/* I2CACK ACK */
/* I2C Setting */
ar_outl
(
0x0
,
PLDI2CCR
);
/* I2CCR Disable */
ar_outl
(
0x0300
,
PLDI2CMOD
);
/* I2CMOD ACK/8b-data/7b-addr/auto */
ar_outl
(
0x1
,
PLDI2CACK
);
/* I2CACK ACK */
/* I2C CLK */
/* 50MH-100k */
/* 50MH-100k */
if
(
freq
==
75
)
{
ar_outl
(
369
,
PLDI2CFREQ
);
/* BCLK = 75MHz */
ar_outl
(
369
,
PLDI2CFREQ
);
/* BCLK = 75MHz */
}
else
if
(
freq
==
50
)
{
ar_outl
(
244
,
PLDI2CFREQ
);
/* BCLK = 50MHz */
}
else
{
ar_outl
(
244
,
PLDI2CFREQ
);
/* default: BCLK = 50MHz */
}
ar_outl
(
0x1
,
PLDI2CCR
);
/* I2CCR Enable */
ar_outl
(
0x1
,
PLDI2CCR
);
/* I2CCR Enable */
}
/**************************************************************************
...
...
@@ -253,7 +253,7 @@ static inline void wait_for_vertical_sync(int exp_line)
/*
* check HCOUNT because we cannot check vertical sync.
*/
*/
for
(;
tmout
>=
0
;
tmout
--
)
{
l
=
ar_inl
(
ARVHCOUNT
);
if
(
l
==
exp_line
)
...
...
@@ -562,8 +562,8 @@ static void ar_interrupt(int irq, void *dev, struct pt_regs *regs)
/* operations for interlace mode */
if
(
line_count
<
(
AR_HEIGHT_VGA
/
2
)
)
/* even line */
line_number
=
(
line_count
<<
1
);
else
/* odd line */
line_number
=
else
/* odd line */
line_number
=
(((
line_count
-
(
AR_HEIGHT_VGA
/
2
))
<<
1
)
+
1
);
}
else
{
line_number
=
line_count
;
...
...
@@ -651,7 +651,7 @@ static int ar_initialize(struct video_device *dev)
cr
|=
ARVCR1_NORMAL
;
ar_outl
(
cr
,
ARVCR1
);
/*
/*
* Initialize IIC so that CPU can communicate with AR LSI,
* and send boot commands to AR LSI.
*/
...
...
@@ -846,7 +846,7 @@ static int __init ar_init(void)
* so register video device as a frame grabber type.
* device is named "video[0-64]".
* video_register_device() initializes h/w using ar_initialize().
*/
*/
if
(
video_register_device
(
ar
->
vdev
,
VFL_TYPE_GRABBER
,
video_nr
)
!=
0
)
{
/* return -1, -ENFILE(full) or others */
printk
(
"arv: register video (Colour AR) failed.
\n
"
);
...
...
drivers/media/video/bt819.c
浏览文件 @
d56410e0
/*
/*
* bt819 - BT819A VideoStream Decoder (Rockwell Part)
*
* Copyright (C) 1999 Mike Bernson <mike@mlb.org>
...
...
@@ -6,7 +6,7 @@
*
* Modifications for LML33/DC10plus unified driver
* Copyright (C) 2000 Serguei Miridonov <mirsev@cicese.mx>
*
*
* Changes by Ronald Bultje <rbultje@ronald.bitfreak.net>
* - moved over to linux>=2.4.x i2c protocol (9/9/2002)
*
...
...
@@ -206,9 +206,9 @@ bt819_init (struct i2c_client *client)
Bug in the bt819 stepping on my board?
*/
0x14
,
0x00
,
/* 0x14 Vertial Scaling lsb */
0x16
,
0x07
,
/* 0x16 Video Timing Polarity
0x16
,
0x07
,
/* 0x16 Video Timing Polarity
ACTIVE=active low
FIELD: high=odd,
FIELD: high=odd,
vreset=active high,
hreset=active high */
0x18
,
0x68
,
/* 0x18 AGC Delay */
...
...
@@ -497,7 +497,7 @@ static unsigned short normal_i2c[] = {
};
static
unsigned
short
ignore
=
I2C_CLIENT_END
;
static
struct
i2c_client_address_data
addr_data
=
{
.
normal_i2c
=
normal_i2c
,
.
probe
=
&
ignore
,
...
...
drivers/media/video/bt856.c
浏览文件 @
d56410e0
/*
/*
* bt856 - BT856A Digital Video Encoder (Rockwell Part)
*
* Copyright (C) 1999 Mike Bernson <mike@mlb.org>
...
...
@@ -285,7 +285,7 @@ bt856_command (struct i2c_client *client,
static
unsigned
short
normal_i2c
[]
=
{
I2C_BT856
>>
1
,
I2C_CLIENT_END
};
static
unsigned
short
ignore
=
I2C_CLIENT_END
;
static
struct
i2c_client_address_data
addr_data
=
{
.
normal_i2c
=
normal_i2c
,
.
probe
=
&
ignore
,
...
...
drivers/media/video/bw-qcam.c
浏览文件 @
d56410e0
...
...
@@ -150,7 +150,7 @@ static int qc_calibrate(struct qcam_device *q)
static
struct
qcam_device
*
qcam_init
(
struct
parport
*
port
)
{
struct
qcam_device
*
q
;
q
=
kmalloc
(
sizeof
(
struct
qcam_device
),
GFP_KERNEL
);
if
(
q
==
NULL
)
return
NULL
;
...
...
@@ -158,16 +158,16 @@ static struct qcam_device *qcam_init(struct parport *port)
q
->
pport
=
port
;
q
->
pdev
=
parport_register_device
(
port
,
"bw-qcam"
,
NULL
,
NULL
,
NULL
,
0
,
NULL
);
if
(
q
->
pdev
==
NULL
)
if
(
q
->
pdev
==
NULL
)
{
printk
(
KERN_ERR
"bw-qcam: couldn't register for %s.
\n
"
,
port
->
name
);
kfree
(
q
);
return
NULL
;
}
memcpy
(
&
q
->
vdev
,
&
qcam_template
,
sizeof
(
qcam_template
));
mutex_init
(
&
q
->
lock
);
q
->
port_mode
=
(
QC_ANY
|
QC_NOTSET
);
...
...
@@ -236,12 +236,12 @@ static int qc_waithand(struct qcam_device *q, int val)
while
(
!
((
status
=
read_lpstatus
(
q
))
&
8
))
{
/* 1000 is enough spins on the I/O for all normal
cases, at that point we start to poll slowly
cases, at that point we start to poll slowly
until the camera wakes up. However, we are
busy blocked until the camera responds, so
setting it lower is much better for interactive
response. */
if
(
runs
++>
maxpoll
)
{
msleep_interruptible
(
5
);
...
...
@@ -255,12 +255,12 @@ static int qc_waithand(struct qcam_device *q, int val)
while
(((
status
=
read_lpstatus
(
q
))
&
8
))
{
/* 1000 is enough spins on the I/O for all normal
cases, at that point we start to poll slowly
cases, at that point we start to poll slowly
until the camera wakes up. However, we are
busy blocked until the camera responds, so
setting it lower is much better for interactive
response. */
if
(
runs
++>
maxpoll
)
{
msleep_interruptible
(
5
);
...
...
@@ -282,17 +282,17 @@ static unsigned int qc_waithand2(struct qcam_device *q, int val)
{
unsigned
int
status
;
int
runs
=
0
;
do
do
{
status
=
read_lpdata
(
q
);
/* 1000 is enough spins on the I/O for all normal
cases, at that point we start to poll slowly
cases, at that point we start to poll slowly
until the camera wakes up. However, we are
busy blocked until the camera responds, so
setting it lower is much better for interactive
response. */
if
(
runs
++>
maxpoll
)
{
msleep_interruptible
(
5
);
...
...
@@ -321,7 +321,7 @@ static int qc_detect(struct qcam_device *q)
lastreg
=
reg
=
read_lpstatus
(
q
)
&
0xf0
;
for
(
i
=
0
;
i
<
500
;
i
++
)
for
(
i
=
0
;
i
<
500
;
i
++
)
{
reg
=
read_lpstatus
(
q
)
&
0xf0
;
if
(
reg
!=
lastreg
)
...
...
@@ -357,7 +357,7 @@ static int qc_detect(struct qcam_device *q)
static
void
qc_reset
(
struct
qcam_device
*
q
)
{
switch
(
q
->
port_mode
&
QC_FORCE_MASK
)
switch
(
q
->
port_mode
&
QC_FORCE_MASK
)
{
case
QC_FORCE_UNIDIR
:
q
->
port_mode
=
(
q
->
port_mode
&
~
QC_MODE_MASK
)
|
QC_UNIDIR
;
...
...
@@ -370,7 +370,7 @@ static void qc_reset(struct qcam_device *q)
case
QC_ANY
:
write_lpcontrol
(
q
,
0x20
);
write_lpdata
(
q
,
0x75
);
if
(
read_lpdata
(
q
)
!=
0x75
)
{
q
->
port_mode
=
(
q
->
port_mode
&
~
QC_MODE_MASK
)
|
QC_BIDIR
;
}
else
{
...
...
@@ -398,8 +398,8 @@ static void qc_reset(struct qcam_device *q)
static
int
qc_setscanmode
(
struct
qcam_device
*
q
)
{
int
old_mode
=
q
->
mode
;
switch
(
q
->
transfer_scale
)
switch
(
q
->
transfer_scale
)
{
case
1
:
q
->
mode
=
0
;
...
...
@@ -412,7 +412,7 @@ static int qc_setscanmode(struct qcam_device *q)
break
;
}
switch
(
q
->
bpp
)
switch
(
q
->
bpp
)
{
case
4
:
break
;
...
...
@@ -421,7 +421,7 @@ static int qc_setscanmode(struct qcam_device *q)
break
;
}
switch
(
q
->
port_mode
&
QC_MODE_MASK
)
switch
(
q
->
port_mode
&
QC_MODE_MASK
)
{
case
QC_BIDIR
:
q
->
mode
+=
1
;
...
...
@@ -430,10 +430,10 @@ static int qc_setscanmode(struct qcam_device *q)
case
QC_UNIDIR
:
break
;
}
if
(
q
->
mode
!=
old_mode
)
q
->
status
|=
QC_PARAM_CHANGE
;
return
0
;
}
...
...
@@ -451,7 +451,7 @@ static void qc_set(struct qcam_device *q)
/* Set the brightness. Yes, this is repetitive, but it works.
* Shorter versions seem to fail subtly. Feel free to try :-). */
/* I think the problem was in qc_command, not here -- bls */
qc_command
(
q
,
0xb
);
qc_command
(
q
,
q
->
brightness
);
...
...
@@ -502,13 +502,13 @@ static inline int qc_readbytes(struct qcam_device *q, char buffer[])
unsigned
int
hi2
,
lo2
;
static
int
state
=
0
;
if
(
buffer
==
NULL
)
if
(
buffer
==
NULL
)
{
state
=
0
;
return
0
;
}
switch
(
q
->
port_mode
&
QC_MODE_MASK
)
switch
(
q
->
port_mode
&
QC_MODE_MASK
)
{
case
QC_BIDIR
:
/* Bi-directional Port */
write_lpcontrol
(
q
,
0x26
);
...
...
@@ -517,7 +517,7 @@ static inline int qc_readbytes(struct qcam_device *q, char buffer[])
write_lpcontrol
(
q
,
0x2e
);
lo2
=
(
qc_waithand2
(
q
,
0
)
>>
1
);
hi2
=
(
read_lpstatus
(
q
)
>>
3
)
&
0x1f
;
switch
(
q
->
bpp
)
switch
(
q
->
bpp
)
{
case
4
:
buffer
[
0
]
=
lo
&
0xf
;
...
...
@@ -544,7 +544,7 @@ static inline int qc_readbytes(struct qcam_device *q, char buffer[])
write_lpcontrol
(
q
,
0xe
);
hi
=
(
qc_waithand
(
q
,
0
)
&
0xf0
)
>>
4
;
switch
(
q
->
bpp
)
switch
(
q
->
bpp
)
{
case
4
:
buffer
[
0
]
=
lo
;
...
...
@@ -552,7 +552,7 @@ static inline int qc_readbytes(struct qcam_device *q, char buffer[])
ret
=
2
;
break
;
case
6
:
switch
(
state
)
switch
(
state
)
{
case
0
:
buffer
[
0
]
=
(
lo
<<
2
)
|
((
hi
&
0xc
)
>>
2
);
...
...
@@ -604,13 +604,13 @@ static long qc_capture(struct qcam_device * q, char __user *buf, unsigned long l
int
shift
=
8
-
q
->
bpp
;
char
invert
;
if
(
q
->
mode
==
-
1
)
if
(
q
->
mode
==
-
1
)
return
-
ENXIO
;
qc_command
(
q
,
0x7
);
qc_command
(
q
,
q
->
mode
);
if
((
q
->
port_mode
&
QC_MODE_MASK
)
==
QC_BIDIR
)
if
((
q
->
port_mode
&
QC_MODE_MASK
)
==
QC_BIDIR
)
{
write_lpcontrol
(
q
,
0x2e
);
/* turn port around */
write_lpcontrol
(
q
,
0x26
);
...
...
@@ -618,7 +618,7 @@ static long qc_capture(struct qcam_device * q, char __user *buf, unsigned long l
write_lpcontrol
(
q
,
0x2e
);
(
void
)
qc_waithand
(
q
,
0
);
}
/* strange -- should be 15:63 below, but 4bpp is odd */
invert
=
(
q
->
bpp
==
4
)
?
16
:
63
;
...
...
@@ -629,15 +629,15 @@ static long qc_capture(struct qcam_device * q, char __user *buf, unsigned long l
q
->
transfer_scale
;
transperline
=
(
transperline
+
divisor
-
1
)
/
divisor
;
for
(
i
=
0
,
yield
=
yieldlines
;
i
<
linestotrans
;
i
++
)
for
(
i
=
0
,
yield
=
yieldlines
;
i
<
linestotrans
;
i
++
)
{
for
(
pixels_read
=
j
=
0
;
j
<
transperline
;
j
++
)
for
(
pixels_read
=
j
=
0
;
j
<
transperline
;
j
++
)
{
bytes
=
qc_readbytes
(
q
,
buffer
);
for
(
k
=
0
;
k
<
bytes
&&
(
pixels_read
+
k
)
<
pixels_per_line
;
k
++
)
for
(
k
=
0
;
k
<
bytes
&&
(
pixels_read
+
k
)
<
pixels_per_line
;
k
++
)
{
int
o
;
if
(
buffer
[
k
]
==
0
&&
invert
==
16
)
if
(
buffer
[
k
]
==
0
&&
invert
==
16
)
{
/* 4bpp is odd (again) -- inverter is 16, not 15, but output
must be 0-15 -- bls */
...
...
@@ -653,7 +653,7 @@ static long qc_capture(struct qcam_device * q, char __user *buf, unsigned long l
pixels_read
+=
bytes
;
}
(
void
)
qc_readbytes
(
q
,
NULL
);
/* reset state machine */
/* Grabbing an entire frame from the quickcam is a lengthy
process. We don't (usually) want to busy-block the
processor for the entire frame. yieldlines is a module
...
...
@@ -666,7 +666,7 @@ static long qc_capture(struct qcam_device * q, char __user *buf, unsigned long l
}
}
if
((
q
->
port_mode
&
QC_MODE_MASK
)
==
QC_BIDIR
)
if
((
q
->
port_mode
&
QC_MODE_MASK
)
==
QC_BIDIR
)
{
write_lpcontrol
(
q
,
2
);
write_lpcontrol
(
q
,
6
);
...
...
@@ -687,7 +687,7 @@ static int qcam_do_ioctl(struct inode *inode, struct file *file,
{
struct
video_device
*
dev
=
video_devdata
(
file
);
struct
qcam_device
*
qcam
=
(
struct
qcam_device
*
)
dev
;
switch
(
cmd
)
{
case
VIDIOCGCAP
:
...
...
@@ -762,7 +762,7 @@ static int qcam_do_ioctl(struct inode *inode, struct file *file,
return
-
EINVAL
;
if
(
p
->
depth
!=
4
&&
p
->
depth
!=
6
)
return
-
EINVAL
;
/*
* Now load the camera.
*/
...
...
@@ -790,11 +790,11 @@ static int qcam_do_ioctl(struct inode *inode, struct file *file,
return
-
EINVAL
;
if
(
vw
->
width
<
80
||
vw
->
width
>
320
)
return
-
EINVAL
;
qcam
->
width
=
320
;
qcam
->
height
=
240
;
qcam
->
transfer_scale
=
4
;
if
(
vw
->
width
>=
160
&&
vw
->
height
>=
120
)
{
qcam
->
transfer_scale
=
2
;
...
...
@@ -808,11 +808,11 @@ static int qcam_do_ioctl(struct inode *inode, struct file *file,
mutex_lock
(
&
qcam
->
lock
);
qc_setscanmode
(
qcam
);
mutex_unlock
(
&
qcam
->
lock
);
/* We must update the camera before we grab. We could
just have changed the grab size */
qcam
->
status
|=
QC_PARAM_CHANGE
;
/* Ok we figured out what to use from our wide choice */
return
0
;
}
...
...
@@ -853,9 +853,9 @@ static ssize_t qcam_read(struct file *file, char __user *buf,
struct
qcam_device
*
qcam
=
(
struct
qcam_device
*
)
v
;
int
len
;
parport_claim_or_block
(
qcam
->
pdev
);
mutex_lock
(
&
qcam
->
lock
);
qc_reset
(
qcam
);
/* Update the camera parameters if we need to */
...
...
@@ -863,13 +863,13 @@ static ssize_t qcam_read(struct file *file, char __user *buf,
qc_set
(
qcam
);
len
=
qc_capture
(
qcam
,
buf
,
count
);
mutex_unlock
(
&
qcam
->
lock
);
parport_release
(
qcam
->
pdev
);
return
len
;
}
static
struct
file_operations
qcam_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
video_exclusive_open
,
...
...
@@ -905,11 +905,11 @@ static int init_bwqcam(struct parport *port)
qcam
=
qcam_init
(
port
);
if
(
qcam
==
NULL
)
return
-
ENODEV
;
parport_claim_or_block
(
qcam
->
pdev
);
qc_reset
(
qcam
);
if
(
qc_detect
(
qcam
)
==
0
)
{
parport_release
(
qcam
->
pdev
);
...
...
@@ -920,9 +920,9 @@ static int init_bwqcam(struct parport *port)
qc_calibrate
(
qcam
);
parport_release
(
qcam
->
pdev
);
printk
(
KERN_INFO
"Connectix Quickcam on %s
\n
"
,
qcam
->
pport
->
name
);
if
(
video_register_device
(
&
qcam
->
vdev
,
VFL_TYPE_GRABBER
,
video_nr
)
==-
1
)
{
parport_unregister_device
(
qcam
->
pdev
);
...
...
@@ -1013,7 +1013,7 @@ static int __init init_bw_qcams(void)
printk
(
"Connectix Quickcam max-poll was above 5000. Using 5000.
\n
"
);
maxpoll
=
5000
;
}
if
(
yieldlines
<
1
)
{
printk
(
"Connectix Quickcam yieldlines was less than 1. Using 1.
\n
"
);
yieldlines
=
1
;
...
...
drivers/media/video/c-qcam.c
浏览文件 @
d56410e0
...
...
@@ -16,7 +16,7 @@
*
* The parport parameter controls which parports will be scanned.
* Scanning all parports causes some printers to print a garbage page.
* -- March 14, 1999 Billy Donahue <billy@escape.com>
* -- March 14, 1999 Billy Donahue <billy@escape.com>
*
* Fixed data format to BGR, added force_rgb parameter. Added missing
* parport_unregister_driver() on module removal.
...
...
@@ -88,7 +88,7 @@ static inline unsigned int qcam_ready2(struct qcam_device *qcam)
return
(
parport_read_data
(
qcam
->
pport
)
&
0x1
)
?
1
:
0
;
}
static
unsigned
int
qcam_await_ready1
(
struct
qcam_device
*
qcam
,
static
unsigned
int
qcam_await_ready1
(
struct
qcam_device
*
qcam
,
int
value
)
{
unsigned
long
oldjiffies
=
jiffies
;
...
...
@@ -98,7 +98,7 @@ static unsigned int qcam_await_ready1(struct qcam_device *qcam,
if
(
qcam_ready1
(
qcam
)
==
value
)
return
0
;
/* If the camera didn't respond within 1/25 second, poll slowly
/* If the camera didn't respond within 1/25 second, poll slowly
for a while. */
for
(
i
=
0
;
i
<
50
;
i
++
)
{
...
...
@@ -123,7 +123,7 @@ static unsigned int qcam_await_ready2(struct qcam_device *qcam, int value)
if
(
qcam_ready2
(
qcam
)
==
value
)
return
0
;
/* If the camera didn't respond within 1/25 second, poll slowly
/* If the camera didn't respond within 1/25 second, poll slowly
for a while. */
for
(
i
=
0
;
i
<
50
;
i
++
)
{
...
...
@@ -157,12 +157,12 @@ static int qcam_write_data(struct qcam_device *qcam, unsigned int data)
unsigned
int
idata
;
parport_write_data
(
qcam
->
pport
,
data
);
idata
=
qcam_read_data
(
qcam
);
if
(
data
!=
idata
)
if
(
data
!=
idata
)
{
printk
(
KERN_WARNING
"cqcam: sent %x but received %x
\n
"
,
data
,
printk
(
KERN_WARNING
"cqcam: sent %x but received %x
\n
"
,
data
,
idata
);
return
1
;
}
}
return
0
;
}
...
...
@@ -193,12 +193,12 @@ static int qc_detect(struct qcam_device *qcam)
no device was found". Fix this one day. */
if
(
qcam
->
pport
->
probe_info
[
0
].
class
==
PARPORT_CLASS_MEDIA
&&
qcam
->
pport
->
probe_info
[
0
].
model
&&
!
strcmp
(
qcam
->
pdev
->
port
->
probe_info
[
0
].
model
,
&&
!
strcmp
(
qcam
->
pdev
->
port
->
probe_info
[
0
].
model
,
"Color QuickCam 2.0"
))
{
printk
(
KERN_DEBUG
"QuickCam: Found by IEEE1284 probe.
\n
"
);
return
1
;
}
if
(
probe
<
2
)
return
0
;
...
...
@@ -206,11 +206,11 @@ static int qc_detect(struct qcam_device *qcam)
/* look for a heartbeat */
ostat
=
stat
=
parport_read_status
(
qcam
->
pport
);
for
(
i
=
0
;
i
<
250
;
i
++
)
for
(
i
=
0
;
i
<
250
;
i
++
)
{
mdelay
(
1
);
stat
=
parport_read_status
(
qcam
->
pport
);
if
(
ostat
!=
stat
)
if
(
ostat
!=
stat
)
{
if
(
++
count
>=
3
)
return
1
;
ostat
=
stat
;
...
...
@@ -226,11 +226,11 @@ static int qc_detect(struct qcam_device *qcam)
count
=
0
;
ostat
=
stat
=
parport_read_status
(
qcam
->
pport
);
for
(
i
=
0
;
i
<
250
;
i
++
)
for
(
i
=
0
;
i
<
250
;
i
++
)
{
mdelay
(
1
);
stat
=
parport_read_status
(
qcam
->
pport
);
if
(
ostat
!=
stat
)
if
(
ostat
!=
stat
)
{
if
(
++
count
>=
3
)
return
1
;
ostat
=
stat
;
...
...
@@ -247,7 +247,7 @@ static void qc_reset(struct qcam_device *qcam)
parport_write_control
(
qcam
->
pport
,
0x8
);
mdelay
(
1
);
parport_write_control
(
qcam
->
pport
,
0xc
);
mdelay
(
1
);
mdelay
(
1
);
}
/* Reset the QuickCam and program for brightness, contrast,
...
...
@@ -258,7 +258,7 @@ static void qc_setup(struct qcam_device *q)
qc_reset
(
q
);
/* Set the brightness. */
qcam_set
(
q
,
11
,
q
->
brightness
);
qcam_set
(
q
,
11
,
q
->
brightness
);
/* Set the height and width. These refer to the actual
CCD area *before* applying the selected decimation. */
...
...
@@ -272,12 +272,12 @@ static void qc_setup(struct qcam_device *q)
/* Set contrast and white balance. */
qcam_set
(
q
,
0x19
,
q
->
contrast
);
qcam_set
(
q
,
0x1f
,
q
->
whitebal
);
/* Set the speed. */
qcam_set
(
q
,
45
,
2
);
}
/* Read some bytes from the camera and put them in the buffer.
/* Read some bytes from the camera and put them in the buffer.
nbytes should be a multiple of 3, because bidirectional mode gives
us three bytes at a time. */
...
...
@@ -383,7 +383,7 @@ static long qc_capture(struct qcam_device *q, char __user *buf, unsigned long le
if
(
qcam_set
(
q
,
7
,
(
q
->
mode
|
(
is_bi_dir
?
1
:
0
))
+
1
))
return
-
EIO
;
lines
=
q
->
height
;
pixelsperline
=
q
->
width
;
bitsperxfer
=
(
is_bi_dir
)
?
24
:
8
;
...
...
@@ -499,7 +499,7 @@ static int qcam_do_ioctl(struct inode *inode, struct file *file,
{
struct
video_device
*
dev
=
video_devdata
(
file
);
struct
qcam_device
*
qcam
=
(
struct
qcam_device
*
)
dev
;
switch
(
cmd
)
{
case
VIDIOCGCAP
:
...
...
@@ -574,7 +574,7 @@ static int qcam_do_ioctl(struct inode *inode, struct file *file,
*/
if
(
p
->
depth
!=
24
||
p
->
palette
!=
VIDEO_PALETTE_RGB24
)
return
-
EINVAL
;
/*
* Now load the camera.
*/
...
...
@@ -584,7 +584,7 @@ static int qcam_do_ioctl(struct inode *inode, struct file *file,
mutex_lock
(
&
qcam
->
lock
);
parport_claim_or_block
(
qcam
->
pdev
);
qc_setup
(
qcam
);
qc_setup
(
qcam
);
parport_release
(
qcam
->
pdev
);
mutex_unlock
(
&
qcam
->
lock
);
return
0
;
...
...
@@ -601,11 +601,11 @@ static int qcam_do_ioctl(struct inode *inode, struct file *file,
return
-
EINVAL
;
if
(
vw
->
width
<
80
||
vw
->
width
>
320
)
return
-
EINVAL
;
qcam
->
width
=
80
;
qcam
->
height
=
60
;
qcam
->
mode
=
QC_DECIMATION_4
;
if
(
vw
->
width
>=
160
&&
vw
->
height
>=
120
)
{
qcam
->
width
=
160
;
...
...
@@ -627,7 +627,7 @@ static int qcam_do_ioctl(struct inode *inode, struct file *file,
qcam->mode = QC_BILLIONS | QC_DECIMATION_1;
}
#endif
/* Ok we figured out what to use from our
/* Ok we figured out what to use from our
wide choice */
mutex_lock
(
&
qcam
->
lock
);
parport_claim_or_block
(
qcam
->
pdev
);
...
...
@@ -676,7 +676,7 @@ static ssize_t qcam_read(struct file *file, char __user *buf,
mutex_lock
(
&
qcam
->
lock
);
parport_claim_or_block
(
qcam
->
pdev
);
/* Probably should have a semaphore against multiple users */
len
=
qc_capture
(
qcam
,
buf
,
count
);
len
=
qc_capture
(
qcam
,
buf
,
count
);
parport_release
(
qcam
->
pdev
);
mutex_unlock
(
&
qcam
->
lock
);
return
len
;
...
...
@@ -707,7 +707,7 @@ static struct video_device qcam_template=
static
struct
qcam_device
*
qcam_init
(
struct
parport
*
port
)
{
struct
qcam_device
*
q
;
q
=
kmalloc
(
sizeof
(
struct
qcam_device
),
GFP_KERNEL
);
if
(
q
==
NULL
)
return
NULL
;
...
...
@@ -718,14 +718,14 @@ static struct qcam_device *qcam_init(struct parport *port)
q
->
bidirectional
=
(
q
->
pport
->
modes
&
PARPORT_MODE_TRISTATE
)
?
1
:
0
;
if
(
q
->
pdev
==
NULL
)
if
(
q
->
pdev
==
NULL
)
{
printk
(
KERN_ERR
"c-qcam: couldn't register for %s.
\n
"
,
port
->
name
);
kfree
(
q
);
return
NULL
;
}
memcpy
(
&
q
->
vdev
,
&
qcam_template
,
sizeof
(
qcam_template
));
mutex_init
(
&
q
->
lock
);
...
...
@@ -766,11 +766,11 @@ static int init_cqcam(struct parport *port)
qcam
=
qcam_init
(
port
);
if
(
qcam
==
NULL
)
return
-
ENODEV
;
parport_claim_or_block
(
qcam
->
pdev
);
qc_reset
(
qcam
);
if
(
probe
&&
qc_detect
(
qcam
)
==
0
)
{
parport_release
(
qcam
->
pdev
);
...
...
@@ -782,7 +782,7 @@ static int init_cqcam(struct parport *port)
qc_setup
(
qcam
);
parport_release
(
qcam
->
pdev
);
if
(
video_register_device
(
&
qcam
->
vdev
,
VFL_TYPE_GRABBER
,
video_nr
)
==-
1
)
{
printk
(
KERN_ERR
"Unable to register Colour QuickCam on %s
\n
"
,
...
...
@@ -792,9 +792,9 @@ static int init_cqcam(struct parport *port)
return
-
ENODEV
;
}
printk
(
KERN_INFO
"video%d: Colour QuickCam found on %s
\n
"
,
printk
(
KERN_INFO
"video%d: Colour QuickCam found on %s
\n
"
,
qcam
->
vdev
.
minor
,
qcam
->
pport
->
name
);
qcams
[
num_cams
++
]
=
qcam
;
return
0
;
...
...
drivers/media/video/cpia.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/cpia.h
浏览文件 @
d56410e0
...
...
@@ -52,10 +52,10 @@
struct
cpia_camera_ops
{
/* open sets privdata to point to structure for this camera.
* Returns negative value on error, otherwise 0.
* Returns negative value on error, otherwise 0.
*/
int
(
*
open
)(
void
*
privdata
);
/* Registers callback function cb to be called with cbdata
* when an image is ready. If cb is NULL, only single image grabs
* should be used. cb should immediately call streamRead to read
...
...
@@ -63,8 +63,8 @@ struct cpia_camera_ops
* otherwise 0.
*/
int
(
*
registerCallback
)(
void
*
privdata
,
void
(
*
cb
)(
void
*
cbdata
),
void
*
cbdata
);
void
*
cbdata
);
/* transferCmd sends commands to the camera. command MUST point to
* an 8 byte buffer in kernel space. data can be NULL if no extra
* data is needed. The size of the data is given by the last 2
...
...
@@ -77,30 +77,30 @@ struct cpia_camera_ops
* Returns negative value on error, otherwise 0.
*/
int
(
*
streamStart
)(
void
*
privdata
);
/* streamStop terminates stream capture mode.
* Returns negative value on error, otherwise 0.
*/
int
(
*
streamStop
)(
void
*
privdata
);
/* streamRead reads a frame from the camera. buffer points to a
* buffer large enough to hold a complete frame in kernel space.
* noblock indicates if this should be a non blocking read.
* buffer large enough to hold a complete frame in kernel space.
* noblock indicates if this should be a non blocking read.
* Returns the number of bytes read, or negative value on error.
*/
*/
int
(
*
streamRead
)(
void
*
privdata
,
u8
*
buffer
,
int
noblock
);
/* close disables the device until open() is called again.
* Returns negative value on error, otherwise 0.
*/
int
(
*
close
)(
void
*
privdata
);
/* If wait_for_stream_ready is non-zero, wait until the streamState
* is STREAM_READY before calling streamRead.
*/
int
wait_for_stream_ready
;
/*
/*
* Used to maintain lowlevel module usage counts
*/
struct
module
*
owner
;
...
...
@@ -215,14 +215,14 @@ struct cam_params {
u8
videoSize
;
/* CIF/QCIF */
u8
subSample
;
u8
yuvOrder
;
}
format
;
struct
{
/* Intel QX3 specific data */
u8
qx3_detected
;
/* a QX3 is present */
u8
toplight
;
/* top light lit , R/W */
u8
bottomlight
;
/* bottom light lit, R/W */
u8
button
;
/* snapshot button pressed (R/O) */
u8
cradled
;
/* microscope is in cradle (R/O) */
}
qx3
;
}
format
;
struct
{
/* Intel QX3 specific data */
u8
qx3_detected
;
/* a QX3 is present */
u8
toplight
;
/* top light lit , R/W */
u8
bottomlight
;
/* bottom light lit, R/W */
u8
button
;
/* snapshot button pressed (R/O) */
u8
cradled
;
/* microscope is in cradle (R/O) */
}
qx3
;
struct
{
u8
colStart
;
/* skip first 8*colStart pixels */
u8
colEnd
;
/* finish at 8*colEnd pixels */
...
...
@@ -247,13 +247,13 @@ enum v4l_camstates {
struct
cam_data
{
struct
list_head
cam_data_list
;
struct
mutex
busy_lock
;
/* guard against SMP multithreading */
struct
mutex
busy_lock
;
/* guard against SMP multithreading */
struct
cpia_camera_ops
*
ops
;
/* lowlevel driver operations */
void
*
lowlevel_data
;
/* private data for lowlevel driver */
u8
*
raw_image
;
/* buffer for raw image data */
struct
cpia_frame
decompressed_frame
;
/* buffer to hold decompressed frame */
int
image_size
;
/* sizeof last decompressed image */
/* buffer to hold decompressed frame */
int
image_size
;
/* sizeof last decompressed image */
int
open_count
;
/* # of process that have camera open */
/* camera status */
...
...
@@ -265,7 +265,7 @@ struct cam_data {
struct
mutex
param_lock
;
/* params lock for this camera */
struct
cam_params
params
;
/* camera settings */
struct
proc_dir_entry
*
proc_entry
;
/* /proc/cpia/videoX */
/* v4l */
int
video_size
;
/* VIDEO_SIZE_ */
volatile
enum
v4l_camstates
camstate
;
/* v4l layer status */
...
...
@@ -277,7 +277,7 @@ struct cam_data {
/* mmap interface */
int
curframe
;
/* the current frame to grab into */
u8
*
frame_buf
;
/* frame buffer data */
struct
cpia_frame
frame
[
FRAME_NUM
];
struct
cpia_frame
frame
[
FRAME_NUM
];
/* FRAME_NUM-buffering, so we need a array */
int
first_frame
;
...
...
@@ -424,7 +424,7 @@ void cpia_unregister_camera(struct cam_data *cam);
#define DEB_BYTE(p)\
DBG("%1d %1d %1d %1d %1d %1d %1d %1d \n",\
(p)&0x80?1:0, (p)&0x40?1:0, (p)&0x20?1:0, (p)&0x10?1:0,\
(p)&0x08?1:0, (p)&0x04?1:0, (p)&0x02?1:0, (p)&0x01?1:0);
(p)&0x08?1:0, (p)&0x04?1:0, (p)&0x02?1:0, (p)&0x01?1:0);
#endif
/* __KERNEL__ */
...
...
drivers/media/video/cpia_pp.c
浏览文件 @
d56410e0
...
...
@@ -23,7 +23,7 @@
*/
/* define _CPIA_DEBUG_ for verbose debug output (see cpia.h) */
/* #define _CPIA_DEBUG_ 1 */
/* #define _CPIA_DEBUG_ 1 */
#include <linux/config.h>
...
...
@@ -45,7 +45,7 @@
static
int
cpia_pp_open
(
void
*
privdata
);
static
int
cpia_pp_registerCallback
(
void
*
privdata
,
void
(
*
cb
)
(
void
*
cbdata
),
void
*
cbdata
);
void
*
cbdata
);
static
int
cpia_pp_transferCmd
(
void
*
privdata
,
u8
*
command
,
u8
*
data
);
static
int
cpia_pp_streamStart
(
void
*
privdata
);
static
int
cpia_pp_streamStop
(
void
*
privdata
);
...
...
@@ -93,7 +93,7 @@ struct pp_cam_entry {
int
stream_irq
;
};
static
struct
cpia_camera_ops
cpia_pp_ops
=
static
struct
cpia_camera_ops
cpia_pp_ops
=
{
cpia_pp_open
,
cpia_pp_registerCallback
,
...
...
@@ -123,7 +123,7 @@ static void cpia_parport_disable_irq( struct parport *port ) {
}
/* Special CPiA PPC modes: These are invoked by using the 1284 Extensibility
* Link Flag during negotiation */
* Link Flag during negotiation */
#define UPLOAD_FLAG 0x08
#define NIBBLE_TRANSFER 0x01
#define ECP_TRANSFER 0x03
...
...
@@ -139,17 +139,17 @@ static void cpia_parport_disable_irq( struct parport *port ) {
/* CPiA nonstandard "Nibble" mode (no nDataAvail signal after each byte). */
/* The standard kernel parport_ieee1284_read_nibble() fails with the CPiA... */
static
size_t
cpia_read_nibble
(
struct
parport
*
port
,
void
*
buffer
,
size_t
len
,
static
size_t
cpia_read_nibble
(
struct
parport
*
port
,
void
*
buffer
,
size_t
len
,
int
flags
)
{
/* adapted verbatim, with one change, from
/* adapted verbatim, with one change, from
parport_ieee1284_read_nibble() in drivers/parport/ieee1284-ops.c */
unsigned
char
*
buf
=
buffer
;
int
i
;
unsigned
char
byte
=
0
;
len
*=
2
;
/* in nibbles */
for
(
i
=
0
;
i
<
len
;
i
++
)
{
unsigned
char
nibble
;
...
...
@@ -158,12 +158,12 @@ static size_t cpia_read_nibble (struct parport *port,
* after every second nibble to signal that more
* data is available. (the total number of Bytes that
* should be sent is known; if too few are received, an error
* will be recorded after a timeout).
* will be recorded after a timeout).
* This is incompatible with parport_ieee1284_read_nibble(),
* which expects to find nFault LO after every second nibble.
*/
/* Solution: modify cpia_read_nibble to only check for
/* Solution: modify cpia_read_nibble to only check for
* nDataAvail before the first nibble is sent.
*/
...
...
@@ -216,7 +216,7 @@ static size_t cpia_read_nibble (struct parport *port,
/* Second nibble */
byte
|=
nibble
<<
4
;
*
buf
++
=
byte
;
}
else
}
else
byte
=
nibble
;
}
...
...
@@ -238,18 +238,18 @@ static size_t cpia_read_nibble (struct parport *port,
}
/* CPiA nonstandard "Nibble Stream" mode (2 nibbles per cycle, instead of 1)
* (See CPiA Data sheet p. 31)
*
* "Nibble Stream" mode used by CPiA for uploads to non-ECP ports is a
* nonstandard variant of nibble mode which allows the same (mediocre)
* data flow of 8 bits per cycle as software-enabled ECP by TRISTATE-capable
* (See CPiA Data sheet p. 31)
*
* "Nibble Stream" mode used by CPiA for uploads to non-ECP ports is a
* nonstandard variant of nibble mode which allows the same (mediocre)
* data flow of 8 bits per cycle as software-enabled ECP by TRISTATE-capable
* parallel ports, but works also for non-TRISTATE-capable ports.
* (Standard nibble mode only send 4 bits per cycle)
*
*/
static
size_t
cpia_read_nibble_stream
(
struct
parport
*
port
,
void
*
buffer
,
size_t
len
,
static
size_t
cpia_read_nibble_stream
(
struct
parport
*
port
,
void
*
buffer
,
size_t
len
,
int
flags
)
{
int
i
;
...
...
@@ -260,7 +260,7 @@ static size_t cpia_read_nibble_stream(struct parport *port,
unsigned
char
nibble
[
2
],
byte
=
0
;
int
j
;
/* Image Data is complete when 4 consecutive EOI bytes (0xff) are seen */
/* Image Data is complete when 4 consecutive EOI bytes (0xff) are seen */
if
(
endseen
>
3
)
break
;
...
...
@@ -268,7 +268,7 @@ static size_t cpia_read_nibble_stream(struct parport *port,
parport_frob_control
(
port
,
PARPORT_CONTROL_AUTOFD
,
PARPORT_CONTROL_AUTOFD
);
/* Event 9: nAck goes low. */
port
->
ieee1284
.
phase
=
IEEE1284_PH_REV_DATA
;
if
(
parport_wait_peripheral
(
port
,
...
...
@@ -282,7 +282,7 @@ static size_t cpia_read_nibble_stream(struct parport *port,
/* Read lower nibble */
nibble
[
0
]
=
parport_read_status
(
port
)
>>
3
;
/* Event 10: Set nAutoFd high. */
parport_frob_control
(
port
,
PARPORT_CONTROL_AUTOFD
,
0
);
...
...
@@ -295,10 +295,10 @@ static size_t cpia_read_nibble_stream(struct parport *port,
port
->
name
);
break
;
}
/* Read upper nibble */
nibble
[
1
]
=
parport_read_status
(
port
)
>>
3
;
/* reassemble the byte */
for
(
j
=
0
;
j
<
2
;
j
++
)
{
nibble
[
j
]
&=
~
8
;
...
...
@@ -335,8 +335,8 @@ static void EndTransferMode(struct pp_cam_entry *cam)
static
int
ForwardSetup
(
struct
pp_cam_entry
*
cam
)
{
int
retry
;
/* The CPiA uses ECP protocol for Downloads from the Host to the camera.
/* The CPiA uses ECP protocol for Downloads from the Host to the camera.
* This will be software-emulated if ECP hardware is not present
*/
...
...
@@ -375,9 +375,9 @@ static int ReverseSetup(struct pp_cam_entry *cam, int extensibility)
upload_mode
=
mode
;
if
(
extensibility
)
mode
=
UPLOAD_FLAG
|
transfer_mode
|
IEEE1284_EXT_LINK
;
/* the usual camera maximum response time is 10ms, but after
/* the usual camera maximum response time is 10ms, but after
* receiving some commands, it needs up to 40ms. */
for
(
retry
=
0
;
retry
<
4
;
++
retry
)
{
if
(
!
parport_negotiate
(
cam
->
port
,
mode
))
{
break
;
...
...
@@ -439,10 +439,10 @@ static int ReadPacket(struct pp_cam_entry *cam, u8 *packet, size_t size)
/* support for CPiA variant nibble reads */
if
(
cam
->
port
->
ieee1284
.
mode
==
IEEE1284_MODE_NIBBLE
)
{
if
(
cpia_read_nibble
(
cam
->
port
,
packet
,
size
,
0
)
!=
size
)
retval
=
-
EIO
;
if
(
cpia_read_nibble
(
cam
->
port
,
packet
,
size
,
0
)
!=
size
)
retval
=
-
EIO
;
}
else
{
if
(
parport_read
(
cam
->
port
,
packet
,
size
)
!=
size
)
if
(
parport_read
(
cam
->
port
,
packet
,
size
)
!=
size
)
retval
=
-
EIO
;
}
EndTransferMode
(
cam
);
...
...
@@ -542,18 +542,18 @@ static int cpia_pp_streamRead(void *privdata, u8 *buffer, int noblock)
block_size
=
PARPORT_CHUNK_SIZE
;
while
(
!
cam
->
image_complete
)
{
cond_resched
();
new_bytes
=
cpia_pp_read
(
cam
->
port
,
buffer
,
block_size
);
if
(
new_bytes
<=
0
)
{
break
;
}
i
=-
1
;
while
(
++
i
<
new_bytes
&&
endseen
<
4
)
{
if
(
*
buffer
==
EOI
)
{
endseen
++
;
}
else
{
endseen
=
0
;
}
if
(
*
buffer
==
EOI
)
{
endseen
++
;
}
else
{
endseen
=
0
;
}
buffer
++
;
}
read_bytes
+=
i
;
...
...
@@ -601,7 +601,7 @@ static int cpia_pp_transferCmd(void *privdata, u8 *command, u8 *data)
}
if
((
err
=
ReadPacket
(
cam
,
buffer
,
8
))
<
0
)
{
DBG
(
"Error reading command result
\n
"
);
return
err
;
return
err
;
}
memcpy
(
data
,
buffer
,
databytes
);
}
else
if
(
command
[
0
]
==
DATA_OUT
)
{
...
...
@@ -631,10 +631,10 @@ static int cpia_pp_transferCmd(void *privdata, u8 *command, u8 *data)
static
int
cpia_pp_open
(
void
*
privdata
)
{
struct
pp_cam_entry
*
cam
=
(
struct
pp_cam_entry
*
)
privdata
;
if
(
cam
==
NULL
)
return
-
EINVAL
;
if
(
cam
->
open_count
==
0
)
{
if
(
parport_claim
(
cam
->
pdev
))
{
DBG
(
"failed to claim the port
\n
"
);
...
...
@@ -645,12 +645,12 @@ static int cpia_pp_open(void *privdata)
parport_write_control
(
cam
->
port
,
PARPORT_CONTROL_SELECT
);
udelay
(
50
);
parport_write_control
(
cam
->
port
,
PARPORT_CONTROL_SELECT
|
PARPORT_CONTROL_INIT
);
PARPORT_CONTROL_SELECT
|
PARPORT_CONTROL_INIT
);
}
++
cam
->
open_count
;
return
0
;
}
...
...
@@ -663,7 +663,7 @@ static int cpia_pp_registerCallback(void *privdata, void (*cb)(void *cbdata), vo
{
struct
pp_cam_entry
*
cam
=
privdata
;
int
retval
=
0
;
if
(
cam
->
port
->
irq
!=
PARPORT_IRQ_NONE
)
{
INIT_WORK
(
&
cam
->
cb_task
,
cb
,
cbdata
);
}
else
{
...
...
@@ -707,9 +707,9 @@ static int cpia_pp_register(struct parport *port)
LOG
(
"failed to allocate camera structure
\n
"
);
return
-
ENOMEM
;
}
pdev
=
parport_register_device
(
port
,
"cpia_pp"
,
NULL
,
NULL
,
NULL
,
0
,
cam
);
NULL
,
0
,
cam
);
if
(
!
pdev
)
{
LOG
(
"failed to parport_register_device
\n
"
);
...
...
@@ -753,19 +753,19 @@ static void cpia_pp_detach (struct parport *port)
}
cpia
=
NULL
;
}
spin_unlock
(
&
cam_list_lock_pp
);
spin_unlock
(
&
cam_list_lock_pp
);
if
(
!
cpia
)
{
DBG
(
"cpia_pp_detach failed to find cam_data in cam_list
\n
"
);
return
;
}
cam
=
(
struct
pp_cam_entry
*
)
cpia
->
lowlevel_data
;
cam
=
(
struct
pp_cam_entry
*
)
cpia
->
lowlevel_data
;
cpia_unregister_camera
(
cpia
);
if
(
cam
->
open_count
>
0
)
if
(
cam
->
open_count
>
0
)
cpia_pp_close
(
cam
);
parport_unregister_device
(
cam
->
pdev
);
cpia
->
lowlevel_data
=
NULL
;
cpia
->
lowlevel_data
=
NULL
;
kfree
(
cam
);
}
...
...
@@ -805,14 +805,14 @@ static struct parport_driver cpia_pp_driver = {
int
cpia_pp_init
(
void
)
{
printk
(
KERN_INFO
"%s v%d.%d.%d
\n
"
,
ABOUT
,
printk
(
KERN_INFO
"%s v%d.%d.%d
\n
"
,
ABOUT
,
CPIA_PP_MAJ_VER
,
CPIA_PP_MIN_VER
,
CPIA_PP_PATCH_VER
);
if
(
parport_nr
[
0
]
==
PPCPIA_PARPORT_OFF
)
{
printk
(
" disabled
\n
"
);
return
0
;
}
spin_lock_init
(
&
cam_list_lock_pp
);
if
(
parport_register_driver
(
&
cpia_pp_driver
))
{
...
...
drivers/media/video/cpia_usb.c
浏览文件 @
d56410e0
...
...
@@ -22,7 +22,7 @@
*/
/* define _CPIA_DEBUG_ for verbose debug output (see cpia.h) */
/* #define _CPIA_DEBUG_ 1 */
/* #define _CPIA_DEBUG_ 1 */
#include <linux/module.h>
#include <linux/kernel.h>
...
...
@@ -85,7 +85,7 @@ struct usb_cpia {
static
int
cpia_usb_open
(
void
*
privdata
);
static
int
cpia_usb_registerCallback
(
void
*
privdata
,
void
(
*
cb
)
(
void
*
cbdata
),
void
*
cbdata
);
void
*
cbdata
);
static
int
cpia_usb_transferCmd
(
void
*
privdata
,
u8
*
command
,
u8
*
data
);
static
int
cpia_usb_streamStart
(
void
*
privdata
);
static
int
cpia_usb_streamStop
(
void
*
privdata
);
...
...
@@ -127,7 +127,7 @@ static void cpia_usb_complete(struct urb *urb, struct pt_regs *regs)
ucpia
->
workbuff
->
status
=
FRAME_READING
;
ucpia
->
workbuff
->
length
=
0
;
}
for
(
i
=
0
;
i
<
urb
->
number_of_packets
;
i
++
)
{
int
n
=
urb
->
iso_frame_desc
[
i
].
actual_length
;
int
st
=
urb
->
iso_frame_desc
[
i
].
status
;
...
...
@@ -141,9 +141,9 @@ static void cpia_usb_complete(struct urb *urb, struct pt_regs *regs)
printk
(
KERN_DEBUG
"cpia: scratch buf overflow!scr_len: %d, n: %d
\n
"
,
ucpia
->
workbuff
->
length
,
n
);
return
;
}
if
(
n
)
{
if
((
ucpia
->
workbuff
->
length
>
0
)
||
if
((
ucpia
->
workbuff
->
length
>
0
)
||
(
0x19
==
cdata
[
0
]
&&
0x68
==
cdata
[
1
]))
{
memcpy
(
ucpia
->
workbuff
->
data
+
ucpia
->
workbuff
->
length
,
cdata
,
n
);
ucpia
->
workbuff
->
length
+=
n
;
...
...
@@ -160,7 +160,7 @@ static void cpia_usb_complete(struct urb *urb, struct pt_regs *regs)
ucpia
->
workbuff
=
ucpia
->
workbuff
->
next
;
ucpia
->
workbuff
->
status
=
FRAME_EMPTY
;
ucpia
->
workbuff
->
length
=
0
;
if
(
waitqueue_active
(
&
ucpia
->
wq_stream
))
wake_up_interruptible
(
&
ucpia
->
wq_stream
);
}
...
...
@@ -178,7 +178,7 @@ static int cpia_usb_open(void *privdata)
struct
usb_cpia
*
ucpia
=
(
struct
usb_cpia
*
)
privdata
;
struct
urb
*
urb
;
int
ret
,
retval
=
0
,
fx
,
err
;
if
(
!
ucpia
)
return
-
EINVAL
;
...
...
@@ -191,7 +191,7 @@ static int cpia_usb_open(void *privdata)
retval
=
-
EINVAL
;
goto
error_0
;
}
ret
=
usb_set_interface
(
ucpia
->
dev
,
ucpia
->
iface
,
3
);
if
(
ret
<
0
)
{
printk
(
KERN_ERR
"cpia_usb_open: usb_set_interface error (ret = %d)
\n
"
,
ret
);
...
...
@@ -286,7 +286,7 @@ static int cpia_usb_open(void *privdata)
error_0:
kfree
(
ucpia
->
sbuf
[
0
].
data
);
ucpia
->
sbuf
[
0
].
data
=
NULL
;
return
retval
;
}
...
...
@@ -307,7 +307,7 @@ static int WritePacket(struct usb_device *udev, const u8 *packet, u8 *buf, size_
return
usb_control_msg
(
udev
,
usb_sndctrlpipe
(
udev
,
0
),
packet
[
1
]
+
(
packet
[
0
]
<<
8
),
USB_TYPE_VENDOR
|
USB_RECIP_DEVICE
,
packet
[
2
]
+
(
packet
[
3
]
<<
8
),
packet
[
2
]
+
(
packet
[
3
]
<<
8
),
packet
[
4
]
+
(
packet
[
5
]
<<
8
),
buf
,
size
,
1000
);
}
...
...
@@ -324,7 +324,7 @@ static int ReadPacket(struct usb_device *udev, u8 *packet, u8 *buf, size_t size)
return
usb_control_msg
(
udev
,
usb_rcvctrlpipe
(
udev
,
0
),
packet
[
1
]
+
(
packet
[
0
]
<<
8
),
USB_DIR_IN
|
USB_TYPE_VENDOR
|
USB_RECIP_DEVICE
,
packet
[
2
]
+
(
packet
[
3
]
<<
8
),
packet
[
2
]
+
(
packet
[
3
]
<<
8
),
packet
[
4
]
+
(
packet
[
5
]
<<
8
),
buf
,
size
,
1000
);
}
...
...
@@ -393,7 +393,7 @@ static int cpia_usb_streamRead(void *privdata, u8 *frame, int noblock)
if
(
!
ucpia
||
!
ucpia
->
present
)
return
-
1
;
if
(
ucpia
->
curbuff
->
status
!=
FRAME_READY
)
interruptible_sleep_on
(
&
ucpia
->
wq_stream
);
else
...
...
@@ -403,7 +403,7 @@ static int cpia_usb_streamRead(void *privdata, u8 *frame, int noblock)
if
(
!
mybuff
)
return
-
1
;
if
(
mybuff
->
status
!=
FRAME_READY
||
mybuff
->
length
<
4
)
{
DBG
(
"Something went wrong!
\n
"
);
return
-
1
;
...
...
@@ -411,7 +411,7 @@ static int cpia_usb_streamRead(void *privdata, u8 *frame, int noblock)
memcpy
(
frame
,
mybuff
->
data
,
mybuff
->
length
);
mybuff
->
status
=
FRAME_EMPTY
;
/* DBG("read done, %d bytes, Header: %x/%x, Footer: %x%x%x%x\n", */
/* mybuff->length, frame[0], frame[1], */
/* frame[mybuff->length-4], frame[mybuff->length-3], */
...
...
@@ -447,7 +447,7 @@ static void cpia_usb_free_resources(struct usb_cpia *ucpia, int try)
kfree
(
ucpia
->
sbuf
[
1
].
data
);
ucpia
->
sbuf
[
1
].
data
=
NULL
;
if
(
ucpia
->
sbuf
[
0
].
urb
)
{
usb_kill_urb
(
ucpia
->
sbuf
[
0
].
urb
);
usb_free_urb
(
ucpia
->
sbuf
[
0
].
urb
);
...
...
@@ -490,7 +490,7 @@ static int cpia_probe(struct usb_interface *intf,
struct
usb_cpia
*
ucpia
;
struct
cam_data
*
cam
;
int
ret
;
/* A multi-config CPiA camera? */
if
(
udev
->
descriptor
.
bNumConfigurations
!=
1
)
return
-
ENODEV
;
...
...
@@ -539,7 +539,7 @@ static int cpia_probe(struct usb_interface *intf,
/* Before register_camera, important */
ucpia
->
present
=
1
;
cam
=
cpia_register_camera
(
&
cpia_usb_ops
,
ucpia
);
if
(
!
cam
)
{
LOG
(
"failed to cpia_register_camera
\n
"
);
...
...
@@ -591,7 +591,7 @@ static void cpia_disconnect(struct usb_interface *intf)
struct
cam_data
*
cam
=
usb_get_intfdata
(
intf
);
struct
usb_cpia
*
ucpia
;
struct
usb_device
*
udev
;
usb_set_intfdata
(
intf
,
NULL
);
if
(
!
cam
)
return
;
...
...
@@ -600,7 +600,7 @@ static void cpia_disconnect(struct usb_interface *intf)
spin_lock
(
&
cam_list_lock_usb
);
list_del
(
&
cam
->
cam_data_list
);
spin_unlock
(
&
cam_list_lock_usb
);
ucpia
->
present
=
0
;
cpia_unregister_camera
(
cam
);
...
...
@@ -631,7 +631,7 @@ static void cpia_disconnect(struct usb_interface *intf)
static
int
__init
usb_cpia_init
(
void
)
{
printk
(
KERN_INFO
"%s v%d.%d.%d
\n
"
,
ABOUT
,
printk
(
KERN_INFO
"%s v%d.%d.%d
\n
"
,
ABOUT
,
CPIA_USB_MAJ_VER
,
CPIA_USB_MIN_VER
,
CPIA_USB_PATCH_VER
);
spin_lock_init
(
&
cam_list_lock_usb
);
...
...
drivers/media/video/cs8420.h
浏览文件 @
d56410e0
...
...
@@ -20,7 +20,7 @@
#define __CS8420_H__
/* Initialization Sequence */
static
__u8
init8420
[]
=
{
1
,
0x01
,
2
,
0x02
,
3
,
0x00
,
4
,
0x46
,
5
,
0x24
,
6
,
0x84
,
18
,
0x18
,
19
,
0x13
,
...
...
drivers/media/video/dabusb.c
浏览文件 @
d56410e0
...
...
@@ -86,7 +86,7 @@ static int dabusb_add_buf_tail (pdabusb_t s, struct list_head *dst, struct list_
return
ret
;
}
/*-------------------------------------------------------------------*/
#ifdef DEBUG
#ifdef DEBUG
static
void
dump_urb
(
struct
urb
*
urb
)
{
dbg
(
"urb :%p"
,
urb
);
...
...
@@ -136,7 +136,7 @@ static int dabusb_free_queue (struct list_head *q)
for
(
p
=
q
->
next
;
p
!=
q
;)
{
b
=
list_entry
(
p
,
buff_t
,
buff_list
);
#ifdef DEBUG
#ifdef DEBUG
dump_urb
(
b
->
purb
);
#endif
kfree
(
b
->
purb
->
transfer_buffer
);
...
...
@@ -287,7 +287,7 @@ static int dabusb_bulk (pdabusb_t s, pbulk_transfer_t pb)
}
}
if
(
ret
==
-
EPIPE
)
{
warn
(
"CLEAR_FEATURE request to remove STALL condition."
);
if
(
usb_clear_halt
(
s
->
usbdev
,
usb_pipeendpoint
(
pipe
)))
...
...
@@ -328,7 +328,7 @@ static int dabusb_loadmem (pdabusb_t s, const char *fname)
PINTEL_HEX_RECORD
ptr
=
firmware
;
dbg
(
"Enter dabusb_loadmem (internal)"
);
ret
=
dabusb_8051_reset
(
s
,
1
);
while
(
ptr
->
Type
==
0
)
{
...
...
@@ -449,7 +449,7 @@ static int dabusb_startrek (pdabusb_t s)
if
(
!
list_empty
(
&
s
->
free_buff_list
))
{
pbuff_t
end
;
int
ret
;
while
(
!
dabusb_add_buf_tail
(
s
,
&
s
->
rec_buff_list
,
&
s
->
free_buff_list
))
{
dbg
(
"submitting: end:%p s->rec_buff_list:%p"
,
s
->
rec_buff_list
.
prev
,
&
s
->
rec_buff_list
);
...
...
@@ -506,7 +506,7 @@ static ssize_t dabusb_read (struct file *file, char __user *buf, size_t count, l
err
(
"error: rec_buf_list is empty"
);
goto
err
;
}
b
=
list_entry
(
s
->
rec_buff_list
.
next
,
buff_t
,
buff_list
);
purb
=
b
->
purb
;
...
...
@@ -783,9 +783,9 @@ static void dabusb_disconnect (struct usb_interface *intf)
pdabusb_t
s
=
usb_get_intfdata
(
intf
);
dbg
(
"dabusb_disconnect"
);
init_waitqueue_entry
(
&
__wait
,
current
);
usb_set_intfdata
(
intf
,
NULL
);
if
(
s
)
{
usb_deregister_dev
(
intf
,
&
dabusb_class
);
...
...
@@ -797,7 +797,7 @@ static void dabusb_disconnect (struct usb_interface *intf)
schedule
();
current
->
state
=
TASK_RUNNING
;
remove_wait_queue
(
&
s
->
remove_ok
,
&
__wait
);
s
->
usbdev
=
NULL
;
s
->
overruns
=
0
;
}
...
...
drivers/media/video/dabusb.h
浏览文件 @
d56410e0
...
...
@@ -10,7 +10,7 @@ typedef struct
#define DABUSB_VERSION 0x1000
#define IOCTL_DAB_BULK _IOWR('d', 0x30, bulk_transfer_t)
#define IOCTL_DAB_OVERRUNS _IOR('d', 0x15, int)
#define IOCTL_DAB_VERSION _IOR('d', 0x3f, int)
#define IOCTL_DAB_VERSION _IOR('d', 0x3f, int)
#ifdef __KERNEL__
...
...
@@ -36,7 +36,7 @@ typedef struct
struct
list_head
rec_buff_list
;
}
dabusb_t
,
*
pdabusb_t
;
typedef
struct
typedef
struct
{
pdabusb_t
s
;
struct
urb
*
purb
;
...
...
drivers/media/video/dsbr100.c
浏览文件 @
d56410e0
...
...
@@ -37,28 +37,28 @@
Markus: Updates for 2.6.x kernels, code layout changes, name sanitizing
Version 0.30:
Markus: Updates for 2.5.x kernel and more ISO compliant source
Markus: Updates for 2.5.x kernel and more ISO compliant source
Version 0.25:
PSL and Markus: Cleanup, radio now doesn't stop on device close
PSL and Markus: Cleanup, radio now doesn't stop on device close
Version 0.24:
Markus: Hope I got these silly VIDEO_TUNER_LOW issues finally
Markus: Hope I got these silly VIDEO_TUNER_LOW issues finally
right. Some minor cleanup, improved standalone compilation
Version 0.23:
Markus: Sign extension bug fixed by declaring transfer_buffer unsigned
Markus: Sign extension bug fixed by declaring transfer_buffer unsigned
Version 0.22:
Markus: Some (brown bag) cleanup in what VIDIOCSTUNER returns,
Markus: Some (brown bag) cleanup in what VIDIOCSTUNER returns,
thanks to Mike Cox for pointing the problem out.
Version 0.21:
Markus: Minor cleanup, warnings if something goes wrong, lame attempt
Markus: Minor cleanup, warnings if something goes wrong, lame attempt
to adhere to Documentation/CodingStyle
Version 0.2:
Brad Hards <bradh@dynamite.com.au>: Fixes to make it work as non-module
Version 0.2:
Brad Hards <bradh@dynamite.com.au>: Fixes to make it work as non-module
Markus: Copyright clarification
Version 0.01: Markus: initial release
...
...
@@ -163,11 +163,11 @@ static struct usb_driver usb_dsbr100_driver = {
static
int
dsbr100_start
(
dsbr100_device
*
radio
)
{
if
(
usb_control_msg
(
radio
->
usbdev
,
usb_rcvctrlpipe
(
radio
->
usbdev
,
0
),
USB_REQ_GET_STATUS
,
USB_REQ_GET_STATUS
,
USB_TYPE_VENDOR
|
USB_RECIP_DEVICE
|
USB_DIR_IN
,
0x00
,
0xC7
,
radio
->
transfer_buffer
,
8
,
300
)
<
0
||
usb_control_msg
(
radio
->
usbdev
,
usb_rcvctrlpipe
(
radio
->
usbdev
,
0
),
DSB100_ONOFF
,
DSB100_ONOFF
,
USB_TYPE_VENDOR
|
USB_RECIP_DEVICE
|
USB_DIR_IN
,
0x01
,
0x00
,
radio
->
transfer_buffer
,
8
,
300
)
<
0
)
return
-
1
;
...
...
@@ -179,11 +179,11 @@ static int dsbr100_start(dsbr100_device *radio)
static
int
dsbr100_stop
(
dsbr100_device
*
radio
)
{
if
(
usb_control_msg
(
radio
->
usbdev
,
usb_rcvctrlpipe
(
radio
->
usbdev
,
0
),
USB_REQ_GET_STATUS
,
USB_REQ_GET_STATUS
,
USB_TYPE_VENDOR
|
USB_RECIP_DEVICE
|
USB_DIR_IN
,
0x16
,
0x1C
,
radio
->
transfer_buffer
,
8
,
300
)
<
0
||
usb_control_msg
(
radio
->
usbdev
,
usb_rcvctrlpipe
(
radio
->
usbdev
,
0
),
DSB100_ONOFF
,
DSB100_ONOFF
,
USB_TYPE_VENDOR
|
USB_RECIP_DEVICE
|
USB_DIR_IN
,
0x00
,
0x00
,
radio
->
transfer_buffer
,
8
,
300
)
<
0
)
return
-
1
;
...
...
@@ -195,16 +195,16 @@ static int dsbr100_setfreq(dsbr100_device *radio, int freq)
{
freq
=
(
freq
/
16
*
80
)
/
1000
+
856
;
if
(
usb_control_msg
(
radio
->
usbdev
,
usb_rcvctrlpipe
(
radio
->
usbdev
,
0
),
DSB100_TUNE
,
DSB100_TUNE
,
USB_TYPE_VENDOR
|
USB_RECIP_DEVICE
|
USB_DIR_IN
,
(
freq
>>
8
)
&
0x00ff
,
freq
&
0xff
,
(
freq
>>
8
)
&
0x00ff
,
freq
&
0xff
,
radio
->
transfer_buffer
,
8
,
300
)
<
0
||
usb_control_msg
(
radio
->
usbdev
,
usb_rcvctrlpipe
(
radio
->
usbdev
,
0
),
USB_REQ_GET_STATUS
,
USB_REQ_GET_STATUS
,
USB_TYPE_VENDOR
|
USB_RECIP_DEVICE
|
USB_DIR_IN
,
0x96
,
0xB7
,
radio
->
transfer_buffer
,
8
,
300
)
<
0
||
usb_control_msg
(
radio
->
usbdev
,
usb_rcvctrlpipe
(
radio
->
usbdev
,
0
),
USB_REQ_GET_STATUS
,
USB_REQ_GET_STATUS
,
USB_TYPE_VENDOR
|
USB_RECIP_DEVICE
|
USB_DIR_IN
,
0x00
,
0x24
,
radio
->
transfer_buffer
,
8
,
300
)
<
0
)
{
radio
->
stereo
=
-
1
;
...
...
@@ -219,7 +219,7 @@ sees a stereo signal or not. Pity. */
static
void
dsbr100_getstat
(
dsbr100_device
*
radio
)
{
if
(
usb_control_msg
(
radio
->
usbdev
,
usb_rcvctrlpipe
(
radio
->
usbdev
,
0
),
USB_REQ_GET_STATUS
,
USB_REQ_GET_STATUS
,
USB_TYPE_VENDOR
|
USB_RECIP_DEVICE
|
USB_DIR_IN
,
0x00
,
0x24
,
radio
->
transfer_buffer
,
8
,
300
)
<
0
)
radio
->
stereo
=
-
1
;
...
...
@@ -232,7 +232,7 @@ static void dsbr100_getstat(dsbr100_device *radio)
/* check if the device is present and register with v4l and
usb if it is */
static
int
usb_dsbr100_probe
(
struct
usb_interface
*
intf
,
static
int
usb_dsbr100_probe
(
struct
usb_interface
*
intf
,
const
struct
usb_device_id
*
id
)
{
dsbr100_device
*
radio
;
...
...
@@ -243,7 +243,7 @@ static int usb_dsbr100_probe(struct usb_interface *intf,
kfree
(
radio
);
return
-
ENOMEM
;
}
memcpy
(
radio
->
videodev
,
&
dsbr100_videodev_template
,
memcpy
(
radio
->
videodev
,
&
dsbr100_videodev_template
,
sizeof
(
dsbr100_videodev_template
));
radio
->
removed
=
0
;
radio
->
users
=
0
;
...
...
@@ -310,7 +310,7 @@ static int usb_dsbr100_do_ioctl(struct inode *inode, struct file *file,
struct
video_tuner
*
v
=
arg
;
dsbr100_getstat
(
radio
);
if
(
v
->
tuner
)
/* Only 1 tuner */
if
(
v
->
tuner
)
/* Only 1 tuner */
return
-
EINVAL
;
v
->
rangelow
=
FREQ_MIN
*
FREQ_MUL
;
v
->
rangehigh
=
FREQ_MAX
*
FREQ_MUL
;
...
...
@@ -355,12 +355,12 @@ static int usb_dsbr100_do_ioctl(struct inode *inode, struct file *file,
v
->
volume
=
1
;
v
->
step
=
1
;
strcpy
(
v
->
name
,
"Radio"
);
return
0
;
return
0
;
}
case
VIDIOCSAUDIO
:
{
struct
video_audio
*
v
=
arg
;
if
(
v
->
audio
)
if
(
v
->
audio
)
return
-
EINVAL
;
if
(
v
->
flags
&
VIDEO_AUDIO_MUTE
)
{
if
(
dsbr100_stop
(
radio
)
==-
1
)
...
...
drivers/media/video/et61x251/et61x251.h
浏览文件 @
d56410e0
...
...
@@ -180,7 +180,7 @@ et61x251_match_id(struct et61x251_device* cam, const struct usb_device_id *id)
void
et61x251_attach_sensor
(
struct
et61x251_device
*
cam
,
struct
et61x251_sensor
*
sensor
)
struct
et61x251_sensor
*
sensor
)
{
memcpy
(
&
cam
->
sensor
,
sensor
,
sizeof
(
struct
et61x251_sensor
));
}
...
...
@@ -199,7 +199,7 @@ do { \
dev_info(&cam->usbdev->dev, fmt "\n", ## args); \
else if ((level) >= 3) \
dev_info(&cam->usbdev->dev, "[%s:%d] " fmt "\n", \
__FUNCTION__, __LINE__ , ## args); \
__FUNCTION__, __LINE__ , ## args); \
} \
} while (0)
# define KDBG(level, fmt, args...) \
...
...
@@ -209,7 +209,7 @@ do { \
pr_info("et61x251: " fmt "\n", ## args); \
else if ((level) == 3) \
pr_debug("et61x251: [%s:%d] " fmt "\n", __FUNCTION__, \
__LINE__ , ## args); \
__LINE__ , ## args); \
} \
} while (0)
# define V4LDBG(level, name, cmd) \
...
...
@@ -226,7 +226,7 @@ do { \
#undef PDBG
#define PDBG(fmt, args...) \
dev_info(&cam->usbdev->dev, "[%s:%d] " fmt "\n", \
__FUNCTION__, __LINE__ , ## args)
__FUNCTION__, __LINE__ , ## args)
#undef PDBGG
#define PDBGG(fmt, args...) do {;} while(0)
/* placeholder */
...
...
drivers/media/video/et61x251/et61x251_core.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/et61x251/et61x251_sensor.h
浏览文件 @
d56410e0
...
...
@@ -47,7 +47,7 @@ et61x251_match_id(struct et61x251_device* cam, const struct usb_device_id *id);
extern
void
et61x251_attach_sensor
(
struct
et61x251_device
*
cam
,
struct
et61x251_sensor
*
sensor
);
struct
et61x251_sensor
*
sensor
);
/*****************************************************************************/
...
...
@@ -56,13 +56,13 @@ extern int et61x251_read_reg(struct et61x251_device*, u16 index);
extern
int
et61x251_i2c_write
(
struct
et61x251_device
*
,
u8
address
,
u8
value
);
extern
int
et61x251_i2c_read
(
struct
et61x251_device
*
,
u8
address
);
extern
int
et61x251_i2c_try_write
(
struct
et61x251_device
*
,
struct
et61x251_sensor
*
,
u8
address
,
u8
value
);
struct
et61x251_sensor
*
,
u8
address
,
u8
value
);
extern
int
et61x251_i2c_try_read
(
struct
et61x251_device
*
,
struct
et61x251_sensor
*
,
u8
address
);
struct
et61x251_sensor
*
,
u8
address
);
extern
int
et61x251_i2c_raw_write
(
struct
et61x251_device
*
,
u8
n
,
u8
data1
,
u8
data2
,
u8
data3
,
u8
data4
,
u8
data5
,
u8
data6
,
u8
data7
,
u8
data8
,
u8
address
);
u8
data2
,
u8
data3
,
u8
data4
,
u8
data5
,
u8
data6
,
u8
data7
,
u8
data8
,
u8
address
);
/*****************************************************************************/
...
...
@@ -100,13 +100,13 @@ struct et61x251_sensor {
int
(
*
init
)(
struct
et61x251_device
*
cam
);
int
(
*
get_ctrl
)(
struct
et61x251_device
*
cam
,
struct
v4l2_control
*
ctrl
);
struct
v4l2_control
*
ctrl
);
int
(
*
set_ctrl
)(
struct
et61x251_device
*
cam
,
const
struct
v4l2_control
*
ctrl
);
const
struct
v4l2_control
*
ctrl
);
int
(
*
set_crop
)(
struct
et61x251_device
*
cam
,
const
struct
v4l2_rect
*
rect
);
const
struct
v4l2_rect
*
rect
);
int
(
*
set_pix_format
)(
struct
et61x251_device
*
cam
,
const
struct
v4l2_pix_format
*
pix
);
const
struct
v4l2_pix_format
*
pix
);
/* Private */
struct
v4l2_queryctrl
_qctrl
[
ET61X251_MAX_CTRLS
];
...
...
drivers/media/video/et61x251/et61x251_tas5130d1b.c
浏览文件 @
d56410e0
...
...
@@ -46,20 +46,20 @@ static int tas5130d1b_init(struct et61x251_device* cam)
static
int
tas5130d1b_set_ctrl
(
struct
et61x251_device
*
cam
,
const
struct
v4l2_control
*
ctrl
)
const
struct
v4l2_control
*
ctrl
)
{
int
err
=
0
;
switch
(
ctrl
->
id
)
{
case
V4L2_CID_GAIN
:
err
+=
et61x251_i2c_raw_write
(
cam
,
2
,
0x20
,
0xf6
-
ctrl
->
value
,
0
,
0
,
0
,
0
,
0
,
0
,
0
);
0xf6
-
ctrl
->
value
,
0
,
0
,
0
,
0
,
0
,
0
,
0
);
break
;
case
V4L2_CID_EXPOSURE
:
err
+=
et61x251_i2c_raw_write
(
cam
,
2
,
0x40
,
0x47
-
ctrl
->
value
,
0
,
0
,
0
,
0
,
0
,
0
,
0
);
0x47
-
ctrl
->
value
,
0
,
0
,
0
,
0
,
0
,
0
,
0
);
break
;
default:
return
-
EINVAL
;
...
...
drivers/media/video/ov511.c
浏览文件 @
d56410e0
...
...
@@ -15,7 +15,7 @@
*
* Based on the Linux CPiA driver written by Peter Pregler,
* Scott J. Bertin and Johannes Erdfelt.
*
*
* Please see the file: Documentation/usb/ov511.txt
* and the website at: http://alpha.dyndns.org/ov511
* for more info.
...
...
@@ -433,7 +433,7 @@ reg_w_mask(struct usb_ov511 *ov,
return
(
reg_w
(
ov
,
reg
,
newval
));
}
/*
/*
* Writes multiple (n) byte value to a single register. Only valid with certain
* registers (0x30 and 0xc4 - 0xce).
*/
...
...
@@ -629,7 +629,7 @@ ov511_i2c_write_internal(struct usb_ov511 *ov,
/* Retry until idle */
do
rc
=
reg_r
(
ov
,
R511_I2C_CTL
);
while
(
rc
>
0
&&
((
rc
&
1
)
==
0
));
while
(
rc
>
0
&&
((
rc
&
1
)
==
0
));
if
(
rc
<
0
)
break
;
...
...
@@ -1752,7 +1752,7 @@ sensor_set_picture(struct usb_ov511 *ov, struct video_picture *p)
ov
->
whiteness
=
p
->
whiteness
;
/* Don't return error if a setting is unsupported, or rest of settings
* will not be performed */
* will not be performed */
rc
=
sensor_set_contrast
(
ov
,
p
->
contrast
);
if
(
FATAL_ERROR
(
rc
))
...
...
@@ -1781,7 +1781,7 @@ sensor_get_picture(struct usb_ov511 *ov, struct video_picture *p)
PDEBUG
(
4
,
"sensor_get_picture"
);
/* Don't return error if a setting is unsupported, or rest of settings
* will not be performed */
* will not be performed */
rc
=
sensor_get_contrast
(
ov
,
&
(
p
->
contrast
));
if
(
FATAL_ERROR
(
rc
))
...
...
@@ -2251,7 +2251,7 @@ mode_init_ov_sensor_regs(struct usb_ov511 *ov, int width, int height,
/******** Clock programming ********/
/* The OV6620 needs special handling. This prevents the
/* The OV6620 needs special handling. This prevents the
* severe banding that normally occurs */
if
(
ov
->
sensor
==
SEN_OV6620
||
ov
->
sensor
==
SEN_OV6630
)
{
...
...
@@ -2326,7 +2326,7 @@ set_ov_sensor_window(struct usb_ov511 *ov, int width, int height, int mode,
int
sub_flag
)
{
int
ret
;
int
hwsbase
,
hwebase
,
vwsbase
,
vwebase
,
hwsize
,
vwsize
;
int
hwsbase
,
hwebase
,
vwsbase
,
vwebase
,
hwsize
,
vwsize
;
int
hoffset
,
voffset
,
hwscale
=
0
,
vwscale
=
0
;
/* The different sensor ICs handle setting up of window differently.
...
...
@@ -2575,7 +2575,7 @@ ov518_mode_init_regs(struct usb_ov511 *ov,
/* OV518 needs U and V swapped */
i2c_w_mask
(
ov
,
0x15
,
0x00
,
0x01
);
if
(
mode
==
VIDEO_PALETTE_GREY
)
{
if
(
mode
==
VIDEO_PALETTE_GREY
)
{
/* Set 16-bit input format (UV data are ignored) */
reg_w_mask
(
ov
,
0x20
,
0x00
,
0x08
);
...
...
@@ -2894,7 +2894,7 @@ make_8x8(unsigned char *pIn, unsigned char *pOut, int w)
* ... ... ...
* 56 57 ... 63 120 121 ... 127 248 249 ... 255
*
*/
*/
static
void
yuv400raw_to_yuv400p
(
struct
ov511_frame
*
frame
,
unsigned
char
*
pIn0
,
unsigned
char
*
pOut0
)
...
...
@@ -2923,7 +2923,7 @@ yuv400raw_to_yuv400p(struct ov511_frame *frame,
*
* 0 1 ... 7
* 8 9 ... 15
* ...
* ...
* 56 57 ... 63
*
* U and V are shipped at half resolution (1 U,V sample -> one 2x2 block).
...
...
@@ -3034,7 +3034,7 @@ decompress(struct usb_ov511 *ov, struct ov511_frame *frame,
*/
static
void
deinterlace
(
struct
ov511_frame
*
frame
,
int
rawformat
,
unsigned
char
*
pIn0
,
unsigned
char
*
pOut0
)
unsigned
char
*
pIn0
,
unsigned
char
*
pOut0
)
{
const
int
fieldheight
=
frame
->
rawheight
/
2
;
const
int
fieldpix
=
fieldheight
*
frame
->
rawwidth
;
...
...
@@ -3112,7 +3112,7 @@ ov51x_postprocess_grey(struct usb_ov511 *ov, struct ov511_frame *frame)
frame
->
tempdata
);
deinterlace
(
frame
,
RAWFMT_YUV400
,
frame
->
tempdata
,
frame
->
data
);
frame
->
data
);
}
else
{
if
(
frame
->
compressed
)
decompress
(
ov
,
frame
,
frame
->
rawdata
,
...
...
@@ -3136,7 +3136,7 @@ ov51x_postprocess_yuv420(struct usb_ov511 *ov, struct ov511_frame *frame)
frame
->
tempdata
);
deinterlace
(
frame
,
RAWFMT_YUV420
,
frame
->
tempdata
,
frame
->
data
);
frame
->
data
);
}
else
{
if
(
frame
->
compressed
)
decompress
(
ov
,
frame
,
frame
->
rawdata
,
frame
->
data
);
...
...
@@ -3226,7 +3226,7 @@ ov511_move_data(struct usb_ov511 *ov, unsigned char *in, int n)
frame
->
rawwidth
=
((
int
)(
in
[
9
])
+
1
)
*
8
;
frame
->
rawheight
=
((
int
)(
in
[
10
])
+
1
)
*
8
;
PDEBUG
(
4
,
"Frame end, frame=%d, pnum=%d, w=%d, h=%d, recvd=%d"
,
PDEBUG
(
4
,
"Frame end, frame=%d, pnum=%d, w=%d, h=%d, recvd=%d"
,
ov
->
curframe
,
pnum
,
frame
->
rawwidth
,
frame
->
rawheight
,
frame
->
bytes_recvd
);
...
...
@@ -3527,10 +3527,10 @@ ov51x_isoc_irq(struct urb *urb, struct pt_regs *regs)
return
;
}
if
(
urb
->
status
==
-
ENOENT
||
urb
->
status
==
-
ECONNRESET
)
{
PDEBUG
(
4
,
"URB unlinked"
);
return
;
}
if
(
urb
->
status
==
-
ENOENT
||
urb
->
status
==
-
ECONNRESET
)
{
PDEBUG
(
4
,
"URB unlinked"
);
return
;
}
if
(
urb
->
status
!=
-
EINPROGRESS
&&
urb
->
status
!=
0
)
{
err
(
"ERROR: urb->status=%d: %s"
,
urb
->
status
,
...
...
@@ -4627,8 +4627,8 @@ ov51x_v4l1_mmap(struct file *file, struct vm_area_struct *vma)
PDEBUG
(
4
,
"mmap: %ld (%lX) bytes"
,
size
,
size
);
if
(
size
>
(((
OV511_NUMFRAMES
*
MAX_DATA_SIZE
(
ov
->
maxwidth
,
ov
->
maxheight
)
+
PAGE_SIZE
-
1
)
&
~
(
PAGE_SIZE
-
1
))))
*
MAX_DATA_SIZE
(
ov
->
maxwidth
,
ov
->
maxheight
)
+
PAGE_SIZE
-
1
)
&
~
(
PAGE_SIZE
-
1
))))
return
-
EINVAL
;
if
(
mutex_lock_interruptible
(
&
ov
->
lock
))
...
...
@@ -5062,7 +5062,7 @@ ov6xx0_configure(struct usb_ov511 *ov)
}
/* This initializes the KS0127 and KS0127B video decoders. */
static
int
static
int
ks0127_configure
(
struct
usb_ov511
*
ov
)
{
int
rc
;
...
...
@@ -5193,7 +5193,7 @@ saa7111a_configure(struct usb_ov511 *ov)
return
-
1
;
/* Detect version of decoder. This must be done after writing the
* initial regs or the decoder will lock up. */
* initial regs or the decoder will lock up. */
rc
=
i2c_r
(
ov
,
0x00
);
if
(
rc
<
0
)
{
...
...
@@ -5216,13 +5216,13 @@ saa7111a_configure(struct usb_ov511 *ov)
}
/* This initializes the OV511/OV511+ and the sensor */
static
int
static
int
ov511_configure
(
struct
usb_ov511
*
ov
)
{
static
struct
ov511_regvals
aRegvalsInit511
[]
=
{
{
OV511_REG_BUS
,
R51x_SYS_RESET
,
0x7f
},
{
OV511_REG_BUS
,
R51x_SYS_INIT
,
0x01
},
{
OV511_REG_BUS
,
R51x_SYS_RESET
,
0x7f
},
{
OV511_REG_BUS
,
R51x_SYS_INIT
,
0x01
},
{
OV511_REG_BUS
,
R51x_SYS_RESET
,
0x7f
},
{
OV511_REG_BUS
,
R51x_SYS_INIT
,
0x01
},
{
OV511_REG_BUS
,
R51x_SYS_RESET
,
0x3f
},
{
OV511_REG_BUS
,
R51x_SYS_INIT
,
0x01
},
...
...
@@ -5269,7 +5269,7 @@ ov511_configure(struct usb_ov511 *ov)
err
(
"Please notify "
EMAIL
" of the name,"
);
err
(
"manufacturer, model, and this number of your camera."
);
err
(
"Also include the output of the detection process."
);
}
}
if
(
ov
->
customid
==
70
)
/* USB Life TV (PAL/SECAM) */
ov
->
pal
=
1
;
...
...
@@ -5336,17 +5336,17 @@ ov511_configure(struct usb_ov511 *ov)
if
(
i2c_w
(
ov
,
0x10
,
0x00
)
<
0
)
{
err
(
"Can't determine sensor slave IDs"
);
goto
error
;
goto
error
;
}
else
{
if
(
ks0127_configure
(
ov
)
<
0
)
{
err
(
"Failed to configure KS0127"
);
goto
error
;
goto
error
;
}
}
}
else
{
if
(
saa7111a_configure
(
ov
)
<
0
)
{
err
(
"Failed to configure SAA7111A"
);
goto
error
;
goto
error
;
}
}
}
else
{
...
...
@@ -5356,13 +5356,13 @@ ov511_configure(struct usb_ov511 *ov)
}
else
{
if
(
ov6xx0_configure
(
ov
)
<
0
)
{
err
(
"Failed to configure OV6xx0"
);
goto
error
;
goto
error
;
}
}
}
else
{
if
(
ov7xx0_configure
(
ov
)
<
0
)
{
err
(
"Failed to configure OV7xx0"
);
goto
error
;
goto
error
;
}
}
...
...
@@ -5381,12 +5381,12 @@ ov518_configure(struct usb_ov511 *ov)
/* For 518 and 518+ */
static
struct
ov511_regvals
aRegvalsInit518
[]
=
{
{
OV511_REG_BUS
,
R51x_SYS_RESET
,
0x40
},
{
OV511_REG_BUS
,
R51x_SYS_INIT
,
0xe1
},
{
OV511_REG_BUS
,
R51x_SYS_RESET
,
0x3e
},
{
OV511_REG_BUS
,
R51x_SYS_INIT
,
0xe1
},
{
OV511_REG_BUS
,
R51x_SYS_RESET
,
0x3e
},
{
OV511_REG_BUS
,
R51x_SYS_INIT
,
0xe1
},
{
OV511_REG_BUS
,
R51x_SYS_RESET
,
0x00
},
{
OV511_REG_BUS
,
R51x_SYS_INIT
,
0xe1
},
{
OV511_REG_BUS
,
0x46
,
0x00
},
{
OV511_REG_BUS
,
0x46
,
0x00
},
{
OV511_REG_BUS
,
0x5d
,
0x03
},
{
OV511_DONE_BUS
,
0x0
,
0x00
},
};
...
...
@@ -5517,7 +5517,7 @@ ov518_configure(struct usb_ov511 *ov)
if
(
init_ov_sensor
(
ov
)
<
0
)
{
err
(
"Can't determine sensor slave IDs"
);
goto
error
;
goto
error
;
}
else
{
err
(
"Detected unsupported OV8xx0 sensor"
);
goto
error
;
...
...
@@ -5525,13 +5525,13 @@ ov518_configure(struct usb_ov511 *ov)
}
else
{
if
(
ov6xx0_configure
(
ov
)
<
0
)
{
err
(
"Failed to configure OV6xx0"
);
goto
error
;
goto
error
;
}
}
}
else
{
if
(
ov7xx0_configure
(
ov
)
<
0
)
{
err
(
"Failed to configure OV7xx0"
);
goto
error
;
goto
error
;
}
}
...
...
@@ -5564,28 +5564,28 @@ static ssize_t show_custom_id(struct class_device *cd, char *buf)
{
struct
usb_ov511
*
ov
=
cd_to_ov
(
cd
);
return
sprintf
(
buf
,
"%d
\n
"
,
ov
->
customid
);
}
}
static
CLASS_DEVICE_ATTR
(
custom_id
,
S_IRUGO
,
show_custom_id
,
NULL
);
static
ssize_t
show_model
(
struct
class_device
*
cd
,
char
*
buf
)
{
struct
usb_ov511
*
ov
=
cd_to_ov
(
cd
);
return
sprintf
(
buf
,
"%s
\n
"
,
ov
->
desc
);
}
}
static
CLASS_DEVICE_ATTR
(
model
,
S_IRUGO
,
show_model
,
NULL
);
static
ssize_t
show_bridge
(
struct
class_device
*
cd
,
char
*
buf
)
{
struct
usb_ov511
*
ov
=
cd_to_ov
(
cd
);
return
sprintf
(
buf
,
"%s
\n
"
,
symbolic
(
brglist
,
ov
->
bridge
));
}
}
static
CLASS_DEVICE_ATTR
(
bridge
,
S_IRUGO
,
show_bridge
,
NULL
);
static
ssize_t
show_sensor
(
struct
class_device
*
cd
,
char
*
buf
)
{
struct
usb_ov511
*
ov
=
cd_to_ov
(
cd
);
return
sprintf
(
buf
,
"%s
\n
"
,
symbolic
(
senlist
,
ov
->
sensor
));
}
}
static
CLASS_DEVICE_ATTR
(
sensor
,
S_IRUGO
,
show_sensor
,
NULL
);
static
ssize_t
show_brightness
(
struct
class_device
*
cd
,
char
*
buf
)
...
...
@@ -5597,7 +5597,7 @@ static ssize_t show_brightness(struct class_device *cd, char *buf)
return
-
ENODEV
;
sensor_get_brightness
(
ov
,
&
x
);
return
sprintf
(
buf
,
"%d
\n
"
,
x
>>
8
);
}
}
static
CLASS_DEVICE_ATTR
(
brightness
,
S_IRUGO
,
show_brightness
,
NULL
);
static
ssize_t
show_saturation
(
struct
class_device
*
cd
,
char
*
buf
)
...
...
@@ -5609,7 +5609,7 @@ static ssize_t show_saturation(struct class_device *cd, char *buf)
return
-
ENODEV
;
sensor_get_saturation
(
ov
,
&
x
);
return
sprintf
(
buf
,
"%d
\n
"
,
x
>>
8
);
}
}
static
CLASS_DEVICE_ATTR
(
saturation
,
S_IRUGO
,
show_saturation
,
NULL
);
static
ssize_t
show_contrast
(
struct
class_device
*
cd
,
char
*
buf
)
...
...
@@ -5621,7 +5621,7 @@ static ssize_t show_contrast(struct class_device *cd, char *buf)
return
-
ENODEV
;
sensor_get_contrast
(
ov
,
&
x
);
return
sprintf
(
buf
,
"%d
\n
"
,
x
>>
8
);
}
}
static
CLASS_DEVICE_ATTR
(
contrast
,
S_IRUGO
,
show_contrast
,
NULL
);
static
ssize_t
show_hue
(
struct
class_device
*
cd
,
char
*
buf
)
...
...
@@ -5633,7 +5633,7 @@ static ssize_t show_hue(struct class_device *cd, char *buf)
return
-
ENODEV
;
sensor_get_hue
(
ov
,
&
x
);
return
sprintf
(
buf
,
"%d
\n
"
,
x
>>
8
);
}
}
static
CLASS_DEVICE_ATTR
(
hue
,
S_IRUGO
,
show_hue
,
NULL
);
static
ssize_t
show_exposure
(
struct
class_device
*
cd
,
char
*
buf
)
...
...
@@ -5645,7 +5645,7 @@ static ssize_t show_exposure(struct class_device *cd, char *buf)
return
-
ENODEV
;
sensor_get_exposure
(
ov
,
&
exp
);
return
sprintf
(
buf
,
"%d
\n
"
,
exp
>>
8
);
}
}
static
CLASS_DEVICE_ATTR
(
exposure
,
S_IRUGO
,
show_exposure
,
NULL
);
static
void
ov_create_sysfs
(
struct
video_device
*
vdev
)
...
...
drivers/media/video/ov511.h
浏览文件 @
d56410e0
...
...
@@ -130,7 +130,7 @@
#define R511_COMP_QVY 0x76
#define R511_COMP_QVUV 0x77
#define R511_COMP_EN 0x78
#define R511_COMP_LUT_EN 0x79
#define R511_COMP_LUT_EN 0x79
#define R511_COMP_LUT_BEGIN 0x80
/* --------------------------------- */
...
...
@@ -459,14 +459,14 @@ struct usb_ov511 {
int
subh
;
/* Pix Array subcapture height */
int
curframe
;
/* Current receiving sbuf */
struct
ov511_frame
frame
[
OV511_NUMFRAMES
];
struct
ov511_frame
frame
[
OV511_NUMFRAMES
];
struct
ov511_sbuf
sbuf
[
OV511_NUMSBUF
];
wait_queue_head_t
wq
;
/* Processes waiting */
int
snap_enabled
;
/* Snapshot mode enabled */
int
bridge
;
/* Type of bridge (BRG_*) */
int
bclass
;
/* Class of bridge (BCL_*) */
int
sensor
;
/* Type of image sensor chip (SEN_*) */
...
...
@@ -512,7 +512,7 @@ struct symbolic_list {
/* Returns the name of the matching element in the symbolic_list array. The
* end of the list must be marked with an element that has a NULL name.
*/
static
inline
char
*
static
inline
char
*
symbolic
(
struct
symbolic_list
list
[],
int
num
)
{
int
i
;
...
...
drivers/media/video/ovcamchip/Makefile
浏览文件 @
d56410e0
ovcamchip-objs
:=
ovcamchip_core.o ov6x20.o ov6x30.o ov7x10.o ov7x20.o
\
ov76be.o
ov76be.o
obj-$(CONFIG_VIDEO_OVCAMCHIP)
+=
ovcamchip.o
drivers/media/video/ovcamchip/ovcamchip_core.c
浏览文件 @
d56410e0
...
...
@@ -266,17 +266,17 @@ static int ovcamchip_detect(struct i2c_client *c)
PDEBUG
(
3
,
"Testing for 0V6xx0"
);
c
->
addr
=
OV6xx0_SID
;
if
(
init_camchip
(
c
)
<
0
)
{
return
-
ENODEV
;
return
-
ENODEV
;
}
else
{
if
(
ov6xx0_detect
(
c
)
<
0
)
{
PERROR
(
"Failed to init OV6xx0"
);
return
-
EIO
;
return
-
EIO
;
}
}
}
else
{
if
(
ov7xx0_detect
(
c
)
<
0
)
{
PERROR
(
"Failed to init OV7xx0"
);
return
-
EIO
;
return
-
EIO
;
}
}
...
...
drivers/media/video/ovcamchip/ovcamchip_priv.h
浏览文件 @
d56410e0
...
...
@@ -82,6 +82,6 @@ extern int ov_write_regvals(struct i2c_client *c,
struct
ovcamchip_regvals
*
rvals
);
extern
int
ov_write_mask
(
struct
i2c_client
*
c
,
unsigned
char
reg
,
unsigned
char
value
,
unsigned
char
mask
);
unsigned
char
value
,
unsigned
char
mask
);
#endif
drivers/media/video/planb.c
浏览文件 @
d56410e0
/*
/*
planb - PlanB frame grabber driver
PlanB is used in the 7x00/8x00 series of PowerMacintosh
...
...
@@ -584,7 +584,7 @@ static void resume_overlay(struct planb *pb)
wake_up_interruptible
(
&
pb
->
suspendq
);
}
static
void
add_clip
(
struct
planb
*
pb
,
struct
video_clip
*
clip
)
static
void
add_clip
(
struct
planb
*
pb
,
struct
video_clip
*
clip
)
{
volatile
unsigned
char
*
base
;
int
xc
=
clip
->
x
,
yc
=
clip
->
y
;
...
...
@@ -758,7 +758,7 @@ static void cmd_buff(struct planb *pb)
PLANB_SET
(
CH_SYNC
));
tab_cmd_store
(
c1
++
,
(
unsigned
)(
&
pb
->
planb_base_phys
->
ch1
.
br_sel
),
PLANB_SET
(
DMA_ABORT
));
/* odd field data: */
jump
=
virt_to_bus
(
c1
+
nlines
/
2
);
for
(
i
=
1
;
i
<
nlines
;
i
+=
stepsize
,
c1
++
)
...
...
@@ -1247,7 +1247,7 @@ static volatile struct dbdma_cmd *setup_grab_cmd(int fr, struct planb *pb)
tab_cmd_dbdma
(
c1
,
DBDMA_NOP
|
BR_IFCLR
,
virt_to_bus
(
c1
-
3
));
c1
++
;
tab_cmd_store
(
c1
++
,
(
unsigned
)(
&
pb
->
planb_base_phys
->
ch1
.
br_sel
),
PLANB_SET
(
DMA_ABORT
));
/* odd field data: */
jump_addr
=
c1
+
TAB_FACTOR
*
nlines
/
2
;
jump
=
virt_to_bus
(
jump_addr
);
...
...
@@ -1383,7 +1383,7 @@ static int planb_open(struct video_device *dev, int mode)
pb
->
user
++
;
DEBUG
(
"PlanB: device opened
\n
"
);
return
0
;
return
0
;
}
static
void
planb_close
(
struct
video_device
*
dev
)
...
...
@@ -1424,9 +1424,9 @@ static long planb_write(struct video_device *v, const char *buf,
static
int
planb_ioctl
(
struct
video_device
*
dev
,
unsigned
int
cmd
,
void
*
arg
)
{
struct
planb
*
pb
=
(
struct
planb
*
)
dev
;
switch
(
cmd
)
{
{
case
VIDIOCGCAP
:
{
struct
video_capability
b
;
...
...
@@ -1440,26 +1440,26 @@ static int planb_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
b
.
channels
=
2
;
/* composite & svhs */
b
.
audios
=
0
;
b
.
maxwidth
=
PLANB_MAXPIXELS
;
b
.
maxheight
=
PLANB_MAXLINES
;
b
.
minwidth
=
32
;
/* wild guess */
b
.
minheight
=
32
;
if
(
copy_to_user
(
arg
,
&
b
,
sizeof
(
b
)))
return
-
EFAULT
;
b
.
maxheight
=
PLANB_MAXLINES
;
b
.
minwidth
=
32
;
/* wild guess */
b
.
minheight
=
32
;
if
(
copy_to_user
(
arg
,
&
b
,
sizeof
(
b
)))
return
-
EFAULT
;
return
0
;
}
case
VIDIOCSFBUF
:
{
struct
video_buffer
v
;
struct
video_buffer
v
;
unsigned
short
bpp
;
unsigned
int
fmt
;
DEBUG
(
"PlanB: IOCTL VIDIOCSFBUF
\n
"
);
if
(
!
capable
(
CAP_SYS_ADMIN
)
if
(
!
capable
(
CAP_SYS_ADMIN
)
||
!
capable
(
CAP_SYS_RAWIO
))
return
-
EPERM
;
if
(
copy_from_user
(
&
v
,
arg
,
sizeof
(
v
)))
return
-
EFAULT
;
return
-
EPERM
;
if
(
copy_from_user
(
&
v
,
arg
,
sizeof
(
v
)))
return
-
EFAULT
;
planb_lock
(
pb
);
switch
(
v
.
depth
)
{
case
8
:
...
...
@@ -1478,7 +1478,7 @@ static int planb_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
break
;
default:
planb_unlock
(
pb
);
return
-
EINVAL
;
return
-
EINVAL
;
}
if
(
bpp
*
v
.
width
>
v
.
bytesperline
)
{
planb_unlock
(
pb
);
...
...
@@ -1493,7 +1493,7 @@ static int planb_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
pb
->
win
.
bpl
=
pb
->
win
.
bpp
*
pb
->
win
.
swidth
;
pb
->
win
.
pad
=
v
.
bytesperline
-
pb
->
win
.
bpl
;
DEBUG
(
"PlanB: Display at %p is %d by %d, bytedepth %d,"
DEBUG
(
"PlanB: Display at %p is %d by %d, bytedepth %d,"
" bpl %d (+ %d)
\n
"
,
v
.
base
,
v
.
width
,
v
.
height
,
pb
->
win
.
bpp
,
pb
->
win
.
bpl
,
pb
->
win
.
pad
);
...
...
@@ -1504,11 +1504,11 @@ static int planb_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
resume_overlay
(
pb
);
}
planb_unlock
(
pb
);
return
0
;
return
0
;
}
case
VIDIOCGFBUF
:
{
struct
video_buffer
v
;
struct
video_buffer
v
;
DEBUG
(
"PlanB: IOCTL VIDIOCGFBUF
\n
"
);
...
...
@@ -1518,15 +1518,15 @@ static int planb_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
v
.
depth
=
pb
->
win
.
depth
;
v
.
bytesperline
=
pb
->
win
.
bpl
+
pb
->
win
.
pad
;
if
(
copy_to_user
(
arg
,
&
v
,
sizeof
(
v
)))
return
-
EFAULT
;
return
-
EFAULT
;
return
0
;
}
case
VIDIOCCAPTURE
:
{
int
i
;
if
(
copy_from_user
(
&
i
,
arg
,
sizeof
(
i
)))
return
-
EFAULT
;
if
(
copy_from_user
(
&
i
,
arg
,
sizeof
(
i
)))
return
-
EFAULT
;
if
(
i
==
0
)
{
DEBUG
(
"PlanB: IOCTL VIDIOCCAPTURE Stop
\n
"
);
...
...
@@ -1695,7 +1695,7 @@ static int planb_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
struct
video_window
vw
;
struct
video_clip
clip
;
int
i
;
DEBUG
(
"PlanB: IOCTL VIDIOCSWIN
\n
"
);
if
(
copy_from_user
(
&
vw
,
arg
,
sizeof
(
vw
)))
...
...
@@ -1749,7 +1749,7 @@ static int planb_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
return
-
EFAULT
;
return
0
;
}
case
VIDIOCSYNC
:
{
case
VIDIOCSYNC
:
{
int
i
;
IDEBUG
(
"PlanB: IOCTL VIDIOCSYNC
\n
"
);
...
...
@@ -1759,42 +1759,42 @@ static int planb_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
IDEBUG
(
"PlanB: sync to frame %d
\n
"
,
i
);
if
(
i
>
(
MAX_GBUFFERS
-
1
)
||
i
<
0
)
return
-
EINVAL
;
if
(
i
>
(
MAX_GBUFFERS
-
1
)
||
i
<
0
)
return
-
EINVAL
;
chk_grab:
switch
(
pb
->
frame_stat
[
i
])
{
case
GBUFFER_UNUSED
:
return
-
EINVAL
;
switch
(
pb
->
frame_stat
[
i
])
{
case
GBUFFER_UNUSED
:
return
-
EINVAL
;
case
GBUFFER_GRABBING
:
IDEBUG
(
"PlanB: waiting for grab"
" done (%d)
\n
"
,
i
);
interruptible_sleep_on
(
&
pb
->
capq
);
interruptible_sleep_on
(
&
pb
->
capq
);
if
(
signal_pending
(
current
))
return
-
EINTR
;
goto
chk_grab
;
case
GBUFFER_DONE
:
pb
->
frame_stat
[
i
]
=
GBUFFER_UNUSED
;
break
;
}
return
0
;
case
GBUFFER_DONE
:
pb
->
frame_stat
[
i
]
=
GBUFFER_UNUSED
;
break
;
}
return
0
;
}
case
VIDIOCMCAPTURE
:
case
VIDIOCMCAPTURE
:
{
struct
video_mmap
vm
;
struct
video_mmap
vm
;
volatile
unsigned
int
status
;
IDEBUG
(
"PlanB: IOCTL VIDIOCMCAPTURE
\n
"
);
if
(
copy_from_user
((
void
*
)
&
vm
,(
void
*
)
arg
,
sizeof
(
vm
)))
return
-
EFAULT
;
status
=
pb
->
frame_stat
[
vm
.
frame
];
if
(
status
!=
GBUFFER_UNUSED
)
return
-
EBUSY
;
status
=
pb
->
frame_stat
[
vm
.
frame
];
if
(
status
!=
GBUFFER_UNUSED
)
return
-
EBUSY
;
return
vgrab
(
pb
,
&
vm
);
return
vgrab
(
pb
,
&
vm
);
}
case
VIDIOCGMBUF
:
{
int
i
;
...
...
@@ -1811,7 +1811,7 @@ static int planb_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
return
-
EFAULT
;
return
0
;
}
case
PLANBIOCGSAAREGS
:
{
struct
planb_saa_regs
preg
;
...
...
@@ -1828,7 +1828,7 @@ static int planb_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
return
-
EFAULT
;
return
0
;
}
case
PLANBIOCSSAAREGS
:
{
struct
planb_saa_regs
preg
;
...
...
@@ -1842,7 +1842,7 @@ static int planb_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
saa_set
(
preg
.
addr
,
preg
.
val
,
pb
);
return
0
;
}
case
PLANBIOCGSTAT
:
{
struct
planb_stat_regs
pstat
;
...
...
@@ -1859,7 +1859,7 @@ static int planb_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
return
-
EFAULT
;
return
0
;
}
case
PLANBIOCSMODE
:
{
int
v
;
...
...
@@ -1985,10 +1985,10 @@ static int planb_mmap(struct vm_area_struct *vma, struct video_device *dev, cons
{
int
i
;
struct
planb
*
pb
=
(
struct
planb
*
)
dev
;
unsigned
long
start
=
(
unsigned
long
)
adr
;
unsigned
long
start
=
(
unsigned
long
)
adr
;
if
(
size
>
MAX_GBUFFERS
*
PLANB_MAX_FBUF
)
return
-
EINVAL
;
return
-
EINVAL
;
if
(
!
pb
->
rawbuf
)
{
int
err
;
if
((
err
=
grabbuf_alloc
(
pb
)))
...
...
@@ -2091,10 +2091,10 @@ static int init_planb(struct planb *pb)
/* clear interrupt mask */
pb
->
intr_mask
=
PLANB_CLR_IRQ
;
result
=
request_irq
(
pb
->
irq
,
planb_irq
,
0
,
"PlanB"
,
(
void
*
)
pb
);
if
(
result
<
0
)
{
if
(
result
==-
EINVAL
)
printk
(
KERN_ERR
"PlanB: Bad irq number (%d) "
result
=
request_irq
(
pb
->
irq
,
planb_irq
,
0
,
"PlanB"
,
(
void
*
)
pb
);
if
(
result
<
0
)
{
if
(
result
==-
EINVAL
)
printk
(
KERN_ERR
"PlanB: Bad irq number (%d) "
"or handler
\n
"
,
(
int
)
pb
->
irq
);
else
if
(
result
==-
EBUSY
)
printk
(
KERN_ERR
"PlanB: I don't know why, "
...
...
@@ -2102,7 +2102,7 @@ static int init_planb(struct planb *pb)
return
result
;
}
disable_irq
(
pb
->
irq
);
/* Now add the template and register the device unit. */
memcpy
(
&
pb
->
video_dev
,
&
planb_template
,
sizeof
(
planb_template
));
...
...
@@ -2143,7 +2143,7 @@ static int init_planb(struct planb *pb)
}
/*
* Scan for a PlanB controller, request the irq and map the io memory
* Scan for a PlanB controller, request the irq and map the io memory
*/
static
int
find_planb
(
void
)
...
...
@@ -2171,9 +2171,9 @@ static int find_planb(void)
pb
=
&
planbs
[
0
];
planb_num
=
1
;
if
(
planb_devices
->
n_addrs
!=
1
)
{
printk
(
KERN_WARNING
"PlanB: expecting 1 address for planb "
"(got %d)"
,
planb_devices
->
n_addrs
);
if
(
planb_devices
->
n_addrs
!=
1
)
{
printk
(
KERN_WARNING
"PlanB: expecting 1 address for planb "
"(got %d)"
,
planb_devices
->
n_addrs
);
return
0
;
}
...
...
@@ -2236,7 +2236,7 @@ static int find_planb(void)
pb
->
planb_base
=
planb_regs
;
pb
->
planb_base_phys
=
(
struct
planb_registers
*
)
new_base
;
pb
->
irq
=
irq
;
return
planb_num
;
err_out_disable:
...
...
@@ -2251,7 +2251,7 @@ static void release_planb(void)
int
i
;
struct
planb
*
pb
;
for
(
i
=
0
;
i
<
planb_num
;
i
++
)
for
(
i
=
0
;
i
<
planb_num
;
i
++
)
{
pb
=&
planbs
[
i
];
...
...
@@ -2278,7 +2278,7 @@ static void release_planb(void)
static
int
__init
init_planbs
(
void
)
{
int
i
;
if
(
find_planb
()
<=
0
)
return
-
EIO
;
...
...
@@ -2288,9 +2288,9 @@ static int __init init_planbs(void)
" with v4l
\n
"
,
i
);
release_planb
();
return
-
EIO
;
}
}
printk
(
KERN_INFO
"PlanB: registered device %d with v4l
\n
"
,
i
);
}
}
return
0
;
}
...
...
drivers/media/video/planb.h
浏览文件 @
d56410e0
/*
/*
planb - PlanB frame grabber driver
PlanB is used in the 7x00/8x00 series of PowerMacintosh
...
...
@@ -167,7 +167,7 @@ struct planb {
struct
video_device
video_dev
;
struct
video_picture
picture
;
/* Current picture params */
struct
video_audio
audio_dev
;
/* Current audio params */
volatile
struct
planb_registers
*
planb_base
;
/* virt base of planb */
struct
planb_registers
*
planb_base_phys
;
/* phys base of planb */
void
*
priv_space
;
/* Org. alloc. mem for kfree */
...
...
@@ -209,7 +209,7 @@ struct planb {
int
gwidth
[
MAX_GBUFFERS
],
gheight
[
MAX_GBUFFERS
];
unsigned
int
gfmt
[
MAX_GBUFFERS
];
int
gnorm_switch
[
MAX_GBUFFERS
];
volatile
unsigned
int
*
frame_stat
;
volatile
unsigned
int
*
frame_stat
;
#define GBUFFER_UNUSED 0x00U
#define GBUFFER_GRABBING 0x01U
#define GBUFFER_DONE 0x02U
...
...
drivers/media/video/pms.c
浏览文件 @
d56410e0
...
...
@@ -12,10 +12,10 @@
* Most of this code is directly derived from his userspace driver.
* His driver works so send any reports to alan@redhat.com unless the
* userspace driver also doesn't work for you...
*
*
* Changes:
* 08/07/2003 Daniele Bellucci <bellucda@tiscali.it>
* - pms_capture: report back -EFAULT
* - pms_capture: report back -EFAULT
*/
#include <linux/module.h>
...
...
@@ -66,14 +66,14 @@ static int standard = 0; /* 0 - auto 1 - ntsc 2 - pal 3 - secam */
/*
* I/O ports and Shared Memory
*/
static
int
io_port
=
0x250
;
static
int
data_port
=
0x251
;
static
int
mem_base
=
0xC8000
;
static
void
__iomem
*
mem
;
static
int
video_nr
=
-
1
;
static
inline
void
mvv_write
(
u8
index
,
u8
value
)
{
...
...
@@ -90,9 +90,9 @@ static int pms_i2c_stat(u8 slave)
{
int
counter
;
int
i
;
outb
(
0x28
,
io_port
);
counter
=
0
;
while
((
inb
(
data_port
)
&
0x01
)
==
0
)
if
(
counter
++==
256
)
...
...
@@ -101,9 +101,9 @@ static int pms_i2c_stat(u8 slave)
while
((
inb
(
data_port
)
&
0x01
)
!=
0
)
if
(
counter
++==
256
)
break
;
outb
(
slave
,
io_port
);
counter
=
0
;
while
((
inb
(
data_port
)
&
0x01
)
==
0
)
if
(
counter
++==
256
)
...
...
@@ -112,7 +112,7 @@ static int pms_i2c_stat(u8 slave)
while
((
inb
(
data_port
)
&
0x01
)
!=
0
)
if
(
counter
++==
256
)
break
;
for
(
i
=
0
;
i
<
12
;
i
++
)
{
char
st
=
inb
(
data_port
);
...
...
@@ -122,7 +122,7 @@ static int pms_i2c_stat(u8 slave)
break
;
}
outb
(
0x29
,
io_port
);
return
inb
(
data_port
);
return
inb
(
data_port
);
}
static
int
pms_i2c_write
(
u16
slave
,
u16
sub
,
u16
data
)
...
...
@@ -130,19 +130,19 @@ static int pms_i2c_write(u16 slave, u16 sub, u16 data)
int
skip
=
0
;
int
count
;
int
i
;
for
(
i
=
0
;
i
<
i2c_count
;
i
++
)
{
if
((
i2cinfo
[
i
].
slave
==
slave
)
&&
(
i2cinfo
[
i
].
sub
==
sub
))
{
if
(
i2cinfo
[
i
].
data
==
data
)
skip
=
1
;
i2cinfo
[
i
].
data
=
data
;
i
=
i2c_count
+
1
;
if
(
i2cinfo
[
i
].
data
==
data
)
skip
=
1
;
i2cinfo
[
i
].
data
=
data
;
i
=
i2c_count
+
1
;
}
}
if
(
i
==
i2c_count
&&
i2c_count
<
64
)
{
i2cinfo
[
i2c_count
].
slave
=
slave
;
...
...
@@ -150,16 +150,16 @@ static int pms_i2c_write(u16 slave, u16 sub, u16 data)
i2cinfo
[
i2c_count
].
data
=
data
;
i2c_count
++
;
}
if
(
skip
)
return
0
;
mvv_write
(
0x29
,
sub
);
mvv_write
(
0x2A
,
data
);
mvv_write
(
0x28
,
slave
);
outb
(
0x28
,
io_port
);
count
=
0
;
while
((
inb
(
data_port
)
&
1
)
==
0
)
if
(
count
>
255
)
...
...
@@ -167,9 +167,9 @@ static int pms_i2c_write(u16 slave, u16 sub, u16 data)
while
((
inb
(
data_port
)
&
1
)
!=
0
)
if
(
count
>
255
)
break
;
count
=
inb
(
data_port
);
if
(
count
&
2
)
return
-
1
;
return
count
;
...
...
@@ -189,8 +189,8 @@ static int pms_i2c_read(int slave, int sub)
static
void
pms_i2c_andor
(
int
slave
,
int
sub
,
int
and
,
int
or
)
{
u8
tmp
;
u8
tmp
;
tmp
=
pms_i2c_read
(
slave
,
sub
);
tmp
=
(
tmp
&
and
)
|
or
;
pms_i2c_write
(
slave
,
sub
,
tmp
);
...
...
@@ -199,7 +199,7 @@ static void pms_i2c_andor(int slave, int sub, int and, int or)
/*
* Control functions
*/
static
void
pms_videosource
(
short
source
)
{
...
...
@@ -234,8 +234,8 @@ static void pms_colour(short colour)
break
;
}
}
static
void
pms_contrast
(
short
contrast
)
{
switch
(
decoder
)
...
...
@@ -269,14 +269,14 @@ static void pms_format(short format)
{
int
target
;
standard
=
format
;
if
(
decoder
==
PHILIPS1
)
target
=
0x42
;
else
if
(
decoder
==
PHILIPS2
)
target
=
0x8A
;
else
return
;
switch
(
format
)
{
case
0
:
/* Auto */
...
...
@@ -302,7 +302,7 @@ static void pms_format(short format)
/*
* These features of the PMS card are not currently exposes. They
* could become a private v4l ioctl for PMSCONFIG or somesuch if
* could become a private v4l ioctl for PMSCONFIG or somesuch if
* people need it. We also don't yet use the PMS interrupt.
*/
...
...
@@ -324,7 +324,7 @@ static void pms_hstart(short start)
/*
* Bandpass filters
*/
static
void
pms_bandpass
(
short
pass
)
{
if
(
decoder
==
PHILIPS2
)
...
...
@@ -493,7 +493,7 @@ static void pms_vert(u8 deciden, u8 decinum)
/*
* Turn 16bit ratios into best small ratio the chipset can grok
*/
static
void
pms_vertdeci
(
unsigned
short
decinum
,
unsigned
short
deciden
)
{
/* Knock it down by /5 once */
...
...
@@ -546,7 +546,7 @@ static void pms_horzdeci(short decinum, short deciden)
decinum
=
512
;
deciden
=
640
;
/* 768 would be ideal */
}
while
(((
decinum
|
deciden
)
&
1
)
==
0
)
{
decinum
>>=
1
;
...
...
@@ -559,7 +559,7 @@ static void pms_horzdeci(short decinum, short deciden)
}
if
(
deciden
==
32
)
deciden
--
;
mvv_write
(
0x24
,
0x80
|
deciden
);
mvv_write
(
0x25
,
decinum
);
}
...
...
@@ -567,14 +567,14 @@ static void pms_horzdeci(short decinum, short deciden)
static
void
pms_resolution
(
short
width
,
short
height
)
{
int
fg_height
;
fg_height
=
height
;
if
(
fg_height
>
280
)
fg_height
=
280
;
mvv_write
(
0x18
,
fg_height
);
mvv_write
(
0x19
,
fg_height
>>
8
);
if
(
standard
==
1
)
{
mvv_write
(
0x1A
,
0xFC
);
...
...
@@ -598,7 +598,7 @@ static void pms_resolution(short width, short height)
mvv_write
(
0x42
,
0x00
);
mvv_write
(
0x43
,
0x00
);
mvv_write
(
0x44
,
MVVMEMORYWIDTH
);
mvv_write
(
0x22
,
width
+
8
);
mvv_write
(
0x23
,
(
width
+
8
)
>>
8
);
...
...
@@ -618,7 +618,7 @@ static void pms_resolution(short width, short height)
/*
* Set Input
*/
static
void
pms_vcrinput
(
short
input
)
{
if
(
decoder
==
PHILIPS2
)
...
...
@@ -643,20 +643,20 @@ static int pms_capture(struct pms_device *dev, char __user *buf, int rgb555, int
mvv_write
(
0x08
,
r8
);
/* capture rgb555/565, init DRAM, PC enable */
/* printf("%d %d %d %d %d %x %x\n",width,height,voff,nom,den,mvv_buf); */
for
(
y
=
0
;
y
<
dev
->
height
;
y
++
)
for
(
y
=
0
;
y
<
dev
->
height
;
y
++
)
{
writeb
(
0
,
mem
);
/* synchronisiert neue Zeile */
/*
* This is in truth a fifo, be very careful as if you
* forgot this odd things will occur 8)
*/
memcpy_fromio
(
tmp
,
mem
,
dw
+
32
);
/* discard 16 word */
cnt
-=
dev
->
height
;
while
(
cnt
<=
0
)
{
while
(
cnt
<=
0
)
{
/*
* Don't copy too far
*/
...
...
@@ -666,7 +666,7 @@ static int pms_capture(struct pms_device *dev, char __user *buf, int rgb555, int
cnt
+=
dev
->
height
;
if
(
copy_to_user
(
buf
,
tmp
+
32
,
dt
))
return
len
?
len
:
-
EFAULT
;
buf
+=
dt
;
buf
+=
dt
;
len
+=
dt
;
}
}
...
...
@@ -683,7 +683,7 @@ static int pms_do_ioctl(struct inode *inode, struct file *file,
{
struct
video_device
*
dev
=
video_devdata
(
file
);
struct
pms_device
*
pd
=
(
struct
pms_device
*
)
dev
;
switch
(
cmd
)
{
case
VIDIOCGCAP
:
...
...
@@ -806,7 +806,7 @@ static int pms_do_ioctl(struct inode *inode, struct file *file,
||
(
p
->
palette
==
VIDEO_PALETTE_RGB555
&&
p
->
depth
==
15
)))
return
-
EINVAL
;
pd
->
picture
=
*
p
;
/*
* Now load the card.
*/
...
...
@@ -815,7 +815,7 @@ static int pms_do_ioctl(struct inode *inode, struct file *file,
pms_brightness
(
p
->
brightness
>>
8
);
pms_hue
(
p
->
hue
>>
8
);
pms_colour
(
p
->
colour
>>
8
);
pms_contrast
(
p
->
contrast
>>
8
);
pms_contrast
(
p
->
contrast
>>
8
);
mutex_unlock
(
&
pd
->
lock
);
return
0
;
}
...
...
@@ -873,7 +873,7 @@ static ssize_t pms_read(struct file *file, char __user *buf,
struct
video_device
*
v
=
video_devdata
(
file
);
struct
pms_device
*
pd
=
(
struct
pms_device
*
)
v
;
int
len
;
mutex_lock
(
&
pd
->
lock
);
len
=
pms_capture
(
pd
,
buf
,
(
pd
->
picture
.
depth
==
16
)
?
0
:
1
,
count
);
mutex_unlock
(
&
pd
->
lock
);
...
...
@@ -905,13 +905,13 @@ static struct pms_device pms_device;
/*
* Probe for and initialise the Mediavision PMS
*/
static
int
init_mediavision
(
void
)
{
int
id
;
int
idec
,
decst
;
int
i
;
unsigned
char
i2c_defs
[]
=
{
0x4C
,
0x30
,
0x00
,
0xE8
,
0xB6
,
0xE2
,
0x00
,
0x00
,
...
...
@@ -925,7 +925,7 @@ static int init_mediavision(void)
mem
=
ioremap
(
mem_base
,
0x800
);
if
(
!
mem
)
return
-
ENOMEM
;
if
(
!
request_region
(
0x9A01
,
1
,
"Mediavision PMS config"
))
{
printk
(
KERN_WARNING
"mediavision: unable to detect: 0x9A01 in use.
\n
"
);
...
...
@@ -941,18 +941,18 @@ static int init_mediavision(void)
}
outb
(
0xB8
,
0x9A01
);
/* Unlock */
outb
(
io_port
>>
4
,
0x9A01
);
/* Set IO port */
id
=
mvv_read
(
3
);
decst
=
pms_i2c_stat
(
0x43
);
if
(
decst
!=-
1
)
idec
=
2
;
else
if
(
pms_i2c_stat
(
0xb9
)
!=-
1
)
idec
=
3
;
else
if
(
pms_i2c_stat
(
0x8b
)
!=-
1
)
idec
=
1
;
else
else
idec
=
0
;
printk
(
KERN_INFO
"PMS type is %d
\n
"
,
idec
);
...
...
@@ -966,11 +966,11 @@ static int init_mediavision(void)
/*
* Ok we have a PMS of some sort
*/
mvv_write
(
0x04
,
mem_base
>>
12
);
/* Set the memory area */
/* Ok now load the defaults */
for
(
i
=
0
;
i
<
0x19
;
i
++
)
{
if
(
i2c_defs
[
i
]
==
0xFF
)
...
...
@@ -978,7 +978,7 @@ static int init_mediavision(void)
else
pms_i2c_write
(
0x8A
,
i
,
i2c_defs
[
i
]);
}
pms_i2c_write
(
0xB8
,
0x00
,
0x12
);
pms_i2c_write
(
0xB8
,
0x04
,
0x00
);
pms_i2c_write
(
0xB8
,
0x07
,
0x00
);
...
...
@@ -987,18 +987,18 @@ static int init_mediavision(void)
pms_i2c_write
(
0xB8
,
0x0A
,
0x00
);
pms_i2c_write
(
0xB8
,
0x0B
,
0x10
);
pms_i2c_write
(
0xB8
,
0x10
,
0x03
);
mvv_write
(
0x01
,
0x00
);
mvv_write
(
0x05
,
0xA0
);
mvv_write
(
0x08
,
0x25
);
mvv_write
(
0x09
,
0x00
);
mvv_write
(
0x0A
,
0x20
|
MVVMEMORYWIDTH
);
mvv_write
(
0x0A
,
0x20
|
MVVMEMORYWIDTH
);
mvv_write
(
0x10
,
0x02
);
mvv_write
(
0x1E
,
0x0C
);
mvv_write
(
0x1F
,
0x03
);
mvv_write
(
0x26
,
0x06
);
mvv_write
(
0x2B
,
0x00
);
mvv_write
(
0x2C
,
0x20
);
mvv_write
(
0x2D
,
0x00
);
...
...
@@ -1018,13 +1018,13 @@ static int init_mediavision(void)
/*
* Initialization and module stuff
*/
static
int
__init
init_pms_cards
(
void
)
{
printk
(
KERN_INFO
"Mediavision Pro Movie Studio driver 0.02
\n
"
);
data_port
=
io_port
+
1
;
if
(
init_mediavision
())
{
printk
(
KERN_INFO
"Board not found.
\n
"
);
...
...
drivers/media/video/pwc/Makefile
浏览文件 @
d56410e0
...
...
@@ -15,6 +15,6 @@ default:
endif
clean
:
rm
-f
*
.[oas] .
*
.flags
*
.ko .
*
.cmd .
*
.d .
*
.tmp
*
.mod.c
rm
-f
*
.[oas] .
*
.flags
*
.ko .
*
.cmd .
*
.d .
*
.tmp
*
.mod.c
rm
-rf
.tmp_versions
drivers/media/video/pwc/philips.txt
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/pwc/pwc-ctrl.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/pwc/pwc-if.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/pwc/pwc-ioctl.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/pwc/pwc-kiara.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/pwc/pwc-misc.c
浏览文件 @
d56410e0
/* Linux driver for Philips webcam
/* Linux driver for Philips webcam
Various miscellaneous functions and tables.
(C) 1999-2003 Nemosoft Unv.
(C) 2004 Luc Saillard (luc@saillard.org)
...
...
@@ -44,17 +44,17 @@ int pwc_decode_size(struct pwc_device *pdev, int width, int height)
int
i
,
find
;
/* Make sure we don't go beyond our max size.
NB: we have different limits for RAW and normal modes. In case
you don't have the decompressor loaded or use RAW mode,
the maximum viewable size is smaller.
*/
NB: we have different limits for RAW and normal modes. In case
you don't have the decompressor loaded or use RAW mode,
the maximum viewable size is smaller.
*/
if
(
pdev
->
vpalette
==
VIDEO_PALETTE_RAW
)
{
if
(
width
>
pdev
->
abs_max
.
x
||
height
>
pdev
->
abs_max
.
y
)
{
Debug
(
"VIDEO_PALETTE_RAW: going beyond abs_max.
\n
"
);
return
-
1
;
}
return
-
1
;
}
}
else
{
...
...
@@ -88,8 +88,8 @@ void pwc_construct(struct pwc_device *pdev)
pdev
->
view_min
.
y
=
96
;
pdev
->
view_max
.
x
=
352
;
pdev
->
view_max
.
y
=
288
;
pdev
->
abs_max
.
x
=
352
;
pdev
->
abs_max
.
y
=
288
;
pdev
->
abs_max
.
x
=
352
;
pdev
->
abs_max
.
y
=
288
;
pdev
->
image_mask
=
1
<<
PSZ_SQCIF
|
1
<<
PSZ_QCIF
|
1
<<
PSZ_CIF
;
pdev
->
vcinterface
=
2
;
pdev
->
vendpoint
=
4
;
...
...
@@ -105,8 +105,8 @@ void pwc_construct(struct pwc_device *pdev)
pdev
->
view_max
.
x
=
640
;
pdev
->
view_max
.
y
=
480
;
pdev
->
image_mask
=
1
<<
PSZ_SQCIF
|
1
<<
PSZ_QSIF
|
1
<<
PSZ_QCIF
|
1
<<
PSZ_SIF
|
1
<<
PSZ_CIF
|
1
<<
PSZ_VGA
;
pdev
->
abs_max
.
x
=
640
;
pdev
->
abs_max
.
y
=
480
;
pdev
->
abs_max
.
x
=
640
;
pdev
->
abs_max
.
y
=
480
;
pdev
->
vcinterface
=
3
;
pdev
->
vendpoint
=
4
;
pdev
->
frame_header_size
=
0
;
...
...
@@ -121,8 +121,8 @@ void pwc_construct(struct pwc_device *pdev)
pdev
->
view_max
.
x
=
640
;
pdev
->
view_max
.
y
=
480
;
pdev
->
image_mask
=
1
<<
PSZ_QSIF
|
1
<<
PSZ_SIF
|
1
<<
PSZ_VGA
;
pdev
->
abs_max
.
x
=
640
;
pdev
->
abs_max
.
y
=
480
;
pdev
->
abs_max
.
x
=
640
;
pdev
->
abs_max
.
y
=
480
;
pdev
->
vcinterface
=
3
;
pdev
->
vendpoint
=
5
;
pdev
->
frame_header_size
=
TOUCAM_HEADER_SIZE
;
...
...
drivers/media/video/pwc/pwc-nala.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/pwc/pwc-timon.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/pwc/pwc-uncompress.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/pwc/pwc-uncompress.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/pwc/pwc.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/saa5249.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/saa7110.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/saa7111.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/saa7114.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/saa7121.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/saa7146.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/saa7146reg.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/saa7185.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/saa7196.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/se401.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/se401.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/sn9c102/Makefile
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/sn9c102/sn9c102.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/sn9c102/sn9c102_core.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/sn9c102/sn9c102_hv7131d.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/sn9c102/sn9c102_mi0343.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/sn9c102/sn9c102_ov7630.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/sn9c102/sn9c102_pas106b.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/sn9c102/sn9c102_pas202bca.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/sn9c102/sn9c102_pas202bcb.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/sn9c102/sn9c102_sensor.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/sn9c102/sn9c102_tas5110c1b.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/sn9c102/sn9c102_tas5130d1b.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/stradis.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/stv680.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/stv680.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/tda9840.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/tea6415c.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/tea6420.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/tuner-3036.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/usbvideo/ibmcam.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/usbvideo/konicawc.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/usbvideo/ultracam.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/usbvideo/usbvideo.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/usbvideo/usbvideo.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/usbvideo/vicam.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/videocodec.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/vino.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/vpx3220.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/w9966.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/w9968cf.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/w9968cf.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/w9968cf_decoder.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/w9968cf_vpp.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/zc0301/zc0301.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/zc0301/zc0301_core.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/zc0301/zc0301_pas202bcb.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/zc0301/zc0301_sensor.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/zoran.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/zoran_card.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/zoran_card.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/zoran_device.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/zoran_device.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/zoran_driver.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/zoran_procfs.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/zoran_procfs.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/zr36016.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/zr36050.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/zr36057.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/zr36060.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/zr36120.c
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
drivers/media/video/zr36120.h
浏览文件 @
d56410e0
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录