Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
5e16e3f0
Commit
5e16e3f0
authored
Jul 22, 2007
by
Len Brown
Browse files
Options
Browse Files
Download
Plain Diff
Pull video into release branch
parents
dcb76f88
f70ac0e9
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
93 additions
and
39 deletions
+93
-39
drivers/acpi/Kconfig
drivers/acpi/Kconfig
+1
-1
drivers/acpi/video.c
drivers/acpi/video.c
+82
-38
drivers/video/Kconfig
drivers/video/Kconfig
+7
-0
drivers/video/Makefile
drivers/video/Makefile
+3
-0
No files found.
drivers/acpi/Kconfig
View file @
5e16e3f0
...
...
@@ -118,7 +118,7 @@ config ACPI_BUTTON
config ACPI_VIDEO
tristate "Video"
depends on X86 && BACKLIGHT_CLASS_DEVICE
depends on X86 && BACKLIGHT_CLASS_DEVICE
&& VIDEO_OUTPUT_CONTROL
help
This driver implement the ACPI Extensions For Display Adapters
for integrated graphics devices on motherboard, as specified in
...
...
drivers/acpi/video.c
View file @
5e16e3f0
...
...
@@ -33,6 +33,7 @@
#include <linux/seq_file.h>
#include <linux/backlight.h>
#include <linux/video_output.h>
#include <asm/uaccess.h>
#include <acpi/acpi_bus.h>
...
...
@@ -169,6 +170,7 @@ struct acpi_video_device {
struct
acpi_device
*
dev
;
struct
acpi_video_device_brightness
*
brightness
;
struct
backlight_device
*
backlight
;
struct
output_device
*
output_dev
;
};
/* bus */
...
...
@@ -272,6 +274,10 @@ static int acpi_video_get_next_level(struct acpi_video_device *device,
u32
level_current
,
u32
event
);
static
void
acpi_video_switch_brightness
(
struct
acpi_video_device
*
device
,
int
event
);
static
int
acpi_video_device_get_state
(
struct
acpi_video_device
*
device
,
unsigned
long
*
state
);
static
int
acpi_video_output_get
(
struct
output_device
*
od
);
static
int
acpi_video_device_set_state
(
struct
acpi_video_device
*
device
,
int
state
);
/*backlight device sysfs support*/
static
int
acpi_video_get_brightness
(
struct
backlight_device
*
bd
)
...
...
@@ -297,6 +303,28 @@ static struct backlight_ops acpi_backlight_ops = {
.
update_status
=
acpi_video_set_brightness
,
};
/*video output device sysfs support*/
static
int
acpi_video_output_get
(
struct
output_device
*
od
)
{
unsigned
long
state
;
struct
acpi_video_device
*
vd
=
(
struct
acpi_video_device
*
)
class_get_devdata
(
&
od
->
class_dev
);
acpi_video_device_get_state
(
vd
,
&
state
);
return
(
int
)
state
;
}
static
int
acpi_video_output_set
(
struct
output_device
*
od
)
{
unsigned
long
state
=
od
->
request_state
;
struct
acpi_video_device
*
vd
=
(
struct
acpi_video_device
*
)
class_get_devdata
(
&
od
->
class_dev
);
return
acpi_video_device_set_state
(
vd
,
state
);
}
static
struct
output_properties
acpi_output_properties
=
{
.
set_state
=
acpi_video_output_set
,
.
get_status
=
acpi_video_output_get
,
};
/* --------------------------------------------------------------------------
Video Management
-------------------------------------------------------------------------- */
...
...
@@ -531,7 +559,6 @@ acpi_video_bus_DOS(struct acpi_video_bus *video, int bios_flag, int lcd_flag)
static
void
acpi_video_device_find_cap
(
struct
acpi_video_device
*
device
)
{
acpi_integer
status
;
acpi_handle
h_dummy1
;
int
i
;
u32
max_level
=
0
;
...
...
@@ -565,50 +592,55 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
device
->
cap
.
_DSS
=
1
;
}
status
=
acpi_video_device_lcd_query_levels
(
device
,
&
obj
);
if
(
obj
&&
obj
->
type
==
ACPI_TYPE_PACKAGE
&&
obj
->
package
.
count
>=
2
)
{
int
count
=
0
;
union
acpi_object
*
o
;
br
=
kzalloc
(
sizeof
(
*
br
),
GFP_KERNEL
);
if
(
!
br
)
{
printk
(
KERN_ERR
"can't allocate memory
\n
"
);
}
else
{
br
->
levels
=
kmalloc
(
obj
->
package
.
count
*
sizeof
*
(
br
->
levels
),
GFP_KERNEL
);
if
(
!
br
->
levels
)
goto
out
;
for
(
i
=
0
;
i
<
obj
->
package
.
count
;
i
++
)
{
o
=
(
union
acpi_object
*
)
&
obj
->
package
.
elements
[
i
];
if
(
o
->
type
!=
ACPI_TYPE_INTEGER
)
{
printk
(
KERN_ERR
PREFIX
"Invalid data
\n
"
);
continue
;
}
br
->
levels
[
count
]
=
(
u32
)
o
->
integer
.
value
;
if
(
br
->
levels
[
count
]
>
max_level
)
max_level
=
br
->
levels
[
count
];
count
++
;
}
out:
if
(
count
<
2
)
{
kfree
(
br
->
levels
);
kfree
(
br
);
if
(
ACPI_SUCCESS
(
acpi_video_device_lcd_query_levels
(
device
,
&
obj
)))
{
if
(
obj
->
package
.
count
>=
2
)
{
int
count
=
0
;
union
acpi_object
*
o
;
br
=
kzalloc
(
sizeof
(
*
br
),
GFP_KERNEL
);
if
(
!
br
)
{
printk
(
KERN_ERR
"can't allocate memory
\n
"
);
}
else
{
br
->
count
=
count
;
device
->
brightness
=
br
;
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"found %d brightness levels
\n
"
,
count
));
br
->
levels
=
kmalloc
(
obj
->
package
.
count
*
sizeof
*
(
br
->
levels
),
GFP_KERNEL
);
if
(
!
br
->
levels
)
goto
out
;
for
(
i
=
0
;
i
<
obj
->
package
.
count
;
i
++
)
{
o
=
(
union
acpi_object
*
)
&
obj
->
package
.
elements
[
i
];
if
(
o
->
type
!=
ACPI_TYPE_INTEGER
)
{
printk
(
KERN_ERR
PREFIX
"Invalid data
\n
"
);
continue
;
}
br
->
levels
[
count
]
=
(
u32
)
o
->
integer
.
value
;
if
(
br
->
levels
[
count
]
>
max_level
)
max_level
=
br
->
levels
[
count
];
count
++
;
}
out:
if
(
count
<
2
)
{
kfree
(
br
->
levels
);
kfree
(
br
);
}
else
{
br
->
count
=
count
;
device
->
brightness
=
br
;
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"found %d brightness levels
\n
"
,
count
));
}
}
}
}
else
{
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Could not query available LCD brightness level
\n
"
));
}
kfree
(
obj
);
if
(
device
->
cap
.
_BCL
&&
device
->
cap
.
_BCM
&&
device
->
cap
.
_BQC
){
if
(
device
->
cap
.
_BCL
&&
device
->
cap
.
_BCM
&&
device
->
cap
.
_BQC
&&
max_level
>
0
){
unsigned
long
tmp
;
static
int
count
=
0
;
char
*
name
;
...
...
@@ -626,6 +658,17 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
kfree
(
name
);
}
if
(
device
->
cap
.
_DCS
&&
device
->
cap
.
_DSS
){
static
int
count
=
0
;
char
*
name
;
name
=
kzalloc
(
MAX_NAME_LEN
,
GFP_KERNEL
);
if
(
!
name
)
return
;
sprintf
(
name
,
"acpi_video%d"
,
count
++
);
device
->
output_dev
=
video_output_register
(
name
,
NULL
,
device
,
&
acpi_output_properties
);
kfree
(
name
);
}
return
;
}
...
...
@@ -1669,6 +1712,7 @@ static int acpi_video_bus_put_one_device(struct acpi_video_device *device)
ACPI_DEVICE_NOTIFY
,
acpi_video_device_notify
);
backlight_device_unregister
(
device
->
backlight
);
video_output_unregister
(
device
->
output_dev
);
return
0
;
}
...
...
drivers/video/Kconfig
View file @
5e16e3f0
...
...
@@ -12,6 +12,13 @@ config VGASTATE
tristate
default n
config VIDEO_OUTPUT_CONTROL
tristate "Lowlevel video output switch controls"
default m
help
This framework adds support for low-level control of the video
output switch.
config FB
tristate "Support for frame buffer devices"
---help---
...
...
drivers/video/Makefile
View file @
5e16e3f0
...
...
@@ -123,3 +123,6 @@ obj-$(CONFIG_FB_OF) += offb.o
# the test framebuffer is last
obj-$(CONFIG_FB_VIRTUAL)
+=
vfb.o
#video output switch sysfs driver
obj-$(CONFIG_VIDEO_OUTPUT_CONTROL)
+=
output.o
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