Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
274ec7a8
Commit
274ec7a8
authored
Feb 03, 2007
by
Len Brown
Browse files
Options
Browse Files
Download
Plain Diff
Pull output-switch into test branch
parents
6b259707
b03637b8
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
205 additions
and
0 deletions
+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
No files found.
Documentation/video-output.txt
0 → 100644
View file @
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
View file @
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
View file @
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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment