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
ab540144
Commit
ab540144
authored
Sep 30, 2003
by
Len Brown
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[ACPI] acpi4asus-0.25-0.26.diff (Karol Kozimor)
parent
85185484
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
96 additions
and
91 deletions
+96
-91
drivers/acpi/asus_acpi.c
drivers/acpi/asus_acpi.c
+96
-91
No files found.
drivers/acpi/asus_acpi.c
View file @
ab540144
...
...
@@ -30,10 +30,6 @@
* add Fn key status
* Add mode selection on module loading (parameter) -> still necessary?
* Complete display switching -- may require dirty hacks?
* Complete support for Centrino laptops
* Reading certain fields (e.g. \SG66 in A2500H) consistently fails, while
* reading others (\BAOF, the same machine) succeeds. Why?
*
*/
#include <linux/config.h>
...
...
@@ -49,7 +45,7 @@
#include <acpi/acpi_drivers.h>
#include <acpi/acpi_bus.h>
#define ASUS_ACPI_VERSION "0.2
5
"
#define ASUS_ACPI_VERSION "0.2
6
"
#define PROC_ASUS "asus" //the directory
#define PROC_MLED "mled"
...
...
@@ -122,16 +118,18 @@ struct asus_hotk {
A2X
,
//A2500H
D1X
,
//D1
L1X
,
//L1400B
L2X
,
//L200D -> TODO check Q11 (Fn+F8)
L2X
,
//L200
0
D -> TODO check Q11 (Fn+F8)
// Calling this method simply hangs the
// computer, ISMI method hangs the laptop.
L3D
,
//L3400D
L3X
,
//L3C
L5X
,
//L5C TODO this model seems to have one more
// LED, add support
M2X
,
//M2400E
M3N
,
//M3700N, but also S1300N -> TODO WLED
S1X
,
//S1300A -> TODO special keys do not work ?
S2X
,
//S200 (J1 reported), Victor MP-XP7210
//TODO A1370D does not seem
s to have a
ATK device
//TODO A1370D does not seem
to have an
ATK device
// L8400 model doesn't have ATK
END_MODEL
}
model
;
//Models currently supported
...
...
@@ -180,6 +178,9 @@ static struct model_data model_conf[END_MODEL] = {
L3X_PREFIX
"_Q0F"
,
L3X_PREFIX
"_Q0E"
,
"SPLV"
,
"GPLV"
,
"
\\
BLVL"
,
"SDSP"
,
"
\\
_SB.PCI0.PCI1.VGAC.NMAP"
},
{
"L5X"
,
"MLED"
,
NULL
,
"WLED"
,
"WRED"
,
"
\\
Q0D"
,
"
\\
BAOF"
,
"
\\
Q0C"
,
"
\\
Q0B"
,
"SPLV"
,
"GPLV"
,
NULL
,
"SDSP"
,
"
\\
INFB"
},
{
"M2X"
,
"MLED"
,
NULL
,
"WLED"
,
NULL
,
"
\\
Q10"
,
"
\\
GP06"
,
"
\\
Q0E"
,
"
\\
Q0F"
,
"SPLV"
,
"GPLV"
,
NULL
,
"SDSP"
,
"
\\
INFB"
},
...
...
@@ -267,6 +268,7 @@ proc_read_info(char *page, char **start, off_t off, int count, int *eof,
void
*
data
)
{
int
len
=
0
;
int
sfun
;
struct
asus_hotk
*
hotk
=
(
struct
asus_hotk
*
)
data
;
char
buf
[
16
];
//enough for all info
/*
...
...
@@ -275,28 +277,27 @@ proc_read_info(char *page, char **start, off_t off, int count, int *eof,
*/
len
+=
sprintf
(
page
,
ACPI_HOTK_NAME
" "
ASUS_ACPI_VERSION
"
\n
"
);
len
+=
sprintf
(
page
+
len
,
"Model reference : %s
\n
"
,
len
+=
sprintf
(
page
+
len
,
"Model reference : %s
\n
"
,
hotk
->
methods
->
name
);
if
(
read_acpi_int
(
hotk
->
handle
,
"SFUN"
,
&
sfun
))
len
+=
sprintf
(
page
+
len
,
"SFUN value : 0x%04x
\n
"
,
sfun
);
if
(
asus_info
)
{
snprintf
(
buf
,
5
,
"%s"
,
asus_info
->
signature
);
len
+=
sprintf
(
page
+
len
,
"ACPI signature : %s
\n
"
,
buf
);
snprintf
(
buf
,
16
,
"%d"
,
asus_info
->
length
);
len
+=
sprintf
(
page
+
len
,
"Table length : %s
\n
"
,
buf
);
snprintf
(
buf
,
16
,
"%d"
,
asus_info
->
revision
);
len
+=
sprintf
(
page
+
len
,
"ACPI minor version : %s
\n
"
,
buf
);
len
+=
sprintf
(
page
+
len
,
"DSDT length : %s
\n
"
,
buf
);
snprintf
(
buf
,
16
,
"%d"
,
asus_info
->
checksum
);
len
+=
sprintf
(
page
+
len
,
"Checksum : %s
\n
"
,
buf
);
len
+=
sprintf
(
page
+
len
,
"DSDT checksum : %s
\n
"
,
buf
);
snprintf
(
buf
,
16
,
"%d"
,
asus_info
->
revision
);
len
+=
sprintf
(
page
+
len
,
"DSDT revision : %s
\n
"
,
buf
);
snprintf
(
buf
,
7
,
"%s"
,
asus_info
->
oem_id
);
len
+=
sprintf
(
page
+
len
,
"OEM id
entification
: %s
\n
"
,
buf
);
len
+=
sprintf
(
page
+
len
,
"OEM id
: %s
\n
"
,
buf
);
snprintf
(
buf
,
9
,
"%s"
,
asus_info
->
oem_table_id
);
len
+=
sprintf
(
page
+
len
,
"OEM table id : %s
\n
"
,
buf
);
snprintf
(
buf
,
16
,
"%x"
,
asus_info
->
oem_revision
);
len
+=
sprintf
(
page
+
len
,
"OEM rev
number
: 0x%s
\n
"
,
buf
);
len
+=
sprintf
(
page
+
len
,
"OEM rev
ision
: 0x%s
\n
"
,
buf
);
snprintf
(
buf
,
5
,
"%s"
,
asus_info
->
asl_compiler_id
);
len
+=
sprintf
(
page
+
len
,
"ASL comp vendor
ID
: %s
\n
"
,
buf
);
len
+=
sprintf
(
page
+
len
,
"ASL comp vendor
id
: %s
\n
"
,
buf
);
snprintf
(
buf
,
16
,
"%x"
,
asus_info
->
asl_compiler_revision
);
len
+=
sprintf
(
page
+
len
,
"ASL comp rev
number
: 0x%s
\n
"
,
buf
);
len
+=
sprintf
(
page
+
len
,
"ASL comp rev
ision
: 0x%s
\n
"
,
buf
);
}
return
len
;
...
...
@@ -322,7 +323,7 @@ proc_read_mled(char *page, char **start, off_t off, int count, int *eof,
&
led_status
))
len
=
sprintf
(
page
,
"%d
\n
"
,
led_status
);
else
printk
(
KERN_
NOTICE
"Asus ACPI: Error reading MLED "
printk
(
KERN_
WARNING
"Asus ACPI: Error reading MLED "
"status
\n
"
);
}
else
{
len
=
sprintf
(
page
,
"%d
\n
"
,
(
hotk
->
status
&
MLED_ON
)
?
1
:
0
);
...
...
@@ -352,7 +353,7 @@ proc_write_mled(struct file *file, const char *buffer,
/* We don't have to check mt_mled exists if we are here :) */
if
(
!
write_acpi_int
(
hotk
->
handle
,
hotk
->
methods
->
mt_mled
,
led_out
,
NULL
))
printk
(
KERN_
NOTICE
"Asus ACPI: MLED write failed
\n
"
);
printk
(
KERN_
WARNING
"Asus ACPI: MLED write failed
\n
"
);
...
...
@@ -373,11 +374,11 @@ proc_read_wled(char *page, char **start, off_t off, int count, int *eof,
int
led_status
;
if
(
hotk
->
methods
->
wled_status
)
{
if
(
read_acpi_int
(
NULL
,
hotk
->
methods
->
m
led_status
,
if
(
read_acpi_int
(
NULL
,
hotk
->
methods
->
w
led_status
,
&
led_status
))
len
=
sprintf
(
page
,
"%d
\n
"
,
led_status
);
else
printk
(
KERN_
NOTICE
"Asus ACPI: Error reading WLED "
printk
(
KERN_
WARNING
"Asus ACPI: Error reading WLED "
"status
\n
"
);
}
else
{
len
=
sprintf
(
page
,
"%d
\n
"
,
(
hotk
->
status
&
WLED_ON
)
?
1
:
0
);
...
...
@@ -404,7 +405,7 @@ proc_write_wled(struct file *file, const char *buffer,
/* We don't have to check if mt_wled exists if we are here :) */
if
(
!
write_acpi_int
(
hotk
->
handle
,
hotk
->
methods
->
mt_wled
,
led_out
,
NULL
))
printk
(
KERN_
NOTICE
"Asus ACPI: WLED write failed
\n
"
);
printk
(
KERN_
WARNING
"Asus ACPI: WLED write failed
\n
"
);
return
count
;
...
...
@@ -417,7 +418,7 @@ static int get_lcd_state(struct asus_hotk *hotk)
/* We don't have to check anything, if we are here */
if
(
!
read_acpi_int
(
NULL
,
hotk
->
methods
->
lcd_status
,
&
lcd
))
printk
(
KERN_
NOTICE
"Asus ACPI: Error reading LCD status
\n
"
);
printk
(
KERN_
WARNING
"Asus ACPI: Error reading LCD status
\n
"
);
if
(
hotk
->
model
==
L2X
)
lcd
=
~
lcd
;
...
...
@@ -456,7 +457,7 @@ proc_write_lcd(struct file *file, const char *buffer,
acpi_evaluate_object
(
NULL
,
hotk
->
methods
->
mt_lcd_switch
,
NULL
,
NULL
);
if
(
ACPI_FAILURE
(
status
))
printk
(
KERN_
NOTICE
"Asus ACPI: Error switching LCD
\n
"
);
printk
(
KERN_
WARNING
"Asus ACPI: Error switching LCD
\n
"
);
}
return
count
;
...
...
@@ -474,7 +475,7 @@ static void set_brightness(int value, struct asus_hotk *hotk)
if
(
hotk
->
methods
->
brightness_set
)
{
if
(
!
write_acpi_int
(
hotk
->
handle
,
hotk
->
methods
->
brightness_set
,
value
,
NULL
))
printk
(
KERN_
NOTICE
"Asus ACPI: Error changing brightness
\n
"
);
printk
(
KERN_
WARNING
"Asus ACPI: Error changing brightness
\n
"
);
return
;
}
...
...
@@ -487,7 +488,7 @@ static void set_brightness(int value, struct asus_hotk *hotk)
NULL
,
NULL
);
(
value
>
0
)
?
value
--
:
value
++
;
if
(
ACPI_FAILURE
(
status
))
printk
(
KERN_
NOTICE
"Asus ACPI: Error changing brightness
\n
"
);
printk
(
KERN_
WARNING
"Asus ACPI: Error changing brightness
\n
"
);
}
return
;
}
...
...
@@ -499,11 +500,11 @@ static int read_brightness(struct asus_hotk *hotk)
if
(
hotk
->
methods
->
brightness_get
)
{
/* SPLV/GPLV laptop */
if
(
!
read_acpi_int
(
hotk
->
handle
,
hotk
->
methods
->
brightness_get
,
&
value
))
printk
(
KERN_
NOTICE
"Asus ACPI: Error reading brightness
\n
"
);
printk
(
KERN_
WARNING
"Asus ACPI: Error reading brightness
\n
"
);
}
else
if
(
hotk
->
methods
->
brightness_status
)
{
/* For D1 for example */
if
(
!
read_acpi_int
(
NULL
,
hotk
->
methods
->
brightness_status
,
&
value
))
printk
(
KERN_
NOTICE
"Asus ACPI: Error reading brightness
\n
"
);
printk
(
KERN_
WARNING
"Asus ACPI: Error reading brightness
\n
"
);
}
else
/* No GPLV method */
value
=
hotk
->
brightness
;
return
value
;
...
...
@@ -530,7 +531,7 @@ proc_write_brn(struct file *file, const char *buffer,
/* 0 <= value <= 15 */
set_brightness
(
value
,
hotk
);
}
else
{
printk
(
KERN_
NOTICE
"Asus ACPI: Error reading user input
\n
"
);
printk
(
KERN_
WARNING
"Asus ACPI: Error reading user input
\n
"
);
}
return
count
;
...
...
@@ -541,7 +542,7 @@ static void set_display(int value, struct asus_hotk *hotk)
/* no sanity check needed for now */
if
(
!
write_acpi_int
(
hotk
->
handle
,
hotk
->
methods
->
display_set
,
value
,
NULL
))
printk
(
KERN_
NOTICE
"Asus ACPI: Error setting display
\n
"
);
printk
(
KERN_
WARNING
"Asus ACPI: Error setting display
\n
"
);
return
;
}
...
...
@@ -558,7 +559,7 @@ proc_read_disp(char *page, char **start, off_t off, int count, int *eof,
struct
asus_hotk
*
hotk
=
(
struct
asus_hotk
*
)
data
;
if
(
!
read_acpi_int
(
hotk
->
handle
,
hotk
->
methods
->
display_get
,
&
value
))
printk
(
KERN_
NOTICE
"Asus ACPI: Error reading display status
\n
"
);
printk
(
KERN_
WARNING
"Asus ACPI: Error reading display status
\n
"
);
return
sprintf
(
page
,
"%d
\n
"
,
value
);
}
...
...
@@ -580,13 +581,13 @@ proc_write_disp(struct file *file, const char *buffer,
if
(
sscanf
(
buffer
,
"%d"
,
&
value
)
==
1
)
set_display
(
value
,
hotk
);
else
{
printk
(
KERN_
NOTICE
"Asus ACPI: Error reading user input
\n
"
);
printk
(
KERN_
WARNING
"Asus ACPI: Error reading user input
\n
"
);
}
return
count
;
}
static
int
asus_hotk_add_fs
(
struct
acpi_device
*
device
)
static
int
__init
asus_hotk_add_fs
(
struct
acpi_device
*
device
)
{
struct
proc_dir_entry
*
proc
;
struct
asus_hotk
*
hotk
=
acpi_driver_data
(
device
);
...
...
@@ -600,7 +601,7 @@ static int asus_hotk_add_fs(struct acpi_device *device)
if
((
asus_uid
==
0
)
&&
(
asus_gid
==
0
)){
mode
=
S_IFREG
|
S_IRUGO
|
S_IWUGO
;
}
else
{
}
else
{
mode
=
S_IFREG
|
S_IRUSR
|
S_IRGRP
|
S_IWUSR
|
S_IWGRP
;
}
...
...
@@ -616,7 +617,7 @@ static int asus_hotk_add_fs(struct acpi_device *device)
proc
->
uid
=
asus_uid
;
proc
->
gid
=
asus_gid
;;
}
else
{
printk
(
KERN_
NOTICE
" Unable to create "
PROC_INFOS
printk
(
KERN_
WARNING
" Unable to create "
PROC_INFOS
" fs entry
\n
"
);
}
...
...
@@ -630,7 +631,7 @@ static int asus_hotk_add_fs(struct acpi_device *device)
proc
->
uid
=
asus_uid
;
proc
->
gid
=
asus_gid
;;
}
else
{
printk
(
KERN_
NOTICE
" Unable to create "
PROC_WLED
printk
(
KERN_
WARNING
" Unable to create "
PROC_WLED
" fs entry
\n
"
);
}
}
...
...
@@ -645,7 +646,7 @@ static int asus_hotk_add_fs(struct acpi_device *device)
proc
->
uid
=
asus_uid
;
proc
->
gid
=
asus_gid
;;
}
else
{
printk
(
KERN_
NOTICE
" Unable to create "
PROC_MLED
printk
(
KERN_
WARNING
" Unable to create "
PROC_MLED
" fs entry
\n
"
);
}
}
...
...
@@ -664,7 +665,7 @@ static int asus_hotk_add_fs(struct acpi_device *device)
proc
->
uid
=
asus_uid
;
proc
->
gid
=
asus_gid
;;
}
else
{
printk
(
KERN_
NOTICE
" Unable to create "
PROC_LCD
printk
(
KERN_
WARNING
" Unable to create "
PROC_LCD
" fs entry
\n
"
);
}
}
...
...
@@ -680,7 +681,7 @@ static int asus_hotk_add_fs(struct acpi_device *device)
proc
->
uid
=
asus_uid
;
proc
->
gid
=
asus_gid
;;
}
else
{
printk
(
KERN_
NOTICE
" Unable to create "
PROC_BRN
printk
(
KERN_
WARNING
" Unable to create "
PROC_BRN
" fs entry
\n
"
);
}
}
...
...
@@ -695,12 +696,12 @@ static int asus_hotk_add_fs(struct acpi_device *device)
proc
->
uid
=
asus_uid
;
proc
->
gid
=
asus_gid
;;
}
else
{
printk
(
KERN_
NOTICE
" Unable to create "
PROC_DISP
printk
(
KERN_
WARNING
" Unable to create "
PROC_DISP
" fs entry
\n
"
);
}
}
return
(
AE_OK
)
;
return
0
;
}
...
...
@@ -730,19 +731,40 @@ static void asus_hotk_notify(acpi_handle handle, u32 event, void *data)
* This function is used to initialize the hotk with right values. In this
* method, we can make all the detection we want, and modify the hotk struct
*/
static
int
asus_hotk_get_info
(
struct
asus_hotk
*
hotk
)
static
int
__init
asus_hotk_get_info
(
struct
asus_hotk
*
hotk
)
{
struct
acpi_buffer
buffer
=
{
ACPI_ALLOCATE_BUFFER
,
NULL
};
struct
acpi_buffer
dsdt
=
{
ACPI_ALLOCATE_BUFFER
,
NULL
};
union
acpi_object
*
model
=
NULL
;
int
bsts_result
;
acpi_status
status
;
/*
* We have to write 0 on init this far for all ASUS models
* Get DSDT headers early enough to allow for differentiating between
* models, but late enough to allow acpi_bus_register_driver() to fail
* before doing anything ACPI-specific. Should we encounter a machine,
* which needs special handling (i.e. its hotkey device has a different
* HID), this bit will be moved. A global variable asus_info contains
* the DSDT header.
*/
status
=
acpi_get_table
(
ACPI_TABLE_DSDT
,
1
,
&
dsdt
);
if
(
ACPI_FAILURE
(
status
))
printk
(
KERN_WARNING
" Couldn't get the DSDT table header
\n
"
);
else
asus_info
=
(
struct
acpi_table_header
*
)
dsdt
.
pointer
;
/* We have to write 0 on init this far for all ASUS models */
if
(
!
write_acpi_int
(
hotk
->
handle
,
"INIT"
,
0
,
&
buffer
))
{
printk
(
KERN_
NOTICE
" Hotkey initialization failed
\n
"
);
printk
(
KERN_
ERR
" Hotkey initialization failed
\n
"
);
return
-
ENODEV
;
}
/* For testing purposes */
if
(
!
read_acpi_int
(
hotk
->
handle
,
"BSTS"
,
&
bsts_result
))
printk
(
KERN_WARNING
" Error calling BSTS
\n
"
);
else
if
(
bsts_result
)
printk
(
KERN_NOTICE
" BSTS called, 0x%02x returned
\n
"
,
bsts_result
);
/*
* Here, we also use asus_info to make decision. For example, on INIT
* method, S1X and L1X models both reports to be L84F, but they don't
...
...
@@ -772,12 +794,14 @@ static int asus_hotk_get_info(struct asus_hotk *hotk)
hotk
->
model
=
M3N
;
/* S1300N is similar enough */
else
if
(
strncmp
(
model
->
string
.
pointer
,
"L2"
,
2
)
==
0
)
hotk
->
model
=
L2X
;
else
if
(
strncmp
(
model
->
string
.
pointer
,
"L8"
,
2
)
==
0
)
else
if
(
strncmp
(
model
->
string
.
pointer
,
"L8"
,
2
)
==
0
)
{
/* S1300A reports L84F, but L1400B too */
if
(
asus_info
)
{
if
(
strncmp
(
asus_info
->
oem_table_id
,
"L1"
,
2
)
==
0
)
hotk
->
model
=
L1X
;
else
}
else
hotk
->
model
=
S1X
;
}
else
if
(
strncmp
(
model
->
string
.
pointer
,
"D1"
,
2
)
==
0
)
hotk
->
model
=
D1X
;
else
if
(
strncmp
(
model
->
string
.
pointer
,
"A1"
,
2
)
==
0
)
...
...
@@ -786,12 +810,13 @@ static int asus_hotk_get_info(struct asus_hotk *hotk)
hotk
->
model
=
A2X
;
else
if
(
strncmp
(
model
->
string
.
pointer
,
"J1"
,
2
)
==
0
)
hotk
->
model
=
S2X
;
else
if
(
strncmp
(
model
->
string
.
pointer
,
"L5"
,
2
)
==
0
)
hotk
->
model
=
L5X
;
if
(
hotk
->
model
==
END_MODEL
)
{
/* By default use the same values, as I don't know others */
printk
(
"unsupported, trying default values,
contact
the "
"developers
\n
"
);
printk
(
"unsupported, trying default values,
supply
the "
"developers
with your DSDT
\n
"
);
hotk
->
model
=
L2X
;
}
else
{
printk
(
"supported
\n
"
);
...
...
@@ -806,7 +831,7 @@ static int asus_hotk_get_info(struct asus_hotk *hotk)
static
int
asus_hotk_check
(
struct
asus_hotk
*
hotk
)
static
int
__init
asus_hotk_check
(
struct
asus_hotk
*
hotk
)
{
int
result
=
0
;
...
...
@@ -820,7 +845,7 @@ static int asus_hotk_check(struct asus_hotk *hotk)
if
(
hotk
->
device
->
status
.
present
)
{
result
=
asus_hotk_get_info
(
hotk
);
}
else
{
printk
(
KERN_
NOTICE
" Hotkey device not present, aborting
\n
"
);
printk
(
KERN_
ERR
" Hotkey device not present, aborting
\n
"
);
return
(
-
EINVAL
);
}
...
...
@@ -829,7 +854,7 @@ static int asus_hotk_check(struct asus_hotk *hotk)
static
int
asus_hotk_add
(
struct
acpi_device
*
device
)
static
int
__init
asus_hotk_add
(
struct
acpi_device
*
device
)
{
struct
asus_hotk
*
hotk
=
NULL
;
acpi_status
status
=
AE_OK
;
...
...
@@ -838,6 +863,9 @@ static int asus_hotk_add(struct acpi_device *device)
if
(
!
device
)
return
(
-
EINVAL
);
printk
(
KERN_NOTICE
"Asus Laptop ACPI Extras version %s
\n
"
,
ASUS_ACPI_VERSION
);
hotk
=
(
struct
asus_hotk
*
)
kmalloc
(
sizeof
(
struct
asus_hotk
),
GFP_KERNEL
);
if
(
!
hotk
)
...
...
@@ -865,13 +893,8 @@ static int asus_hotk_add(struct acpi_device *device)
*/
status
=
acpi_install_notify_handler
(
hotk
->
handle
,
ACPI_SYSTEM_NOTIFY
,
asus_hotk_notify
,
hotk
);
if
(
ACPI_FAILURE
(
status
))
{
printk
(
KERN_NOTICE
" Error installing notify handler
\n
"
);
}
else
{
printk
(
KERN_DEBUG
" Notify Handler installed successfully
\n
"
);
}
if
(
ACPI_FAILURE
(
status
))
printk
(
KERN_ERR
" Error installing notify handler
\n
"
);
/* For laptops without GPLV: init the hotk->brightness value */
if
((
!
hotk
->
methods
->
brightness_get
)
&&
(
!
hotk
->
methods
->
brightness_status
)
&&
...
...
@@ -879,12 +902,12 @@ static int asus_hotk_add(struct acpi_device *device)
status
=
acpi_evaluate_object
(
NULL
,
hotk
->
methods
->
brightness_down
,
NULL
,
NULL
);
if
(
ACPI_FAILURE
(
status
))
printk
(
KERN_
NOTICE
" Error changing brightness
\n
"
);
printk
(
KERN_
WARNING
" Error changing brightness
\n
"
);
else
{
status
=
acpi_evaluate_object
(
NULL
,
hotk
->
methods
->
brightness_up
,
NULL
,
NULL
);
if
(
ACPI_FAILURE
(
status
))
printk
(
KERN_
NOTICE
" Strange, error changing"
printk
(
KERN_
WARNING
" Strange, error changing"
" brightness
\n
"
);
}
}
...
...
@@ -900,7 +923,7 @@ static int asus_hotk_add(struct acpi_device *device)
static
int
asus_hotk_remove
(
struct
acpi_device
*
device
,
int
type
)
static
int
__exit
asus_hotk_remove
(
struct
acpi_device
*
device
,
int
type
)
{
acpi_status
status
=
0
;
struct
asus_hotk
*
hotk
=
NULL
;
...
...
@@ -913,7 +936,7 @@ static int asus_hotk_remove(struct acpi_device *device, int type)
status
=
acpi_remove_notify_handler
(
hotk
->
handle
,
ACPI_SYSTEM_NOTIFY
,
asus_hotk_notify
);
if
(
ACPI_FAILURE
(
status
))
printk
(
KERN_
NOTICE
"
Error removing notify handler
\n
"
);
printk
(
KERN_
ERR
"Asus ACPI:
Error removing notify handler
\n
"
);
kfree
(
hotk
);
...
...
@@ -925,35 +948,17 @@ static int asus_hotk_remove(struct acpi_device *device, int type)
static
int
__init
asus_acpi_init
(
void
)
{
int
result
=
0
;
acpi_status
status
=
0
;
struct
acpi_buffer
dsdt
=
{
ACPI_ALLOCATE_BUFFER
,
NULL
};
printk
(
KERN_NOTICE
"Asus Laptop ACPI Extras version %s
\n
"
,
ASUS_ACPI_VERSION
);
/*
* Here is the code to know the model we are running on. We need to
* know this before calling the acpi_bus_register_driver function, in
* case the HID for the laptop we are running on is different from
* ACPI_HOTK_HID, which I have never seen yet :)
*
* This information is then available in the global var asus_info
*/
status
=
acpi_get_table
(
ACPI_TABLE_DSDT
,
1
,
&
dsdt
);
if
(
ACPI_FAILURE
(
status
))
{
printk
(
KERN_NOTICE
" Couldn't get the DSDT table header
\n
"
);
}
else
{
asus_info
=
(
struct
acpi_table_header
*
)
dsdt
.
pointer
;
}
int
result
;
asus_proc_dir
=
proc_mkdir
(
PROC_ASUS
,
acpi_root_dir
);
if
(
!
asus_proc_dir
)
if
(
!
asus_proc_dir
)
{
printk
(
KERN_ERR
"Asus ACPI: Unable to create /proc entry"
);
return
(
-
ENODEV
);
}
asus_proc_dir
->
owner
=
THIS_MODULE
;
result
=
acpi_bus_register_driver
(
&
asus_hotk_driver
);
if
(
result
<
0
)
{
printk
(
KERN_NOTICE
" Error registering "
ACPI_HOTK_NAME
"
\n
"
);
remove_proc_entry
(
PROC_ASUS
,
acpi_root_dir
);
return
(
-
ENODEV
);
}
...
...
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