Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
274ec7a8
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
274ec7a8
编写于
2月 03, 2007
作者:
L
Len Brown
浏览文件
操作
浏览文件
下载
差异文件
Pull output-switch into test branch
上级
6b259707
b03637b8
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
205 addition
and
0 deletion
+205
-0
Documentation/video-output.txt
Documentation/video-output.txt
+34
-0
drivers/video/output.c
drivers/video/output.c
+129
-0
include/linux/video_output.h
include/linux/video_output.h
+42
-0
未找到文件。
Documentation/video-output.txt
0 → 100644
浏览文件 @
274ec7a8
Video Output Switcher Control
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2006 luming.yu@intel.com
The output sysfs class driver provides an abstract video output layer that
can be used to hook platform specific methods to enable/disable video output
device through common sysfs interface. For example, on my IBM ThinkPad T42
laptop, The ACPI video driver registered its output devices and read/write
method for 'state' with output sysfs class. The user interface under sysfs is:
linux:/sys/class/video_output # tree .
.
|-- CRT0
| |-- device -> ../../../devices/pci0000:00/0000:00:01.0
| |-- state
| |-- subsystem -> ../../../class/video_output
| `-- uevent
|-- DVI0
| |-- device -> ../../../devices/pci0000:00/0000:00:01.0
| |-- state
| |-- subsystem -> ../../../class/video_output
| `-- uevent
|-- LCD0
| |-- device -> ../../../devices/pci0000:00/0000:00:01.0
| |-- state
| |-- subsystem -> ../../../class/video_output
| `-- uevent
`-- TV0
|-- device -> ../../../devices/pci0000:00/0000:00:01.0
|-- state
|-- subsystem -> ../../../class/video_output
`-- uevent
drivers/video/output.c
0 → 100644
浏览文件 @
274ec7a8
/*
* output.c - Display Output Switch driver
*
* Copyright (C) 2006 Luming Yu <luming.yu@intel.com>
*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
#include <linux/module.h>
#include <linux/video_output.h>
#include <linux/err.h>
#include <linux/ctype.h>
MODULE_DESCRIPTION
(
"Display Output Switcher Lowlevel Control Abstraction"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_AUTHOR
(
"Luming Yu <luming.yu@intel.com>"
);
static
ssize_t
video_output_show_state
(
struct
class_device
*
dev
,
char
*
buf
)
{
ssize_t
ret_size
=
0
;
struct
output_device
*
od
=
to_output_device
(
dev
);
if
(
od
->
props
)
ret_size
=
sprintf
(
buf
,
"%.8x
\n
"
,
od
->
props
->
get_status
(
od
));
return
ret_size
;
}
static
ssize_t
video_output_store_state
(
struct
class_device
*
dev
,
const
char
*
buf
,
size_t
count
)
{
char
*
endp
;
struct
output_device
*
od
=
to_output_device
(
dev
);
int
request_state
=
simple_strtoul
(
buf
,
&
endp
,
0
);
size_t
size
=
endp
-
buf
;
if
(
*
endp
&&
isspace
(
*
endp
))
size
++
;
if
(
size
!=
count
)
return
-
EINVAL
;
if
(
od
->
props
)
{
od
->
request_state
=
request_state
;
od
->
props
->
set_state
(
od
);
}
return
count
;
}
static
void
video_output_class_release
(
struct
class_device
*
dev
)
{
struct
output_device
*
od
=
to_output_device
(
dev
);
kfree
(
od
);
}
static
struct
class_device_attribute
video_output_attributes
[]
=
{
__ATTR
(
state
,
0644
,
video_output_show_state
,
video_output_store_state
),
__ATTR_NULL
,
};
static
struct
class
video_output_class
=
{
.
name
=
"video_output"
,
.
release
=
video_output_class_release
,
.
class_dev_attrs
=
video_output_attributes
,
};
struct
output_device
*
video_output_register
(
const
char
*
name
,
struct
device
*
dev
,
void
*
devdata
,
struct
output_properties
*
op
)
{
struct
output_device
*
new_dev
;
int
ret_code
=
0
;
new_dev
=
kzalloc
(
sizeof
(
struct
output_device
),
GFP_KERNEL
);
if
(
!
new_dev
)
{
ret_code
=
-
ENOMEM
;
goto
error_return
;
}
new_dev
->
props
=
op
;
new_dev
->
class_dev
.
class
=
&
video_output_class
;
new_dev
->
class_dev
.
dev
=
dev
;
strlcpy
(
new_dev
->
class_dev
.
class_id
,
name
,
KOBJ_NAME_LEN
);
class_set_devdata
(
&
new_dev
->
class_dev
,
devdata
);
ret_code
=
class_device_register
(
&
new_dev
->
class_dev
);
if
(
ret_code
)
{
kfree
(
new_dev
);
goto
error_return
;
}
return
new_dev
;
error_return:
return
ERR_PTR
(
ret_code
);
}
EXPORT_SYMBOL
(
video_output_register
);
void
video_output_unregister
(
struct
output_device
*
dev
)
{
if
(
!
dev
)
return
;
class_device_unregister
(
&
dev
->
class_dev
);
}
EXPORT_SYMBOL
(
video_output_unregister
);
static
void
__exit
video_output_class_exit
(
void
)
{
class_unregister
(
&
video_output_class
);
}
static
int
__init
video_output_class_init
(
void
)
{
return
class_register
(
&
video_output_class
);
}
postcore_initcall
(
video_output_class_init
);
module_exit
(
video_output_class_exit
);
include/linux/video_output.h
0 → 100644
浏览文件 @
274ec7a8
/*
*
* Copyright (C) 2006 Luming Yu <luming.yu@intel.com>
*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
#ifndef _LINUX_VIDEO_OUTPUT_H
#define _LINUX_VIDEO_OUTPUT_H
#include <linux/device.h>
struct
output_device
;
struct
output_properties
{
int
(
*
set_state
)(
struct
output_device
*
);
int
(
*
get_status
)(
struct
output_device
*
);
};
struct
output_device
{
int
request_state
;
struct
output_properties
*
props
;
struct
class_device
class_dev
;
};
#define to_output_device(obj) container_of(obj, struct output_device, class_dev)
struct
output_device
*
video_output_register
(
const
char
*
name
,
struct
device
*
dev
,
void
*
devdata
,
struct
output_properties
*
op
);
void
video_output_unregister
(
struct
output_device
*
dev
);
#endif
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录