Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
6c2f9901
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
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看板
提交
6c2f9901
编写于
12月 13, 2007
作者:
M
Mauro Carvalho Chehab
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
V4L/DVB (6815): Fix vivi internal debug messages
Signed-off-by:
N
Mauro Carvalho Chehab
<
mchehab@infradead.org
>
上级
1fe934dd
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
67 addition
and
42 deletion
+67
-42
drivers/media/video/vivi.c
drivers/media/video/vivi.c
+67
-42
未找到文件。
drivers/media/video/vivi.c
浏览文件 @
6c2f9901
...
...
@@ -54,7 +54,6 @@
/* Declare static vars that will be used as parameters */
static
unsigned
int
vid_limit
=
16
;
/* Video memory limit, in Mb */
static
struct
video_device
vivi
;
/* Video device */
static
int
video_nr
=
-
1
;
/* /dev/videoN, -1 for autodetect */
static
int
n_devs
=
1
;
/* Number of virtual devices */
...
...
@@ -110,9 +109,9 @@ static struct v4l2_queryctrl vivi_qctrl[] = {
static
int
qctl_regs
[
ARRAY_SIZE
(
vivi_qctrl
)];
#define dprintk(
level, fmt, arg...)
\
#define dprintk(
dev, level, fmt, arg...)
\
do { \
if (
vivi.
debug >= (level)) \
if (
dev->vfd->
debug >= (level)) \
printk(KERN_DEBUG "vivi: " fmt , ## arg); \
} while (0)
...
...
@@ -338,7 +337,7 @@ static void vivi_fillbuff(struct vivi_dev *dev, struct vivi_buffer *buf)
dev
->
timestr
);
/* FIXME: replacing to __copy_to_user */
if
(
copy_to_user
(
vbuf
+
pos
,
tmpbuf
,
wmax
*
2
)
!=
0
)
dprintk
(
2
,
"vivifill copy_to_user failed.
\n
"
);
dprintk
(
dev
,
2
,
"vivifill copy_to_user failed.
\n
"
);
pos
+=
wmax
*
2
;
}
...
...
@@ -367,8 +366,8 @@ static void vivi_fillbuff(struct vivi_dev *dev, struct vivi_buffer *buf)
sprintf
(
dev
->
timestr
,
"%02d:%02d:%02d:%03d"
,
dev
->
h
,
dev
->
m
,
dev
->
s
,
(
dev
->
us
+
500
)
/
1000
);
dprintk
(
2
,
"vivifill at %s: Buffer 0x%08lx size= %d
\n
"
,
dev
->
timestr
,
(
unsigned
long
)
tmpbuf
,
pos
);
dprintk
(
dev
,
2
,
"vivifill at %s: Buffer 0x%08lx size= %d
\n
"
,
dev
->
timestr
,
(
unsigned
long
)
tmpbuf
,
pos
);
/* Advice that buffer was filled */
buf
->
vb
.
state
=
VIDEOBUF_DONE
;
...
...
@@ -392,7 +391,7 @@ static void vivi_thread_tick(struct vivi_dmaqueue *dma_q)
/* Announces videobuf that all went ok */
for
(
bc
=
0
;;
bc
++
)
{
if
(
list_empty
(
&
dma_q
->
active
))
{
dprintk
(
1
,
"No active queue to serve
\n
"
);
dprintk
(
dev
,
1
,
"No active queue to serve
\n
"
);
break
;
}
...
...
@@ -406,7 +405,7 @@ static void vivi_thread_tick(struct vivi_dmaqueue *dma_q)
}
do_gettimeofday
(
&
buf
->
vb
.
ts
);
dprintk
(
2
,
"[%p/%d] wakeup
\n
"
,
buf
,
buf
->
vb
.
i
);
dprintk
(
dev
,
2
,
"[%p/%d] wakeup
\n
"
,
buf
,
buf
->
vb
.
i
);
/* Fill buffer */
vivi_fillbuff
(
dev
,
buf
);
...
...
@@ -418,16 +417,18 @@ static void vivi_thread_tick(struct vivi_dmaqueue *dma_q)
}
}
if
(
bc
!=
1
)
dprintk
(
1
,
"%s: %d buffers handled (should be 1)
\n
"
,
dprintk
(
dev
,
1
,
"%s: %d buffers handled (should be 1)
\n
"
,
__FUNCTION__
,
bc
);
}
static
void
vivi_sleep
(
struct
vivi_dmaqueue
*
dma_q
)
{
struct
vivi_dev
*
dev
=
container_of
(
dma_q
,
struct
vivi_dev
,
vidq
);
int
timeout
;
DECLARE_WAITQUEUE
(
wait
,
current
);
dprintk
(
1
,
"%s dma_q=0x%08lx
\n
"
,
__FUNCTION__
,
(
unsigned
long
)
dma_q
);
dprintk
(
dev
,
1
,
"%s dma_q=0x%08lx
\n
"
,
__FUNCTION__
,
(
unsigned
long
)
dma_q
);
add_wait_queue
(
&
dma_q
->
wq
,
&
wait
);
if
(
!
kthread_should_stop
())
{
...
...
@@ -450,11 +451,12 @@ static void vivi_sleep(struct vivi_dmaqueue *dma_q)
WAKE_NUMERATOR
*
1000
)
/
WAKE_DENOMINATOR
)
-
jiffies
;
dprintk
(
1
,
"underrun, losed %d frames. "
dprintk
(
dev
,
1
,
"underrun, losed %d frames. "
"Now, frame is %d. Waking on %d jiffies
\n
"
,
dma_q
->
frame
-
old
,
dma_q
->
frame
,
timeout
);
}
else
dprintk
(
1
,
"will sleep for %i jiffies
\n
"
,
timeout
);
dprintk
(
dev
,
1
,
"will sleep for %i jiffies
\n
"
,
timeout
);
vivi_thread_tick
(
dma_q
);
...
...
@@ -468,8 +470,9 @@ static void vivi_sleep(struct vivi_dmaqueue *dma_q)
static
int
vivi_thread
(
void
*
data
)
{
struct
vivi_dmaqueue
*
dma_q
=
data
;
struct
vivi_dev
*
dev
=
container_of
(
dma_q
,
struct
vivi_dev
,
vidq
);
dprintk
(
1
,
"thread started
\n
"
);
dprintk
(
dev
,
1
,
"thread started
\n
"
);
mod_timer
(
&
dma_q
->
timeout
,
jiffies
+
BUFFER_TIMEOUT
);
set_freezable
();
...
...
@@ -480,16 +483,18 @@ static int vivi_thread(void *data)
if
(
kthread_should_stop
())
break
;
}
dprintk
(
1
,
"thread: exit
\n
"
);
dprintk
(
dev
,
1
,
"thread: exit
\n
"
);
return
0
;
}
static
int
vivi_start_thread
(
struct
vivi_dmaqueue
*
dma_q
)
{
struct
vivi_dev
*
dev
=
container_of
(
dma_q
,
struct
vivi_dev
,
vidq
);
dma_q
->
frame
=
0
;
dma_q
->
ini_jiffies
=
jiffies
;
dprintk
(
1
,
"%s
\n
"
,
__FUNCTION__
);
dprintk
(
dev
,
1
,
"%s
\n
"
,
__FUNCTION__
);
dma_q
->
kthread
=
kthread_run
(
vivi_thread
,
dma_q
,
"vivi"
);
...
...
@@ -500,13 +505,15 @@ static int vivi_start_thread(struct vivi_dmaqueue *dma_q)
/* Wakes thread */
wake_up_interruptible
(
&
dma_q
->
wq
);
dprintk
(
1
,
"returning from %s
\n
"
,
__FUNCTION__
);
dprintk
(
dev
,
1
,
"returning from %s
\n
"
,
__FUNCTION__
);
return
0
;
}
static
void
vivi_stop_thread
(
struct
vivi_dmaqueue
*
dma_q
)
{
dprintk
(
1
,
"%s
\n
"
,
__FUNCTION__
);
struct
vivi_dev
*
dev
=
container_of
(
dma_q
,
struct
vivi_dev
,
vidq
);
dprintk
(
dev
,
1
,
"%s
\n
"
,
__FUNCTION__
);
/* shutdown control thread */
if
(
dma_q
->
kthread
)
{
kthread_stop
(
dma_q
->
kthread
);
...
...
@@ -516,17 +523,19 @@ static void vivi_stop_thread(struct vivi_dmaqueue *dma_q)
static
int
restart_video_queue
(
struct
vivi_dmaqueue
*
dma_q
)
{
struct
vivi_dev
*
dev
=
container_of
(
dma_q
,
struct
vivi_dev
,
vidq
);
struct
vivi_buffer
*
buf
,
*
prev
;
dprintk
(
1
,
"%s dma_q=0x%08lx
\n
"
,
__FUNCTION__
,
(
unsigned
long
)
dma_q
);
dprintk
(
dev
,
1
,
"%s dma_q=0x%08lx
\n
"
,
__FUNCTION__
,
(
unsigned
long
)
dma_q
);
if
(
!
list_empty
(
&
dma_q
->
active
))
{
buf
=
list_entry
(
dma_q
->
active
.
next
,
struct
vivi_buffer
,
vb
.
queue
);
dprintk
(
2
,
"restart_queue [%p/%d]: restart dma
\n
"
,
dprintk
(
dev
,
2
,
"restart_queue [%p/%d]: restart dma
\n
"
,
buf
,
buf
->
vb
.
i
);
dprintk
(
1
,
"Restarting video dma
\n
"
);
dprintk
(
dev
,
1
,
"Restarting video dma
\n
"
);
vivi_stop_thread
(
dma_q
);
/* cancel all outstanding capture / vbi requests */
...
...
@@ -550,13 +559,14 @@ static int restart_video_queue(struct vivi_dmaqueue *dma_q)
list_del
(
&
buf
->
vb
.
queue
);
list_add_tail
(
&
buf
->
vb
.
queue
,
&
dma_q
->
active
);
dprintk
(
1
,
"Restarting video dma
\n
"
);
dprintk
(
dev
,
1
,
"Restarting video dma
\n
"
);
vivi_stop_thread
(
dma_q
);
vivi_start_thread
(
dma_q
);
buf
->
vb
.
state
=
VIDEOBUF_ACTIVE
;
mod_timer
(
&
dma_q
->
timeout
,
jiffies
+
BUFFER_TIMEOUT
);
dprintk
(
2
,
"[%p/%d] restart_queue - first active
\n
"
,
dprintk
(
dev
,
2
,
"[%p/%d] restart_queue - first active
\n
"
,
buf
,
buf
->
vb
.
i
);
}
else
if
(
prev
->
vb
.
width
==
buf
->
vb
.
width
&&
...
...
@@ -565,7 +575,8 @@ static int restart_video_queue(struct vivi_dmaqueue *dma_q)
list_del
(
&
buf
->
vb
.
queue
);
list_add_tail
(
&
buf
->
vb
.
queue
,
&
dma_q
->
active
);
buf
->
vb
.
state
=
VIDEOBUF_ACTIVE
;
dprintk
(
2
,
"[%p/%d] restart_queue - move to active
\n
"
,
dprintk
(
dev
,
2
,
"[%p/%d] restart_queue - move to active
\n
"
,
buf
,
buf
->
vb
.
i
);
}
else
{
return
0
;
...
...
@@ -598,7 +609,8 @@ static void vivi_vid_timeout(unsigned long data)
static
int
buffer_setup
(
struct
videobuf_queue
*
vq
,
unsigned
int
*
count
,
unsigned
int
*
size
)
{
struct
vivi_fh
*
fh
=
vq
->
priv_data
;
struct
vivi_fh
*
fh
=
vq
->
priv_data
;
struct
vivi_dev
*
dev
=
fh
->
dev
;
*
size
=
fh
->
width
*
fh
->
height
*
2
;
...
...
@@ -608,14 +620,18 @@ buffer_setup(struct videobuf_queue *vq, unsigned int *count, unsigned int *size)
while
(
*
size
*
*
count
>
vid_limit
*
1024
*
1024
)
(
*
count
)
--
;
dprintk
(
1
,
"%s, count=%d, size=%d
\n
"
,
__FUNCTION__
,
*
count
,
*
size
);
dprintk
(
dev
,
1
,
"%s, count=%d, size=%d
\n
"
,
__FUNCTION__
,
*
count
,
*
size
);
return
0
;
}
static
void
free_buffer
(
struct
videobuf_queue
*
vq
,
struct
vivi_buffer
*
buf
)
{
dprintk
(
1
,
"%s
\n
"
,
__FUNCTION__
);
struct
vivi_fh
*
fh
=
vq
->
priv_data
;
struct
vivi_dev
*
dev
=
fh
->
dev
;
dprintk
(
dev
,
1
,
"%s
\n
"
,
__FUNCTION__
);
if
(
in_interrupt
())
BUG
();
...
...
@@ -632,10 +648,11 @@ buffer_prepare(struct videobuf_queue *vq, struct videobuf_buffer *vb,
enum
v4l2_field
field
)
{
struct
vivi_fh
*
fh
=
vq
->
priv_data
;
struct
vivi_dev
*
dev
=
fh
->
dev
;
struct
vivi_buffer
*
buf
=
container_of
(
vb
,
struct
vivi_buffer
,
vb
);
int
rc
,
init_buffer
=
0
;
dprintk
(
1
,
"%s, field=%d
\n
"
,
__FUNCTION__
,
field
);
dprintk
(
dev
,
1
,
"%s, field=%d
\n
"
,
__FUNCTION__
,
field
);
BUG_ON
(
NULL
==
fh
->
fmt
);
if
(
fh
->
width
<
48
||
fh
->
width
>
norm_maxw
()
||
...
...
@@ -681,18 +698,18 @@ buffer_queue(struct videobuf_queue *vq, struct videobuf_buffer *vb)
struct
vivi_buffer
*
prev
;
if
(
!
list_empty
(
&
vidq
->
queued
))
{
dprintk
(
1
,
"adding vb queue=0x%08lx
\n
"
,
dprintk
(
dev
,
1
,
"adding vb queue=0x%08lx
\n
"
,
(
unsigned
long
)
&
buf
->
vb
.
queue
);
list_add_tail
(
&
buf
->
vb
.
queue
,
&
vidq
->
queued
);
buf
->
vb
.
state
=
VIDEOBUF_QUEUED
;
dprintk
(
2
,
"[%p/%d] buffer_queue - append to queued
\n
"
,
dprintk
(
dev
,
2
,
"[%p/%d] buffer_queue - append to queued
\n
"
,
buf
,
buf
->
vb
.
i
);
}
else
if
(
list_empty
(
&
vidq
->
active
))
{
list_add_tail
(
&
buf
->
vb
.
queue
,
&
vidq
->
active
);
buf
->
vb
.
state
=
VIDEOBUF_ACTIVE
;
mod_timer
(
&
vidq
->
timeout
,
jiffies
+
BUFFER_TIMEOUT
);
dprintk
(
2
,
"[%p/%d] buffer_queue - first active
\n
"
,
dprintk
(
dev
,
2
,
"[%p/%d] buffer_queue - first active
\n
"
,
buf
,
buf
->
vb
.
i
);
vivi_start_thread
(
vidq
);
...
...
@@ -704,13 +721,15 @@ buffer_queue(struct videobuf_queue *vq, struct videobuf_buffer *vb)
prev
->
fmt
==
buf
->
fmt
)
{
list_add_tail
(
&
buf
->
vb
.
queue
,
&
vidq
->
active
);
buf
->
vb
.
state
=
VIDEOBUF_ACTIVE
;
dprintk
(
2
,
"[%p/%d] buffer_queue - append to active
\n
"
,
dprintk
(
dev
,
2
,
"[%p/%d] buffer_queue - append to active
\n
"
,
buf
,
buf
->
vb
.
i
);
}
else
{
list_add_tail
(
&
buf
->
vb
.
queue
,
&
vidq
->
queued
);
buf
->
vb
.
state
=
VIDEOBUF_QUEUED
;
dprintk
(
2
,
"[%p/%d] buffer_queue - first queued
\n
"
,
dprintk
(
dev
,
2
,
"[%p/%d] buffer_queue - first queued
\n
"
,
buf
,
buf
->
vb
.
i
);
}
}
...
...
@@ -724,7 +743,7 @@ static void buffer_release(struct videobuf_queue *vq,
struct
vivi_dev
*
dev
=
(
struct
vivi_dev
*
)
fh
->
dev
;
struct
vivi_dmaqueue
*
vidq
=
&
dev
->
vidq
;
dprintk
(
1
,
"%s
\n
"
,
__FUNCTION__
);
dprintk
(
dev
,
1
,
"%s
\n
"
,
__FUNCTION__
);
vivi_stop_thread
(
vidq
);
...
...
@@ -784,13 +803,16 @@ static int vidioc_g_fmt_cap(struct file *file, void *priv,
static
int
vidioc_try_fmt_cap
(
struct
file
*
file
,
void
*
priv
,
struct
v4l2_format
*
f
)
{
struct
vivi_fh
*
fh
=
priv
;
struct
vivi_dev
*
dev
=
fh
->
dev
;
struct
vivi_fmt
*
fmt
;
enum
v4l2_field
field
;
unsigned
int
maxw
,
maxh
;
if
(
format
.
fourcc
!=
f
->
fmt
.
pix
.
pixelformat
)
{
dprintk
(
1
,
"Fourcc format (0x%08x) invalid. Driver accepts "
"only 0x%08x
\n
"
,
f
->
fmt
.
pix
.
pixelformat
,
format
.
fourcc
);
dprintk
(
dev
,
1
,
"Fourcc format (0x%08x) invalid. "
"Driver accepts only 0x%08x
\n
"
,
f
->
fmt
.
pix
.
pixelformat
,
format
.
fourcc
);
return
-
EINVAL
;
}
fmt
=
&
format
;
...
...
@@ -800,7 +822,7 @@ static int vidioc_try_fmt_cap(struct file *file, void *priv,
if
(
field
==
V4L2_FIELD_ANY
)
{
field
=
V4L2_FIELD_INTERLACED
;
}
else
if
(
V4L2_FIELD_INTERLACED
!=
field
)
{
dprintk
(
1
,
"Field type invalid.
\n
"
);
dprintk
(
dev
,
1
,
"Field type invalid.
\n
"
);
return
-
EINVAL
;
}
...
...
@@ -1009,7 +1031,7 @@ static int vivi_open(struct inode *inode, struct file *file)
/* If more than one user, mutex should be added */
dev
->
users
++
;
dprintk
(
1
,
"open minor=%d type=%s users=%d
\n
"
,
minor
,
dprintk
(
dev
,
1
,
"open minor=%d type=%s users=%d
\n
"
,
minor
,
v4l2_type_names
[
V4L2_BUF_TYPE_VIDEO_CAPTURE
],
dev
->
users
);
/* allocate + initialize per filehandle data */
...
...
@@ -1064,9 +1086,10 @@ static unsigned int
vivi_poll
(
struct
file
*
file
,
struct
poll_table_struct
*
wait
)
{
struct
vivi_fh
*
fh
=
file
->
private_data
;
struct
vivi_dev
*
dev
=
fh
->
dev
;
struct
videobuf_queue
*
q
=
&
fh
->
vb_vidq
;
dprintk
(
1
,
"%s
\n
"
,
__FUNCTION__
);
dprintk
(
dev
,
1
,
"%s
\n
"
,
__FUNCTION__
);
if
(
V4L2_BUF_TYPE_VIDEO_CAPTURE
!=
fh
->
type
)
return
POLLERR
;
...
...
@@ -1090,7 +1113,8 @@ static int vivi_close(struct inode *inode, struct file *file)
dev
->
users
--
;
dprintk
(
1
,
"close called (minor=%d, users=%d)
\n
"
,
minor
,
dev
->
users
);
dprintk
(
dev
,
1
,
"close called (minor=%d, users=%d)
\n
"
,
minor
,
dev
->
users
);
return
0
;
}
...
...
@@ -1118,14 +1142,15 @@ static int vivi_release(void)
static
int
vivi_mmap
(
struct
file
*
file
,
struct
vm_area_struct
*
vma
)
{
struct
vivi_fh
*
fh
=
file
->
private_data
;
struct
vivi_fh
*
fh
=
file
->
private_data
;
struct
vivi_dev
*
dev
=
fh
->
dev
;
int
ret
;
dprintk
(
1
,
"mmap called, vma=0x%08lx
\n
"
,
(
unsigned
long
)
vma
);
dprintk
(
dev
,
1
,
"mmap called, vma=0x%08lx
\n
"
,
(
unsigned
long
)
vma
);
ret
=
videobuf_mmap_mapper
(
&
fh
->
vb_vidq
,
vma
);
dprintk
(
1
,
"vma start=0x%08lx, size=%ld, ret=%d
\n
"
,
dprintk
(
dev
,
1
,
"vma start=0x%08lx, size=%ld, ret=%d
\n
"
,
(
unsigned
long
)
vma
->
vm_start
,
(
unsigned
long
)
vma
->
vm_end
-
(
unsigned
long
)
vma
->
vm_start
,
ret
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录