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
bbbcde9d
Commit
bbbcde9d
authored
Dec 26, 2010
by
Len Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge branches 'bugzilla-25412' and 'bugzilla-25302' into release
parents
d7c1255a
5acdb1af
cde44d17
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
63 additions
and
42 deletions
+63
-42
drivers/acpi/acpica/evgpeinit.c
drivers/acpi/acpica/evgpeinit.c
+3
-0
drivers/acpi/battery.c
drivers/acpi/battery.c
+0
-5
drivers/acpi/scan.c
drivers/acpi/scan.c
+60
-37
No files found.
drivers/acpi/acpica/evgpeinit.c
View file @
bbbcde9d
...
@@ -408,6 +408,9 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle,
...
@@ -408,6 +408,9 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle,
return_ACPI_STATUS
(
AE_OK
);
return_ACPI_STATUS
(
AE_OK
);
}
}
/* Disable the GPE in case it's been enabled already. */
(
void
)
acpi_hw_low_set_gpe
(
gpe_event_info
,
ACPI_GPE_DISABLE
);
/*
/*
* Add the GPE information from above to the gpe_event_info block for
* Add the GPE information from above to the gpe_event_info block for
* use during dispatch of this GPE.
* use during dispatch of this GPE.
...
...
drivers/acpi/battery.c
View file @
bbbcde9d
...
@@ -130,8 +130,6 @@ struct acpi_battery {
...
@@ -130,8 +130,6 @@ struct acpi_battery {
unsigned
long
flags
;
unsigned
long
flags
;
};
};
static
int
acpi_battery_update
(
struct
acpi_battery
*
battery
);
#define to_acpi_battery(x) container_of(x, struct acpi_battery, bat);
#define to_acpi_battery(x) container_of(x, struct acpi_battery, bat);
inline
int
acpi_battery_present
(
struct
acpi_battery
*
battery
)
inline
int
acpi_battery_present
(
struct
acpi_battery
*
battery
)
...
@@ -186,9 +184,6 @@ static int acpi_battery_get_property(struct power_supply *psy,
...
@@ -186,9 +184,6 @@ static int acpi_battery_get_property(struct power_supply *psy,
int
ret
=
0
;
int
ret
=
0
;
struct
acpi_battery
*
battery
=
to_acpi_battery
(
psy
);
struct
acpi_battery
*
battery
=
to_acpi_battery
(
psy
);
if
(
acpi_battery_update
(
battery
))
return
-
ENODEV
;
if
(
acpi_battery_present
(
battery
))
{
if
(
acpi_battery_present
(
battery
))
{
/* run battery update only if it is present */
/* run battery update only if it is present */
acpi_battery_get_state
(
battery
);
acpi_battery_get_state
(
battery
);
...
...
drivers/acpi/scan.c
View file @
bbbcde9d
...
@@ -705,54 +705,85 @@ static int acpi_bus_get_perf_flags(struct acpi_device *device)
...
@@ -705,54 +705,85 @@ static int acpi_bus_get_perf_flags(struct acpi_device *device)
}
}
static
acpi_status
static
acpi_status
acpi_bus_extract_wakeup_device_power_package
(
struct
acpi_device
*
devic
e
,
acpi_bus_extract_wakeup_device_power_package
(
acpi_handle
handl
e
,
union
acpi_object
*
package
)
struct
acpi_device_wakeup
*
wakeup
)
{
{
int
i
=
0
;
struct
acpi_buffer
buffer
=
{
ACPI_ALLOCATE_BUFFER
,
NULL
};
union
acpi_object
*
package
=
NULL
;
union
acpi_object
*
element
=
NULL
;
union
acpi_object
*
element
=
NULL
;
acpi_status
status
;
int
i
=
0
;
if
(
!
device
||
!
package
||
(
package
->
package
.
count
<
2
)
)
if
(
!
wakeup
)
return
AE_BAD_PARAMETER
;
return
AE_BAD_PARAMETER
;
/* _PRW */
status
=
acpi_evaluate_object
(
handle
,
"_PRW"
,
NULL
,
&
buffer
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_EXCEPTION
((
AE_INFO
,
status
,
"Evaluating _PRW"
));
return
status
;
}
package
=
(
union
acpi_object
*
)
buffer
.
pointer
;
if
(
!
package
||
(
package
->
package
.
count
<
2
))
{
status
=
AE_BAD_DATA
;
goto
out
;
}
element
=
&
(
package
->
package
.
elements
[
0
]);
element
=
&
(
package
->
package
.
elements
[
0
]);
if
(
!
element
)
if
(
!
element
)
{
return
AE_BAD_PARAMETER
;
status
=
AE_BAD_DATA
;
goto
out
;
}
if
(
element
->
type
==
ACPI_TYPE_PACKAGE
)
{
if
(
element
->
type
==
ACPI_TYPE_PACKAGE
)
{
if
((
element
->
package
.
count
<
2
)
||
if
((
element
->
package
.
count
<
2
)
||
(
element
->
package
.
elements
[
0
].
type
!=
(
element
->
package
.
elements
[
0
].
type
!=
ACPI_TYPE_LOCAL_REFERENCE
)
ACPI_TYPE_LOCAL_REFERENCE
)
||
(
element
->
package
.
elements
[
1
].
type
!=
ACPI_TYPE_INTEGER
))
||
(
element
->
package
.
elements
[
1
].
type
!=
ACPI_TYPE_INTEGER
))
{
return
AE_BAD_DATA
;
status
=
AE_BAD_DATA
;
device
->
wakeup
.
gpe_device
=
goto
out
;
}
wakeup
->
gpe_device
=
element
->
package
.
elements
[
0
].
reference
.
handle
;
element
->
package
.
elements
[
0
].
reference
.
handle
;
device
->
wakeup
.
gpe_number
=
wakeup
->
gpe_number
=
(
u32
)
element
->
package
.
elements
[
1
].
integer
.
value
;
(
u32
)
element
->
package
.
elements
[
1
].
integer
.
value
;
}
else
if
(
element
->
type
==
ACPI_TYPE_INTEGER
)
{
}
else
if
(
element
->
type
==
ACPI_TYPE_INTEGER
)
{
device
->
wakeup
.
gpe_number
=
element
->
integer
.
value
;
wakeup
->
gpe_device
=
NULL
;
}
else
wakeup
->
gpe_number
=
element
->
integer
.
value
;
return
AE_BAD_DATA
;
}
else
{
status
=
AE_BAD_DATA
;
goto
out
;
}
element
=
&
(
package
->
package
.
elements
[
1
]);
element
=
&
(
package
->
package
.
elements
[
1
]);
if
(
element
->
type
!=
ACPI_TYPE_INTEGER
)
{
if
(
element
->
type
!=
ACPI_TYPE_INTEGER
)
{
return
AE_BAD_DATA
;
status
=
AE_BAD_DATA
;
goto
out
;
}
}
device
->
wakeup
.
sleep_state
=
element
->
integer
.
value
;
wakeup
->
sleep_state
=
element
->
integer
.
value
;
if
((
package
->
package
.
count
-
2
)
>
ACPI_MAX_HANDLES
)
{
if
((
package
->
package
.
count
-
2
)
>
ACPI_MAX_HANDLES
)
{
return
AE_NO_MEMORY
;
status
=
AE_NO_MEMORY
;
goto
out
;
}
}
device
->
wakeup
.
resources
.
count
=
package
->
package
.
count
-
2
;
wakeup
->
resources
.
count
=
package
->
package
.
count
-
2
;
for
(
i
=
0
;
i
<
device
->
wakeup
.
resources
.
count
;
i
++
)
{
for
(
i
=
0
;
i
<
wakeup
->
resources
.
count
;
i
++
)
{
element
=
&
(
package
->
package
.
elements
[
i
+
2
]);
element
=
&
(
package
->
package
.
elements
[
i
+
2
]);
if
(
element
->
type
!=
ACPI_TYPE_LOCAL_REFERENCE
)
if
(
element
->
type
!=
ACPI_TYPE_LOCAL_REFERENCE
)
{
return
AE_BAD_DATA
;
status
=
AE_BAD_DATA
;
goto
out
;
}
device
->
wakeup
.
resources
.
handles
[
i
]
=
element
->
reference
.
handle
;
wakeup
->
resources
.
handles
[
i
]
=
element
->
reference
.
handle
;
}
}
acpi_gpe_can_wake
(
device
->
wakeup
.
gpe_device
,
device
->
wakeup
.
gpe_number
);
acpi_gpe_can_wake
(
wakeup
->
gpe_device
,
wakeup
->
gpe_number
);
return
AE_OK
;
out:
kfree
(
buffer
.
pointer
);
return
status
;
}
}
static
void
acpi_bus_set_run_wake_flags
(
struct
acpi_device
*
device
)
static
void
acpi_bus_set_run_wake_flags
(
struct
acpi_device
*
device
)
...
@@ -787,26 +818,15 @@ static void acpi_bus_set_run_wake_flags(struct acpi_device *device)
...
@@ -787,26 +818,15 @@ static void acpi_bus_set_run_wake_flags(struct acpi_device *device)
static
int
acpi_bus_get_wakeup_device_flags
(
struct
acpi_device
*
device
)
static
int
acpi_bus_get_wakeup_device_flags
(
struct
acpi_device
*
device
)
{
{
acpi_status
status
=
0
;
acpi_status
status
=
0
;
struct
acpi_buffer
buffer
=
{
ACPI_ALLOCATE_BUFFER
,
NULL
};
union
acpi_object
*
package
=
NULL
;
int
psw_error
;
int
psw_error
;
/* _PRW */
status
=
acpi_bus_extract_wakeup_device_power_package
(
device
->
handle
,
status
=
acpi_evaluate_object
(
device
->
handle
,
"_PRW"
,
NULL
,
&
buffer
);
&
device
->
wakeup
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_EXCEPTION
((
AE_INFO
,
status
,
"Evaluating _PRW"
));
goto
end
;
}
package
=
(
union
acpi_object
*
)
buffer
.
pointer
;
status
=
acpi_bus_extract_wakeup_device_power_package
(
device
,
package
);
if
(
ACPI_FAILURE
(
status
))
{
if
(
ACPI_FAILURE
(
status
))
{
ACPI_EXCEPTION
((
AE_INFO
,
status
,
"Extracting _PRW package"
));
ACPI_EXCEPTION
((
AE_INFO
,
status
,
"Extracting _PRW package"
));
goto
end
;
goto
end
;
}
}
kfree
(
buffer
.
pointer
);
device
->
wakeup
.
flags
.
valid
=
1
;
device
->
wakeup
.
flags
.
valid
=
1
;
device
->
wakeup
.
prepare_count
=
0
;
device
->
wakeup
.
prepare_count
=
0
;
acpi_bus_set_run_wake_flags
(
device
);
acpi_bus_set_run_wake_flags
(
device
);
...
@@ -1351,6 +1371,7 @@ static acpi_status acpi_bus_check_add(acpi_handle handle, u32 lvl,
...
@@ -1351,6 +1371,7 @@ static acpi_status acpi_bus_check_add(acpi_handle handle, u32 lvl,
struct
acpi_bus_ops
*
ops
=
context
;
struct
acpi_bus_ops
*
ops
=
context
;
int
type
;
int
type
;
unsigned
long
long
sta
;
unsigned
long
long
sta
;
struct
acpi_device_wakeup
wakeup
;
struct
acpi_device
*
device
;
struct
acpi_device
*
device
;
acpi_status
status
;
acpi_status
status
;
int
result
;
int
result
;
...
@@ -1360,8 +1381,10 @@ static acpi_status acpi_bus_check_add(acpi_handle handle, u32 lvl,
...
@@ -1360,8 +1381,10 @@ static acpi_status acpi_bus_check_add(acpi_handle handle, u32 lvl,
return
AE_OK
;
return
AE_OK
;
if
(
!
(
sta
&
ACPI_STA_DEVICE_PRESENT
)
&&
if
(
!
(
sta
&
ACPI_STA_DEVICE_PRESENT
)
&&
!
(
sta
&
ACPI_STA_DEVICE_FUNCTIONING
))
!
(
sta
&
ACPI_STA_DEVICE_FUNCTIONING
))
{
acpi_bus_extract_wakeup_device_power_package
(
handle
,
&
wakeup
);
return
AE_CTRL_DEPTH
;
return
AE_CTRL_DEPTH
;
}
/*
/*
* We may already have an acpi_device from a previous enumeration. If
* We may already have an acpi_device from a previous enumeration. If
...
...
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