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
abdef01d
Commit
abdef01d
authored
Dec 15, 2009
by
Len Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'hp-wmi' into release
parents
6cbef9fd
e5fbba85
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
84 additions
and
55 deletions
+84
-55
drivers/platform/x86/hp-wmi.c
drivers/platform/x86/hp-wmi.c
+84
-55
No files found.
drivers/platform/x86/hp-wmi.c
View file @
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,13 +332,18 @@ 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
(
!
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
);
...
...
@@ -364,19 +367,20 @@ static void hp_wmi_notify(u32 value, void *context)
input_sync
(
hp_wmi_input_dev
);
}
else
if
(
eventcode
==
0x5
)
{
if
(
wifi_rfkill
)
rfkill_set_sw_state
(
wifi_rfkill
,
hp_wmi_wifi_state
());
rfkill_set_states
(
wifi_rfkill
,
hp_wmi_get_sw_state
(
HPWMI_WIFI
),
hp_wmi_get_hw_state
(
HPWMI_WIFI
));
if
(
bluetooth_rfkill
)
rfkill_set_sw_state
(
bluetooth_rfkill
,
hp_wmi_bluetooth_state
());
rfkill_set_states
(
bluetooth_rfkill
,
hp_wmi_get_sw_state
(
HPWMI_BLUETOOTH
),
hp_wmi_get_hw_state
(
HPWMI_BLUETOOTH
));
if
(
wwan_rfkill
)
rfkill_set_sw_state
(
wwan_rfkill
,
hp_wmi_wwan_state
());
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 key pressed - %x
\n
"
,
eventcode
);
}
else
printk
(
KERN_INFO
"HP WMI: Unknown response received
\n
"
);
}
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
;
}
...
...
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