Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
d669af9d
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看板
提交
d669af9d
编写于
1月 16, 2006
作者:
L
Linus Torvalds
浏览文件
操作
浏览文件
下载
差异文件
Merge master.kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb
上级
2ddb55f0
f87d09be
变更
47
展开全部
显示空白变更内容
内联
并排
Showing
47 changed file
with
1860 addition
and
969 deletion
+1860
-969
Documentation/video4linux/CARDLIST.tuner
Documentation/video4linux/CARDLIST.tuner
+1
-0
drivers/media/dvb/bt8xx/bt878.c
drivers/media/dvb/bt8xx/bt878.c
+1
-1
drivers/media/dvb/dvb-core/dvbdev.c
drivers/media/dvb/dvb-core/dvbdev.c
+11
-11
drivers/media/dvb/dvb-usb/cxusb.c
drivers/media/dvb/dvb-usb/cxusb.c
+2
-0
drivers/media/dvb/frontends/dvb-pll.c
drivers/media/dvb/frontends/dvb-pll.c
+1
-1
drivers/media/dvb/ttpci/av7110.c
drivers/media/dvb/ttpci/av7110.c
+2
-2
drivers/media/dvb/ttpci/av7110_hw.c
drivers/media/dvb/ttpci/av7110_hw.c
+20
-20
drivers/media/dvb/ttpci/av7110_hw.h
drivers/media/dvb/ttpci/av7110_hw.h
+6
-6
drivers/media/video/Makefile
drivers/media/video/Makefile
+2
-1
drivers/media/video/arv.c
drivers/media/video/arv.c
+3
-3
drivers/media/video/bt832.c
drivers/media/video/bt832.c
+1
-1
drivers/media/video/btcx-risc.c
drivers/media/video/btcx-risc.c
+1
-1
drivers/media/video/bttv-cards.c
drivers/media/video/bttv-cards.c
+3
-3
drivers/media/video/bttv-driver.c
drivers/media/video/bttv-driver.c
+43
-44
drivers/media/video/bttv-i2c.c
drivers/media/video/bttv-i2c.c
+3
-3
drivers/media/video/bttvp.h
drivers/media/video/bttvp.h
+3
-2
drivers/media/video/cx25840/cx25840-core.c
drivers/media/video/cx25840/cx25840-core.c
+1
-1
drivers/media/video/cx88/Kconfig
drivers/media/video/cx88/Kconfig
+1
-2
drivers/media/video/cx88/Makefile
drivers/media/video/cx88/Makefile
+1
-0
drivers/media/video/cx88/cx88-alsa.c
drivers/media/video/cx88/cx88-alsa.c
+4
-5
drivers/media/video/cx88/cx88-core.c
drivers/media/video/cx88/cx88-core.c
+8
-7
drivers/media/video/cx88/cx88-tvaudio.c
drivers/media/video/cx88/cx88-tvaudio.c
+7
-1
drivers/media/video/cx88/cx88-vp3054-i2c.c
drivers/media/video/cx88/cx88-vp3054-i2c.c
+4
-0
drivers/media/video/em28xx/em28xx-input.c
drivers/media/video/em28xx/em28xx-input.c
+77
-0
drivers/media/video/em28xx/em28xx-video.c
drivers/media/video/em28xx/em28xx-video.c
+4
-3
drivers/media/video/msp3400-driver.c
drivers/media/video/msp3400-driver.c
+7
-7
drivers/media/video/msp3400.h
drivers/media/video/msp3400.h
+0
-8
drivers/media/video/mt20xx.c
drivers/media/video/mt20xx.c
+6
-6
drivers/media/video/planb.c
drivers/media/video/planb.c
+2
-2
drivers/media/video/saa6588.c
drivers/media/video/saa6588.c
+5
-5
drivers/media/video/saa711x.c
drivers/media/video/saa711x.c
+1
-1
drivers/media/video/saa7134/saa7134-cards.c
drivers/media/video/saa7134/saa7134-cards.c
+6
-0
drivers/media/video/saa7134/saa7134-core.c
drivers/media/video/saa7134/saa7134-core.c
+11
-10
drivers/media/video/saa7134/saa7134-tvaudio.c
drivers/media/video/saa7134/saa7134-tvaudio.c
+8
-3
drivers/media/video/tda8290.c
drivers/media/video/tda8290.c
+2
-2
drivers/media/video/tea5767.c
drivers/media/video/tea5767.c
+9
-9
drivers/media/video/tuner-core.c
drivers/media/video/tuner-core.c
+52
-33
drivers/media/video/tuner-simple.c
drivers/media/video/tuner-simple.c
+47
-747
drivers/media/video/tuner-types.c
drivers/media/video/tuner-types.c
+1406
-0
drivers/media/video/tveeprom.c
drivers/media/video/tveeprom.c
+1
-1
drivers/media/video/tvp5150.c
drivers/media/video/tvp5150.c
+1
-1
drivers/media/video/v4l2-common.c
drivers/media/video/v4l2-common.c
+1
-0
drivers/media/video/videodev.c
drivers/media/video/videodev.c
+12
-13
include/linux/i2c-id.h
include/linux/i2c-id.h
+4
-0
include/media/tuner-types.h
include/media/tuner-types.h
+55
-0
include/media/tuner.h
include/media/tuner.h
+7
-3
include/media/v4l2-common.h
include/media/v4l2-common.h
+7
-0
未找到文件。
Documentation/video4linux/CARDLIST.tuner
浏览文件 @
d669af9d
...
...
@@ -68,3 +68,4 @@ tuner=66 - LG NTSC (TALN mini series)
tuner=67 - Philips TD1316 Hybrid Tuner
tuner=68 - Philips TUV1236D ATSC/NTSC dual in
tuner=69 - Tena TNF 5335 MF
tuner=70 - Samsung TCPN 2121P30A
drivers/media/dvb/bt8xx/bt878.c
浏览文件 @
d669af9d
...
...
@@ -542,7 +542,7 @@ static struct pci_driver bt878_pci_driver = {
.
remove
=
bt878_remove
,
};
static
int
bt878_pci_driver_registered
=
0
;
static
int
bt878_pci_driver_registered
;
/*******************************/
/* Module management functions */
...
...
drivers/media/dvb/dvb-core/dvbdev.c
浏览文件 @
d669af9d
...
...
@@ -33,7 +33,7 @@
#include <linux/device.h>
#include <linux/fs.h>
#include <linux/cdev.h>
#include <linux/mutex.h>
#include "dvbdev.h"
static
int
dvbdev_debug
;
...
...
@@ -44,7 +44,7 @@ MODULE_PARM_DESC(dvbdev_debug, "Turn on/off device debugging (default:off).");
#define dprintk if (dvbdev_debug) printk
static
LIST_HEAD
(
dvb_adapter_list
);
static
DE
CLAR
E_MUTEX
(
dvbdev_register_lock
);
static
DE
FIN
E_MUTEX
(
dvbdev_register_lock
);
static
const
char
*
const
dnames
[]
=
{
"video"
,
"audio"
,
"sec"
,
"frontend"
,
"demux"
,
"dvr"
,
"ca"
,
...
...
@@ -202,11 +202,11 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
struct
dvb_device
*
dvbdev
;
int
id
;
if
(
down_interruptible
(
&
dvbdev_register_lock
))
if
(
mutex_lock_interruptible
(
&
dvbdev_register_lock
))
return
-
ERESTARTSYS
;
if
((
id
=
dvbdev_get_free_id
(
adap
,
type
))
<
0
)
{
up
(
&
dvbdev_register_lock
);
mutex_unlock
(
&
dvbdev_register_lock
);
*
pdvbdev
=
NULL
;
printk
(
"%s: could get find free device id...
\n
"
,
__FUNCTION__
);
return
-
ENFILE
;
...
...
@@ -215,11 +215,11 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
*
pdvbdev
=
dvbdev
=
kmalloc
(
sizeof
(
struct
dvb_device
),
GFP_KERNEL
);
if
(
!
dvbdev
)
{
up
(
&
dvbdev_register_lock
);
mutex_unlock
(
&
dvbdev_register_lock
);
return
-
ENOMEM
;
}
up
(
&
dvbdev_register_lock
);
mutex_unlock
(
&
dvbdev_register_lock
);
memcpy
(
dvbdev
,
template
,
sizeof
(
struct
dvb_device
));
dvbdev
->
type
=
type
;
...
...
@@ -289,11 +289,11 @@ int dvb_register_adapter(struct dvb_adapter *adap, const char *name, struct modu
{
int
num
;
if
(
down_interruptible
(
&
dvbdev_register_lock
))
if
(
mutex_lock_interruptible
(
&
dvbdev_register_lock
))
return
-
ERESTARTSYS
;
if
((
num
=
dvbdev_get_free_adapter_num
())
<
0
)
{
up
(
&
dvbdev_register_lock
);
mutex_unlock
(
&
dvbdev_register_lock
);
return
-
ENFILE
;
}
...
...
@@ -309,7 +309,7 @@ int dvb_register_adapter(struct dvb_adapter *adap, const char *name, struct modu
list_add_tail
(
&
adap
->
list_head
,
&
dvb_adapter_list
);
up
(
&
dvbdev_register_lock
);
mutex_unlock
(
&
dvbdev_register_lock
);
return
num
;
}
...
...
@@ -320,10 +320,10 @@ int dvb_unregister_adapter(struct dvb_adapter *adap)
{
devfs_remove
(
"dvb/adapter%d"
,
adap
->
num
);
if
(
down_interruptible
(
&
dvbdev_register_lock
))
if
(
mutex_lock_interruptible
(
&
dvbdev_register_lock
))
return
-
ERESTARTSYS
;
list_del
(
&
adap
->
list_head
);
up
(
&
dvbdev_register_lock
);
mutex_unlock
(
&
dvbdev_register_lock
);
return
0
;
}
EXPORT_SYMBOL
(
dvb_unregister_adapter
);
...
...
drivers/media/dvb/dvb-usb/cxusb.c
浏览文件 @
d669af9d
...
...
@@ -691,6 +691,8 @@ module_init (cxusb_module_init);
module_exit
(
cxusb_module_exit
);
MODULE_AUTHOR
(
"Patrick Boettcher <patrick.boettcher@desy.de>"
);
MODULE_AUTHOR
(
"Michael Krufky <mkrufky@m1k.net>"
);
MODULE_AUTHOR
(
"Chris Pascoe <c.pascoe@itee.uq.edu.au>"
);
MODULE_DESCRIPTION
(
"Driver for Conexant USB2.0 hybrid reference design"
);
MODULE_VERSION
(
"1.0-alpha"
);
MODULE_LICENSE
(
"GPL"
);
drivers/media/dvb/frontends/dvb-pll.c
浏览文件 @
d669af9d
...
...
@@ -333,7 +333,7 @@ struct dvb_pll_desc dvb_pll_tbmv30111in = {
.
name
=
"Samsung TBMV30111IN"
,
.
min
=
54000000
,
.
max
=
860000000
,
.
count
=
4
,
.
count
=
6
,
.
entries
=
{
{
172000000
,
44000000
,
166666
,
0xb4
,
0x01
},
{
214000000
,
44000000
,
166666
,
0xb4
,
0x02
},
...
...
drivers/media/dvb/ttpci/av7110.c
浏览文件 @
d669af9d
...
...
@@ -81,7 +81,7 @@ static int adac = DVB_ADAC_TI;
static
int
hw_sections
;
static
int
rgb_on
;
static
int
volume
=
255
;
static
int
budgetpatch
=
0
;
static
int
budgetpatch
;
module_param_named
(
debug
,
av7110_debug
,
int
,
0644
);
MODULE_PARM_DESC
(
debug
,
"debug level (bitmask, default 0)"
);
...
...
@@ -103,7 +103,7 @@ MODULE_PARM_DESC(budgetpatch, "use budget-patch hardware modification: default 0
static
void
restart_feeds
(
struct
av7110
*
av7110
);
static
int
av7110_num
=
0
;
static
int
av7110_num
;
#define FE_FUNC_OVERRIDE(fe_func, av7110_copy, av7110_func) \
{\
...
...
drivers/media/dvb/ttpci/av7110_hw.c
浏览文件 @
d669af9d
...
...
@@ -146,52 +146,52 @@ static int load_dram(struct av7110 *av7110, u32 *data, int len)
{
int
i
;
int
blocks
,
rest
;
u32
base
,
bootblock
=
BOOT_BLOCK
;
u32
base
,
bootblock
=
AV7110_
BOOT_BLOCK
;
dprintk
(
4
,
"%p
\n
"
,
av7110
);
blocks
=
len
/
BOOT_MAX_SIZE
;
rest
=
len
%
BOOT_MAX_SIZE
;
blocks
=
len
/
AV7110_
BOOT_MAX_SIZE
;
rest
=
len
%
AV7110_
BOOT_MAX_SIZE
;
base
=
DRAM_START_CODE
;
for
(
i
=
0
;
i
<
blocks
;
i
++
)
{
if
(
waitdebi
(
av7110
,
BOOT_STATE
,
BOOTSTATE_BUFFER_EMPTY
)
<
0
)
{
if
(
waitdebi
(
av7110
,
AV7110_
BOOT_STATE
,
BOOTSTATE_BUFFER_EMPTY
)
<
0
)
{
printk
(
KERN_ERR
"dvb-ttpci: load_dram(): timeout at block %d
\n
"
,
i
);
return
-
ETIMEDOUT
;
}
dprintk
(
4
,
"writing DRAM block %d
\n
"
,
i
);
mwdebi
(
av7110
,
DEBISWAB
,
bootblock
,
((
char
*
)
data
)
+
i
*
BOOT_MAX_SIZE
,
BOOT_MAX_SIZE
);
((
char
*
)
data
)
+
i
*
AV7110_BOOT_MAX_SIZE
,
AV7110_
BOOT_MAX_SIZE
);
bootblock
^=
0x1400
;
iwdebi
(
av7110
,
DEBISWAB
,
BOOT_BASE
,
swab32
(
base
),
4
);
iwdebi
(
av7110
,
DEBINOSWAP
,
BOOT_SIZE
,
BOOT_MAX_SIZE
,
2
);
iwdebi
(
av7110
,
DEBINOSWAP
,
BOOT_STATE
,
BOOTSTATE_BUFFER_FULL
,
2
);
base
+=
BOOT_MAX_SIZE
;
iwdebi
(
av7110
,
DEBISWAB
,
AV7110_
BOOT_BASE
,
swab32
(
base
),
4
);
iwdebi
(
av7110
,
DEBINOSWAP
,
AV7110_BOOT_SIZE
,
AV7110_
BOOT_MAX_SIZE
,
2
);
iwdebi
(
av7110
,
DEBINOSWAP
,
AV7110_
BOOT_STATE
,
BOOTSTATE_BUFFER_FULL
,
2
);
base
+=
AV7110_
BOOT_MAX_SIZE
;
}
if
(
rest
>
0
)
{
if
(
waitdebi
(
av7110
,
BOOT_STATE
,
BOOTSTATE_BUFFER_EMPTY
)
<
0
)
{
if
(
waitdebi
(
av7110
,
AV7110_
BOOT_STATE
,
BOOTSTATE_BUFFER_EMPTY
)
<
0
)
{
printk
(
KERN_ERR
"dvb-ttpci: load_dram(): timeout at last block
\n
"
);
return
-
ETIMEDOUT
;
}
if
(
rest
>
4
)
mwdebi
(
av7110
,
DEBISWAB
,
bootblock
,
((
char
*
)
data
)
+
i
*
BOOT_MAX_SIZE
,
rest
);
((
char
*
)
data
)
+
i
*
AV7110_
BOOT_MAX_SIZE
,
rest
);
else
mwdebi
(
av7110
,
DEBISWAB
,
bootblock
,
((
char
*
)
data
)
+
i
*
BOOT_MAX_SIZE
-
4
,
rest
+
4
);
((
char
*
)
data
)
+
i
*
AV7110_
BOOT_MAX_SIZE
-
4
,
rest
+
4
);
iwdebi
(
av7110
,
DEBISWAB
,
BOOT_BASE
,
swab32
(
base
),
4
);
iwdebi
(
av7110
,
DEBINOSWAP
,
BOOT_SIZE
,
rest
,
2
);
iwdebi
(
av7110
,
DEBINOSWAP
,
BOOT_STATE
,
BOOTSTATE_BUFFER_FULL
,
2
);
iwdebi
(
av7110
,
DEBISWAB
,
AV7110_
BOOT_BASE
,
swab32
(
base
),
4
);
iwdebi
(
av7110
,
DEBINOSWAP
,
AV7110_
BOOT_SIZE
,
rest
,
2
);
iwdebi
(
av7110
,
DEBINOSWAP
,
AV7110_
BOOT_STATE
,
BOOTSTATE_BUFFER_FULL
,
2
);
}
if
(
waitdebi
(
av7110
,
BOOT_STATE
,
BOOTSTATE_BUFFER_EMPTY
)
<
0
)
{
if
(
waitdebi
(
av7110
,
AV7110_
BOOT_STATE
,
BOOTSTATE_BUFFER_EMPTY
)
<
0
)
{
printk
(
KERN_ERR
"dvb-ttpci: load_dram(): timeout after last block
\n
"
);
return
-
ETIMEDOUT
;
}
iwdebi
(
av7110
,
DEBINOSWAP
,
BOOT_SIZE
,
0
,
2
);
iwdebi
(
av7110
,
DEBINOSWAP
,
BOOT_STATE
,
BOOTSTATE_BUFFER_FULL
,
2
);
if
(
waitdebi
(
av7110
,
BOOT_STATE
,
BOOTSTATE
_BOOT_COMPLETE
)
<
0
)
{
iwdebi
(
av7110
,
DEBINOSWAP
,
AV7110_
BOOT_SIZE
,
0
,
2
);
iwdebi
(
av7110
,
DEBINOSWAP
,
AV7110_
BOOT_STATE
,
BOOTSTATE_BUFFER_FULL
,
2
);
if
(
waitdebi
(
av7110
,
AV7110_BOOT_STATE
,
BOOTSTATE_AV7110
_BOOT_COMPLETE
)
<
0
)
{
printk
(
KERN_ERR
"dvb-ttpci: load_dram(): final handshake timeout
\n
"
);
return
-
ETIMEDOUT
;
}
...
...
@@ -262,7 +262,7 @@ int av7110_bootarm(struct av7110 *av7110)
//saa7146_setgpio(dev, 3, SAA7146_GPIO_INPUT);
mwdebi
(
av7110
,
DEBISWAB
,
DPRAM_BASE
,
bootcode
,
sizeof
(
bootcode
));
iwdebi
(
av7110
,
DEBINOSWAP
,
BOOT_STATE
,
BOOTSTATE_BUFFER_FULL
,
2
);
iwdebi
(
av7110
,
DEBINOSWAP
,
AV7110_
BOOT_STATE
,
BOOTSTATE_BUFFER_FULL
,
2
);
if
(
saa7146_wait_for_debi_done
(
av7110
->
dev
,
1
))
{
printk
(
KERN_ERR
"dvb-ttpci: av7110_bootarm(): "
...
...
drivers/media/dvb/ttpci/av7110_hw.h
浏览文件 @
d669af9d
...
...
@@ -18,7 +18,7 @@ enum av7110_bootstate
{
BOOTSTATE_BUFFER_EMPTY
=
0
,
BOOTSTATE_BUFFER_FULL
=
1
,
BOOTSTATE_BOOT_COMPLETE
=
2
BOOTSTATE_
AV7110_
BOOT_COMPLETE
=
2
};
enum
av7110_type_rec_play_format
...
...
@@ -295,11 +295,11 @@ enum av7110_command_type {
#define DPRAM_BASE 0x4000
/* boot protocol area */
#define BOOT_STATE (DPRAM_BASE + 0x3F8)
#define BOOT_SIZE (DPRAM_BASE + 0x3FA)
#define BOOT_BASE (DPRAM_BASE + 0x3FC)
#define BOOT_BLOCK (DPRAM_BASE + 0x400)
#define BOOT_MAX_SIZE 0xc00
#define
AV7110_
BOOT_STATE (DPRAM_BASE + 0x3F8)
#define
AV7110_
BOOT_SIZE (DPRAM_BASE + 0x3FA)
#define
AV7110_
BOOT_BASE (DPRAM_BASE + 0x3FC)
#define
AV7110_
BOOT_BLOCK (DPRAM_BASE + 0x400)
#define
AV7110_
BOOT_MAX_SIZE 0xc00
/* firmware command protocol area */
#define IRQ_STATE (DPRAM_BASE + 0x0F4)
...
...
drivers/media/video/Makefile
浏览文件 @
d669af9d
...
...
@@ -8,7 +8,8 @@ bttv-objs := bttv-driver.o bttv-cards.o bttv-if.o \
zoran-objs
:=
zr36120.o zr36120_i2c.o zr36120_mem.o
zr36067-objs
:=
zoran_procfs.o zoran_device.o
\
zoran_driver.o zoran_card.o
tuner-objs
:=
tuner-core.o tuner-simple.o mt20xx.o tda8290.o tea5767.o
tuner-objs
:=
tuner-core.o tuner-types.o tuner-simple.o
\
mt20xx.o tda8290.o tea5767.o
msp3400-objs
:=
msp3400-driver.o msp3400-kthreads.o
...
...
drivers/media/video/arv.c
浏览文件 @
d669af9d
...
...
@@ -129,9 +129,9 @@ static unsigned char yuv[MAX_AR_FRAME_BYTES];
static
int
freq
=
DEFAULT_FREQ
;
/* BCLK: available 50 or 70 (MHz) */
static
int
vga
=
0
;
/* default mode(0:QVGA mode, other:VGA mode) */
static
int
vga_interlace
=
0
;
/* 0 is normal mode for, else interlace mode */
MODULE_PARM
(
freq
,
"i"
);
MODULE_PARM
(
vga
,
"i"
);
MODULE_PARM
(
vga_interlace
,
"i"
);
module_param
(
freq
,
int
,
0
);
module_param
(
vga
,
int
,
0
);
module_param
(
vga_interlace
,
int
,
0
);
static
int
ar_initialize
(
struct
video_device
*
dev
);
...
...
drivers/media/video/bt832.c
浏览文件 @
d669af9d
...
...
@@ -43,7 +43,7 @@ static unsigned short normal_i2c[] = { I2C_BT832_ALT1>>1, I2C_BT832_ALT2>>1,
I2C_CLIENT_END
};
I2C_CLIENT_INSMOD
;
int
debug
=
0
;
/* debug output */
int
debug
;
/* debug output */
module_param
(
debug
,
int
,
0644
);
/* ---------------------------------------------------------------------- */
...
...
drivers/media/video/btcx-risc.c
浏览文件 @
d669af9d
...
...
@@ -37,7 +37,7 @@ MODULE_DESCRIPTION("some code shared by bttv and cx88xx drivers");
MODULE_AUTHOR
(
"Gerd Knorr"
);
MODULE_LICENSE
(
"GPL"
);
static
unsigned
int
debug
=
0
;
static
unsigned
int
debug
;
module_param
(
debug
,
int
,
0644
);
MODULE_PARM_DESC
(
debug
,
"debug messages, default is 0 (no)"
);
...
...
drivers/media/video/bttv-cards.c
浏览文件 @
d669af9d
...
...
@@ -92,8 +92,8 @@ static void identify_by_eeprom(struct bttv *btv,
static
int
__devinit
pvr_boot
(
struct
bttv
*
btv
);
/* config variables */
static
unsigned
int
triton1
=
0
;
static
unsigned
int
vsfx
=
0
;
static
unsigned
int
triton1
;
static
unsigned
int
vsfx
;
static
unsigned
int
latency
=
UNSET
;
int
no_overlay
=-
1
;
...
...
@@ -106,7 +106,7 @@ static struct bttv *master[BTTV_MAX] = { [ 0 ... (BTTV_MAX-1) ] = NULL };
#ifdef MODULE
static
unsigned
int
autoload
=
1
;
#else
static
unsigned
int
autoload
=
0
;
static
unsigned
int
autoload
;
#endif
static
unsigned
int
gpiomask
=
UNSET
;
static
unsigned
int
audioall
=
UNSET
;
...
...
drivers/media/video/bttv-driver.c
浏览文件 @
d669af9d
...
...
@@ -48,47 +48,46 @@
unsigned
int
bttv_num
;
/* number of Bt848s in use */
struct
bttv
bttvs
[
BTTV_MAX
];
unsigned
int
bttv_debug
=
0
;
unsigned
int
bttv_debug
;
unsigned
int
bttv_verbose
=
1
;
unsigned
int
bttv_gpio
=
0
;
unsigned
int
bttv_gpio
;
/* config variables */
#ifdef __BIG_ENDIAN
static
unsigned
int
bigendian
=
1
;
#else
static
unsigned
int
bigendian
=
0
;
static
unsigned
int
bigendian
;
#endif
static
unsigned
int
radio
[
BTTV_MAX
];
static
unsigned
int
irq_debug
=
0
;
static
unsigned
int
irq_debug
;
static
unsigned
int
gbuffers
=
8
;
static
unsigned
int
gbufsize
=
0x208000
;
static
int
video_nr
=
-
1
;
static
int
radio_nr
=
-
1
;
static
int
vbi_nr
=
-
1
;
static
int
debug_latency
=
0
;
static
int
debug_latency
;
static
unsigned
int
fdsr
=
0
;
static
unsigned
int
fdsr
;
/* options */
static
unsigned
int
combfilter
=
0
;
static
unsigned
int
lumafilter
=
0
;
static
unsigned
int
combfilter
;
static
unsigned
int
lumafilter
;
static
unsigned
int
automute
=
1
;
static
unsigned
int
chroma_agc
=
0
;
static
unsigned
int
chroma_agc
;
static
unsigned
int
adc_crush
=
1
;
static
unsigned
int
whitecrush_upper
=
0xCF
;
static
unsigned
int
whitecrush_lower
=
0x7F
;
static
unsigned
int
vcr_hack
=
0
;
static
unsigned
int
irq_iswitch
=
0
;
static
unsigned
int
vcr_hack
;
static
unsigned
int
irq_iswitch
;
static
unsigned
int
uv_ratio
=
50
;
static
unsigned
int
full_luma_range
=
0
;
static
unsigned
int
coring
=
0
;
static
unsigned
int
full_luma_range
;
static
unsigned
int
coring
;
extern
int
no_overlay
;
/* API features (turn on/off stuff for testing) */
static
unsigned
int
v4l2
=
1
;
/* insmod args */
module_param
(
bttv_verbose
,
int
,
0644
);
module_param
(
bttv_gpio
,
int
,
0644
);
...
...
@@ -685,16 +684,16 @@ int check_alloc_btres(struct bttv *btv, struct bttv_fh *fh, int bit)
return
1
;
/* is it free? */
down
(
&
btv
->
reslock
);
mutex_lock
(
&
btv
->
reslock
);
if
(
btv
->
resources
&
bit
)
{
/* no, someone else uses it */
up
(
&
btv
->
reslock
);
mutex_unlock
(
&
btv
->
reslock
);
return
0
;
}
/* it's free, grab it */
fh
->
resources
|=
bit
;
btv
->
resources
|=
bit
;
up
(
&
btv
->
reslock
);
mutex_unlock
(
&
btv
->
reslock
);
return
1
;
}
...
...
@@ -717,10 +716,10 @@ void free_btres(struct bttv *btv, struct bttv_fh *fh, int bits)
/* trying to free ressources not allocated by us ... */
printk
(
"bttv: BUG! (btres)
\n
"
);
}
down
(
&
btv
->
reslock
);
mutex_lock
(
&
btv
->
reslock
);
fh
->
resources
&=
~
bits
;
btv
->
resources
&=
~
bits
;
up
(
&
btv
->
reslock
);
mutex_unlock
(
&
btv
->
reslock
);
}
/* ----------------------------------------------------------------------- */
...
...
@@ -1537,12 +1536,12 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
case
VIDIOCSFREQ
:
{
unsigned
long
*
freq
=
arg
;
down
(
&
btv
->
lock
);
mutex_lock
(
&
btv
->
lock
);
btv
->
freq
=*
freq
;
bttv_call_i2c_clients
(
btv
,
VIDIOCSFREQ
,
freq
);
if
(
btv
->
has_matchbox
&&
btv
->
radio_user
)
tea5757_set_freq
(
btv
,
*
freq
);
up
(
&
btv
->
lock
);
mutex_unlock
(
&
btv
->
lock
);
return
0
;
}
...
...
@@ -1572,10 +1571,10 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
if
(
v
->
mode
>=
BTTV_TVNORMS
)
return
-
EINVAL
;
down
(
&
btv
->
lock
);
mutex_lock
(
&
btv
->
lock
);
set_tvnorm
(
btv
,
v
->
mode
);
bttv_call_i2c_clients
(
btv
,
cmd
,
v
);
up
(
&
btv
->
lock
);
mutex_unlock
(
&
btv
->
lock
);
return
0
;
}
...
...
@@ -1612,17 +1611,17 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
if
(
v
->
norm
>=
BTTV_TVNORMS
)
return
-
EINVAL
;
down
(
&
btv
->
lock
);
mutex_lock
(
&
btv
->
lock
);
if
(
channel
==
btv
->
input
&&
v
->
norm
==
btv
->
tvnorm
)
{
/* nothing to do */
up
(
&
btv
->
lock
);
mutex_unlock
(
&
btv
->
lock
);
return
0
;
}
btv
->
tvnorm
=
v
->
norm
;
set_input
(
btv
,
v
->
channel
);
up
(
&
btv
->
lock
);
mutex_unlock
(
&
btv
->
lock
);
return
0
;
}
...
...
@@ -1635,14 +1634,14 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
v
->
flags
|=
VIDEO_AUDIO_MUTABLE
;
v
->
mode
=
VIDEO_SOUND_MONO
;
down
(
&
btv
->
lock
);
mutex_lock
(
&
btv
->
lock
);
bttv_call_i2c_clients
(
btv
,
cmd
,
v
);
/* card specific hooks */
if
(
btv
->
audio_hook
)
btv
->
audio_hook
(
btv
,
v
,
0
);
up
(
&
btv
->
lock
);
mutex_unlock
(
&
btv
->
lock
);
return
0
;
}
case
VIDIOCSAUDIO
:
...
...
@@ -1653,7 +1652,7 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
if
(
audio
>=
bttv_tvcards
[
btv
->
c
.
type
].
audio_inputs
)
return
-
EINVAL
;
down
(
&
btv
->
lock
);
mutex_lock
(
&
btv
->
lock
);
audio_mux
(
btv
,
(
v
->
flags
&
VIDEO_AUDIO_MUTE
)
?
AUDIO_MUTE
:
AUDIO_UNMUTE
);
bttv_call_i2c_clients
(
btv
,
cmd
,
v
);
...
...
@@ -1661,7 +1660,7 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
if
(
btv
->
audio_hook
)
btv
->
audio_hook
(
btv
,
v
,
1
);
up
(
&
btv
->
lock
);
mutex_unlock
(
&
btv
->
lock
);
return
0
;
}
...
...
@@ -1695,10 +1694,10 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
if
(
i
==
BTTV_TVNORMS
)
return
-
EINVAL
;
down
(
&
btv
->
lock
);
mutex_lock
(
&
btv
->
lock
);
set_tvnorm
(
btv
,
i
);
i2c_vidiocschan
(
btv
);
up
(
&
btv
->
lock
);
mutex_unlock
(
&
btv
->
lock
);
return
0
;
}
case
VIDIOC_QUERYSTD
:
...
...
@@ -1756,9 +1755,9 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
if
(
*
i
>
bttv_tvcards
[
btv
->
c
.
type
].
video_inputs
)
return
-
EINVAL
;
down
(
&
btv
->
lock
);
mutex_lock
(
&
btv
->
lock
);
set_input
(
btv
,
*
i
);
up
(
&
btv
->
lock
);
mutex_unlock
(
&
btv
->
lock
);
return
0
;
}
...
...
@@ -1770,7 +1769,7 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
return
-
EINVAL
;
if
(
0
!=
t
->
index
)
return
-
EINVAL
;
down
(
&
btv
->
lock
);
mutex_lock
(
&
btv
->
lock
);
memset
(
t
,
0
,
sizeof
(
*
t
));
strcpy
(
t
->
name
,
"Television"
);
t
->
type
=
V4L2_TUNER_ANALOG_TV
;
...
...
@@ -1805,7 +1804,7 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
}
}
/* FIXME: fill capability+audmode */
up
(
&
btv
->
lock
);
mutex_unlock
(
&
btv
->
lock
);
return
0
;
}
case
VIDIOC_S_TUNER
:
...
...
@@ -1816,7 +1815,7 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
return
-
EINVAL
;
if
(
0
!=
t
->
index
)
return
-
EINVAL
;
down
(
&
btv
->
lock
);
mutex_lock
(
&
btv
->
lock
);
{
struct
video_audio
va
;
memset
(
&
va
,
0
,
sizeof
(
struct
video_audio
));
...
...
@@ -1833,7 +1832,7 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
if
(
btv
->
audio_hook
)
btv
->
audio_hook
(
btv
,
&
va
,
1
);
}
up
(
&
btv
->
lock
);
mutex_unlock
(
&
btv
->
lock
);
return
0
;
}
...
...
@@ -1854,12 +1853,12 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
return
-
EINVAL
;
if
(
unlikely
(
f
->
type
!=
V4L2_TUNER_ANALOG_TV
))
return
-
EINVAL
;
down
(
&
btv
->
lock
);
mutex_lock
(
&
btv
->
lock
);
btv
->
freq
=
f
->
frequency
;
bttv_call_i2c_clients
(
btv
,
VIDIOCSFREQ
,
&
btv
->
freq
);
if
(
btv
->
has_matchbox
&&
btv
->
radio_user
)
tea5757_set_freq
(
btv
,
btv
->
freq
);
up
(
&
btv
->
lock
);
mutex_unlock
(
&
btv
->
lock
);
return
0
;
}
case
VIDIOC_LOG_STATUS
:
...
...
@@ -3157,7 +3156,7 @@ static int radio_open(struct inode *inode, struct file *file)
return
-
ENODEV
;
dprintk
(
"bttv%d: open called (radio)
\n
"
,
btv
->
c
.
nr
);
down
(
&
btv
->
lock
);
mutex_lock
(
&
btv
->
lock
);
btv
->
radio_user
++
;
...
...
@@ -3166,7 +3165,7 @@ static int radio_open(struct inode *inode, struct file *file)
bttv_call_i2c_clients
(
btv
,
AUDC_SET_RADIO
,
&
btv
->
tuner_type
);
audio_mux
(
btv
,
AUDIO_RADIO
);
up
(
&
btv
->
lock
);
mutex_unlock
(
&
btv
->
lock
);
return
0
;
}
...
...
@@ -3921,8 +3920,8 @@ static int __devinit bttv_probe(struct pci_dev *dev,
sprintf
(
btv
->
c
.
name
,
"bttv%d"
,
btv
->
c
.
nr
);
/* initialize structs / fill in defaults */
init_MUTEX
(
&
btv
->
lock
);
init_MUTEX
(
&
btv
->
reslock
);
mutex_init
(
&
btv
->
lock
);
mutex_init
(
&
btv
->
reslock
);
spin_lock_init
(
&
btv
->
s_lock
);
spin_lock_init
(
&
btv
->
gpio_lock
);
init_waitqueue_head
(
&
btv
->
gpioq
);
...
...
drivers/media/video/bttv-i2c.c
浏览文件 @
d669af9d
...
...
@@ -41,9 +41,9 @@ static struct i2c_client bttv_i2c_client_template;
static
int
attach_inform
(
struct
i2c_client
*
client
);
static
int
i2c_debug
=
0
;
static
int
i2c_hw
=
0
;
static
int
i2c_scan
=
0
;
static
int
i2c_debug
;
static
int
i2c_hw
;
static
int
i2c_scan
;
module_param
(
i2c_debug
,
int
,
0644
);
module_param
(
i2c_hw
,
int
,
0444
);
module_param
(
i2c_scan
,
int
,
0444
);
...
...
drivers/media/video/bttvp.h
浏览文件 @
d669af9d
...
...
@@ -35,6 +35,7 @@
#include <linux/videodev.h>
#include <linux/pci.h>
#include <linux/input.h>
#include <linux/mutex.h>
#include <asm/scatterlist.h>
#include <asm/io.h>
...
...
@@ -309,9 +310,9 @@ struct bttv {
/* locking */
spinlock_t
s_lock
;
struct
semaphore
lock
;
struct
mutex
lock
;
int
resources
;
struct
semaphore
reslock
;
struct
mutex
reslock
;
#ifdef VIDIOC_G_PRIORITY
struct
v4l2_prio_state
prio
;
#endif
...
...
drivers/media/video/cx25840/cx25840-core.c
浏览文件 @
d669af9d
...
...
@@ -43,7 +43,7 @@ MODULE_LICENSE("GPL");
static
unsigned
short
normal_i2c
[]
=
{
0x88
>>
1
,
I2C_CLIENT_END
};
int
cx25840_debug
=
0
;
static
int
cx25840_debug
;
module_param_named
(
debug
,
cx25840_debug
,
int
,
0644
);
...
...
drivers/media/video/cx88/Kconfig
浏览文件 @
d669af9d
...
...
@@ -31,8 +31,7 @@ config VIDEO_CX88_DVB
config VIDEO_CX88_ALSA
tristate "ALSA DMA audio support"
depends on VIDEO_CX88 && SND
select SND_PCM_OSS
depends on VIDEO_CX88 && SND && EXPERIMENTAL
---help---
This is a video4linux driver for direct (DMA) audio on
Conexant 2388x based TV cards.
...
...
drivers/media/video/cx88/Makefile
浏览文件 @
d669af9d
...
...
@@ -5,6 +5,7 @@ cx8802-objs := cx88-mpeg.o
obj-$(CONFIG_VIDEO_CX88)
+=
cx88xx.o cx8800.o cx8802.o cx88-blackbird.o
obj-$(CONFIG_VIDEO_CX88_DVB)
+=
cx88-dvb.o cx88-vp3054-i2c.o
obj-$(CONFIG_VIDEO_CX88_ALSA)
+=
cx88-alsa.o
EXTRA_CFLAGS
+=
-I
$(src)
/..
EXTRA_CFLAGS
+=
-I
$(srctree)
/drivers/media/dvb/dvb-core
...
...
drivers/media/video/cx88/cx88-alsa.c
浏览文件 @
d669af9d
...
...
@@ -116,7 +116,7 @@ MODULE_LICENSE("GPL");
MODULE_SUPPORTED_DEVICE
(
"{{Conexant,23881},"
"{{Conexant,23882},"
"{{Conexant,23883}"
);
static
unsigned
int
debug
=
0
;
static
unsigned
int
debug
;
module_param
(
debug
,
int
,
0644
);
MODULE_PARM_DESC
(
debug
,
"enable debug messages"
);
...
...
@@ -333,10 +333,10 @@ static snd_pcm_hardware_t snd_cx88_digital_hw = {
.
channels_min
=
1
,
.
channels_max
=
2
,
.
buffer_bytes_max
=
(
2
*
2048
),
.
period_bytes_min
=
2
56
,
.
period_bytes_min
=
2
048
,
.
period_bytes_max
=
2048
,
.
periods_min
=
2
,
.
periods_max
=
16
,
.
periods_max
=
2
,
};
/*
...
...
@@ -653,7 +653,7 @@ static void snd_cx88_dev_free(snd_card_t * card)
* Alsa Constructor - Component probe
*/
static
int
devno
=
0
;
static
int
devno
;
static
int
__devinit
snd_cx88_create
(
snd_card_t
*
card
,
struct
pci_dev
*
pci
,
snd_cx88_card_t
**
rchip
)
{
...
...
@@ -805,7 +805,6 @@ static struct pci_driver cx88_audio_pci_driver = {
.
id_table
=
cx88_audio_pci_tbl
,
.
probe
=
cx88_audio_initdev
,
.
remove
=
cx88_audio_finidev
,
SND_PCI_PM_CALLBACKS
};
/****************************************************************************
...
...
drivers/media/video/cx88/cx88-core.c
浏览文件 @
d669af9d
...
...
@@ -32,6 +32,7 @@
#include <linux/pci.h>
#include <linux/delay.h>
#include <linux/videodev2.h>
#include <linux/mutex.h>
#include "cx88.h"
#include <media/v4l2-common.h>
...
...
@@ -75,7 +76,7 @@ MODULE_PARM_DESC(nocomb,"disable comb filter");
static
unsigned
int
cx88_devcount
;
static
LIST_HEAD
(
cx88_devlist
);
static
DE
CLAR
E_MUTEX
(
devlist
);
static
DE
FIN
E_MUTEX
(
devlist
);
#define NO_SYNC_LINE (-1U)
...
...
@@ -1036,7 +1037,7 @@ struct cx88_core* cx88_core_get(struct pci_dev *pci)
struct
list_head
*
item
;
int
i
;
down
(
&
devlist
);
mutex_lock
(
&
devlist
);
list_for_each
(
item
,
&
cx88_devlist
)
{
core
=
list_entry
(
item
,
struct
cx88_core
,
devlist
);
if
(
pci
->
bus
->
number
!=
core
->
pci_bus
)
...
...
@@ -1047,7 +1048,7 @@ struct cx88_core* cx88_core_get(struct pci_dev *pci)
if
(
0
!=
get_ressources
(
core
,
pci
))
goto
fail_unlock
;
atomic_inc
(
&
core
->
refcount
);
up
(
&
devlist
);
mutex_unlock
(
&
devlist
);
return
core
;
}
core
=
kzalloc
(
sizeof
(
*
core
),
GFP_KERNEL
);
...
...
@@ -1122,13 +1123,13 @@ struct cx88_core* cx88_core_get(struct pci_dev *pci)
cx88_card_setup
(
core
);
cx88_ir_init
(
core
,
pci
);
up
(
&
devlist
);
mutex_unlock
(
&
devlist
);
return
core
;
fail_free:
kfree
(
core
);
fail_unlock:
up
(
&
devlist
);
mutex_unlock
(
&
devlist
);
return
NULL
;
}
...
...
@@ -1140,14 +1141,14 @@ void cx88_core_put(struct cx88_core *core, struct pci_dev *pci)
if
(
!
atomic_dec_and_test
(
&
core
->
refcount
))
return
;
down
(
&
devlist
);
mutex_lock
(
&
devlist
);
cx88_ir_fini
(
core
);
if
(
0
==
core
->
i2c_rc
)
i2c_bit_del_bus
(
&
core
->
i2c_adap
);
list_del
(
&
core
->
devlist
);
iounmap
(
core
->
lmmio
);
cx88_devcount
--
;
up
(
&
devlist
);
mutex_unlock
(
&
devlist
);
kfree
(
core
);
}
...
...
drivers/media/video/cx88/cx88-tvaudio.c
浏览文件 @
d669af9d
...
...
@@ -60,6 +60,11 @@ static unsigned int audio_debug = 0;
module_param
(
audio_debug
,
int
,
0644
);
MODULE_PARM_DESC
(
audio_debug
,
"enable debug messages [audio]"
);
static
unsigned
int
always_analog
=
0
;
module_param
(
always_analog
,
int
,
0644
);
MODULE_PARM_DESC
(
always_analog
,
"force analog audio out"
);
#define dprintk(fmt, arg...) if (audio_debug) \
printk(KERN_DEBUG "%s/0: " fmt, core->name , ## arg)
...
...
@@ -155,7 +160,8 @@ static void set_audio_finish(struct cx88_core *core, u32 ctl)
cx_write
(
AUD_I2SOUTPUTCNTL
,
1
);
cx_write
(
AUD_I2SCNTL
,
0
);
/* cx_write(AUD_APB_IN_RATE_ADJ, 0); */
}
else
{
}
if
((
always_analog
)
||
(
!
cx88_boards
[
core
->
board
].
blackbird
))
{
ctl
|=
EN_DAC_ENABLE
;
cx_write
(
AUD_CTL
,
ctl
);
}
...
...
drivers/media/video/cx88/cx88-vp3054-i2c.c
浏览文件 @
d669af9d
...
...
@@ -32,6 +32,10 @@
#include "cx88-vp3054-i2c.h"
MODULE_DESCRIPTION
(
"driver for cx2388x VP3054 design"
);
MODULE_AUTHOR
(
"Chris Pascoe <c.pascoe@itee.uq.edu.au>"
);
MODULE_LICENSE
(
"GPL"
);
/* ----------------------------------------------------------------------- */
static
void
vp3054_bit_setscl
(
void
*
data
,
int
state
)
...
...
drivers/media/video/em28xx/em28xx-input.c
浏览文件 @
d669af9d
...
...
@@ -76,6 +76,58 @@ static IR_KEYTAB_TYPE ir_codes_em_terratec[IR_KEYTAB_SIZE] = {
[
0x40
]
=
KEY_ZOOM
,
};
static
IR_KEYTAB_TYPE
ir_codes_em_pinnacle_usb
[
IR_KEYTAB_SIZE
]
=
{
[
0x3a
]
=
KEY_KP0
,
[
0x31
]
=
KEY_KP1
,
[
0x32
]
=
KEY_KP2
,
[
0x33
]
=
KEY_KP3
,
[
0x34
]
=
KEY_KP4
,
[
0x35
]
=
KEY_KP5
,
[
0x36
]
=
KEY_KP6
,
[
0x37
]
=
KEY_KP7
,
[
0x38
]
=
KEY_KP8
,
[
0x39
]
=
KEY_KP9
,
[
0x2f
]
=
KEY_POWER
,
[
0x2e
]
=
KEY_P
,
[
0x1f
]
=
KEY_L
,
[
0x2b
]
=
KEY_I
,
[
0x2d
]
=
KEY_ZOOM
,
[
0x1e
]
=
KEY_ZOOM
,
[
0x1b
]
=
KEY_VOLUMEUP
,
[
0x0f
]
=
KEY_VOLUMEDOWN
,
[
0x17
]
=
KEY_CHANNELUP
,
[
0x1c
]
=
KEY_CHANNELDOWN
,
[
0x25
]
=
KEY_INFO
,
[
0x3c
]
=
KEY_MUTE
,
[
0x3d
]
=
KEY_LEFT
,
[
0x3b
]
=
KEY_RIGHT
,
[
0x3f
]
=
KEY_UP
,
[
0x3e
]
=
KEY_DOWN
,
[
0x1a
]
=
KEY_PAUSE
,
[
0x1d
]
=
KEY_MENU
,
[
0x19
]
=
KEY_PLAY
,
[
0x16
]
=
KEY_REWIND
,
[
0x13
]
=
KEY_FORWARD
,
[
0x15
]
=
KEY_PAUSE
,
[
0x0e
]
=
KEY_REWIND
,
[
0x0d
]
=
KEY_PLAY
,
[
0x0b
]
=
KEY_STOP
,
[
0x07
]
=
KEY_FORWARD
,
[
0x27
]
=
KEY_RECORD
,
[
0x26
]
=
KEY_TUNER
,
[
0x29
]
=
KEY_TEXT
,
[
0x2a
]
=
KEY_MEDIA
,
[
0x18
]
=
KEY_EPG
,
[
0x27
]
=
KEY_RECORD
,
};
/* ----------------------------------------------------------------------- */
static
int
get_key_terratec
(
struct
IR_i2c
*
ir
,
u32
*
ir_key
,
u32
*
ir_raw
)
...
...
@@ -138,6 +190,28 @@ static int get_key_em_haup(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
return
1
;
}
static
int
get_key_pinnacle_usb
(
struct
IR_i2c
*
ir
,
u32
*
ir_key
,
u32
*
ir_raw
)
{
unsigned
char
buf
[
3
];
/* poll IR chip */
if
(
3
!=
i2c_master_recv
(
&
ir
->
c
,
buf
,
3
))
{
dprintk
(
"read error
\n
"
);
return
-
EIO
;
}
dprintk
(
"key %02x
\n
"
,
buf
[
2
]
&
0x3f
);
if
(
buf
[
0
]
!=
0x00
){
return
0
;
}
*
ir_key
=
buf
[
2
]
&
0x3f
;
*
ir_raw
=
buf
[
2
]
&
0x3f
;
return
1
;
}
/* ----------------------------------------------------------------------- */
void
em28xx_set_ir
(
struct
em28xx
*
dev
,
struct
IR_i2c
*
ir
)
{
...
...
@@ -159,6 +233,9 @@ void em28xx_set_ir(struct em28xx * dev,struct IR_i2c *ir)
snprintf
(
ir
->
c
.
name
,
sizeof
(
ir
->
c
.
name
),
"i2c IR (EM28XX Terratec)"
);
break
;
case
(
EM2820_BOARD_PINNACLE_USB_2
):
ir
->
ir_codes
=
ir_codes_em_pinnacle_usb
;
ir
->
get_key
=
get_key_pinnacle_usb
;
snprintf
(
ir
->
c
.
name
,
sizeof
(
ir
->
c
.
name
),
"i2c IR (EM28XX Pinnacle PCTV)"
);
break
;
case
(
EM2820_BOARD_HAUPPAUGE_WINTV_USB_2
):
ir
->
ir_codes
=
ir_codes_hauppauge_new
;
...
...
drivers/media/video/em28xx/em28xx-video.c
浏览文件 @
d669af9d
...
...
@@ -29,6 +29,7 @@
#include <linux/i2c.h>
#include <linux/version.h>
#include <linux/video_decoder.h>
#include <linux/mutex.h>
#include "em28xx.h"
#include <media/tuner.h>
...
...
@@ -191,7 +192,7 @@ static struct v4l2_queryctrl saa711x_qctrl[] = {
static
struct
usb_driver
em28xx_usb_driver
;
static
DE
CLAR
E_MUTEX
(
em28xx_sysfs_lock
);
static
DE
FIN
E_MUTEX
(
em28xx_sysfs_lock
);
static
DECLARE_RWSEM
(
em28xx_disconnect
);
/********************* v4l2 interface ******************************************/
...
...
@@ -394,7 +395,7 @@ static int em28xx_v4l2_open(struct inode *inode, struct file *filp)
*/
static
void
em28xx_release_resources
(
struct
em28xx
*
dev
)
{
down
(
&
em28xx_sysfs_lock
);
mutex_lock
(
&
em28xx_sysfs_lock
);
em28xx_info
(
"V4L2 device /dev/video%d deregistered
\n
"
,
dev
->
vdev
->
minor
);
...
...
@@ -403,7 +404,7 @@ static void em28xx_release_resources(struct em28xx *dev)
/* video_unregister_device(dev->vbi_dev); */
em28xx_i2c_unregister
(
dev
);
usb_put_dev
(
dev
->
udev
);
up
(
&
em28xx_sysfs_lock
);
mutex_unlock
(
&
em28xx_sysfs_lock
);
}
/*
...
...
drivers/media/video/msp3400-driver.c
浏览文件 @
d669af9d
...
...
@@ -66,12 +66,12 @@ MODULE_LICENSE("GPL");
/* module parameters */
static
int
opmode
=
OPMODE_AUTO
;
int
msp_debug
=
0
;
/* msp_debug output */
int
msp_once
=
0
;
/* no continous stereo monitoring */
int
msp_amsound
=
0
;
/* hard-wire AM sound at 6.5 Hz (france),
int
msp_debug
;
/* msp_debug output */
int
msp_once
;
/* no continous stereo monitoring */
int
msp_amsound
;
/* hard-wire AM sound at 6.5 Hz (france),
the autoscan seems work well only with FM... */
int
msp_standard
=
1
;
/* Override auto detect of audio msp_standard, if needed. */
int
msp_dolby
=
0
;
int
msp_dolby
;
int
msp_stereo_thresh
=
0x190
;
/* a2 threshold for stereo/bilingual
(msp34xxg only) 0x00a0-0x03c0 */
...
...
@@ -1031,8 +1031,8 @@ static int msp_command(struct i2c_client *client, unsigned int cmd, void *arg)
}
default:
/*
nothing
*/
break
;
/*
unknown
*/
return
-
EINVAL
;
}
return
0
;
}
...
...
drivers/media/video/msp3400.h
浏览文件 @
d669af9d
...
...
@@ -6,14 +6,6 @@
/* ---------------------------------------------------------------------- */
struct
msp_matrix
{
int
input
;
int
output
;
};
/* ioctl for MSP_SET_MATRIX will have to be registered */
#define MSP_SET_MATRIX _IOW('m',17,struct msp_matrix)
/* This macro is allowed for *constants* only, gcc must calculate it
at compile time. Remember -- no floats in kernel mode */
#define MSP_CARRIER(freq) ((int)((float)(freq / 18.432) * (1 << 24)))
...
...
drivers/media/video/mt20xx.c
浏览文件 @
d669af9d
...
...
@@ -353,8 +353,8 @@ static int mt2032_init(struct i2c_client *c)
}
while
(
xok
!=
1
);
t
->
xogc
=
xogc
;
t
->
tv_freq
=
mt2032_set_tv_freq
;
t
->
radio_freq
=
mt2032_set_radio_freq
;
t
->
set_
tv_freq
=
mt2032_set_tv_freq
;
t
->
set_
radio_freq
=
mt2032_set_radio_freq
;
return
(
1
);
}
...
...
@@ -481,8 +481,8 @@ static int mt2050_init(struct i2c_client *c)
i2c_master_recv
(
c
,
buf
,
1
);
tuner_dbg
(
"mt2050: sro is %x
\n
"
,
buf
[
0
]);
t
->
tv_freq
=
mt2050_set_tv_freq
;
t
->
radio_freq
=
mt2050_set_radio_freq
;
t
->
set_
tv_freq
=
mt2050_set_tv_freq
;
t
->
set_
radio_freq
=
mt2050_set_radio_freq
;
return
0
;
}
...
...
@@ -494,8 +494,8 @@ int microtune_init(struct i2c_client *c)
int
company_code
;
memset
(
buf
,
0
,
sizeof
(
buf
));
t
->
tv_freq
=
NULL
;
t
->
radio_freq
=
NULL
;
t
->
set_
tv_freq
=
NULL
;
t
->
set_
radio_freq
=
NULL
;
t
->
standby
=
NULL
;
if
(
t
->
std
&
V4L2_STD_525_60
)
{
tuner_dbg
(
"pinnacle ntsc
\n
"
);
...
...
drivers/media/video/planb.c
浏览文件 @
d669af9d
...
...
@@ -76,9 +76,9 @@ static volatile struct planb_registers *planb_regs;
static
int
def_norm
=
PLANB_DEF_NORM
;
/* default norm */
static
int
video_nr
=
-
1
;
MODULE_PARM
(
def_norm
,
"i"
);
module_param
(
def_norm
,
int
,
0
);
MODULE_PARM_DESC
(
def_norm
,
"Default startup norm (0=PAL, 1=NTSC, 2=SECAM)"
);
MODULE_PARM
(
video_nr
,
"i"
);
module_param
(
video_nr
,
int
,
0
);
MODULE_LICENSE
(
"GPL"
);
...
...
drivers/media/video/saa6588.c
浏览文件 @
d669af9d
...
...
@@ -50,15 +50,15 @@ static unsigned int rbds = 0;
static
unsigned
int
plvl
=
0
;
static
unsigned
int
bufblocks
=
100
;
MODULE_PARM
(
debug
,
"i"
);
module_param
(
debug
,
int
,
0644
);
MODULE_PARM_DESC
(
debug
,
"enable debug messages"
);
MODULE_PARM
(
xtal
,
"i"
);
module_param
(
xtal
,
int
,
0
);
MODULE_PARM_DESC
(
xtal
,
"select oscillator frequency (0..3), default 0"
);
MODULE_PARM
(
rbds
,
"i"
);
module_param
(
rbds
,
int
,
0
);
MODULE_PARM_DESC
(
rbds
,
"select mode, 0=RDS, 1=RBDS, default 0"
);
MODULE_PARM
(
plvl
,
"i"
);
module_param
(
plvl
,
int
,
0
);
MODULE_PARM_DESC
(
plvl
,
"select pause level (0..3), default 0"
);
MODULE_PARM
(
bufblocks
,
"i"
);
module_param
(
bufblocks
,
int
,
0
);
MODULE_PARM_DESC
(
bufblocks
,
"number of buffered blocks, default 100"
);
MODULE_DESCRIPTION
(
"v4l2 driver module for SAA6588 RDS decoder"
);
...
...
drivers/media/video/saa711x.c
浏览文件 @
d669af9d
...
...
@@ -52,7 +52,7 @@ MODULE_LICENSE("GPL");
#include <linux/video_decoder.h>
static
int
debug
=
0
;
MODULE_PARM
(
debug
,
"i"
);
module_param
(
debug
,
int
,
0644
);
MODULE_PARM_DESC
(
debug
,
" Set the default Debug level. Default: 0 (Off) - (0-1)"
);
...
...
drivers/media/video/saa7134/saa7134-cards.c
浏览文件 @
d669af9d
...
...
@@ -2515,6 +2515,7 @@ struct saa7134_board saa7134_boards[] = {
.
tuner_addr
=
ADDR_UNSET
,
.
radio_addr
=
ADDR_UNSET
,
.
mpeg
=
SAA7134_MPEG_DVB
,
.
gpiomask
=
1
<<
21
,
.
inputs
=
{{
.
name
=
name_tv
,
.
vmux
=
1
,
...
...
@@ -2529,6 +2530,11 @@ struct saa7134_board saa7134_boards[] = {
.
vmux
=
8
,
.
amux
=
LINE1
,
}},
.
radio
=
{
.
name
=
name_radio
,
.
amux
=
TV
,
.
gpio
=
0x0200000
,
},
},
[
SAA7134_BOARD_MSI_TVATANYWHERE_PLUS
]
=
{
.
name
=
"MSI TV@Anywhere plus"
,
...
...
drivers/media/video/saa7134/saa7134-core.c
浏览文件 @
d669af9d
...
...
@@ -31,6 +31,7 @@
#include <linux/sound.h>
#include <linux/interrupt.h>
#include <linux/delay.h>
#include <linux/mutex.h>
#include "saa7134-reg.h"
#include "saa7134.h"
...
...
@@ -84,7 +85,7 @@ MODULE_PARM_DESC(radio_nr, "radio device number");
MODULE_PARM_DESC
(
tuner
,
"tuner type"
);
MODULE_PARM_DESC
(
card
,
"card type"
);
static
DE
CLAR
E_MUTEX
(
devlist_lock
);
static
DE
FIN
E_MUTEX
(
devlist_lock
);
LIST_HEAD
(
saa7134_devlist
);
static
LIST_HEAD
(
mops_list
);
static
unsigned
int
saa7134_devcount
;
...
...
@@ -140,7 +141,7 @@ static int pending_call(struct notifier_block *self, unsigned long state,
return
NOTIFY_DONE
;
}
static
int
pending_registered
=
0
;
static
int
pending_registered
;
static
struct
notifier_block
pending_notifier
=
{
.
notifier_call
=
pending_call
,
};
...
...
@@ -969,13 +970,13 @@ static int __devinit saa7134_initdev(struct pci_dev *pci_dev,
pci_set_drvdata
(
pci_dev
,
dev
);
saa7134_devcount
++
;
down
(
&
devlist_lock
);
mutex_lock
(
&
devlist_lock
);
list_for_each
(
item
,
&
mops_list
)
{
mops
=
list_entry
(
item
,
struct
saa7134_mpeg_ops
,
next
);
mpeg_ops_attach
(
mops
,
dev
);
}
list_add_tail
(
&
dev
->
devlist
,
&
saa7134_devlist
);
up
(
&
devlist_lock
);
mutex_unlock
(
&
devlist_lock
);
/* check for signal */
saa7134_irq_video_intl
(
dev
);
...
...
@@ -1031,13 +1032,13 @@ static void __devexit saa7134_finidev(struct pci_dev *pci_dev)
saa7134_hwfini
(
dev
);
/* unregister */
down
(
&
devlist_lock
);
mutex_lock
(
&
devlist_lock
);
list_del
(
&
dev
->
devlist
);
list_for_each
(
item
,
&
mops_list
)
{
mops
=
list_entry
(
item
,
struct
saa7134_mpeg_ops
,
next
);
mpeg_ops_detach
(
mops
,
dev
);
}
up
(
&
devlist_lock
);
mutex_unlock
(
&
devlist_lock
);
saa7134_devcount
--
;
saa7134_i2c_unregister
(
dev
);
...
...
@@ -1071,13 +1072,13 @@ int saa7134_ts_register(struct saa7134_mpeg_ops *ops)
struct
list_head
*
item
;
struct
saa7134_dev
*
dev
;
down
(
&
devlist_lock
);
mutex_lock
(
&
devlist_lock
);
list_for_each
(
item
,
&
saa7134_devlist
)
{
dev
=
list_entry
(
item
,
struct
saa7134_dev
,
devlist
);
mpeg_ops_attach
(
ops
,
dev
);
}
list_add_tail
(
&
ops
->
next
,
&
mops_list
);
up
(
&
devlist_lock
);
mutex_unlock
(
&
devlist_lock
);
return
0
;
}
...
...
@@ -1086,13 +1087,13 @@ void saa7134_ts_unregister(struct saa7134_mpeg_ops *ops)
struct
list_head
*
item
;
struct
saa7134_dev
*
dev
;
down
(
&
devlist_lock
);
mutex_lock
(
&
devlist_lock
);
list_del
(
&
ops
->
next
);
list_for_each
(
item
,
&
saa7134_devlist
)
{
dev
=
list_entry
(
item
,
struct
saa7134_dev
,
devlist
);
mpeg_ops_detach
(
ops
,
dev
);
}
up
(
&
devlist_lock
);
mutex_unlock
(
&
devlist_lock
);
}
EXPORT_SYMBOL
(
saa7134_ts_register
);
...
...
drivers/media/video/saa7134/saa7134-tvaudio.c
浏览文件 @
d669af9d
...
...
@@ -180,8 +180,8 @@ static void tvaudio_init(struct saa7134_dev *dev)
saa_writeb
(
SAA7134_AUDIO_CLOCK0
,
clock
&
0xff
);
saa_writeb
(
SAA7134_AUDIO_CLOCK1
,
(
clock
>>
8
)
&
0xff
);
saa_writeb
(
SAA7134_AUDIO_CLOCK2
,
(
clock
>>
16
)
&
0xff
);
/
/ frame locked audio was reported not to be reliable
saa_writeb
(
SAA7134_AUDIO_PLL_CTRL
,
0x0
2
);
/
* frame locked audio is mandatory for NICAM */
saa_writeb
(
SAA7134_AUDIO_PLL_CTRL
,
0x0
1
);
saa_writeb
(
SAA7134_NICAM_ERROR_LOW
,
0x14
);
saa_writeb
(
SAA7134_NICAM_ERROR_HIGH
,
0x50
);
...
...
@@ -809,7 +809,12 @@ static int tvaudio_thread_ddep(void *data)
dprintk
(
"ddep override: %s
\n
"
,
stdres
[
audio_ddep
]);
}
else
if
(
&
card
(
dev
).
radio
==
dev
->
input
)
{
dprintk
(
"FM Radio
\n
"
);
if
(
dev
->
tuner_type
==
TUNER_PHILIPS_TDA8290
)
{
norms
=
(
0x11
<<
2
)
|
0x01
;
saa_dsp_writel
(
dev
,
0x42c
>>
2
,
0x729555
);
}
else
{
norms
=
(
0x0f
<<
2
)
|
0x01
;
}
}
else
{
/* (let chip) scan for sound carrier */
norms
=
0
;
...
...
drivers/media/video/tda8290.c
浏览文件 @
d669af9d
...
...
@@ -567,8 +567,8 @@ int tda8290_init(struct i2c_client *c)
}
tuner_info
(
"tuner: type set to %s
\n
"
,
c
->
name
);
t
->
tv_freq
=
set_tv_freq
;
t
->
radio_freq
=
set_radio_freq
;
t
->
set_
tv_freq
=
set_tv_freq
;
t
->
set_
radio_freq
=
set_radio_freq
;
t
->
has_signal
=
has_signal
;
t
->
standby
=
standby
;
t
->
tda827x_lpsel
=
0
;
...
...
drivers/media/video/tea5767.c
浏览文件 @
d669af9d
...
...
@@ -62,7 +62,7 @@ extern int tuner_debug;
#define TEA5767_PORT1_HIGH 0x01
/* Forth register */
/* Fo
u
rth register */
#define TEA5767_PORT2_HIGH 0x80
/* Chips stops working. Only I2C bus remains on */
#define TEA5767_STDBY 0x40
...
...
@@ -85,7 +85,7 @@ extern int tuner_debug;
/* If activate PORT 1 indicates SEARCH or else it is used as PORT1 */
#define TEA5767_SRCH_IND 0x01
/* Fi
ve
th register */
/* Fi
f
th register */
/* By activating, it will use Xtal at 13 MHz as reference for divider */
#define TEA5767_PLLREF_ENABLE 0x80
...
...
@@ -109,13 +109,13 @@ extern int tuner_debug;
#define TEA5767_STEREO_MASK 0x80
#define TEA5767_IF_CNTR_MASK 0x7f
/* Four register */
/* Four
th
register */
#define TEA5767_ADC_LEVEL_MASK 0xf0
/* should be 0 */
#define TEA5767_CHIP_ID_MASK 0x0f
/* Fi
ve
th register */
/* Fi
f
th register */
/* Reserved for future extensions */
#define TEA5767_RESERVED_MASK 0xff
...
...
@@ -220,19 +220,19 @@ static void set_radio_freq(struct i2c_client *c, unsigned int frq)
tuner_dbg
(
"TEA5767 radio HIGH LO inject xtal @ 13 MHz
\n
"
);
buffer
[
2
]
|=
TEA5767_HIGH_LO_INJECT
;
buffer
[
4
]
|=
TEA5767_PLLREF_ENABLE
;
div
=
(
frq
*
4000
/
16
+
700000
+
225000
+
25000
)
/
50000
;
div
=
(
frq
*
(
4000
/
16
)
+
700000
+
225000
+
25000
)
/
50000
;
break
;
case
TEA5767_LOW_LO_13MHz
:
tuner_dbg
(
"TEA5767 radio LOW LO inject xtal @ 13 MHz
\n
"
);
buffer
[
4
]
|=
TEA5767_PLLREF_ENABLE
;
div
=
(
frq
*
4000
/
16
-
700000
-
225000
+
25000
)
/
50000
;
div
=
(
frq
*
(
4000
/
16
)
-
700000
-
225000
+
25000
)
/
50000
;
break
;
case
TEA5767_LOW_LO_32768
:
tuner_dbg
(
"TEA5767 radio LOW LO inject xtal @ 32,768 MHz
\n
"
);
buffer
[
3
]
|=
TEA5767_XTAL_32768
;
/* const 700=4000*175 Khz - to adjust freq to right value */
div
=
((
frq
*
4000
/
16
-
700000
-
225000
)
+
16384
)
>>
15
;
div
=
((
frq
*
(
4000
/
16
)
-
700000
-
225000
)
+
16384
)
>>
15
;
break
;
case
TEA5767_HIGH_LO_32768
:
default:
...
...
@@ -350,8 +350,8 @@ int tea5767_tuner_init(struct i2c_client *c)
tuner_info
(
"type set to %d (%s)
\n
"
,
t
->
type
,
"Philips TEA5767HN FM Radio"
);
strlcpy
(
c
->
name
,
"tea5767"
,
sizeof
(
c
->
name
));
t
->
tv_freq
=
set_tv_freq
;
t
->
radio_freq
=
set_radio_freq
;
t
->
set_
tv_freq
=
set_tv_freq
;
t
->
set_
radio_freq
=
set_radio_freq
;
t
->
has_signal
=
tea5767_signal
;
t
->
is_stereo
=
tea5767_stereo
;
t
->
standby
=
tea5767_standby
;
...
...
drivers/media/video/tuner-core.c
浏览文件 @
d669af9d
...
...
@@ -82,7 +82,7 @@ static void set_tv_freq(struct i2c_client *c, unsigned int freq)
tuner_warn
(
"tuner type not set
\n
"
);
return
;
}
if
(
NULL
==
t
->
tv_freq
)
{
if
(
NULL
==
t
->
set_
tv_freq
)
{
tuner_warn
(
"Tuner has no way to set tv freq
\n
"
);
return
;
}
...
...
@@ -90,8 +90,14 @@ static void set_tv_freq(struct i2c_client *c, unsigned int freq)
tuner_dbg
(
"TV freq (%d.%02d) out of range (%d-%d)
\n
"
,
freq
/
16
,
freq
%
16
*
100
/
16
,
tv_range
[
0
],
tv_range
[
1
]);
/* V4L2 spec: if the freq is not possible then the closest
possible value should be selected */
if
(
freq
<
tv_range
[
0
]
*
16
)
freq
=
tv_range
[
0
]
*
16
;
else
freq
=
tv_range
[
1
]
*
16
;
}
t
->
tv_freq
(
c
,
freq
);
t
->
set_
tv_freq
(
c
,
freq
);
}
static
void
set_radio_freq
(
struct
i2c_client
*
c
,
unsigned
int
freq
)
...
...
@@ -102,18 +108,23 @@ static void set_radio_freq(struct i2c_client *c, unsigned int freq)
tuner_warn
(
"tuner type not set
\n
"
);
return
;
}
if
(
NULL
==
t
->
radio_freq
)
{
if
(
NULL
==
t
->
set_
radio_freq
)
{
tuner_warn
(
"tuner has no way to set radio frequency
\n
"
);
return
;
}
if
(
freq
<
=
radio_range
[
0
]
*
16000
||
freq
>=
radio_range
[
1
]
*
16000
)
{
if
(
freq
<
radio_range
[
0
]
*
16000
||
freq
>
radio_range
[
1
]
*
16000
)
{
tuner_dbg
(
"radio freq (%d.%02d) out of range (%d-%d)
\n
"
,
freq
/
16000
,
freq
%
16000
*
100
/
16000
,
radio_range
[
0
],
radio_range
[
1
]);
/* V4L2 spec: if the freq is not possible then the closest
possible value should be selected */
if
(
freq
<
radio_range
[
0
]
*
16000
)
freq
=
radio_range
[
0
]
*
16000
;
else
freq
=
radio_range
[
1
]
*
16000
;
}
t
->
radio_freq
(
c
,
freq
);
return
;
t
->
set_radio_freq
(
c
,
freq
);
}
static
void
set_freq
(
struct
i2c_client
*
c
,
unsigned
long
freq
)
...
...
@@ -125,15 +136,16 @@ static void set_freq(struct i2c_client *c, unsigned long freq)
tuner_dbg
(
"radio freq set to %lu.%02lu
\n
"
,
freq
/
16000
,
freq
%
16000
*
100
/
16000
);
set_radio_freq
(
c
,
freq
);
t
->
radio_freq
=
freq
;
break
;
case
V4L2_TUNER_ANALOG_TV
:
case
V4L2_TUNER_DIGITAL_TV
:
tuner_dbg
(
"tv freq set to %lu.%02lu
\n
"
,
freq
/
16
,
freq
%
16
*
100
/
16
);
set_tv_freq
(
c
,
freq
);
t
->
tv_freq
=
freq
;
break
;
}
t
->
freq
=
freq
;
}
static
void
set_type
(
struct
i2c_client
*
c
,
unsigned
int
type
,
...
...
@@ -212,7 +224,7 @@ static void set_type(struct i2c_client *c, unsigned int type,
if
(
t
->
mode_mask
==
T_UNINITIALIZED
)
t
->
mode_mask
=
new_mode_mask
;
set_freq
(
c
,
t
->
freq
);
set_freq
(
c
,
(
V4L2_TUNER_RADIO
==
t
->
mode
)
?
t
->
radio_freq
:
t
->
tv_
freq
);
tuner_dbg
(
"%s %s I2C addr 0x%02x with type %d used for 0x%02x
\n
"
,
c
->
adapter
->
name
,
c
->
driver
->
driver
.
name
,
c
->
addr
<<
1
,
type
,
t
->
mode_mask
);
...
...
@@ -377,11 +389,11 @@ static void tuner_status(struct i2c_client *client)
default:
p
=
"undefined"
;
break
;
}
if
(
t
->
mode
==
V4L2_TUNER_RADIO
)
{
freq
=
t
->
freq
/
16000
;
freq_fraction
=
(
t
->
freq
%
16000
)
*
100
/
16000
;
freq
=
t
->
radio_
freq
/
16000
;
freq_fraction
=
(
t
->
radio_
freq
%
16000
)
*
100
/
16000
;
}
else
{
freq
=
t
->
freq
/
16
;
freq_fraction
=
(
t
->
freq
%
16
)
*
100
/
16
;
freq
=
t
->
tv_
freq
/
16
;
freq_fraction
=
(
t
->
tv_
freq
%
16
)
*
100
/
16
;
}
tuner_info
(
"Tuner mode: %s
\n
"
,
p
);
tuner_info
(
"Frequency: %lu.%02lu MHz
\n
"
,
freq
,
freq_fraction
);
...
...
@@ -456,7 +468,7 @@ static int tuner_attach(struct i2c_adapter *adap, int addr, int kind)
t
->
type
=
TUNER_TEA5767
;
t
->
mode_mask
=
T_RADIO
;
t
->
mode
=
T_STANDBY
;
t
->
freq
=
87
.
5
*
16
;
/* Sets freq to FM range */
t
->
radio_freq
=
87
.
5
*
16000
;
/* Sets freq to FM range */
default_mode_mask
&=
~
T_RADIO
;
goto
register_client
;
...
...
@@ -469,7 +481,8 @@ static int tuner_attach(struct i2c_adapter *adap, int addr, int kind)
if
(
default_mode_mask
!=
T_UNINITIALIZED
)
{
tuner_dbg
(
"Setting mode_mask to 0x%02x
\n
"
,
default_mode_mask
);
t
->
mode_mask
=
default_mode_mask
;
t
->
freq
=
400
*
16
;
/* Sets freq to VHF High */
t
->
tv_freq
=
400
*
16
;
/* Sets freq to VHF High */
t
->
radio_freq
=
87
.
5
*
16000
;
/* Sets freq to FM range */
default_mode_mask
=
T_UNINITIALIZED
;
}
...
...
@@ -565,16 +578,18 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg)
set_addr
(
client
,
(
struct
tuner_setup
*
)
arg
);
break
;
case
AUDC_SET_RADIO
:
set_mode
(
client
,
t
,
V4L2_TUNER_RADIO
,
"AUDC_SET_RADIO"
);
if
(
set_mode
(
client
,
t
,
V4L2_TUNER_RADIO
,
"AUDC_SET_RADIO"
)
==
EINVAL
)
return
0
;
if
(
t
->
radio_freq
)
set_freq
(
client
,
t
->
radio_freq
);
break
;
case
TUNER_SET_STANDBY
:
{
if
(
check_mode
(
t
,
"TUNER_SET_STANDBY"
)
==
EINVAL
)
return
0
;
if
(
t
->
standby
)
t
->
standby
(
client
);
break
;
}
case
VIDIOCSAUDIO
:
if
(
check_mode
(
t
,
"VIDIOCSAUDIO"
)
==
EINVAL
)
return
0
;
...
...
@@ -583,7 +598,6 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg)
/* Should be implemented, since bttv calls it */
tuner_dbg
(
"VIDIOCSAUDIO not implemented.
\n
"
);
break
;
/* --- v4l ioctls --- */
/* take care: bttv does userspace copying, we'll get a
...
...
@@ -609,8 +623,8 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg)
if
(
vc
->
norm
<
ARRAY_SIZE
(
map
))
t
->
std
=
map
[
vc
->
norm
];
tuner_fixup_std
(
t
);
if
(
t
->
freq
)
set_tv_freq
(
client
,
t
->
freq
);
if
(
t
->
tv_
freq
)
set_tv_freq
(
client
,
t
->
tv_
freq
);
return
0
;
}
case
VIDIOCSFREQ
:
...
...
@@ -684,15 +698,14 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg)
t
->
std
=
*
id
;
tuner_fixup_std
(
t
);
if
(
t
->
freq
)
set_freq
(
client
,
t
->
freq
);
if
(
t
->
tv_
freq
)
set_freq
(
client
,
t
->
tv_
freq
);
break
;
}
case
VIDIOC_S_FREQUENCY
:
{
struct
v4l2_frequency
*
f
=
arg
;
t
->
freq
=
f
->
frequency
;
switch_v4l2
();
if
(
V4L2_TUNER_RADIO
==
f
->
type
&&
V4L2_TUNER_RADIO
!=
t
->
mode
)
{
...
...
@@ -700,7 +713,7 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg)
==
EINVAL
)
return
0
;
}
set_freq
(
client
,
t
->
freq
);
set_freq
(
client
,
f
->
frequency
);
break
;
}
...
...
@@ -712,7 +725,8 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg)
return
0
;
switch_v4l2
();
f
->
type
=
t
->
mode
;
f
->
frequency
=
t
->
freq
;
f
->
frequency
=
(
V4L2_TUNER_RADIO
==
t
->
mode
)
?
t
->
radio_freq
:
t
->
tv_freq
;
break
;
}
case
VIDIOC_G_TUNER
:
...
...
@@ -763,7 +777,7 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg)
if
(
V4L2_TUNER_RADIO
==
t
->
mode
)
{
t
->
audmode
=
tuner
->
audmode
;
set_radio_freq
(
client
,
t
->
freq
);
set_radio_freq
(
client
,
t
->
radio_
freq
);
}
break
;
}
...
...
@@ -791,8 +805,13 @@ static int tuner_resume(struct device *dev)
struct
tuner
*
t
=
i2c_get_clientdata
(
c
);
tuner_dbg
(
"resume
\n
"
);
if
(
t
->
freq
)
set_freq
(
c
,
t
->
freq
);
if
(
V4L2_TUNER_RADIO
==
t
->
mode
)
{
if
(
t
->
radio_freq
)
set_freq
(
c
,
t
->
radio_freq
);
}
else
{
if
(
t
->
tv_freq
)
set_freq
(
c
,
t
->
tv_freq
);
}
return
0
;
}
...
...
drivers/media/video/tuner-simple.c
浏览文件 @
d669af9d
此差异已折叠。
点击以展开。
drivers/media/video/tuner-types.c
0 → 100644
浏览文件 @
d669af9d
此差异已折叠。
点击以展开。
drivers/media/video/tveeprom.c
浏览文件 @
d669af9d
...
...
@@ -190,7 +190,7 @@ hauppauge_tuner[] =
{
TUNER_LG_PAL_NEW_TAPC
,
"TCL 2002MI 3"
},
{
TUNER_TCL_2002N
,
"TCL 2002N 6A"
},
{
TUNER_PHILIPS_FM1236_MK3
,
"Philips FQ1236 MK3"
},
{
TUNER_
ABSENT
,
"Samsung TCPN 2121P30A"
},
{
TUNER_
SAMSUNG_TCPN_2121P30A
,
"Samsung TCPN 2121P30A"
},
{
TUNER_ABSENT
,
"Samsung TCPE 4121P30A"
},
{
TUNER_PHILIPS_FM1216ME_MK3
,
"TCL MFPE05 2"
},
/* 90-99 */
...
...
drivers/media/video/tvp5150.c
浏览文件 @
d669af9d
...
...
@@ -634,7 +634,7 @@ struct i2c_vbi_ram_value {
unsigned
char
values
[
26
];
};
struct
i2c_vbi_ram_value
vbi_ram_default
[]
=
st
atic
st
ruct
i2c_vbi_ram_value
vbi_ram_default
[]
=
{
{
0x010
,
/* WST SECAM 6 */
{
0xaa
,
0xaa
,
0xff
,
0xff
,
0xe7
,
0x2e
,
0x20
,
0x26
,
0xe6
,
0xb4
,
0x0e
,
0x0
,
0x0
,
0x0
,
0x10
,
0x0
}
...
...
drivers/media/video/v4l2-common.c
浏览文件 @
d669af9d
...
...
@@ -306,6 +306,7 @@ static const char *v4l2_int_ioctls[] = {
#endif
[
_IOC_NR
(
AUDC_SET_RADIO
)]
=
"AUDC_SET_RADIO"
,
[
_IOC_NR
(
AUDC_SET_INPUT
)]
=
"AUDC_SET_INPUT"
,
[
_IOC_NR
(
MSP_SET_MATRIX
)]
=
"MSP_SET_MATRIX"
,
[
_IOC_NR
(
TUNER_SET_TYPE_ADDR
)]
=
"TUNER_SET_TYPE_ADDR"
,
[
_IOC_NR
(
TUNER_SET_STANDBY
)]
=
"TUNER_SET_STANDBY"
,
...
...
drivers/media/video/videodev.c
浏览文件 @
d669af9d
...
...
@@ -29,7 +29,6 @@
#include <linux/devfs_fs_kernel.h>
#include <asm/uaccess.h>
#include <asm/system.h>
#include <asm/semaphore.h>
#include <linux/videodev.h>
...
...
@@ -83,7 +82,7 @@ static struct class video_class = {
*/
static
struct
video_device
*
video_device
[
VIDEO_NUM_DEVICES
];
static
DE
CLAR
E_MUTEX
(
videodev_lock
);
static
DE
FIN
E_MUTEX
(
videodev_lock
);
struct
video_device
*
video_devdata
(
struct
file
*
file
)
{
...
...
@@ -102,15 +101,15 @@ static int video_open(struct inode *inode, struct file *file)
if
(
minor
>=
VIDEO_NUM_DEVICES
)
return
-
ENODEV
;
down
(
&
videodev_lock
);
mutex_lock
(
&
videodev_lock
);
vfl
=
video_device
[
minor
];
if
(
vfl
==
NULL
)
{
up
(
&
videodev_lock
);
mutex_unlock
(
&
videodev_lock
);
request_module
(
"char-major-%d-%d"
,
VIDEO_MAJOR
,
minor
);
down
(
&
videodev_lock
);
mutex_lock
(
&
videodev_lock
);
vfl
=
video_device
[
minor
];
if
(
vfl
==
NULL
)
{
up
(
&
videodev_lock
);
mutex_unlock
(
&
videodev_lock
);
return
-
ENODEV
;
}
}
...
...
@@ -123,7 +122,7 @@ static int video_open(struct inode *inode, struct file *file)
file
->
f_op
=
fops_get
(
old_fops
);
}
fops_put
(
old_fops
);
up
(
&
videodev_lock
);
mutex_unlock
(
&
videodev_lock
);
return
err
;
}
...
...
@@ -304,12 +303,12 @@ int video_register_device(struct video_device *vfd, int type, int nr)
}
/* pick a minor number */
down
(
&
videodev_lock
);
mutex_lock
(
&
videodev_lock
);
if
(
nr
>=
0
&&
nr
<
end
-
base
)
{
/* use the one the driver asked for */
i
=
base
+
nr
;
if
(
NULL
!=
video_device
[
i
])
{
up
(
&
videodev_lock
);
mutex_unlock
(
&
videodev_lock
);
return
-
ENFILE
;
}
}
else
{
...
...
@@ -318,13 +317,13 @@ int video_register_device(struct video_device *vfd, int type, int nr)
if
(
NULL
==
video_device
[
i
])
break
;
if
(
i
==
end
)
{
up
(
&
videodev_lock
);
mutex_unlock
(
&
videodev_lock
);
return
-
ENFILE
;
}
}
video_device
[
i
]
=
vfd
;
vfd
->
minor
=
i
;
up
(
&
videodev_lock
);
mutex_unlock
(
&
videodev_lock
);
sprintf
(
vfd
->
devfs_name
,
"v4l/%s%d"
,
name_base
,
i
-
base
);
devfs_mk_cdev
(
MKDEV
(
VIDEO_MAJOR
,
vfd
->
minor
),
...
...
@@ -362,14 +361,14 @@ int video_register_device(struct video_device *vfd, int type, int nr)
void
video_unregister_device
(
struct
video_device
*
vfd
)
{
down
(
&
videodev_lock
);
mutex_lock
(
&
videodev_lock
);
if
(
video_device
[
vfd
->
minor
]
!=
vfd
)
panic
(
"videodev: bad unregister"
);
devfs_remove
(
vfd
->
devfs_name
);
video_device
[
vfd
->
minor
]
=
NULL
;
class_device_unregister
(
&
vfd
->
class_dev
);
up
(
&
videodev_lock
);
mutex_unlock
(
&
videodev_lock
);
}
...
...
include/linux/i2c-id.h
浏览文件 @
d669af9d
...
...
@@ -104,6 +104,10 @@
#define I2C_DRIVERID_AKITAIOEXP 74
/* IO Expander on Sharp SL-C1000 */
#define I2C_DRIVERID_INFRARED 75
/* I2C InfraRed on Video boards */
#define I2C_DRIVERID_TVP5150 76
/* TVP5150 video decoder */
#define I2C_DRIVERID_WM8739 77
/* wm8739 audio processor */
#define I2C_DRIVERID_UPD64083 78
/* upd64083 video processor */
#define I2C_DRIVERID_UPD64031A 79
/* upd64031a video processor */
#define I2C_DRIVERID_SAA717X 80
/* saa717x video encoder */
#define I2C_DRIVERID_I2CDEV 900
#define I2C_DRIVERID_ARP 902
/* SMBus ARP Client */
...
...
include/media/tuner-types.h
0 → 100644
浏览文件 @
d669af9d
/*
* descriptions for simple tuners.
*/
#ifndef __TUNER_TYPES_H__
#define __TUNER_TYPES_H__
enum
param_type
{
TUNER_PARAM_TYPE_RADIO
,
\
TUNER_PARAM_TYPE_PAL
,
\
TUNER_PARAM_TYPE_SECAM
,
\
TUNER_PARAM_TYPE_NTSC
};
struct
tuner_range
{
unsigned
short
limit
;
unsigned
char
cb
;
};
struct
tuner_params
{
enum
param_type
type
;
/* Many Philips based tuners have a comment like this in their
* datasheet:
*
* For channel selection involving band switching, and to ensure
* smooth tuning to the desired channel without causing
* unnecessary charge pump action, it is recommended to consider
* the difference between wanted channel frequency and the
* current channel frequency. Unnecessary charge pump action
* will result in very low tuning voltage which may drive the
* oscillator to extreme conditions.
*
* Set cb_first_if_lower_freq to 1, if this check is
* required for this tuner.
*
* I tested this for PAL by first setting the TV frequency to
* 203 MHz and then switching to 96.6 MHz FM radio. The result was
* static unless the control byte was sent first.
*/
unsigned
int
cb_first_if_lower_freq
:
1
;
unsigned
char
config
;
/* to be moved into struct tuner_range for dvb-pll merge */
unsigned
int
count
;
struct
tuner_range
*
ranges
;
};
struct
tunertype
{
char
*
name
;
struct
tuner_params
*
params
;
};
extern
struct
tunertype
tuners
[];
extern
unsigned
const
int
tuner_count
;
#endif
include/media/tuner.h
浏览文件 @
d669af9d
...
...
@@ -23,6 +23,7 @@
#define _TUNER_H
#include <linux/videodev2.h>
#include <media/tuner-types.h>
#define ADDR_UNSET (255)
...
...
@@ -114,6 +115,7 @@
#define TUNER_PHILIPS_TUV1236D 68
/* ATI HDTV Wonder */
#define TUNER_TNF_5335MF 69
/* Sabrent Bt848 */
#define TUNER_SAMSUNG_TCPN_2121P30A 70
/* Hauppauge PVR-500MCE NTSC */
/* tv card specific */
#define TDA9887_PRESENT (1<<0)
...
...
@@ -177,7 +179,9 @@ struct tuner {
unsigned
int
mode
;
unsigned
int
mode_mask
;
/* Combination of allowable modes */
unsigned
int
freq
;
/* keep track of the current settings */
unsigned
int
tv_freq
;
/* keep track of the current settings */
unsigned
int
radio_freq
;
u16
last_div
;
unsigned
int
audmode
;
v4l2_std_id
std
;
...
...
@@ -195,8 +199,8 @@ struct tuner {
unsigned
int
sgIF
;
/* function ptrs */
void
(
*
tv_freq
)(
struct
i2c_client
*
c
,
unsigned
int
freq
);
void
(
*
radio_freq
)(
struct
i2c_client
*
c
,
unsigned
int
freq
);
void
(
*
set_
tv_freq
)(
struct
i2c_client
*
c
,
unsigned
int
freq
);
void
(
*
set_
radio_freq
)(
struct
i2c_client
*
c
,
unsigned
int
freq
);
int
(
*
has_signal
)(
struct
i2c_client
*
c
);
int
(
*
is_stereo
)(
struct
i2c_client
*
c
);
void
(
*
standby
)(
struct
i2c_client
*
c
);
...
...
include/media/v4l2-common.h
浏览文件 @
d669af9d
...
...
@@ -120,6 +120,13 @@ enum v4l2_chip_ident {
/* select from TV,radio,extern,MUTE */
#define AUDC_SET_INPUT _IOW('d',89,int)
/* msp3400 ioctl: will be removed in the near future */
struct
msp_matrix
{
int
input
;
int
output
;
};
#define MSP_SET_MATRIX _IOW('m',17,struct msp_matrix)
/* tuner ioctls */
/* Sets tuner type and its I2C addr */
#define TUNER_SET_TYPE_ADDR _IOW('d',90,int)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录