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
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 {
...
@@ -131,6 +131,7 @@ enum sony_nc_rfkill {
N_SONY_RFKILL
,
N_SONY_RFKILL
,
};
};
static
int
sony_rfkill_handle
;
static
struct
rfkill
*
sony_rfkill_devices
[
N_SONY_RFKILL
];
static
struct
rfkill
*
sony_rfkill_devices
[
N_SONY_RFKILL
];
static
int
sony_rfkill_address
[
N_SONY_RFKILL
]
=
{
0x300
,
0x500
,
0x700
,
0x900
};
static
int
sony_rfkill_address
[
N_SONY_RFKILL
]
=
{
0x300
,
0x500
,
0x700
,
0x900
};
static
void
sony_nc_rfkill_update
(
void
);
static
void
sony_nc_rfkill_update
(
void
);
...
@@ -232,6 +233,7 @@ static int sony_laptop_input_index[] = {
...
@@ -232,6 +233,7 @@ static int sony_laptop_input_index[] = {
56
,
/* 69 SONYPI_EVENT_VOLUME_INC_PRESSED */
56
,
/* 69 SONYPI_EVENT_VOLUME_INC_PRESSED */
57
,
/* 70 SONYPI_EVENT_VOLUME_DEC_PRESSED */
57
,
/* 70 SONYPI_EVENT_VOLUME_DEC_PRESSED */
-
1
,
/* 71 SONYPI_EVENT_BRIGHTNESS_PRESSED */
-
1
,
/* 71 SONYPI_EVENT_BRIGHTNESS_PRESSED */
58
,
/* 72 SONYPI_EVENT_MEDIA_PRESSED */
};
};
static
int
sony_laptop_input_keycode_map
[]
=
{
static
int
sony_laptop_input_keycode_map
[]
=
{
...
@@ -293,6 +295,7 @@ 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_F15
,
/* 55 SONYPI_EVENT_SETTINGKEY_PRESSED */
KEY_VOLUMEUP
,
/* 56 SONYPI_EVENT_VOLUME_INC_PRESSED */
KEY_VOLUMEUP
,
/* 56 SONYPI_EVENT_VOLUME_INC_PRESSED */
KEY_VOLUMEDOWN
,
/* 57 SONYPI_EVENT_VOLUME_DEC_PRESSED */
KEY_VOLUMEDOWN
,
/* 57 SONYPI_EVENT_VOLUME_DEC_PRESSED */
KEY_MEDIA
,
/* 58 SONYPI_EVENT_MEDIA_PRESSED */
};
};
/* release buttons after a short delay if pressed */
/* release buttons after a short delay if pressed */
...
@@ -890,6 +893,8 @@ static struct sony_nc_event sony_100_events[] = {
...
@@ -890,6 +893,8 @@ static struct sony_nc_event sony_100_events[] = {
{
0x0C
,
SONYPI_EVENT_FNKEY_RELEASED
},
{
0x0C
,
SONYPI_EVENT_FNKEY_RELEASED
},
{
0x9f
,
SONYPI_EVENT_CD_EJECT_PRESSED
},
{
0x9f
,
SONYPI_EVENT_CD_EJECT_PRESSED
},
{
0x1f
,
SONYPI_EVENT_ANYBUTTON_RELEASED
},
{
0x1f
,
SONYPI_EVENT_ANYBUTTON_RELEASED
},
{
0xa1
,
SONYPI_EVENT_MEDIA_PRESSED
},
{
0x21
,
SONYPI_EVENT_ANYBUTTON_RELEASED
},
{
0
,
0
},
{
0
,
0
},
};
};
...
@@ -961,7 +966,7 @@ static void sony_nc_notify(struct acpi_device *device, u32 event)
...
@@ -961,7 +966,7 @@ static void sony_nc_notify(struct acpi_device *device, u32 event)
else
else
sony_laptop_report_input_event
(
ev
);
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
();
sony_nc_rfkill_update
();
return
;
return
;
}
}
...
@@ -1067,7 +1072,7 @@ static int sony_nc_rfkill_set(void *data, bool blocked)
...
@@ -1067,7 +1072,7 @@ static int sony_nc_rfkill_set(void *data, bool blocked)
if
(
!
blocked
)
if
(
!
blocked
)
argument
|=
0xff0000
;
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
=
{
static
const
struct
rfkill_ops
sony_rfkill_ops
=
{
...
@@ -1110,7 +1115,7 @@ static int sony_nc_setup_rfkill(struct acpi_device *device,
...
@@ -1110,7 +1115,7 @@ static int sony_nc_setup_rfkill(struct acpi_device *device,
if
(
!
rfk
)
if
(
!
rfk
)
return
-
ENOMEM
;
return
-
ENOMEM
;
sony_call_snc_handle
(
0x124
,
0x200
,
&
result
);
sony_call_snc_handle
(
sony_rfkill_handle
,
0x200
,
&
result
);
hwblock
=
!
(
result
&
0x1
);
hwblock
=
!
(
result
&
0x1
);
rfkill_set_hw_state
(
rfk
,
hwblock
);
rfkill_set_hw_state
(
rfk
,
hwblock
);
...
@@ -1129,7 +1134,7 @@ static void sony_nc_rfkill_update()
...
@@ -1129,7 +1134,7 @@ static void sony_nc_rfkill_update()
int
result
;
int
result
;
bool
hwblock
;
bool
hwblock
;
sony_call_snc_handle
(
0x124
,
0x200
,
&
result
);
sony_call_snc_handle
(
sony_rfkill_handle
,
0x200
,
&
result
);
hwblock
=
!
(
result
&
0x1
);
hwblock
=
!
(
result
&
0x1
);
for
(
i
=
0
;
i
<
N_SONY_RFKILL
;
i
++
)
{
for
(
i
=
0
;
i
<
N_SONY_RFKILL
;
i
++
)
{
...
@@ -1145,36 +1150,79 @@ static void sony_nc_rfkill_update()
...
@@ -1145,36 +1150,79 @@ static void sony_nc_rfkill_update()
continue
;
continue
;
}
}
sony_call_snc_handle
(
0x124
,
argument
,
&
result
);
sony_call_snc_handle
(
sony_rfkill_handle
,
argument
,
&
result
);
rfkill_set_states
(
sony_rfkill_devices
[
i
],
rfkill_set_states
(
sony_rfkill_devices
[
i
],
!
(
result
&
0xf
),
false
);
!
(
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
)
offset
=
sony_find_snc_handle
(
0x124
);
return
-
1
;
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
);
/* need to read the whole buffer returned by the acpi call to SN06
if
(
ret
)
{
* here otherwise we may miss some features
printk
(
KERN_INFO
DRV_PFX
*/
"Unable to enumerate rfkill devices: %x
\n
"
,
ret
);
params
.
count
=
1
;
return
ret
;
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
)
/* the buffer is filled with magic numbers describing the devices
sony_nc_setup_rfkill
(
device
,
SONY_WIFI
);
* available, 0xff terminates the enumeration
if
(
result
&
0x2
)
*/
sony_nc_setup_rfkill
(
device
,
SONY_BLUETOOTH
);
while
((
dev_code
=
*
(
device_enum
->
buffer
.
pointer
+
i
))
!=
0xff
&&
if
(
result
&
0x1c
)
i
<
device_enum
->
buffer
.
length
)
{
sony_nc_setup_rfkill
(
device
,
SONY_WWAN
);
i
++
;
if
(
result
&
0x20
)
dprintk
(
"Radio devices, looking at 0x%.2x
\n
"
,
dev_code
);
sony_nc_setup_rfkill
(
device
,
SONY_WIMAX
);
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
)
static
int
sony_nc_add
(
struct
acpi_device
*
device
)
...
...
include/linux/sonypi.h
View file @
fe7fa9c5
...
@@ -111,6 +111,7 @@
...
@@ -111,6 +111,7 @@
#define SONYPI_EVENT_VOLUME_INC_PRESSED 69
#define SONYPI_EVENT_VOLUME_INC_PRESSED 69
#define SONYPI_EVENT_VOLUME_DEC_PRESSED 70
#define SONYPI_EVENT_VOLUME_DEC_PRESSED 70
#define SONYPI_EVENT_BRIGHTNESS_PRESSED 71
#define SONYPI_EVENT_BRIGHTNESS_PRESSED 71
#define SONYPI_EVENT_MEDIA_PRESSED 72
/* get/set brightness */
/* get/set brightness */
#define SONYPI_IOCGBRT _IOR('v', 0, __u8)
#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