Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
fb4af417
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
fb4af417
编写于
1月 12, 2011
作者:
L
Len Brown
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'wakeup-etc-rafael' into release
上级
07bf2805
7b330707
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
94 addition
and
89 deletion
+94
-89
drivers/acpi/acpica/evmisc.c
drivers/acpi/acpica/evmisc.c
+55
-39
drivers/acpi/button.c
drivers/acpi/button.c
+7
-2
drivers/acpi/glue.c
drivers/acpi/glue.c
+1
-4
drivers/acpi/proc.c
drivers/acpi/proc.c
+12
-29
drivers/acpi/scan.c
drivers/acpi/scan.c
+1
-1
drivers/acpi/sleep.c
drivers/acpi/sleep.c
+8
-0
drivers/acpi/wakeup.c
drivers/acpi/wakeup.c
+10
-8
include/acpi/acpi_bus.h
include/acpi/acpi_bus.h
+0
-6
未找到文件。
drivers/acpi/acpica/evmisc.c
浏览文件 @
fb4af417
...
...
@@ -284,41 +284,41 @@ static void ACPI_SYSTEM_XFACE acpi_ev_notify_dispatch(void *context)
* RETURN: ACPI_INTERRUPT_HANDLED
*
* DESCRIPTION: Invoked directly from the SCI handler when a global lock
* release interrupt occurs.
Attempt to acquire the global lock,
*
if successful, signal the thread waiting for the lock
.
* release interrupt occurs.
If there's a thread waiting for
*
the global lock, signal it
.
*
* NOTE: Assumes that the semaphore can be signaled from interrupt level. If
* this is not possible for some reason, a separate thread will have to be
* scheduled to do this.
*
******************************************************************************/
static
u8
acpi_ev_global_lock_pending
;
static
spinlock_t
_acpi_ev_global_lock_pending_lock
;
#define acpi_ev_global_lock_pending_lock &_acpi_ev_global_lock_pending_lock
static
u32
acpi_ev_global_lock_handler
(
void
*
context
)
{
u8
acquired
=
FALSE
;
acpi_status
status
;
acpi_cpu_flags
flags
;
/*
* Attempt to get the lock.
*
* If we don't get it now, it will be marked pending and we will
* take another interrupt when it becomes free.
*/
ACPI_ACQUIRE_GLOBAL_LOCK
(
acpi_gbl_FACS
,
acquired
);
if
(
acquired
)
{
flags
=
acpi_os_acquire_lock
(
acpi_ev_global_lock_pending_lock
);
/* Got the lock, now wake all threads waiting for it */
if
(
!
acpi_ev_global_lock_pending
)
{
goto
out
;
}
acpi_gbl_global_lock_acquired
=
TRUE
;
/* Send a unit to the semaphore */
/* Send a unit to the semaphore */
if
(
ACPI_FAILURE
(
acpi_os_signal_semaphore
(
acpi_gbl_global_lock_semaphore
,
1
)))
{
ACPI_ERROR
((
AE_INFO
,
"Could not signal Global Lock semaphore"
));
}
status
=
acpi_os_signal_semaphore
(
acpi_gbl_global_lock_semaphore
,
1
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_ERROR
((
AE_INFO
,
"Could not signal Global Lock semaphore"
));
}
acpi_ev_global_lock_pending
=
FALSE
;
out:
acpi_os_release_lock
(
acpi_ev_global_lock_pending_lock
,
flags
);
return
(
ACPI_INTERRUPT_HANDLED
);
}
...
...
@@ -415,6 +415,7 @@ static int acpi_ev_global_lock_acquired;
acpi_status
acpi_ev_acquire_global_lock
(
u16
timeout
)
{
acpi_cpu_flags
flags
;
acpi_status
status
=
AE_OK
;
u8
acquired
=
FALSE
;
...
...
@@ -467,32 +468,47 @@ acpi_status acpi_ev_acquire_global_lock(u16 timeout)
return_ACPI_STATUS
(
AE_OK
);
}
/* Attempt to acquire the actual hardware lock */
flags
=
acpi_os_acquire_lock
(
acpi_ev_global_lock_pending_lock
);
do
{
/* Attempt to acquire the actual hardware lock */
ACPI_ACQUIRE_GLOBAL_LOCK
(
acpi_gbl_FACS
,
acquired
);
if
(
acquired
)
{
acpi_gbl_global_lock_acquired
=
TRUE
;
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"Acquired hardware Global Lock
\n
"
));
break
;
}
ACPI_ACQUIRE_GLOBAL_LOCK
(
acpi_gbl_FACS
,
acquired
);
if
(
acquired
)
{
acpi_ev_global_lock_pending
=
TRUE
;
/* We got the lock */
acpi_os_release_lock
(
acpi_ev_global_lock_pending_lock
,
flags
);
/*
* Did not get the lock. The pending bit was set above, and we
* must wait until we get the global lock released interrupt.
*/
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"
Acquired
hardware Global Lock
\n
"
));
"
Waiting for
hardware Global Lock
\n
"
));
acpi_gbl_global_lock_acquired
=
TRUE
;
return_ACPI_STATUS
(
AE_OK
);
}
/*
* Wait for handshake with the global lock interrupt handler.
* This interface releases the interpreter if we must wait.
*/
status
=
acpi_ex_system_wait_semaphore
(
acpi_gbl_global_lock_semaphore
,
ACPI_WAIT_FOREVER
);
/*
* Did not get the lock. The pending bit was set above, and we must now
* wait until we get the global lock released interrupt.
*/
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"Waiting for hardware Global Lock
\n
"
));
flags
=
acpi_os_acquire_lock
(
acpi_ev_global_lock_pending_lock
);
/*
* Wait for handshake with the global lock interrupt handler.
* This interface releases the interpreter if we must wait.
*/
status
=
acpi_ex_system_wait_semaphore
(
acpi_gbl_global_lock_semaphore
,
ACPI_WAIT_FOREVER
);
}
while
(
ACPI_SUCCESS
(
status
));
acpi_ev_global_lock_pending
=
FALSE
;
acpi_os_release_lock
(
acpi_ev_global_lock_pending_lock
,
flags
);
return_ACPI_STATUS
(
status
);
}
...
...
drivers/acpi/button.c
浏览文件 @
fb4af417
...
...
@@ -279,6 +279,9 @@ static int acpi_lid_send_state(struct acpi_device *device)
input_report_switch
(
button
->
input
,
SW_LID
,
!
state
);
input_sync
(
button
->
input
);
if
(
state
)
pm_wakeup_event
(
&
device
->
dev
,
0
);
ret
=
blocking_notifier_call_chain
(
&
acpi_lid_notifier
,
state
,
device
);
if
(
ret
==
NOTIFY_DONE
)
ret
=
blocking_notifier_call_chain
(
&
acpi_lid_notifier
,
state
,
...
...
@@ -314,6 +317,8 @@ static void acpi_button_notify(struct acpi_device *device, u32 event)
input_sync
(
input
);
input_report_key
(
input
,
keycode
,
0
);
input_sync
(
input
);
pm_wakeup_event
(
&
device
->
dev
,
0
);
}
acpi_bus_generate_proc_event
(
device
,
event
,
++
button
->
pushed
);
...
...
@@ -426,7 +431,7 @@ static int acpi_button_add(struct acpi_device *device)
acpi_enable_gpe
(
device
->
wakeup
.
gpe_device
,
device
->
wakeup
.
gpe_number
);
device
->
wakeup
.
run_wake_count
++
;
device
->
wakeup
.
state
.
enabled
=
1
;
device
_set_wakeup_enable
(
&
device
->
dev
,
true
)
;
}
printk
(
KERN_INFO
PREFIX
"%s [%s]
\n
"
,
name
,
acpi_device_bid
(
device
));
...
...
@@ -449,7 +454,7 @@ static int acpi_button_remove(struct acpi_device *device, int type)
acpi_disable_gpe
(
device
->
wakeup
.
gpe_device
,
device
->
wakeup
.
gpe_number
);
device
->
wakeup
.
run_wake_count
--
;
device
->
wakeup
.
state
.
enabled
=
0
;
device
_set_wakeup_enable
(
&
device
->
dev
,
false
)
;
}
acpi_button_remove_fs
(
device
);
...
...
drivers/acpi/glue.c
浏览文件 @
fb4af417
...
...
@@ -167,11 +167,8 @@ static int acpi_bind_one(struct device *dev, acpi_handle handle)
"firmware_node"
);
ret
=
sysfs_create_link
(
&
acpi_dev
->
dev
.
kobj
,
&
dev
->
kobj
,
"physical_node"
);
if
(
acpi_dev
->
wakeup
.
flags
.
valid
)
{
if
(
acpi_dev
->
wakeup
.
flags
.
valid
)
device_set_wakeup_capable
(
dev
,
true
);
device_set_wakeup_enable
(
dev
,
acpi_dev
->
wakeup
.
state
.
enabled
);
}
}
return
0
;
...
...
drivers/acpi/proc.c
浏览文件 @
fb4af417
...
...
@@ -311,7 +311,9 @@ acpi_system_wakeup_device_seq_show(struct seq_file *seq, void *offset)
dev
->
pnp
.
bus_id
,
(
u32
)
dev
->
wakeup
.
sleep_state
,
dev
->
wakeup
.
flags
.
run_wake
?
'*'
:
' '
,
dev
->
wakeup
.
state
.
enabled
?
"enabled"
:
"disabled"
);
(
device_may_wakeup
(
&
dev
->
dev
)
||
(
ldev
&&
device_may_wakeup
(
ldev
)))
?
"enabled"
:
"disabled"
);
if
(
ldev
)
seq_printf
(
seq
,
"%s:%s"
,
ldev
->
bus
?
ldev
->
bus
->
name
:
"no-bus"
,
...
...
@@ -328,8 +330,10 @@ static void physical_device_enable_wakeup(struct acpi_device *adev)
{
struct
device
*
dev
=
acpi_get_physical_device
(
adev
->
handle
);
if
(
dev
&&
device_can_wakeup
(
dev
))
device_set_wakeup_enable
(
dev
,
adev
->
wakeup
.
state
.
enabled
);
if
(
dev
&&
device_can_wakeup
(
dev
))
{
bool
enable
=
!
device_may_wakeup
(
dev
);
device_set_wakeup_enable
(
dev
,
enable
);
}
}
static
ssize_t
...
...
@@ -341,7 +345,6 @@ acpi_system_write_wakeup_device(struct file *file,
char
strbuf
[
5
];
char
str
[
5
]
=
""
;
unsigned
int
len
=
count
;
struct
acpi_device
*
found_dev
=
NULL
;
if
(
len
>
4
)
len
=
4
;
...
...
@@ -361,33 +364,13 @@ acpi_system_write_wakeup_device(struct file *file,
continue
;
if
(
!
strncmp
(
dev
->
pnp
.
bus_id
,
str
,
4
))
{
dev
->
wakeup
.
state
.
enabled
=
dev
->
wakeup
.
state
.
enabled
?
0
:
1
;
found_dev
=
dev
;
break
;
}
}
if
(
found_dev
)
{
physical_device_enable_wakeup
(
found_dev
);
list_for_each_safe
(
node
,
next
,
&
acpi_wakeup_device_list
)
{
struct
acpi_device
*
dev
=
container_of
(
node
,
struct
acpi_device
,
wakeup_list
);
if
((
dev
!=
found_dev
)
&&
(
dev
->
wakeup
.
gpe_number
==
found_dev
->
wakeup
.
gpe_number
)
&&
(
dev
->
wakeup
.
gpe_device
==
found_dev
->
wakeup
.
gpe_device
))
{
printk
(
KERN_WARNING
"ACPI: '%s' and '%s' have the same GPE, "
"can't disable/enable one separately
\n
"
,
dev
->
pnp
.
bus_id
,
found_dev
->
pnp
.
bus_id
);
dev
->
wakeup
.
state
.
enabled
=
found_dev
->
wakeup
.
state
.
enabled
;
if
(
device_can_wakeup
(
&
dev
->
dev
))
{
bool
enable
=
!
device_may_wakeup
(
&
dev
->
dev
);
device_set_wakeup_enable
(
&
dev
->
dev
,
enable
);
}
else
{
physical_device_enable_wakeup
(
dev
);
}
break
;
}
}
mutex_unlock
(
&
acpi_device_lock
);
...
...
drivers/acpi/scan.c
浏览文件 @
fb4af417
...
...
@@ -803,7 +803,7 @@ static void acpi_bus_set_run_wake_flags(struct acpi_device *device)
/* Power button, Lid switch always enable wakeup */
if
(
!
acpi_match_device_ids
(
device
,
button_device_ids
))
{
device
->
wakeup
.
flags
.
run_wake
=
1
;
device
->
wakeup
.
flags
.
always_enabled
=
1
;
device
_set_wakeup_capable
(
&
device
->
dev
,
true
)
;
return
;
}
...
...
drivers/acpi/sleep.c
浏览文件 @
fb4af417
...
...
@@ -435,6 +435,14 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = {
DMI_MATCH
(
DMI_PRODUCT_NAME
,
"VGN-NW130D"
),
},
},
{
.
callback
=
init_nvs_nosave
,
.
ident
=
"Averatec AV1020-ED2"
,
.
matches
=
{
DMI_MATCH
(
DMI_SYS_VENDOR
,
"AVERATEC"
),
DMI_MATCH
(
DMI_PRODUCT_NAME
,
"1000 Series"
),
},
},
{},
};
#endif
/* CONFIG_SUSPEND */
...
...
drivers/acpi/wakeup.c
浏览文件 @
fb4af417
...
...
@@ -37,11 +37,12 @@ void acpi_enable_wakeup_devices(u8 sleep_state)
container_of
(
node
,
struct
acpi_device
,
wakeup_list
);
if
(
!
dev
->
wakeup
.
flags
.
valid
||
!
(
dev
->
wakeup
.
state
.
enabled
||
dev
->
wakeup
.
prepare_count
)
||
sleep_state
>
(
u32
)
dev
->
wakeup
.
sleep_state
)
||
sleep_state
>
(
u32
)
dev
->
wakeup
.
sleep_state
||
!
(
device_may_wakeup
(
&
dev
->
dev
)
||
dev
->
wakeup
.
prepare_count
))
continue
;
if
(
dev
->
wakeup
.
state
.
enabled
)
if
(
dev
ice_may_wakeup
(
&
dev
->
dev
)
)
acpi_enable_wakeup_device_power
(
dev
,
sleep_state
);
/* The wake-up power should have been enabled already. */
...
...
@@ -63,14 +64,15 @@ void acpi_disable_wakeup_devices(u8 sleep_state)
container_of
(
node
,
struct
acpi_device
,
wakeup_list
);
if
(
!
dev
->
wakeup
.
flags
.
valid
||
!
(
dev
->
wakeup
.
state
.
enabled
||
dev
->
wakeup
.
prepare_count
)
||
(
sleep_state
>
(
u32
)
dev
->
wakeup
.
sleep_state
))
||
sleep_state
>
(
u32
)
dev
->
wakeup
.
sleep_state
||
!
(
device_may_wakeup
(
&
dev
->
dev
)
||
dev
->
wakeup
.
prepare_count
))
continue
;
acpi_set_gpe_wake_mask
(
dev
->
wakeup
.
gpe_device
,
dev
->
wakeup
.
gpe_number
,
ACPI_GPE_DISABLE
);
if
(
dev
->
wakeup
.
state
.
enabled
)
if
(
dev
ice_may_wakeup
(
&
dev
->
dev
)
)
acpi_disable_wakeup_device_power
(
dev
);
}
}
...
...
@@ -84,8 +86,8 @@ int __init acpi_wakeup_device_init(void)
struct
acpi_device
*
dev
=
container_of
(
node
,
struct
acpi_device
,
wakeup_list
);
if
(
dev
->
wakeup
.
flags
.
always_enabled
)
dev
->
wakeup
.
state
.
enabled
=
1
;
if
(
dev
ice_can_wakeup
(
&
dev
->
dev
)
)
dev
ice_set_wakeup_enable
(
&
dev
->
dev
,
true
)
;
}
mutex_unlock
(
&
acpi_device_lock
);
return
0
;
...
...
include/acpi/acpi_bus.h
浏览文件 @
fb4af417
...
...
@@ -241,20 +241,14 @@ struct acpi_device_perf {
struct
acpi_device_wakeup_flags
{
u8
valid
:
1
;
/* Can successfully enable wakeup? */
u8
run_wake
:
1
;
/* Run-Wake GPE devices */
u8
always_enabled
:
1
;
/* Run-wake devices that are always enabled */
u8
notifier_present
:
1
;
/* Wake-up notify handler has been installed */
};
struct
acpi_device_wakeup_state
{
u8
enabled
:
1
;
};
struct
acpi_device_wakeup
{
acpi_handle
gpe_device
;
u64
gpe_number
;
u64
sleep_state
;
struct
acpi_handle_list
resources
;
struct
acpi_device_wakeup_state
state
;
struct
acpi_device_wakeup_flags
flags
;
int
prepare_count
;
int
run_wake_count
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录