Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
abdef01d
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
abdef01d
编写于
12月 15, 2009
作者:
L
Len Brown
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'hp-wmi' into release
上级
6cbef9fd
e5fbba85
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
84 addition
and
55 deletion
+84
-55
drivers/platform/x86/hp-wmi.c
drivers/platform/x86/hp-wmi.c
+84
-55
未找到文件。
drivers/platform/x86/hp-wmi.c
浏览文件 @
abdef01d
...
...
@@ -51,6 +51,12 @@ MODULE_ALIAS("wmi:5FB7F034-2C63-45e9-BE91-3D44E2C707E4");
#define HPWMI_WIRELESS_QUERY 0x5
#define HPWMI_HOTKEY_QUERY 0xc
enum
hp_wmi_radio
{
HPWMI_WIFI
=
0
,
HPWMI_BLUETOOTH
=
1
,
HPWMI_WWAN
=
2
,
};
static
int
__init
hp_wmi_bios_setup
(
struct
platform_device
*
device
);
static
int
__exit
hp_wmi_bios_remove
(
struct
platform_device
*
device
);
static
int
hp_wmi_resume_handler
(
struct
device
*
device
);
...
...
@@ -175,8 +181,8 @@ static int hp_wmi_tablet_state(void)
static
int
hp_wmi_set_block
(
void
*
data
,
bool
blocked
)
{
unsigned
long
b
=
(
unsigned
long
)
data
;
int
query
=
BIT
(
b
+
8
)
|
((
!
blocked
)
<<
b
);
enum
hp_wmi_radio
r
=
(
enum
hp_wmi_radio
)
data
;
int
query
=
BIT
(
r
+
8
)
|
((
!
blocked
)
<<
r
);
return
hp_wmi_perform_query
(
HPWMI_WIRELESS_QUERY
,
1
,
query
);
}
...
...
@@ -185,31 +191,23 @@ static const struct rfkill_ops hp_wmi_rfkill_ops = {
.
set_block
=
hp_wmi_set_block
,
};
static
bool
hp_wmi_wifi_state
(
void
)
{
int
wireless
=
hp_wmi_perform_query
(
HPWMI_WIRELESS_QUERY
,
0
,
0
);
if
(
wireless
&
0x100
)
return
false
;
else
return
true
;
}
static
bool
hp_wmi_bluetooth_state
(
void
)
static
bool
hp_wmi_get_sw_state
(
enum
hp_wmi_radio
r
)
{
int
wireless
=
hp_wmi_perform_query
(
HPWMI_WIRELESS_QUERY
,
0
,
0
);
int
mask
=
0x200
<<
(
r
*
8
);
if
(
wireless
&
0x10000
)
if
(
wireless
&
mask
)
return
false
;
else
return
true
;
}
static
bool
hp_wmi_
wwan_state
(
void
)
static
bool
hp_wmi_
get_hw_state
(
enum
hp_wmi_radio
r
)
{
int
wireless
=
hp_wmi_perform_query
(
HPWMI_WIRELESS_QUERY
,
0
,
0
);
int
mask
=
0x800
<<
(
r
*
8
);
if
(
wireless
&
0x1000000
)
if
(
wireless
&
mask
)
return
false
;
else
return
true
;
...
...
@@ -334,49 +332,55 @@ static void hp_wmi_notify(u32 value, void *context)
struct
acpi_buffer
response
=
{
ACPI_ALLOCATE_BUFFER
,
NULL
};
static
struct
key_entry
*
key
;
union
acpi_object
*
obj
;
int
eventcode
;
wmi_get_event_data
(
value
,
&
response
);
obj
=
(
union
acpi_object
*
)
response
.
pointer
;
if
(
obj
&&
obj
->
type
==
ACPI_TYPE_BUFFER
&&
obj
->
buffer
.
length
==
8
)
{
int
eventcode
=
*
((
u8
*
)
obj
->
buffer
.
pointer
);
if
(
eventcode
==
0x4
)
eventcode
=
hp_wmi_perform_query
(
HPWMI_HOTKEY_QUERY
,
0
,
0
);
key
=
hp_wmi_get_entry_by_scancode
(
eventcode
);
if
(
key
)
{
switch
(
key
->
type
)
{
case
KE_KEY
:
input_report_key
(
hp_wmi_input_dev
,
key
->
keycode
,
1
);
input_sync
(
hp_wmi_input_dev
);
input_report_key
(
hp_wmi_input_dev
,
key
->
keycode
,
0
);
input_sync
(
hp_wmi_input_dev
);
break
;
}
}
else
if
(
eventcode
==
0x1
)
{
input_report_switch
(
hp_wmi_input_dev
,
SW_DOCK
,
hp_wmi_dock_state
());
input_report_switch
(
hp_wmi_input_dev
,
SW_TABLET_MODE
,
hp_wmi_tablet_state
());
if
(
!
obj
||
obj
->
type
!=
ACPI_TYPE_BUFFER
||
obj
->
buffer
.
length
!=
8
)
{
printk
(
KERN_INFO
"HP WMI: Unknown response received
\n
"
);
return
;
}
eventcode
=
*
((
u8
*
)
obj
->
buffer
.
pointer
);
if
(
eventcode
==
0x4
)
eventcode
=
hp_wmi_perform_query
(
HPWMI_HOTKEY_QUERY
,
0
,
0
);
key
=
hp_wmi_get_entry_by_scancode
(
eventcode
);
if
(
key
)
{
switch
(
key
->
type
)
{
case
KE_KEY
:
input_report_key
(
hp_wmi_input_dev
,
key
->
keycode
,
1
);
input_sync
(
hp_wmi_input_dev
);
input_report_key
(
hp_wmi_input_dev
,
key
->
keycode
,
0
);
input_sync
(
hp_wmi_input_dev
);
}
else
if
(
eventcode
==
0x5
)
{
if
(
wifi_rfkill
)
rfkill_set_sw_state
(
wifi_rfkill
,
hp_wmi_wifi_state
());
if
(
bluetooth_rfkill
)
rfkill_set_sw_state
(
bluetooth_rfkill
,
hp_wmi_bluetooth_state
());
if
(
wwan_rfkill
)
rfkill_set_sw_state
(
wwan_rfkill
,
hp_wmi_wwan_state
());
}
else
printk
(
KERN_INFO
"HP WMI: Unknown key pressed - %x
\n
"
,
eventcode
);
break
;
}
}
else
if
(
eventcode
==
0x1
)
{
input_report_switch
(
hp_wmi_input_dev
,
SW_DOCK
,
hp_wmi_dock_state
());
input_report_switch
(
hp_wmi_input_dev
,
SW_TABLET_MODE
,
hp_wmi_tablet_state
());
input_sync
(
hp_wmi_input_dev
);
}
else
if
(
eventcode
==
0x5
)
{
if
(
wifi_rfkill
)
rfkill_set_states
(
wifi_rfkill
,
hp_wmi_get_sw_state
(
HPWMI_WIFI
),
hp_wmi_get_hw_state
(
HPWMI_WIFI
));
if
(
bluetooth_rfkill
)
rfkill_set_states
(
bluetooth_rfkill
,
hp_wmi_get_sw_state
(
HPWMI_BLUETOOTH
),
hp_wmi_get_hw_state
(
HPWMI_BLUETOOTH
));
if
(
wwan_rfkill
)
rfkill_set_states
(
wwan_rfkill
,
hp_wmi_get_sw_state
(
HPWMI_WWAN
),
hp_wmi_get_hw_state
(
HPWMI_WWAN
));
}
else
printk
(
KERN_INFO
"HP WMI: Unknown response received
\n
"
);
printk
(
KERN_INFO
"HP WMI: Unknown key pressed - %x
\n
"
,
eventcode
);
}
static
int
__init
hp_wmi_input_setup
(
void
)
...
...
@@ -455,7 +459,11 @@ static int __init hp_wmi_bios_setup(struct platform_device *device)
wifi_rfkill
=
rfkill_alloc
(
"hp-wifi"
,
&
device
->
dev
,
RFKILL_TYPE_WLAN
,
&
hp_wmi_rfkill_ops
,
(
void
*
)
0
);
(
void
*
)
HPWMI_WIFI
);
rfkill_init_sw_state
(
wifi_rfkill
,
hp_wmi_get_sw_state
(
HPWMI_WIFI
));
rfkill_set_hw_state
(
wifi_rfkill
,
hp_wmi_get_hw_state
(
HPWMI_WIFI
));
err
=
rfkill_register
(
wifi_rfkill
);
if
(
err
)
goto
register_wifi_error
;
...
...
@@ -465,7 +473,11 @@ static int __init hp_wmi_bios_setup(struct platform_device *device)
bluetooth_rfkill
=
rfkill_alloc
(
"hp-bluetooth"
,
&
device
->
dev
,
RFKILL_TYPE_BLUETOOTH
,
&
hp_wmi_rfkill_ops
,
(
void
*
)
1
);
(
void
*
)
HPWMI_BLUETOOTH
);
rfkill_init_sw_state
(
bluetooth_rfkill
,
hp_wmi_get_sw_state
(
HPWMI_BLUETOOTH
));
rfkill_set_hw_state
(
bluetooth_rfkill
,
hp_wmi_get_hw_state
(
HPWMI_BLUETOOTH
));
err
=
rfkill_register
(
bluetooth_rfkill
);
if
(
err
)
goto
register_bluetooth_error
;
...
...
@@ -475,7 +487,11 @@ static int __init hp_wmi_bios_setup(struct platform_device *device)
wwan_rfkill
=
rfkill_alloc
(
"hp-wwan"
,
&
device
->
dev
,
RFKILL_TYPE_WWAN
,
&
hp_wmi_rfkill_ops
,
(
void
*
)
2
);
(
void
*
)
HPWMI_WWAN
);
rfkill_init_sw_state
(
wwan_rfkill
,
hp_wmi_get_sw_state
(
HPWMI_WWAN
));
rfkill_set_hw_state
(
wwan_rfkill
,
hp_wmi_get_hw_state
(
HPWMI_WWAN
));
err
=
rfkill_register
(
wwan_rfkill
);
if
(
err
)
goto
register_wwan_err
;
...
...
@@ -533,6 +549,19 @@ static int hp_wmi_resume_handler(struct device *device)
input_sync
(
hp_wmi_input_dev
);
}
if
(
wifi_rfkill
)
rfkill_set_states
(
wifi_rfkill
,
hp_wmi_get_sw_state
(
HPWMI_WIFI
),
hp_wmi_get_hw_state
(
HPWMI_WIFI
));
if
(
bluetooth_rfkill
)
rfkill_set_states
(
bluetooth_rfkill
,
hp_wmi_get_sw_state
(
HPWMI_BLUETOOTH
),
hp_wmi_get_hw_state
(
HPWMI_BLUETOOTH
));
if
(
wwan_rfkill
)
rfkill_set_states
(
wwan_rfkill
,
hp_wmi_get_sw_state
(
HPWMI_WWAN
),
hp_wmi_get_hw_state
(
HPWMI_WWAN
));
return
0
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录