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
7e23772f
Commit
7e23772f
authored
Feb 02, 2007
by
Len Brown
Browse files
Options
Browse Files
Download
Plain Diff
Pull video into test branch
parents
bcd8b54f
2f3d000a
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
70 additions
and
3 deletions
+70
-3
drivers/acpi/Kconfig
drivers/acpi/Kconfig
+1
-1
drivers/acpi/video.c
drivers/acpi/video.c
+69
-2
No files found.
drivers/acpi/Kconfig
View file @
7e23772f
...
...
@@ -107,7 +107,7 @@ config ACPI_BUTTON
config ACPI_VIDEO
tristate "Video"
depends on X86
depends on X86
&& BACKLIGHT_CLASS_DEVICE
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 @
7e23772f
...
...
@@ -32,6 +32,7 @@
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <linux/backlight.h>
#include <asm/uaccess.h>
#include <acpi/acpi_bus.h>
...
...
@@ -56,6 +57,7 @@
#define ACPI_VIDEO_HEAD_INVALID (~0u - 1)
#define ACPI_VIDEO_HEAD_END (~0u)
#define MAX_NAME_LEN 20
#define _COMPONENT ACPI_VIDEO_COMPONENT
ACPI_MODULE_NAME
(
"acpi_video"
)
...
...
@@ -142,11 +144,11 @@ struct acpi_video_device_cap {
u8
_ADR
:
1
;
/*Return the unique ID */
u8
_BCL
:
1
;
/*Query list of brightness control levels supported */
u8
_BCM
:
1
;
/*Set the brightness level */
u8
_BQC
:
1
;
/* Get current brightness level */
u8
_DDC
:
1
;
/*Return the EDID for this device */
u8
_DCS
:
1
;
/*Return status of output device */
u8
_DGS
:
1
;
/*Query graphics state */
u8
_DSS
:
1
;
/*Device state set */
u8
_reserved
:
1
;
};
struct
acpi_video_device_brightness
{
...
...
@@ -163,6 +165,8 @@ struct acpi_video_device {
struct
acpi_video_bus
*
video
;
struct
acpi_device
*
dev
;
struct
acpi_video_device_brightness
*
brightness
;
struct
backlight_device
*
backlight
;
struct
backlight_properties
*
data
;
};
/* bus */
...
...
@@ -257,11 +261,35 @@ static void acpi_video_device_bind(struct acpi_video_bus *video,
struct
acpi_video_device
*
device
);
static
int
acpi_video_device_enumerate
(
struct
acpi_video_bus
*
video
);
static
int
acpi_video_switch_output
(
struct
acpi_video_bus
*
video
,
int
event
);
static
int
acpi_video_device_lcd_set_level
(
struct
acpi_video_device
*
device
,
int
level
);
static
int
acpi_video_device_lcd_get_level_current
(
struct
acpi_video_device
*
device
,
unsigned
long
*
level
);
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
);
/*backlight device sysfs support*/
static
int
acpi_video_get_brightness
(
struct
backlight_device
*
bd
)
{
unsigned
long
cur_level
;
struct
acpi_video_device
*
vd
=
(
struct
acpi_video_device
*
)
class_get_devdata
(
&
bd
->
class_dev
);
acpi_video_device_lcd_get_level_current
(
vd
,
&
cur_level
);
return
(
int
)
cur_level
;
}
static
int
acpi_video_set_brightness
(
struct
backlight_device
*
bd
)
{
int
request_level
=
bd
->
props
->
brightness
;
struct
acpi_video_device
*
vd
=
(
struct
acpi_video_device
*
)
class_get_devdata
(
&
bd
->
class_dev
);
acpi_video_device_lcd_set_level
(
vd
,
request_level
);
return
0
;
}
/* --------------------------------------------------------------------------
Video Management
-------------------------------------------------------------------------- */
...
...
@@ -499,6 +527,7 @@ 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
;
union
acpi_object
*
obj
=
NULL
;
struct
acpi_video_device_brightness
*
br
=
NULL
;
...
...
@@ -514,6 +543,8 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
if
(
ACPI_SUCCESS
(
acpi_get_handle
(
device
->
dev
->
handle
,
"_BCM"
,
&
h_dummy1
)))
{
device
->
cap
.
_BCM
=
1
;
}
if
(
ACPI_SUCCESS
(
acpi_get_handle
(
device
->
dev
->
handle
,
"_BQC"
,
&
h_dummy1
)))
device
->
cap
.
_BQC
=
1
;
if
(
ACPI_SUCCESS
(
acpi_get_handle
(
device
->
dev
->
handle
,
"_DDC"
,
&
h_dummy1
)))
{
device
->
cap
.
_DDC
=
1
;
}
...
...
@@ -550,6 +581,8 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
continue
;
}
br
->
levels
[
count
]
=
(
u32
)
o
->
integer
.
value
;
if
(
br
->
levels
[
count
]
>
max_level
)
max_level
=
br
->
levels
[
count
];
count
++
;
}
out:
...
...
@@ -568,6 +601,37 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
kfree
(
obj
);
if
(
device
->
cap
.
_BCL
&&
device
->
cap
.
_BCM
&&
device
->
cap
.
_BQC
){
unsigned
long
tmp
;
static
int
count
=
0
;
char
*
name
;
struct
backlight_properties
*
acpi_video_data
;
name
=
kzalloc
(
MAX_NAME_LEN
,
GFP_KERNEL
);
if
(
!
name
)
return
;
acpi_video_data
=
kzalloc
(
sizeof
(
struct
backlight_properties
),
GFP_KERNEL
);
if
(
!
acpi_video_data
){
kfree
(
name
);
return
;
}
acpi_video_data
->
owner
=
THIS_MODULE
;
acpi_video_data
->
get_brightness
=
acpi_video_get_brightness
;
acpi_video_data
->
update_status
=
acpi_video_set_brightness
;
sprintf
(
name
,
"acpi_video%d"
,
count
++
);
device
->
data
=
acpi_video_data
;
acpi_video_data
->
max_brightness
=
max_level
;
acpi_video_device_lcd_get_level_current
(
device
,
&
tmp
);
acpi_video_data
->
brightness
=
(
int
)
tmp
;
device
->
backlight
=
backlight_device_register
(
name
,
NULL
,
device
,
acpi_video_data
);
kfree
(
name
);
}
return
;
}
...
...
@@ -1588,7 +1652,10 @@ static int acpi_video_bus_put_one_device(struct acpi_video_device *device)
status
=
acpi_remove_notify_handler
(
device
->
dev
->
handle
,
ACPI_DEVICE_NOTIFY
,
acpi_video_device_notify
);
if
(
device
->
backlight
){
backlight_device_unregister
(
device
->
backlight
);
kfree
(
device
->
data
);
}
return
0
;
}
...
...
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