Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
84b5dbf3
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
161
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看板
提交
84b5dbf3
编写于
3月 03, 2009
作者:
M
Mauro Carvalho Chehab
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
V4L/DVB (10955): cx231xx: CodingStyle automatic fixes with Lindent
Signed-off-by:
N
Mauro Carvalho Chehab
<
mchehab@redhat.com
>
上级
e0d3bafd
变更
13
展开全部
隐藏空白更改
内联
并排
Showing
13 changed file
with
5809 addition
and
4900 deletion
+5809
-4900
drivers/media/video/cx231xx/cx231xx-audio.c
drivers/media/video/cx231xx/cx231xx-audio.c
+129
-126
drivers/media/video/cx231xx/cx231xx-avcore.c
drivers/media/video/cx231xx/cx231xx-avcore.c
+2578
-1805
drivers/media/video/cx231xx/cx231xx-cards.c
drivers/media/video/cx231xx/cx231xx-cards.c
+514
-462
drivers/media/video/cx231xx/cx231xx-conf-reg.h
drivers/media/video/cx231xx/cx231xx-conf-reg.h
+64
-68
drivers/media/video/cx231xx/cx231xx-core.c
drivers/media/video/cx231xx/cx231xx-core.c
+585
-541
drivers/media/video/cx231xx/cx231xx-dvb.c
drivers/media/video/cx231xx/cx231xx-dvb.c
+129
-135
drivers/media/video/cx231xx/cx231xx-i2c.c
drivers/media/video/cx231xx/cx231xx-i2c.c
+294
-273
drivers/media/video/cx231xx/cx231xx-input.c
drivers/media/video/cx231xx/cx231xx-input.c
+10
-14
drivers/media/video/cx231xx/cx231xx-reg.h
drivers/media/video/cx231xx/cx231xx-reg.h
+24
-35
drivers/media/video/cx231xx/cx231xx-vbi.c
drivers/media/video/cx231xx/cx231xx-vbi.c
+287
-268
drivers/media/video/cx231xx/cx231xx-vbi.h
drivers/media/video/cx231xx/cx231xx-vbi.h
+14
-12
drivers/media/video/cx231xx/cx231xx-video.c
drivers/media/video/cx231xx/cx231xx-video.c
+921
-899
drivers/media/video/cx231xx/cx231xx.h
drivers/media/video/cx231xx/cx231xx.h
+260
-262
未找到文件。
drivers/media/video/cx231xx/cx231xx-audio.c
浏览文件 @
84b5dbf3
...
...
@@ -58,21 +58,20 @@ static int cx231xx_isoc_audio_deinit(struct cx231xx *dev)
dprintk
(
"Stopping isoc
\n
"
);
for
(
i
=
0
;
i
<
CX231XX_AUDIO_BUFS
;
i
++
)
{
if
(
dev
->
adev
.
urb
[
i
])
{
if
(
!
irqs_disabled
())
usb_kill_urb
(
dev
->
adev
.
urb
[
i
]);
else
usb_unlink_urb
(
dev
->
adev
.
urb
[
i
]);
if
(
dev
->
adev
.
urb
[
i
])
{
if
(
!
irqs_disabled
())
usb_kill_urb
(
dev
->
adev
.
urb
[
i
]);
else
usb_unlink_urb
(
dev
->
adev
.
urb
[
i
]);
usb_free_urb
(
dev
->
adev
.
urb
[
i
]);
dev
->
adev
.
urb
[
i
]
=
NULL
;
usb_free_urb
(
dev
->
adev
.
urb
[
i
]);
dev
->
adev
.
urb
[
i
]
=
NULL
;
kfree
(
dev
->
adev
.
transfer_buffer
[
i
]);
dev
->
adev
.
transfer_buffer
[
i
]
=
NULL
;
kfree
(
dev
->
adev
.
transfer_buffer
[
i
]);
dev
->
adev
.
transfer_buffer
[
i
]
=
NULL
;
}
}
}
return
0
;
...
...
@@ -80,27 +79,27 @@ static int cx231xx_isoc_audio_deinit(struct cx231xx *dev)
static
void
cx231xx_audio_isocirq
(
struct
urb
*
urb
)
{
struct
cx231xx
*
dev
=
urb
->
context
;
int
i
;
unsigned
int
oldptr
;
int
period_elapsed
=
0
;
int
status
;
unsigned
char
*
cp
;
unsigned
int
stride
;
struct
cx231xx
*
dev
=
urb
->
context
;
int
i
;
unsigned
int
oldptr
;
int
period_elapsed
=
0
;
int
status
;
unsigned
char
*
cp
;
unsigned
int
stride
;
struct
snd_pcm_substream
*
substream
;
struct
snd_pcm_runtime
*
runtime
;
switch
(
urb
->
status
)
{
case
0
:
/* success */
case
-
ETIMEDOUT
:
/* NAK */
break
;
case
-
ECONNRESET
:
/* kill */
case
-
ENOENT
:
case
-
ESHUTDOWN
:
return
;
default:
/* error */
dprintk
(
"urb completition error %d.
\n
"
,
urb
->
status
);
break
;
struct
snd_pcm_runtime
*
runtime
;
switch
(
urb
->
status
)
{
case
0
:
/* success */
case
-
ETIMEDOUT
:
/* NAK */
break
;
case
-
ECONNRESET
:
/* kill */
case
-
ENOENT
:
case
-
ESHUTDOWN
:
return
;
default:
/* error */
dprintk
(
"urb completition error %d.
\n
"
,
urb
->
status
);
break
;
}
if
(
dev
->
adev
.
capture_pcm_substream
)
{
...
...
@@ -145,7 +144,6 @@ static void cx231xx_audio_isocirq(struct urb *urb)
runtime
->
period_size
;
period_elapsed
=
1
;
}
snd_pcm_stream_unlock
(
substream
);
}
if
(
period_elapsed
)
...
...
@@ -156,19 +154,19 @@ static void cx231xx_audio_isocirq(struct urb *urb)
status
=
usb_submit_urb
(
urb
,
GFP_ATOMIC
);
if
(
status
<
0
)
{
cx231xx_errdev
(
"resubmit of audio urb failed (error=%i)
\n
"
,
status
);
status
);
}
return
;
}
static
int
cx231xx_init_audio_isoc
(
struct
cx231xx
*
dev
)
{
int
i
,
errCode
;
int
sb_size
;
int
i
,
errCode
;
int
sb_size
;
cx231xx_info
(
"%s: Starting AUDIO transfers
\n
"
,
__func__
);
cx231xx_info
(
"%s: Starting AUDIO transfers
\n
"
,
__func__
);
sb_size
=
CX231XX_NUM_AUDIO_PACKETS
*
dev
->
adev
.
max_pkt_size
;
sb_size
=
CX231XX_NUM_AUDIO_PACKETS
*
dev
->
adev
.
max_pkt_size
;
for
(
i
=
0
;
i
<
CX231XX_AUDIO_BUFS
;
i
++
)
{
struct
urb
*
urb
;
...
...
@@ -191,7 +189,8 @@ static int cx231xx_init_audio_isoc(struct cx231xx *dev)
urb
->
dev
=
dev
->
udev
;
urb
->
context
=
dev
;
urb
->
pipe
=
usb_rcvisocpipe
(
dev
->
udev
,
dev
->
adev
.
end_point_addr
);
urb
->
pipe
=
usb_rcvisocpipe
(
dev
->
udev
,
dev
->
adev
.
end_point_addr
);
urb
->
transfer_flags
=
URB_ISO_ASAP
;
urb
->
transfer_buffer
=
dev
->
adev
.
transfer_buffer
[
i
];
urb
->
interval
=
1
;
...
...
@@ -200,10 +199,9 @@ static int cx231xx_init_audio_isoc(struct cx231xx *dev)
urb
->
transfer_buffer_length
=
sb_size
;
for
(
j
=
k
=
0
;
j
<
CX231XX_NUM_AUDIO_PACKETS
;
j
++
,
k
+=
dev
->
adev
.
max_pkt_size
)
{
j
++
,
k
+=
dev
->
adev
.
max_pkt_size
)
{
urb
->
iso_frame_desc
[
j
].
offset
=
k
;
urb
->
iso_frame_desc
[
j
].
length
=
dev
->
adev
.
max_pkt_size
;
urb
->
iso_frame_desc
[
j
].
length
=
dev
->
adev
.
max_pkt_size
;
}
dev
->
adev
.
urb
[
i
]
=
urb
;
}
...
...
@@ -221,11 +219,11 @@ static int cx231xx_init_audio_isoc(struct cx231xx *dev)
static
int
cx231xx_cmd
(
struct
cx231xx
*
dev
,
int
cmd
,
int
arg
)
{
dprintk
(
"%s transfer
\n
"
,
(
dev
->
adev
.
capture_stream
==
STREAM_ON
)
?
"stop"
:
"start"
);
dprintk
(
"%s transfer
\n
"
,
(
dev
->
adev
.
capture_stream
==
STREAM_ON
)
?
"stop"
:
"start"
);
switch
(
cmd
)
{
case
CX231XX_CAPTURE_STREAM_EN
:
case
CX231XX_CAPTURE_STREAM_EN
:
if
(
dev
->
adev
.
capture_stream
==
STREAM_OFF
&&
arg
==
1
)
{
dev
->
adev
.
capture_stream
=
STREAM_ON
;
cx231xx_init_audio_isoc
(
dev
);
...
...
@@ -233,8 +231,8 @@ static int cx231xx_cmd(struct cx231xx *dev, int cmd, int arg)
dev
->
adev
.
capture_stream
=
STREAM_OFF
;
cx231xx_isoc_audio_deinit
(
dev
);
}
else
{
cx231xx_errdev
(
"An underrun very likely occurred. "
"Ignoring it.
\n
"
);
cx231xx_errdev
(
"An underrun very likely occurred. "
"Ignoring it.
\n
"
);
}
return
0
;
default:
...
...
@@ -265,9 +263,8 @@ static int snd_pcm_alloc_vmalloc_buffer(struct snd_pcm_substream *subs,
static
struct
snd_pcm_hardware
snd_cx231xx_hw_capture
=
{
.
info
=
SNDRV_PCM_INFO_BLOCK_TRANSFER
|
SNDRV_PCM_INFO_MMAP
|
SNDRV_PCM_INFO_INTERLEAVED
|
SNDRV_PCM_INFO_MMAP_VALID
,
SNDRV_PCM_INFO_MMAP
|
SNDRV_PCM_INFO_INTERLEAVED
|
SNDRV_PCM_INFO_MMAP_VALID
,
.
formats
=
SNDRV_PCM_FMTBIT_S16_LE
,
...
...
@@ -278,10 +275,10 @@ static struct snd_pcm_hardware snd_cx231xx_hw_capture = {
.
channels_min
=
2
,
.
channels_max
=
2
,
.
buffer_bytes_max
=
62720
*
8
,
/* just about the value in usbaudio.c */
.
period_bytes_min
=
64
,
/* 12544/2, */
.
period_bytes_min
=
64
,
/* 12544/2, */
.
period_bytes_max
=
12544
,
.
periods_min
=
2
,
.
periods_max
=
98
,
/* 12544, */
.
periods_max
=
98
,
/* 12544, */
};
static
int
snd_cx231xx_capture_open
(
struct
snd_pcm_substream
*
substream
)
...
...
@@ -294,29 +291,29 @@ static int snd_cx231xx_capture_open(struct snd_pcm_substream *substream)
if
(
!
dev
)
{
cx231xx_errdev
(
"BUG: cx231xx can't find device struct."
" Can't proceed with open
\n
"
);
" Can't proceed with open
\n
"
);
return
-
ENODEV
;
}
/* Sets volume, mute, etc */
dev
->
mute
=
0
;
/* set alternate setting for audio interface */
ret
=
cx231xx_set_alt_setting
(
dev
,
INDEX_AUDIO
,
1
);
/* 1 - 48000 samples per sec */
if
(
ret
<
0
)
{
cx231xx_errdev
(
"failed to set alternate setting !
\n
"
);
/* set alternate setting for audio interface */
ret
=
cx231xx_set_alt_setting
(
dev
,
INDEX_AUDIO
,
1
);
/* 1 - 48000 samples per sec */
if
(
ret
<
0
)
{
cx231xx_errdev
(
"failed to set alternate setting !
\n
"
);
return
ret
;
}
return
ret
;
}
/* inform hardware to start streaming */
ret
=
cx231xx_capture_start
(
dev
,
1
,
Audio
);
/* inform hardware to start streaming */
ret
=
cx231xx_capture_start
(
dev
,
1
,
Audio
);
runtime
->
hw
=
snd_cx231xx_hw_capture
;
mutex_lock
(
&
dev
->
lock
);
mutex_lock
(
&
dev
->
lock
);
dev
->
adev
.
users
++
;
mutex_unlock
(
&
dev
->
lock
);
mutex_unlock
(
&
dev
->
lock
);
snd_pcm_hw_constraint_integer
(
runtime
,
SNDRV_PCM_HW_PARAM_PERIODS
);
dev
->
adev
.
capture_pcm_substream
=
substream
;
...
...
@@ -327,26 +324,25 @@ static int snd_cx231xx_capture_open(struct snd_pcm_substream *substream)
static
int
snd_cx231xx_pcm_close
(
struct
snd_pcm_substream
*
substream
)
{
int
ret
;
int
ret
;
struct
cx231xx
*
dev
=
snd_pcm_substream_chip
(
substream
);
dprintk
(
"closing device
\n
"
);
/* set alternate setting for audio interface */
ret
=
cx231xx_set_alt_setting
(
dev
,
INDEX_AUDIO
,
0
);
/* 1 - 48000 samples per sec */
if
(
ret
<
0
)
{
cx231xx_errdev
(
"failed to set alternate setting !
\n
"
);
/* set alternate setting for audio interface */
ret
=
cx231xx_set_alt_setting
(
dev
,
INDEX_AUDIO
,
0
);
/* 1 - 48000 samples per sec */
if
(
ret
<
0
)
{
cx231xx_errdev
(
"failed to set alternate setting !
\n
"
);
return
ret
;
}
return
ret
;
}
/* inform hardware to start streaming */
ret
=
cx231xx_capture_start
(
dev
,
0
,
Audio
);
/* inform hardware to start streaming */
ret
=
cx231xx_capture_start
(
dev
,
0
,
Audio
);
dev
->
mute
=
1
;
mutex_lock
(
&
dev
->
lock
);
dev
->
adev
.
users
--
;
dev
->
adev
.
users
--
;
mutex_unlock
(
&
dev
->
lock
);
if
(
dev
->
adev
.
users
==
0
&&
dev
->
adev
.
shutdown
==
1
)
{
...
...
@@ -360,7 +356,7 @@ static int snd_cx231xx_pcm_close(struct snd_pcm_substream *substream)
}
static
int
snd_cx231xx_hw_capture_params
(
struct
snd_pcm_substream
*
substream
,
struct
snd_pcm_hw_params
*
hw_params
)
struct
snd_pcm_hw_params
*
hw_params
)
{
unsigned
int
channels
,
rate
,
format
;
int
ret
;
...
...
@@ -368,7 +364,7 @@ static int snd_cx231xx_hw_capture_params(struct snd_pcm_substream *substream,
dprintk
(
"Setting capture parameters
\n
"
);
ret
=
snd_pcm_alloc_vmalloc_buffer
(
substream
,
params_buffer_bytes
(
hw_params
));
params_buffer_bytes
(
hw_params
));
format
=
params_format
(
hw_params
);
rate
=
params_rate
(
hw_params
);
channels
=
params_channels
(
hw_params
);
...
...
@@ -397,45 +393,45 @@ static int snd_cx231xx_prepare(struct snd_pcm_substream *substream)
}
static
int
snd_cx231xx_capture_trigger
(
struct
snd_pcm_substream
*
substream
,
int
cmd
)
int
cmd
)
{
struct
cx231xx
*
dev
=
snd_pcm_substream_chip
(
substream
);
int
retval
;
int
retval
;
dprintk
(
"Should %s capture
\n
"
,
(
cmd
==
SNDRV_PCM_TRIGGER_START
)
?
"start"
:
"stop"
);
dprintk
(
"Should %s capture
\n
"
,
(
cmd
==
SNDRV_PCM_TRIGGER_START
)
?
"start"
:
"stop"
);
spin_lock
(
&
dev
->
adev
.
slock
);
spin_lock
(
&
dev
->
adev
.
slock
);
switch
(
cmd
)
{
case
SNDRV_PCM_TRIGGER_START
:
cx231xx_cmd
(
dev
,
CX231XX_CAPTURE_STREAM_EN
,
CX231XX_START_AUDIO
);
cx231xx_cmd
(
dev
,
CX231XX_CAPTURE_STREAM_EN
,
CX231XX_START_AUDIO
);
retval
=
0
;
break
;
case
SNDRV_PCM_TRIGGER_STOP
:
cx231xx_cmd
(
dev
,
CX231XX_CAPTURE_STREAM_EN
,
CX231XX_STOP_AUDIO
);
cx231xx_cmd
(
dev
,
CX231XX_CAPTURE_STREAM_EN
,
CX231XX_STOP_AUDIO
);
retval
=
0
;
break
;
break
;
default:
retval
=
-
EINVAL
;
}
spin_unlock
(
&
dev
->
adev
.
slock
);
spin_unlock
(
&
dev
->
adev
.
slock
);
return
retval
;
}
static
snd_pcm_uframes_t
snd_cx231xx_capture_pointer
(
struct
snd_pcm_substream
*
substream
)
*
substream
)
{
struct
cx231xx
*
dev
;
unsigned
long
flags
;
unsigned
long
flags
;
snd_pcm_uframes_t
hwptr_done
;
dev
=
snd_pcm_substream_chip
(
substream
);
spin_lock_irqsave
(
&
dev
->
adev
.
slock
,
flags
);
spin_lock_irqsave
(
&
dev
->
adev
.
slock
,
flags
);
hwptr_done
=
dev
->
adev
.
hwptr_done_capture
;
spin_unlock_irqrestore
(
&
dev
->
adev
.
slock
,
flags
);
spin_unlock_irqrestore
(
&
dev
->
adev
.
slock
,
flags
);
return
hwptr_done
;
}
...
...
@@ -449,26 +445,26 @@ static struct page *snd_pcm_get_vmalloc_page(struct snd_pcm_substream *subs,
}
static
struct
snd_pcm_ops
snd_cx231xx_pcm_capture
=
{
.
open
=
snd_cx231xx_capture_open
,
.
close
=
snd_cx231xx_pcm_close
,
.
ioctl
=
snd_pcm_lib_ioctl
,
.
open
=
snd_cx231xx_capture_open
,
.
close
=
snd_cx231xx_pcm_close
,
.
ioctl
=
snd_pcm_lib_ioctl
,
.
hw_params
=
snd_cx231xx_hw_capture_params
,
.
hw_free
=
snd_cx231xx_hw_capture_free
,
.
prepare
=
snd_cx231xx_prepare
,
.
trigger
=
snd_cx231xx_capture_trigger
,
.
pointer
=
snd_cx231xx_capture_pointer
,
.
page
=
snd_pcm_get_vmalloc_page
,
.
hw_free
=
snd_cx231xx_hw_capture_free
,
.
prepare
=
snd_cx231xx_prepare
,
.
trigger
=
snd_cx231xx_capture_trigger
,
.
pointer
=
snd_cx231xx_capture_pointer
,
.
page
=
snd_pcm_get_vmalloc_page
,
};
static
int
cx231xx_audio_init
(
struct
cx231xx
*
dev
)
{
struct
cx231xx_audio
*
adev
=
&
dev
->
adev
;
struct
snd_pcm
*
pcm
;
struct
snd_card
*
card
;
static
int
devnr
;
int
err
;
struct
usb_interface
*
uif
;
int
i
,
isoc_pipe
=
0
;
struct
snd_pcm
*
pcm
;
struct
snd_card
*
card
;
static
int
devnr
;
int
err
;
struct
usb_interface
*
uif
;
int
i
,
isoc_pipe
=
0
;
if
(
dev
->
has_alsa_audio
!=
1
)
{
/* This device does not support the extension (in this case
...
...
@@ -478,7 +474,7 @@ static int cx231xx_audio_init(struct cx231xx *dev)
}
cx231xx_info
(
"cx231xx-audio.c: probing for cx231xx "
"non standard usbaudio
\n
"
);
"non standard usbaudio
\n
"
);
card
=
snd_card_new
(
index
[
devnr
],
"Cx231xx Audio"
,
THIS_MODULE
,
0
);
if
(
card
==
NULL
)
{
...
...
@@ -492,7 +488,8 @@ static int cx231xx_audio_init(struct cx231xx *dev)
return
err
;
}
snd_pcm_set_ops
(
pcm
,
SNDRV_PCM_STREAM_CAPTURE
,
&
snd_cx231xx_pcm_capture
);
snd_pcm_set_ops
(
pcm
,
SNDRV_PCM_STREAM_CAPTURE
,
&
snd_cx231xx_pcm_capture
);
pcm
->
info_flags
=
0
;
pcm
->
private_data
=
dev
;
strcpy
(
pcm
->
name
,
"Conexant cx231xx Capture"
);
...
...
@@ -508,29 +505,35 @@ static int cx231xx_audio_init(struct cx231xx *dev)
adev
->
sndcard
=
card
;
adev
->
udev
=
dev
->
udev
;
/* compute alternate max packet sizes for Audio */
uif
=
dev
->
udev
->
actconfig
->
interface
[
dev
->
current_pcb_config
.
hs_config_info
[
0
].
interface_info
.
audio_index
+
1
];
/* compute alternate max packet sizes for Audio */
uif
=
dev
->
udev
->
actconfig
->
interface
[
dev
->
current_pcb_config
.
hs_config_info
[
0
].
interface_info
.
audio_index
+
1
];
adev
->
end_point_addr
=
le16_to_cpu
(
uif
->
altsetting
[
0
].
endpoint
[
isoc_pipe
].
desc
.
bEndpointAddress
);
adev
->
end_point_addr
=
le16_to_cpu
(
uif
->
altsetting
[
0
].
endpoint
[
isoc_pipe
].
desc
.
bEndpointAddress
);
adev
->
num_alt
=
uif
->
num_altsetting
;
cx231xx_info
(
": EndPoint Addr 0x%x, Alternate settings: %i
\n
"
,
adev
->
end_point_addr
,
adev
->
num_alt
);
adev
->
alt_max_pkt_size
=
kmalloc
(
32
*
adev
->
num_alt
,
GFP_KERNEL
);
adev
->
num_alt
=
uif
->
num_altsetting
;
cx231xx_info
(
": EndPoint Addr 0x%x, Alternate settings: %i
\n
"
,
adev
->
end_point_addr
,
adev
->
num_alt
);
adev
->
alt_max_pkt_size
=
kmalloc
(
32
*
adev
->
num_alt
,
GFP_KERNEL
);
if
(
adev
->
alt_max_pkt_size
==
NULL
)
{
cx231xx_errdev
(
"out of memory!
\n
"
);
return
-
ENOMEM
;
}
if
(
adev
->
alt_max_pkt_size
==
NULL
)
{
cx231xx_errdev
(
"out of memory!
\n
"
);
return
-
ENOMEM
;
}
for
(
i
=
0
;
i
<
adev
->
num_alt
;
i
++
)
{
u16
tmp
=
le16_to_cpu
(
uif
->
altsetting
[
i
].
endpoint
[
isoc_pipe
].
desc
.
wMaxPacketSize
);
adev
->
alt_max_pkt_size
[
i
]
=
(
tmp
&
0x07ff
)
*
(((
tmp
&
0x1800
)
>>
11
)
+
1
);
cx231xx_info
(
"Alternate setting %i, max size= %i
\n
"
,
i
,
adev
->
alt_max_pkt_size
[
i
]);
}
for
(
i
=
0
;
i
<
adev
->
num_alt
;
i
++
)
{
u16
tmp
=
le16_to_cpu
(
uif
->
altsetting
[
i
].
endpoint
[
isoc_pipe
].
desc
.
wMaxPacketSize
);
adev
->
alt_max_pkt_size
[
i
]
=
(
tmp
&
0x07ff
)
*
(((
tmp
&
0x1800
)
>>
11
)
+
1
);
cx231xx_info
(
"Alternate setting %i, max size= %i
\n
"
,
i
,
adev
->
alt_max_pkt_size
[
i
]);
}
return
0
;
}
...
...
@@ -549,7 +552,7 @@ static int cx231xx_audio_fini(struct cx231xx *dev)
if
(
dev
->
adev
.
sndcard
)
{
snd_card_free
(
dev
->
adev
.
sndcard
);
kfree
(
dev
->
adev
.
alt_max_pkt_size
);
kfree
(
dev
->
adev
.
alt_max_pkt_size
);
dev
->
adev
.
sndcard
=
NULL
;
}
...
...
@@ -557,7 +560,7 @@ static int cx231xx_audio_fini(struct cx231xx *dev)
}
static
struct
cx231xx_ops
audio_ops
=
{
.
id
=
CX231XX_AUDIO
,
.
id
=
CX231XX_AUDIO
,
.
name
=
"Cx231xx Audio Extension"
,
.
init
=
cx231xx_audio_init
,
.
fini
=
cx231xx_audio_fini
,
...
...
drivers/media/video/cx231xx/cx231xx-avcore.c
浏览文件 @
84b5dbf3
此差异已折叠。
点击以展开。
drivers/media/video/cx231xx/cx231xx-cards.c
浏览文件 @
84b5dbf3
此差异已折叠。
点击以展开。
drivers/media/video/cx231xx/cx231xx-conf-reg.h
浏览文件 @
84b5dbf3
此差异已折叠。
点击以展开。
drivers/media/video/cx231xx/cx231xx-core.c
浏览文件 @
84b5dbf3
此差异已折叠。
点击以展开。
drivers/media/video/cx231xx/cx231xx-dvb.c
浏览文件 @
84b5dbf3
...
...
@@ -2,7 +2,7 @@
DVB device driver for cx231xx
Copyright (C) 2008 <srinivasa.deevi at conexant dot com>
Based on em28xx driver
Based on em28xx driver
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
...
...
@@ -29,7 +29,6 @@
#include "xc5000.h"
#include "dvb_dummy_fe.h"
MODULE_DESCRIPTION
(
"driver for cx231xx based DVB cards"
);
MODULE_AUTHOR
(
"Srinivasa Deevi <srinivasa.deevi@conexant.com>"
);
MODULE_LICENSE
(
"GPL"
);
...
...
@@ -50,24 +49,22 @@ if (debug >= level) \
#define CX231XX_DVB_MAX_PACKETS 64
struct
cx231xx_dvb
{
struct
dvb_frontend
*
frontend
;
struct
dvb_frontend
*
frontend
;
/* feed count management */
struct
mutex
lock
;
int
nfeeds
;
struct
mutex
lock
;
int
nfeeds
;
/* general boilerplate stuff */
struct
dvb_adapter
adapter
;
struct
dvb_demux
demux
;
struct
dmxdev
dmxdev
;
struct
dmx_frontend
fe_hw
;
struct
dmx_frontend
fe_mem
;
struct
dvb_net
net
;
struct
dvb_adapter
adapter
;
struct
dvb_demux
demux
;
struct
dmxdev
dmxdev
;
struct
dmx_frontend
fe_hw
;
struct
dmx_frontend
fe_mem
;
struct
dvb_net
net
;
};
static
inline
void
print_err_status
(
struct
cx231xx
*
dev
,
int
packet
,
int
status
)
static
inline
void
print_err_status
(
struct
cx231xx
*
dev
,
int
packet
,
int
status
)
{
char
*
errmsg
=
"Unknown"
;
...
...
@@ -149,8 +146,8 @@ static int start_streaming(struct cx231xx_dvb *dvb)
return
rc
;
return
cx231xx_init_isoc
(
dev
,
CX231XX_DVB_MAX_PACKETS
,
CX231XX_DVB_NUM_BUFS
,
CX231XX_DVB_MAX_PACKETSIZE
,
dvb_isoc_copy
);
CX231XX_DVB_NUM_BUFS
,
CX231XX_DVB_MAX_PACKETSIZE
,
dvb_isoc_copy
);
}
static
int
stop_streaming
(
struct
cx231xx_dvb
*
dvb
)
...
...
@@ -166,7 +163,7 @@ static int stop_streaming(struct cx231xx_dvb *dvb)
static
int
start_feed
(
struct
dvb_demux_feed
*
feed
)
{
struct
dvb_demux
*
demux
=
feed
->
demux
;
struct
dvb_demux
*
demux
=
feed
->
demux
;
struct
cx231xx_dvb
*
dvb
=
demux
->
priv
;
int
rc
,
ret
;
...
...
@@ -189,7 +186,7 @@ static int start_feed(struct dvb_demux_feed *feed)
static
int
stop_feed
(
struct
dvb_demux_feed
*
feed
)
{
struct
dvb_demux
*
demux
=
feed
->
demux
;
struct
dvb_demux
*
demux
=
feed
->
demux
;
struct
cx231xx_dvb
*
dvb
=
demux
->
priv
;
int
err
=
0
;
...
...
@@ -203,8 +200,6 @@ static int stop_feed(struct dvb_demux_feed *feed)
return
err
;
}
/* ------------------------------------------------------------------ */
static
int
cx231xx_dvb_bus_ctrl
(
struct
dvb_frontend
*
fe
,
int
acquire
)
{
...
...
@@ -218,13 +213,11 @@ static int cx231xx_dvb_bus_ctrl(struct dvb_frontend *fe, int acquire)
/* ------------------------------------------------------------------ */
static
struct
xc5000_config
cnxt_rde250_tunerconfig
=
{
.
i2c_address
=
0x61
,
.
if_khz
=
5380
,
.
i2c_address
=
0x61
,
.
if_khz
=
5380
,
};
/* ------------------------------------------------------------------ */
#if 0
static int attach_xc5000(u8 addr, struct cx231xx *dev)
...
...
@@ -234,13 +227,12 @@ static int attach_xc5000(u8 addr, struct cx231xx *dev)
struct xc5000_config cfg;
memset(&cfg, 0, sizeof(cfg));
cfg.i2c_adap
= &dev->i2c_bus[1].i2c_adap;
cfg.i2c_addr
= addr;
cfg.i2c_adap = &dev->i2c_bus[1].i2c_adap;
cfg.i2c_addr = addr;
if (!dev->dvb->frontend) {
printk(KERN_ERR "%s/2: dvb frontend not attached. "
"Can't attach xc5000\n",
dev->name);
"Can't attach xc5000\n", dev->name);
return -EINVAL;
}
...
...
@@ -258,65 +250,65 @@ static int attach_xc5000(u8 addr, struct cx231xx *dev)
}
#endif
int
cx231xx_set_analog_freq
(
struct
cx231xx
*
dev
,
u32
freq
)
int
cx231xx_set_analog_freq
(
struct
cx231xx
*
dev
,
u32
freq
)
{
int
status
=
0
;
if
(
(
dev
->
dvb
!=
NULL
)
&&
(
dev
->
dvb
->
frontend
!=
NULL
)
)
{
if
((
dev
->
dvb
!=
NULL
)
&&
(
dev
->
dvb
->
frontend
!=
NULL
))
{
struct
dvb_tuner_ops
*
dops
=
&
dev
->
dvb
->
frontend
->
ops
.
tuner_ops
;
struct
dvb_tuner_ops
*
dops
=
&
dev
->
dvb
->
frontend
->
ops
.
tuner_ops
;
if
(
dops
->
set_analog_params
!=
NULL
)
{
struct
analog_parameters
params
;
if
(
dops
->
set_analog_params
!=
NULL
)
{
struct
analog_parameters
params
;
params
.
frequency
=
freq
;
params
.
std
=
dev
->
norm
;
params
.
mode
=
0
;
/* 0- Air; 1 - cable */
/*params.audmode = ; */
/* Set the analog parameters to set the frequency */
cx231xx_info
(
"Setting Frequency for XC5000
\n
"
);
dops
->
set_analog_params
(
dev
->
dvb
->
frontend
,
&
params
);
}
params
.
frequency
=
freq
;
params
.
std
=
dev
->
norm
;
params
.
mode
=
0
;
/* 0- Air; 1 - cable */
/*params.audmode = ; */
/* Set the analog parameters to set the frequency */
cx231xx_info
(
"Setting Frequency for XC5000
\n
"
);
dops
->
set_analog_params
(
dev
->
dvb
->
frontend
,
&
params
);
}
}
return
status
;
}
int
cx231xx_reset_analog_tuner
(
struct
cx231xx
*
dev
)
{
int
status
=
0
;
int
status
=
0
;
if
(
(
dev
->
dvb
!=
NULL
)
&&
(
dev
->
dvb
->
frontend
!=
NULL
)
)
{
if
((
dev
->
dvb
!=
NULL
)
&&
(
dev
->
dvb
->
frontend
!=
NULL
))
{
struct
dvb_tuner_ops
*
dops
=
&
dev
->
dvb
->
frontend
->
ops
.
tuner_ops
;
struct
dvb_tuner_ops
*
dops
=
&
dev
->
dvb
->
frontend
->
ops
.
tuner_ops
;
if
(
dops
->
init
!=
NULL
&&
!
dev
->
xc_fw_load_done
)
{
if
(
dops
->
init
!=
NULL
&&
!
dev
->
xc_fw_load_done
)
{
cx231xx_info
(
"Reloading firmware for XC5000
\n
"
);
status
=
dops
->
init
(
dev
->
dvb
->
frontend
);
if
(
status
==
0
)
{
dev
->
xc_fw_load_done
=
1
;
cx231xx_info
(
"XC5000 firmware download completed
\n
"
);
}
else
{
dev
->
xc_fw_load_done
=
0
;
cx231xx_info
(
"XC5000 firmware download failed !!!
\n
"
);
}
cx231xx_info
(
"Reloading firmware for XC5000
\n
"
);
status
=
dops
->
init
(
dev
->
dvb
->
frontend
);
if
(
status
==
0
)
{
dev
->
xc_fw_load_done
=
1
;
cx231xx_info
(
"XC5000 firmware download completed
\n
"
);
}
else
{
dev
->
xc_fw_load_done
=
0
;
cx231xx_info
(
"XC5000 firmware download failed !!!
\n
"
);
}
}
}
return
status
;
}
/* ------------------------------------------------------------------ */
static
int
register_dvb
(
struct
cx231xx_dvb
*
dvb
,
struct
module
*
module
,
struct
cx231xx
*
dev
,
struct
device
*
device
)
struct
module
*
module
,
struct
cx231xx
*
dev
,
struct
device
*
device
)
{
int
result
;
...
...
@@ -326,7 +318,8 @@ static int register_dvb(struct cx231xx_dvb *dvb,
result
=
dvb_register_adapter
(
&
dvb
->
adapter
,
dev
->
name
,
module
,
device
,
adapter_nr
);
if
(
result
<
0
)
{
printk
(
KERN_WARNING
"%s: dvb_register_adapter failed (errno = %d)
\n
"
,
printk
(
KERN_WARNING
"%s: dvb_register_adapter failed (errno = %d)
\n
"
,
dev
->
name
,
result
);
goto
fail_adapter
;
}
...
...
@@ -339,20 +332,21 @@ static int register_dvb(struct cx231xx_dvb *dvb,
/* register frontend */
result
=
dvb_register_frontend
(
&
dvb
->
adapter
,
dvb
->
frontend
);
if
(
result
<
0
)
{
printk
(
KERN_WARNING
"%s: dvb_register_frontend failed (errno = %d)
\n
"
,
printk
(
KERN_WARNING
"%s: dvb_register_frontend failed (errno = %d)
\n
"
,
dev
->
name
,
result
);
goto
fail_frontend
;
}
/* register demux stuff */
dvb
->
demux
.
dmx
.
capabilities
=
DMX_TS_FILTERING
|
DMX_SECTION_FILTERING
|
DMX_MEMORY_BASED_FILTERING
;
dvb
->
demux
.
priv
=
dvb
;
dvb
->
demux
.
filternum
=
256
;
dvb
->
demux
.
feednum
=
256
;
DMX_TS_FILTERING
|
DMX_SECTION_FILTERING
|
DMX_MEMORY_BASED_FILTERING
;
dvb
->
demux
.
priv
=
dvb
;
dvb
->
demux
.
filternum
=
256
;
dvb
->
demux
.
feednum
=
256
;
dvb
->
demux
.
start_feed
=
start_feed
;
dvb
->
demux
.
stop_feed
=
stop_feed
;
dvb
->
demux
.
stop_feed
=
stop_feed
;
result
=
dvb_dmx_init
(
&
dvb
->
demux
);
if
(
result
<
0
)
{
...
...
@@ -361,8 +355,8 @@ static int register_dvb(struct cx231xx_dvb *dvb,
goto
fail_dmx
;
}
dvb
->
dmxdev
.
filternum
=
256
;
dvb
->
dmxdev
.
demux
=
&
dvb
->
demux
.
dmx
;
dvb
->
dmxdev
.
filternum
=
256
;
dvb
->
dmxdev
.
demux
=
&
dvb
->
demux
.
dmx
;
dvb
->
dmxdev
.
capabilities
=
0
;
result
=
dvb_dmxdev_init
(
&
dvb
->
dmxdev
,
&
dvb
->
adapter
);
if
(
result
<
0
)
{
...
...
@@ -374,7 +368,8 @@ static int register_dvb(struct cx231xx_dvb *dvb,
dvb
->
fe_hw
.
source
=
DMX_FRONTEND_0
;
result
=
dvb
->
demux
.
dmx
.
add_frontend
(
&
dvb
->
demux
.
dmx
,
&
dvb
->
fe_hw
);
if
(
result
<
0
)
{
printk
(
KERN_WARNING
"%s: add_frontend failed (DMX_FRONTEND_0, errno = %d)
\n
"
,
printk
(
KERN_WARNING
"%s: add_frontend failed (DMX_FRONTEND_0, errno = %d)
\n
"
,
dev
->
name
,
result
);
goto
fail_fe_hw
;
}
...
...
@@ -382,15 +377,17 @@ static int register_dvb(struct cx231xx_dvb *dvb,
dvb
->
fe_mem
.
source
=
DMX_MEMORY_FE
;
result
=
dvb
->
demux
.
dmx
.
add_frontend
(
&
dvb
->
demux
.
dmx
,
&
dvb
->
fe_mem
);
if
(
result
<
0
)
{
printk
(
KERN_WARNING
"%s: add_frontend failed (DMX_MEMORY_FE, errno = %d)
\n
"
,
printk
(
KERN_WARNING
"%s: add_frontend failed (DMX_MEMORY_FE, errno = %d)
\n
"
,
dev
->
name
,
result
);
goto
fail_fe_mem
;
}
result
=
dvb
->
demux
.
dmx
.
connect_frontend
(
&
dvb
->
demux
.
dmx
,
&
dvb
->
fe_hw
);
if
(
result
<
0
)
{
printk
(
KERN_WARNING
"%s: connect_frontend failed (errno = %d)
\n
"
,
dev
->
name
,
result
);
printk
(
KERN_WARNING
"%s: connect_frontend failed (errno = %d)
\n
"
,
dev
->
name
,
result
);
goto
fail_fe_conn
;
}
...
...
@@ -398,20 +395,20 @@ static int register_dvb(struct cx231xx_dvb *dvb,
dvb_net_init
(
&
dvb
->
adapter
,
&
dvb
->
net
,
&
dvb
->
demux
.
dmx
);
return
0
;
fail_fe_conn:
fail_fe_conn:
dvb
->
demux
.
dmx
.
remove_frontend
(
&
dvb
->
demux
.
dmx
,
&
dvb
->
fe_mem
);
fail_fe_mem:
fail_fe_mem:
dvb
->
demux
.
dmx
.
remove_frontend
(
&
dvb
->
demux
.
dmx
,
&
dvb
->
fe_hw
);
fail_fe_hw:
fail_fe_hw:
dvb_dmxdev_release
(
&
dvb
->
dmxdev
);
fail_dmxdev:
fail_dmxdev:
dvb_dmx_release
(
&
dvb
->
demux
);
fail_dmx:
fail_dmx:
dvb_unregister_frontend
(
dvb
->
frontend
);
fail_frontend:
fail_frontend:
dvb_frontend_detach
(
dvb
->
frontend
);
dvb_unregister_adapter
(
&
dvb
->
adapter
);
fail_adapter:
fail_adapter:
return
result
;
}
...
...
@@ -427,7 +424,6 @@ static void unregister_dvb(struct cx231xx_dvb *dvb)
dvb_unregister_adapter
(
&
dvb
->
adapter
);
}
static
int
dvb_init
(
struct
cx231xx
*
dev
)
{
int
result
=
0
;
...
...
@@ -446,71 +442,70 @@ static int dvb_init(struct cx231xx *dev)
}
dev
->
dvb
=
dvb
;
dev
->
cx231xx_set_analog_freq
=
cx231xx_set_analog_freq
;
dev
->
cx231xx_reset_analog_tuner
=
cx231xx_reset_analog_tuner
;
dev
->
cx231xx_reset_analog_tuner
=
cx231xx_reset_analog_tuner
;
cx231xx_set_mode
(
dev
,
CX231XX_DIGITAL_MODE
);
/* init frontend */
switch
(
dev
->
model
)
{
case
CX231XX_BOARD_CNXT_RDE_250
:
/* dev->dvb->frontend = dvb_attach(s5h1411_attach,
&dvico_s5h1411_config,
&dev->i2c_bus[1].i2c_adap);*/
dev
->
dvb
->
frontend
=
dvb_attach
(
dvb_dummy_fe_ofdm_attach
);
if
(
dev
->
dvb
->
frontend
==
NULL
)
{
printk
(
DRIVER_NAME
": Failed to attach dummy front end
\n
"
);
result
=
-
EINVAL
;
goto
out_free
;
}
/* define general-purpose callback pointer */
dvb
->
frontend
->
callback
=
cx231xx_tuner_callback
;
if
(
dvb_attach
(
xc5000_attach
,
dev
->
dvb
->
frontend
,
&
dev
->
i2c_bus
[
1
].
i2c_adap
,
&
cnxt_rde250_tunerconfig
)
<
0
)
{
result
=
-
EINVAL
;
goto
out_free
;
}
break
;
case
CX231XX_BOARD_CNXT_RDU_250
:
dev
->
dvb
->
frontend
=
dvb_attach
(
dvb_dummy_fe_ofdm_attach
);
if
(
dev
->
dvb
->
frontend
==
NULL
)
{
printk
(
DRIVER_NAME
": Failed to attach dummy front end
\n
"
);
result
=
-
EINVAL
;
goto
out_free
;
}
/* define general-purpose callback pointer */
dvb
->
frontend
->
callback
=
cx231xx_tuner_callback
;
if
(
dvb_attach
(
xc5000_attach
,
dev
->
dvb
->
frontend
,
&
dev
->
i2c_bus
[
1
].
i2c_adap
,
&
cnxt_rde250_tunerconfig
)
<
0
)
{
result
=
-
EINVAL
;
goto
out_free
;
}
break
;
case
CX231XX_BOARD_CNXT_RDE_250
:
/* dev->dvb->frontend = dvb_attach(s5h1411_attach,
&dvico_s5h1411_config,
&dev->i2c_bus[1].i2c_adap); */
dev
->
dvb
->
frontend
=
dvb_attach
(
dvb_dummy_fe_ofdm_attach
);
if
(
dev
->
dvb
->
frontend
==
NULL
)
{
printk
(
DRIVER_NAME
": Failed to attach dummy front end
\n
"
);
result
=
-
EINVAL
;
goto
out_free
;
}
/* define general-purpose callback pointer */
dvb
->
frontend
->
callback
=
cx231xx_tuner_callback
;
if
(
dvb_attach
(
xc5000_attach
,
dev
->
dvb
->
frontend
,
&
dev
->
i2c_bus
[
1
].
i2c_adap
,
&
cnxt_rde250_tunerconfig
)
<
0
)
{
result
=
-
EINVAL
;
goto
out_free
;
}
break
;
case
CX231XX_BOARD_CNXT_RDU_250
:
dev
->
dvb
->
frontend
=
dvb_attach
(
dvb_dummy_fe_ofdm_attach
);
if
(
dev
->
dvb
->
frontend
==
NULL
)
{
printk
(
DRIVER_NAME
": Failed to attach dummy front end
\n
"
);
result
=
-
EINVAL
;
goto
out_free
;
}
/* define general-purpose callback pointer */
dvb
->
frontend
->
callback
=
cx231xx_tuner_callback
;
if
(
dvb_attach
(
xc5000_attach
,
dev
->
dvb
->
frontend
,
&
dev
->
i2c_bus
[
1
].
i2c_adap
,
&
cnxt_rde250_tunerconfig
)
<
0
)
{
result
=
-
EINVAL
;
goto
out_free
;
}
break
;
default:
printk
(
KERN_ERR
"%s/2: The frontend of your DVB/ATSC card"
" isn't supported yet
\n
"
,
dev
->
name
);
" isn't supported yet
\n
"
,
dev
->
name
);
break
;
}
if
(
NULL
==
dvb
->
frontend
)
{
printk
(
KERN_ERR
"%s/2: frontend initialization failed
\n
"
,
dev
->
name
);
"%s/2: frontend initialization failed
\n
"
,
dev
->
name
);
result
=
-
EINVAL
;
goto
out_free
;
}
/* register everything */
result
=
register_dvb
(
dvb
,
THIS_MODULE
,
dev
,
&
dev
->
udev
->
dev
);
...
...
@@ -521,7 +516,7 @@ static int dvb_init(struct cx231xx *dev)
printk
(
KERN_INFO
"Successfully loaded cx231xx-dvb
\n
"
);
return
0
;
out_free:
out_free:
cx231xx_set_mode
(
dev
,
CX231XX_SUSPEND
);
kfree
(
dvb
);
dev
->
dvb
=
NULL
;
...
...
@@ -544,7 +539,7 @@ static int dvb_fini(struct cx231xx *dev)
}
static
struct
cx231xx_ops
dvb_ops
=
{
.
id
=
CX231XX_DVB
,
.
id
=
CX231XX_DVB
,
.
name
=
"Cx231xx dvb Extension"
,
.
init
=
dvb_init
,
.
fini
=
dvb_fini
,
...
...
@@ -562,4 +557,3 @@ static void __exit cx231xx_dvb_unregister(void)
module_init
(
cx231xx_dvb_register
);
module_exit
(
cx231xx_dvb_unregister
);
drivers/media/video/cx231xx/cx231xx-i2c.c
浏览文件 @
84b5dbf3
此差异已折叠。
点击以展开。
drivers/media/video/cx231xx/cx231xx-input.c
浏览文件 @
84b5dbf3
...
...
@@ -2,9 +2,9 @@
handle cx231xx IR remotes via linux kernel input layer.
Copyright (C) 2008 <srinivasa.deevi at conexant dot com>
Based on em28xx driver
Based on em28xx driver
< This is a place holder for IR now.>
< This is a place holder for IR now.>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
...
...
@@ -30,7 +30,6 @@
#include "cx231xx.h"
static
unsigned
int
ir_debug
;
module_param
(
ir_debug
,
int
,
0644
);
MODULE_PARM_DESC
(
ir_debug
,
"enable debug messages [IR]"
);
...
...
@@ -71,11 +70,9 @@ struct cx231xx_IR {
unsigned
int
last_readcount
;
unsigned
int
repeat_interval
;
int
(
*
get_key
)
(
struct
cx231xx_IR
*
,
struct
cx231xx_ir_poll_result
*
);
int
(
*
get_key
)
(
struct
cx231xx_IR
*
,
struct
cx231xx_ir_poll_result
*
);
};
/**********************************************************
Polling code for cx231xx
**********************************************************/
...
...
@@ -187,17 +184,16 @@ int cx231xx_ir_init(struct cx231xx *dev)
/* Setup the proper handler based on the chip */
switch
(
dev
->
chip_id
)
{
default:
printk
(
"Unrecognized cx231xx chip id: IR not supported
\n
"
);
goto
err_out_free
;
default:
printk
(
"Unrecognized cx231xx chip id: IR not supported
\n
"
);
goto
err_out_free
;
}
/* This is how often we ask the chip for IR information */
ir
->
polling
=
100
;
/* ms */
ir
->
polling
=
100
;
/* ms */
/* init input device */
snprintf
(
ir
->
name
,
sizeof
(
ir
->
name
),
"cx231xx IR (%s)"
,
dev
->
name
);
snprintf
(
ir
->
name
,
sizeof
(
ir
->
name
),
"cx231xx IR (%s)"
,
dev
->
name
);
usb_make_path
(
dev
->
udev
,
ir
->
phys
,
sizeof
(
ir
->
phys
));
strlcat
(
ir
->
phys
,
"/input0"
,
sizeof
(
ir
->
phys
));
...
...
@@ -223,10 +219,10 @@ int cx231xx_ir_init(struct cx231xx *dev)
goto
err_out_stop
;
return
0
;
err_out_stop:
err_out_stop:
cx231xx_ir_stop
(
ir
);
dev
->
ir
=
NULL
;
err_out_free:
err_out_free:
input_free_device
(
input_dev
);
kfree
(
ir
);
return
err
;
...
...
drivers/media/video/cx231xx/cx231xx-reg.h
浏览文件 @
84b5dbf3
此差异已折叠。
点击以展开。
drivers/media/video/cx231xx/cx231xx-vbi.c
浏览文件 @
84b5dbf3
此差异已折叠。
点击以展开。
drivers/media/video/cx231xx/cx231xx-vbi.h
浏览文件 @
84b5dbf3
...
...
@@ -2,7 +2,7 @@
cx231xx_vbi.h - driver for Conexant Cx23100/101/102 USB video capture devices
Copyright (C) 2008 <srinivasa.deevi at conexant dot com>
Based on cx88 driver
Based on cx88 driver
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
...
...
@@ -24,8 +24,7 @@
extern
struct
videobuf_queue_ops
cx231xx_vbi_qops
;
#define NTSC_VBI_START_LINE 10
/* line 10 - 21 */
#define NTSC_VBI_START_LINE 10
/* line 10 - 21 */
#define NTSC_VBI_END_LINE 21
#define NTSC_VBI_LINES (NTSC_VBI_END_LINE - NTSC_VBI_START_LINE + 1)
...
...
@@ -41,21 +40,24 @@ extern struct videobuf_queue_ops cx231xx_vbi_qops;
/* stream functions */
int
cx231xx_init_vbi_isoc
(
struct
cx231xx
*
dev
,
int
max_packets
,
int
num_bufs
,
int
max_pkt_size
,
int
(
*
isoc_copy
)
(
struct
cx231xx
*
dev
,
struct
urb
*
urb
));
int
num_bufs
,
int
max_pkt_size
,
int
(
*
isoc_copy
)
(
struct
cx231xx
*
dev
,
struct
urb
*
urb
));
void
cx231xx_uninit_vbi_isoc
(
struct
cx231xx
*
dev
);
/* vbi data copy functions */
u32
cx231xx_get_vbi_line
(
struct
cx231xx
*
dev
,
struct
cx231xx_dmaqueue
*
dma_q
,
u8
sav_eav
,
u8
*
p_buffer
,
u32
buffer_size
);
u32
cx231xx_copy_vbi_line
(
struct
cx231xx
*
dev
,
struct
cx231xx_dmaqueue
*
dma_q
,
u8
*
p_line
,
u32
length
,
int
field_number
);
void
cx231xx_reset_vbi_buffer
(
struct
cx231xx
*
dev
,
struct
cx231xx_dmaqueue
*
dma_q
);
u32
cx231xx_get_vbi_line
(
struct
cx231xx
*
dev
,
struct
cx231xx_dmaqueue
*
dma_q
,
u8
sav_eav
,
u8
*
p_buffer
,
u32
buffer_size
);
u32
cx231xx_copy_vbi_line
(
struct
cx231xx
*
dev
,
struct
cx231xx_dmaqueue
*
dma_q
,
u8
*
p_line
,
u32
length
,
int
field_number
);
void
cx231xx_reset_vbi_buffer
(
struct
cx231xx
*
dev
,
struct
cx231xx_dmaqueue
*
dma_q
);
int
cx231xx_do_vbi_copy
(
struct
cx231xx
*
dev
,
struct
cx231xx_dmaqueue
*
dma_q
,
u8
*
p_buffer
,
u32
bytes_to_copy
);
u8
*
p_buffer
,
u32
bytes_to_copy
);
u8
cx231xx_is_vbi_buffer_done
(
struct
cx231xx
*
dev
,
struct
cx231xx_dmaqueue
*
dma_q
);
u8
cx231xx_is_vbi_buffer_done
(
struct
cx231xx
*
dev
,
struct
cx231xx_dmaqueue
*
dma_q
);
#endif
drivers/media/video/cx231xx/cx231xx-video.c
浏览文件 @
84b5dbf3
此差异已折叠。
点击以展开。
drivers/media/video/cx231xx/cx231xx.h
浏览文件 @
84b5dbf3
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录