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
fe7fa9c5
Commit
fe7fa9c5
authored
Dec 24, 2009
by
Len Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'sony' into release
parents
6d3bf681
528809c3
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
72 additions
and
23 deletions
+72
-23
drivers/platform/x86/sony-laptop.c
drivers/platform/x86/sony-laptop.c
+71
-23
include/linux/sonypi.h
include/linux/sonypi.h
+1
-0
No files found.
drivers/platform/x86/sony-laptop.c
View file @
fe7fa9c5
...
...
@@ -131,6 +131,7 @@ enum sony_nc_rfkill {
N_SONY_RFKILL
,
};
static
int
sony_rfkill_handle
;
static
struct
rfkill
*
sony_rfkill_devices
[
N_SONY_RFKILL
];
static
int
sony_rfkill_address
[
N_SONY_RFKILL
]
=
{
0x300
,
0x500
,
0x700
,
0x900
};
static
void
sony_nc_rfkill_update
(
void
);
...
...
@@ -232,6 +233,7 @@ static int sony_laptop_input_index[] = {
56
,
/* 69 SONYPI_EVENT_VOLUME_INC_PRESSED */
57
,
/* 70 SONYPI_EVENT_VOLUME_DEC_PRESSED */
-
1
,
/* 71 SONYPI_EVENT_BRIGHTNESS_PRESSED */
58
,
/* 72 SONYPI_EVENT_MEDIA_PRESSED */
};
static
int
sony_laptop_input_keycode_map
[]
=
{
...
...
@@ -293,6 +295,7 @@ static int sony_laptop_input_keycode_map[] = {
KEY_F15
,
/* 55 SONYPI_EVENT_SETTINGKEY_PRESSED */
KEY_VOLUMEUP
,
/* 56 SONYPI_EVENT_VOLUME_INC_PRESSED */
KEY_VOLUMEDOWN
,
/* 57 SONYPI_EVENT_VOLUME_DEC_PRESSED */
KEY_MEDIA
,
/* 58 SONYPI_EVENT_MEDIA_PRESSED */
};
/* release buttons after a short delay if pressed */
...
...
@@ -890,6 +893,8 @@ static struct sony_nc_event sony_100_events[] = {
{
0x0C
,
SONYPI_EVENT_FNKEY_RELEASED
},
{
0x9f
,
SONYPI_EVENT_CD_EJECT_PRESSED
},
{
0x1f
,
SONYPI_EVENT_ANYBUTTON_RELEASED
},
{
0xa1
,
SONYPI_EVENT_MEDIA_PRESSED
},
{
0x21
,
SONYPI_EVENT_ANYBUTTON_RELEASED
},
{
0
,
0
},
};
...
...
@@ -961,7 +966,7 @@ static void sony_nc_notify(struct acpi_device *device, u32 event)
else
sony_laptop_report_input_event
(
ev
);
}
}
else
if
(
sony_find_snc_handle
(
0x124
)
==
ev
)
{
}
else
if
(
sony_find_snc_handle
(
sony_rfkill_handle
)
==
ev
)
{
sony_nc_rfkill_update
();
return
;
}
...
...
@@ -1067,7 +1072,7 @@ static int sony_nc_rfkill_set(void *data, bool blocked)
if
(
!
blocked
)
argument
|=
0xff0000
;
return
sony_call_snc_handle
(
0x124
,
argument
,
&
result
);
return
sony_call_snc_handle
(
sony_rfkill_handle
,
argument
,
&
result
);
}
static
const
struct
rfkill_ops
sony_rfkill_ops
=
{
...
...
@@ -1110,7 +1115,7 @@ static int sony_nc_setup_rfkill(struct acpi_device *device,
if
(
!
rfk
)
return
-
ENOMEM
;
sony_call_snc_handle
(
0x124
,
0x200
,
&
result
);
sony_call_snc_handle
(
sony_rfkill_handle
,
0x200
,
&
result
);
hwblock
=
!
(
result
&
0x1
);
rfkill_set_hw_state
(
rfk
,
hwblock
);
...
...
@@ -1129,7 +1134,7 @@ static void sony_nc_rfkill_update()
int
result
;
bool
hwblock
;
sony_call_snc_handle
(
0x124
,
0x200
,
&
result
);
sony_call_snc_handle
(
sony_rfkill_handle
,
0x200
,
&
result
);
hwblock
=
!
(
result
&
0x1
);
for
(
i
=
0
;
i
<
N_SONY_RFKILL
;
i
++
)
{
...
...
@@ -1145,36 +1150,79 @@ static void sony_nc_rfkill_update()
continue
;
}
sony_call_snc_handle
(
0x124
,
argument
,
&
result
);
sony_call_snc_handle
(
sony_rfkill_handle
,
argument
,
&
result
);
rfkill_set_states
(
sony_rfkill_devices
[
i
],
!
(
result
&
0xf
),
false
);
}
}
static
int
sony_nc_rfkill_setup
(
struct
acpi_device
*
device
)
static
void
sony_nc_rfkill_setup
(
struct
acpi_device
*
device
)
{
int
result
,
ret
;
int
offset
;
u8
dev_code
,
i
;
acpi_status
status
;
struct
acpi_object_list
params
;
union
acpi_object
in_obj
;
union
acpi_object
*
device_enum
;
struct
acpi_buffer
buffer
=
{
ACPI_ALLOCATE_BUFFER
,
NULL
};
if
(
sony_find_snc_handle
(
0x124
)
==
-
1
)
return
-
1
;
offset
=
sony_find_snc_handle
(
0x124
);
if
(
offset
==
-
1
)
{
offset
=
sony_find_snc_handle
(
0x135
);
if
(
offset
==
-
1
)
return
;
else
sony_rfkill_handle
=
0x135
;
}
else
sony_rfkill_handle
=
0x124
;
dprintk
(
"Found rkfill handle: 0x%.4x
\n
"
,
sony_rfkill_handle
);
ret
=
sony_call_snc_handle
(
0x124
,
0xb00
,
&
result
);
if
(
ret
)
{
printk
(
KERN_INFO
DRV_PFX
"Unable to enumerate rfkill devices: %x
\n
"
,
ret
);
return
ret
;
/* need to read the whole buffer returned by the acpi call to SN06
* here otherwise we may miss some features
*/
params
.
count
=
1
;
params
.
pointer
=
&
in_obj
;
in_obj
.
type
=
ACPI_TYPE_INTEGER
;
in_obj
.
integer
.
value
=
offset
;
status
=
acpi_evaluate_object
(
sony_nc_acpi_handle
,
"SN06"
,
&
params
,
&
buffer
);
if
(
ACPI_FAILURE
(
status
))
{
dprintk
(
"Radio device enumeration failed
\n
"
);
return
;
}
device_enum
=
(
union
acpi_object
*
)
buffer
.
pointer
;
if
(
!
device_enum
||
device_enum
->
type
!=
ACPI_TYPE_BUFFER
)
{
printk
(
KERN_ERR
"Invalid SN06 return object 0x%.2x
\n
"
,
device_enum
->
type
);
goto
out_no_enum
;
}
if
(
result
&
0x1
)
sony_nc_setup_rfkill
(
device
,
SONY_WIFI
);
if
(
result
&
0x2
)
sony_nc_setup_rfkill
(
device
,
SONY_BLUETOOTH
);
if
(
result
&
0x1c
)
sony_nc_setup_rfkill
(
device
,
SONY_WWAN
);
if
(
result
&
0x20
)
sony_nc_setup_rfkill
(
device
,
SONY_WIMAX
);
/* the buffer is filled with magic numbers describing the devices
* available, 0xff terminates the enumeration
*/
while
((
dev_code
=
*
(
device_enum
->
buffer
.
pointer
+
i
))
!=
0xff
&&
i
<
device_enum
->
buffer
.
length
)
{
i
++
;
dprintk
(
"Radio devices, looking at 0x%.2x
\n
"
,
dev_code
);
return
0
;
if
(
dev_code
==
0
&&
!
sony_rfkill_devices
[
SONY_WIFI
])
sony_nc_setup_rfkill
(
device
,
SONY_WIFI
);
if
(
dev_code
==
0x10
&&
!
sony_rfkill_devices
[
SONY_BLUETOOTH
])
sony_nc_setup_rfkill
(
device
,
SONY_BLUETOOTH
);
if
((
0xf0
&
dev_code
)
==
0x20
&&
!
sony_rfkill_devices
[
SONY_WWAN
])
sony_nc_setup_rfkill
(
device
,
SONY_WWAN
);
if
(
dev_code
==
0x30
&&
!
sony_rfkill_devices
[
SONY_WIMAX
])
sony_nc_setup_rfkill
(
device
,
SONY_WIMAX
);
}
out_no_enum:
kfree
(
buffer
.
pointer
);
return
;
}
static
int
sony_nc_add
(
struct
acpi_device
*
device
)
...
...
include/linux/sonypi.h
View file @
fe7fa9c5
...
...
@@ -111,6 +111,7 @@
#define SONYPI_EVENT_VOLUME_INC_PRESSED 69
#define SONYPI_EVENT_VOLUME_DEC_PRESSED 70
#define SONYPI_EVENT_BRIGHTNESS_PRESSED 71
#define SONYPI_EVENT_MEDIA_PRESSED 72
/* get/set brightness */
#define SONYPI_IOCGBRT _IOR('v', 0, __u8)
...
...
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