Merge back earlier 'acpi-assorted' material
This commit is contained in:
commit
f3ce717e60
|
@ -8,8 +8,8 @@ http://acpi4asus.sf.net/
|
|||
|
||||
This driver provides support for extra features of ACPI-compatible ASUS laptops.
|
||||
It may also support some MEDION, JVC or VICTOR laptops (such as MEDION 9675 or
|
||||
VICTOR XP7210 for example). It makes all the extra buttons generate standard
|
||||
ACPI events that go through /proc/acpi/events and input events (like keyboards).
|
||||
VICTOR XP7210 for example). It makes all the extra buttons generate input
|
||||
events (like keyboards).
|
||||
On some models adds support for changing the display brightness and output,
|
||||
switching the LCD backlight on and off, and most importantly, allows you to
|
||||
blink those fancy LEDs intended for reporting mail and wireless status.
|
||||
|
@ -55,8 +55,8 @@ Usage
|
|||
DSDT) to me.
|
||||
|
||||
That's all, now, all the events generated by the hotkeys of your laptop
|
||||
should be reported in your /proc/acpi/event entry. You can check with
|
||||
"acpi_listen".
|
||||
should be reported via netlink events. You can check with
|
||||
"acpi_genl monitor" (part of the acpica project).
|
||||
|
||||
Hotkeys are also reported as input keys (like keyboards) you can check
|
||||
which key are supported using "xev" under X11.
|
||||
|
|
|
@ -12,10 +12,10 @@ Fn keys (hotkeys):
|
|||
------------------
|
||||
Some models report hotkeys through the SNC or SPIC devices, such events are
|
||||
reported both through the ACPI subsystem as acpi events and through the INPUT
|
||||
subsystem. See the logs of acpid or /proc/acpi/event and
|
||||
/proc/bus/input/devices to find out what those events are and which input
|
||||
devices are created by the driver. Additionally, loading the driver with the
|
||||
debug option will report all events in the kernel log.
|
||||
subsystem. See the logs of /proc/bus/input/devices to find out what those
|
||||
events are and which input devices are created by the driver.
|
||||
Additionally, loading the driver with the debug option will report all events
|
||||
in the kernel log.
|
||||
|
||||
The "scancodes" passed to the input system (that can be remapped with udev)
|
||||
are indexes to the table "sony_laptop_input_keycode_map" in the sony-laptop.c
|
||||
|
|
|
@ -329,20 +329,6 @@ sysfs notes:
|
|||
|
||||
This attribute has poll()/select() support.
|
||||
|
||||
hotkey_report_mode:
|
||||
Returns the state of the procfs ACPI event report mode
|
||||
filter for hot keys. If it is set to 1 (the default),
|
||||
all hot key presses are reported both through the input
|
||||
layer and also as ACPI events through procfs (but not
|
||||
through netlink). If it is set to 2, hot key presses
|
||||
are reported only through the input layer.
|
||||
|
||||
This attribute is read-only in kernels 2.6.23 or later,
|
||||
and read-write on earlier kernels.
|
||||
|
||||
May return -EPERM (write access locked out by module
|
||||
parameter) or -EACCES (read-only).
|
||||
|
||||
wakeup_reason:
|
||||
Set to 1 if the system is waking up because the user
|
||||
requested a bay ejection. Set to 2 if the system is
|
||||
|
@ -518,24 +504,21 @@ SW_TABLET_MODE Tablet ThinkPads HKEY events 0x5009 and 0x500A
|
|||
Non hotkey ACPI HKEY event map:
|
||||
-------------------------------
|
||||
|
||||
Events that are not propagated by the driver, except for legacy
|
||||
compatibility purposes when hotkey_report_mode is set to 1:
|
||||
|
||||
0x5001 Lid closed
|
||||
0x5002 Lid opened
|
||||
0x5009 Tablet swivel: switched to tablet mode
|
||||
0x500A Tablet swivel: switched to normal mode
|
||||
0x7000 Radio Switch may have changed state
|
||||
|
||||
Events that are never propagated by the driver:
|
||||
|
||||
0x2304 System is waking up from suspend to undock
|
||||
0x2305 System is waking up from suspend to eject bay
|
||||
0x2404 System is waking up from hibernation to undock
|
||||
0x2405 System is waking up from hibernation to eject bay
|
||||
0x5001 Lid closed
|
||||
0x5002 Lid opened
|
||||
0x5009 Tablet swivel: switched to tablet mode
|
||||
0x500A Tablet swivel: switched to normal mode
|
||||
0x5010 Brightness level changed/control event
|
||||
0x6000 KEYBOARD: Numlock key pressed
|
||||
0x6005 KEYBOARD: Fn key pressed (TO BE VERIFIED)
|
||||
0x7000 Radio Switch may have changed state
|
||||
|
||||
|
||||
Events that are propagated by the driver to userspace:
|
||||
|
||||
|
@ -574,50 +557,6 @@ operating system is to force either an immediate suspend or hibernate
|
|||
cycle, or a system shutdown. Obviously, something is very wrong if this
|
||||
happens.
|
||||
|
||||
Compatibility notes:
|
||||
|
||||
ibm-acpi and thinkpad-acpi 0.15 (mainline kernels before 2.6.23) never
|
||||
supported the input layer, and sent events over the procfs ACPI event
|
||||
interface.
|
||||
|
||||
To avoid sending duplicate events over the input layer and the ACPI
|
||||
event interface, thinkpad-acpi 0.16 implements a module parameter
|
||||
(hotkey_report_mode), and also a sysfs device attribute with the same
|
||||
name.
|
||||
|
||||
Make no mistake here: userspace is expected to switch to using the input
|
||||
layer interface of thinkpad-acpi, together with the ACPI netlink event
|
||||
interface in kernels 2.6.23 and later, or with the ACPI procfs event
|
||||
interface in kernels 2.6.22 and earlier.
|
||||
|
||||
If no hotkey_report_mode module parameter is specified (or it is set to
|
||||
zero), the driver defaults to mode 1 (see below), and on kernels 2.6.22
|
||||
and earlier, also allows one to change the hotkey_report_mode through
|
||||
sysfs. In kernels 2.6.23 and later, where the netlink ACPI event
|
||||
interface is available, hotkey_report_mode cannot be changed through
|
||||
sysfs (it is read-only).
|
||||
|
||||
If the hotkey_report_mode module parameter is set to 1 or 2, it cannot
|
||||
be changed later through sysfs (any writes will return -EPERM to signal
|
||||
that hotkey_report_mode was locked. On 2.6.23 and later, where
|
||||
hotkey_report_mode cannot be changed at all, writes will return -EACCES).
|
||||
|
||||
hotkey_report_mode set to 1 makes the driver export through the procfs
|
||||
ACPI event interface all hot key presses (which are *also* sent to the
|
||||
input layer). This is a legacy compatibility behaviour, and it is also
|
||||
the default mode of operation for the driver.
|
||||
|
||||
hotkey_report_mode set to 2 makes the driver filter out the hot key
|
||||
presses from the procfs ACPI event interface, so these events will only
|
||||
be sent through the input layer. Userspace that has been updated to use
|
||||
the thinkpad-acpi input layer interface should set hotkey_report_mode to
|
||||
2.
|
||||
|
||||
Hot key press events are never sent to the ACPI netlink event interface.
|
||||
Really up-to-date userspace under kernel 2.6.23 and later is to use the
|
||||
netlink interface and the input layer interface, and don't bother at all
|
||||
with hotkey_report_mode.
|
||||
|
||||
|
||||
Brightness hotkey notes:
|
||||
|
||||
|
|
|
@ -91,24 +91,6 @@ config ACPI_EC_DEBUGFS
|
|||
Thus this option is a debug option that helps to write ACPI drivers
|
||||
and can be used to identify ACPI code or EC firmware bugs.
|
||||
|
||||
config ACPI_PROC_EVENT
|
||||
bool "Deprecated /proc/acpi/event support"
|
||||
depends on PROC_FS
|
||||
default y
|
||||
help
|
||||
A user-space daemon, acpid, typically reads /proc/acpi/event
|
||||
and handles all ACPI-generated events.
|
||||
|
||||
These events are now delivered to user-space either
|
||||
via the input layer or as netlink events.
|
||||
|
||||
This build option enables the old code for legacy
|
||||
user-space implementation. After some time, this will
|
||||
be moved under CONFIG_ACPI_PROCFS, and then deleted.
|
||||
|
||||
Say Y here to retain the old behaviour. Say N if your
|
||||
user-space is newer than kernel 2.6.23 (September 2007).
|
||||
|
||||
config ACPI_AC
|
||||
tristate "AC Adapter"
|
||||
depends on X86
|
||||
|
|
|
@ -267,7 +267,6 @@ static void acpi_ac_notify(struct acpi_device *device, u32 event)
|
|||
msleep(ac_sleep_before_get_state_ms);
|
||||
|
||||
acpi_ac_get_state(ac);
|
||||
acpi_bus_generate_proc_event(device, event, (u32) ac->state);
|
||||
acpi_bus_generate_netlink_event(device->pnp.device_class,
|
||||
dev_name(&device->dev), event,
|
||||
(u32) ac->state);
|
||||
|
|
|
@ -452,7 +452,6 @@ static void acpi_pad_notify(acpi_handle handle, u32 event,
|
|||
switch (event) {
|
||||
case ACPI_PROCESSOR_AGGREGATOR_NOTIFY:
|
||||
acpi_pad_handle_notify(handle);
|
||||
acpi_bus_generate_proc_event(device, event, 0);
|
||||
acpi_bus_generate_netlink_event(device->pnp.device_class,
|
||||
dev_name(&device->dev), event, 0);
|
||||
break;
|
||||
|
|
|
@ -52,7 +52,7 @@ int acpi_create_platform_device(struct acpi_device *adev,
|
|||
struct platform_device_info pdevinfo;
|
||||
struct resource_list_entry *rentry;
|
||||
struct list_head resource_list;
|
||||
struct resource *resources;
|
||||
struct resource *resources = NULL;
|
||||
int count;
|
||||
|
||||
/* If the ACPI node already has a physical device attached, skip it. */
|
||||
|
@ -61,20 +61,22 @@ int acpi_create_platform_device(struct acpi_device *adev,
|
|||
|
||||
INIT_LIST_HEAD(&resource_list);
|
||||
count = acpi_dev_get_resources(adev, &resource_list, NULL, NULL);
|
||||
if (count <= 0)
|
||||
if (count < 0) {
|
||||
return 0;
|
||||
} else if (count > 0) {
|
||||
resources = kmalloc(count * sizeof(struct resource),
|
||||
GFP_KERNEL);
|
||||
if (!resources) {
|
||||
dev_err(&adev->dev, "No memory for resources\n");
|
||||
acpi_dev_free_resource_list(&resource_list);
|
||||
return -ENOMEM;
|
||||
}
|
||||
count = 0;
|
||||
list_for_each_entry(rentry, &resource_list, node)
|
||||
resources[count++] = rentry->res;
|
||||
|
||||
resources = kmalloc(count * sizeof(struct resource), GFP_KERNEL);
|
||||
if (!resources) {
|
||||
dev_err(&adev->dev, "No memory for resources\n");
|
||||
acpi_dev_free_resource_list(&resource_list);
|
||||
return -ENOMEM;
|
||||
}
|
||||
count = 0;
|
||||
list_for_each_entry(rentry, &resource_list, node)
|
||||
resources[count++] = rentry->res;
|
||||
|
||||
acpi_dev_free_resource_list(&resource_list);
|
||||
|
||||
memset(&pdevinfo, 0, sizeof(pdevinfo));
|
||||
/*
|
||||
|
|
|
@ -1036,8 +1036,6 @@ static void acpi_battery_notify(struct acpi_device *device, u32 event)
|
|||
if (event == ACPI_BATTERY_NOTIFY_INFO)
|
||||
acpi_battery_refresh(battery);
|
||||
acpi_battery_update(battery);
|
||||
acpi_bus_generate_proc_event(device, event,
|
||||
acpi_battery_present(battery));
|
||||
acpi_bus_generate_netlink_event(device->pnp.device_class,
|
||||
dev_name(&device->dev), event,
|
||||
acpi_battery_present(battery));
|
||||
|
|
|
@ -89,27 +89,6 @@ static struct dmi_system_id dsdt_dmi_table[] __initdata = {
|
|||
Device Management
|
||||
-------------------------------------------------------------------------- */
|
||||
|
||||
int acpi_bus_get_device(acpi_handle handle, struct acpi_device **device)
|
||||
{
|
||||
acpi_status status;
|
||||
|
||||
if (!device)
|
||||
return -EINVAL;
|
||||
|
||||
/* TBD: Support fixed-feature devices */
|
||||
|
||||
status = acpi_get_data(handle, acpi_bus_data_handler, (void **)device);
|
||||
if (ACPI_FAILURE(status) || !*device) {
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No context for object [%p]\n",
|
||||
handle));
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(acpi_bus_get_device);
|
||||
|
||||
acpi_status acpi_bus_get_status_handle(acpi_handle handle,
|
||||
unsigned long long *sta)
|
||||
{
|
||||
|
@ -345,104 +324,6 @@ static void acpi_bus_osc_support(void)
|
|||
/* do we need to check other returned cap? Sounds no */
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
Event Management
|
||||
-------------------------------------------------------------------------- */
|
||||
|
||||
#ifdef CONFIG_ACPI_PROC_EVENT
|
||||
static DEFINE_SPINLOCK(acpi_bus_event_lock);
|
||||
|
||||
LIST_HEAD(acpi_bus_event_list);
|
||||
DECLARE_WAIT_QUEUE_HEAD(acpi_bus_event_queue);
|
||||
|
||||
extern int event_is_open;
|
||||
|
||||
int acpi_bus_generate_proc_event4(const char *device_class, const char *bus_id, u8 type, int data)
|
||||
{
|
||||
struct acpi_bus_event *event;
|
||||
unsigned long flags;
|
||||
|
||||
/* drop event on the floor if no one's listening */
|
||||
if (!event_is_open)
|
||||
return 0;
|
||||
|
||||
event = kzalloc(sizeof(struct acpi_bus_event), GFP_ATOMIC);
|
||||
if (!event)
|
||||
return -ENOMEM;
|
||||
|
||||
strcpy(event->device_class, device_class);
|
||||
strcpy(event->bus_id, bus_id);
|
||||
event->type = type;
|
||||
event->data = data;
|
||||
|
||||
spin_lock_irqsave(&acpi_bus_event_lock, flags);
|
||||
list_add_tail(&event->node, &acpi_bus_event_list);
|
||||
spin_unlock_irqrestore(&acpi_bus_event_lock, flags);
|
||||
|
||||
wake_up_interruptible(&acpi_bus_event_queue);
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL_GPL(acpi_bus_generate_proc_event4);
|
||||
|
||||
int acpi_bus_generate_proc_event(struct acpi_device *device, u8 type, int data)
|
||||
{
|
||||
if (!device)
|
||||
return -EINVAL;
|
||||
return acpi_bus_generate_proc_event4(device->pnp.device_class,
|
||||
device->pnp.bus_id, type, data);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(acpi_bus_generate_proc_event);
|
||||
|
||||
int acpi_bus_receive_event(struct acpi_bus_event *event)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct acpi_bus_event *entry = NULL;
|
||||
|
||||
DECLARE_WAITQUEUE(wait, current);
|
||||
|
||||
|
||||
if (!event)
|
||||
return -EINVAL;
|
||||
|
||||
if (list_empty(&acpi_bus_event_list)) {
|
||||
|
||||
set_current_state(TASK_INTERRUPTIBLE);
|
||||
add_wait_queue(&acpi_bus_event_queue, &wait);
|
||||
|
||||
if (list_empty(&acpi_bus_event_list))
|
||||
schedule();
|
||||
|
||||
remove_wait_queue(&acpi_bus_event_queue, &wait);
|
||||
set_current_state(TASK_RUNNING);
|
||||
|
||||
if (signal_pending(current))
|
||||
return -ERESTARTSYS;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&acpi_bus_event_lock, flags);
|
||||
if (!list_empty(&acpi_bus_event_list)) {
|
||||
entry = list_entry(acpi_bus_event_list.next,
|
||||
struct acpi_bus_event, node);
|
||||
list_del(&entry->node);
|
||||
}
|
||||
spin_unlock_irqrestore(&acpi_bus_event_lock, flags);
|
||||
|
||||
if (!entry)
|
||||
return -ENODEV;
|
||||
|
||||
memcpy(event, entry, sizeof(struct acpi_bus_event));
|
||||
|
||||
kfree(entry);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_ACPI_PROC_EVENT */
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
Notification Handling
|
||||
-------------------------------------------------------------------------- */
|
||||
|
@ -715,7 +596,6 @@ static int __init acpi_bus_init(void)
|
|||
{
|
||||
int result;
|
||||
acpi_status status;
|
||||
extern acpi_status acpi_os_initialize1(void);
|
||||
|
||||
acpi_os_initialize1();
|
||||
|
||||
|
|
|
@ -303,8 +303,6 @@ static void acpi_button_notify(struct acpi_device *device, u32 event)
|
|||
|
||||
pm_wakeup_event(&device->dev, 0);
|
||||
}
|
||||
|
||||
acpi_bus_generate_proc_event(device, event, ++button->pushed);
|
||||
break;
|
||||
default:
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||
|
|
|
@ -1055,7 +1055,7 @@ err_unregister:
|
|||
*
|
||||
* This is called by acpi_walk_namespace to look for dock stations and bays.
|
||||
*/
|
||||
static __init acpi_status
|
||||
static acpi_status __init
|
||||
find_dock_and_bay(acpi_handle handle, u32 lvl, void *context, void **rv)
|
||||
{
|
||||
if (is_dock(handle) || is_ejectable_bay(handle))
|
||||
|
|
|
@ -948,7 +948,7 @@ static int ec_enlarge_storm_threshold(const struct dmi_system_id *id)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct dmi_system_id __initdata ec_dmi_table[] = {
|
||||
static struct dmi_system_id ec_dmi_table[] __initdata = {
|
||||
{
|
||||
ec_skip_dsdt_scan, "Compal JFL92", {
|
||||
DMI_MATCH(DMI_BIOS_VENDOR, "COMPAL"),
|
||||
|
|
|
@ -21,100 +21,6 @@
|
|||
#define _COMPONENT ACPI_SYSTEM_COMPONENT
|
||||
ACPI_MODULE_NAME("event");
|
||||
|
||||
#ifdef CONFIG_ACPI_PROC_EVENT
|
||||
/* Global vars for handling event proc entry */
|
||||
static DEFINE_SPINLOCK(acpi_system_event_lock);
|
||||
int event_is_open = 0;
|
||||
extern struct list_head acpi_bus_event_list;
|
||||
extern wait_queue_head_t acpi_bus_event_queue;
|
||||
|
||||
static int acpi_system_open_event(struct inode *inode, struct file *file)
|
||||
{
|
||||
spin_lock_irq(&acpi_system_event_lock);
|
||||
|
||||
if (event_is_open)
|
||||
goto out_busy;
|
||||
|
||||
event_is_open = 1;
|
||||
|
||||
spin_unlock_irq(&acpi_system_event_lock);
|
||||
return 0;
|
||||
|
||||
out_busy:
|
||||
spin_unlock_irq(&acpi_system_event_lock);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
acpi_system_read_event(struct file *file, char __user * buffer, size_t count,
|
||||
loff_t * ppos)
|
||||
{
|
||||
int result = 0;
|
||||
struct acpi_bus_event event;
|
||||
static char str[ACPI_MAX_STRING];
|
||||
static int chars_remaining = 0;
|
||||
static char *ptr;
|
||||
|
||||
if (!chars_remaining) {
|
||||
memset(&event, 0, sizeof(struct acpi_bus_event));
|
||||
|
||||
if ((file->f_flags & O_NONBLOCK)
|
||||
&& (list_empty(&acpi_bus_event_list)))
|
||||
return -EAGAIN;
|
||||
|
||||
result = acpi_bus_receive_event(&event);
|
||||
if (result)
|
||||
return result;
|
||||
|
||||
chars_remaining = sprintf(str, "%s %s %08x %08x\n",
|
||||
event.device_class ? event.
|
||||
device_class : "<unknown>",
|
||||
event.bus_id ? event.
|
||||
bus_id : "<unknown>", event.type,
|
||||
event.data);
|
||||
ptr = str;
|
||||
}
|
||||
|
||||
if (chars_remaining < count) {
|
||||
count = chars_remaining;
|
||||
}
|
||||
|
||||
if (copy_to_user(buffer, ptr, count))
|
||||
return -EFAULT;
|
||||
|
||||
*ppos += count;
|
||||
chars_remaining -= count;
|
||||
ptr += count;
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static int acpi_system_close_event(struct inode *inode, struct file *file)
|
||||
{
|
||||
spin_lock_irq(&acpi_system_event_lock);
|
||||
event_is_open = 0;
|
||||
spin_unlock_irq(&acpi_system_event_lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned int acpi_system_poll_event(struct file *file, poll_table * wait)
|
||||
{
|
||||
poll_wait(file, &acpi_bus_event_queue, wait);
|
||||
if (!list_empty(&acpi_bus_event_list))
|
||||
return POLLIN | POLLRDNORM;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct file_operations acpi_system_event_ops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = acpi_system_open_event,
|
||||
.read = acpi_system_read_event,
|
||||
.release = acpi_system_close_event,
|
||||
.poll = acpi_system_poll_event,
|
||||
.llseek = default_llseek,
|
||||
};
|
||||
#endif /* CONFIG_ACPI_PROC_EVENT */
|
||||
|
||||
/* ACPI notifier chain */
|
||||
static BLOCKING_NOTIFIER_HEAD(acpi_chain_head);
|
||||
|
||||
|
@ -280,9 +186,6 @@ static int acpi_event_genetlink_init(void)
|
|||
|
||||
static int __init acpi_event_init(void)
|
||||
{
|
||||
#ifdef CONFIG_ACPI_PROC_EVENT
|
||||
struct proc_dir_entry *entry;
|
||||
#endif
|
||||
int error = 0;
|
||||
|
||||
if (acpi_disabled)
|
||||
|
@ -293,15 +196,6 @@ static int __init acpi_event_init(void)
|
|||
if (error)
|
||||
printk(KERN_WARNING PREFIX
|
||||
"Failed to create genetlink family for ACPI event\n");
|
||||
|
||||
#ifdef CONFIG_ACPI_PROC_EVENT
|
||||
/* 'event' [R] */
|
||||
entry = proc_create("event", S_IRUSR, acpi_root_dir,
|
||||
&acpi_system_event_ops);
|
||||
if (!entry)
|
||||
return -ENODEV;
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
|
||||
#define PREFIX "ACPI: "
|
||||
|
||||
acpi_status acpi_os_initialize1(void);
|
||||
int init_acpi_device_notify(void);
|
||||
int acpi_scan_init(void);
|
||||
#ifdef CONFIG_ACPI_PCI_SLOT
|
||||
|
|
|
@ -159,7 +159,7 @@ acpi_table_print_srat_entry(struct acpi_subtable_header *header)
|
|||
* distance than the others.
|
||||
* Do some quick checks here and only use the SLIT if it passes.
|
||||
*/
|
||||
static __init int slit_valid(struct acpi_table_slit *slit)
|
||||
static int __init slit_valid(struct acpi_table_slit *slit)
|
||||
{
|
||||
int i, j;
|
||||
int d = slit->locality_count;
|
||||
|
|
|
@ -52,6 +52,7 @@
|
|||
#include <acpi/acpi.h>
|
||||
#include <acpi/acpi_bus.h>
|
||||
#include <acpi/processor.h>
|
||||
#include "internal.h"
|
||||
|
||||
#define _COMPONENT ACPI_OS_SERVICES
|
||||
ACPI_MODULE_NAME("osl");
|
||||
|
@ -1351,8 +1352,8 @@ struct osi_setup_entry {
|
|||
bool enable;
|
||||
};
|
||||
|
||||
static struct osi_setup_entry __initdata
|
||||
osi_setup_entries[OSI_STRING_ENTRIES_MAX] = {
|
||||
static struct osi_setup_entry
|
||||
osi_setup_entries[OSI_STRING_ENTRIES_MAX] __initdata = {
|
||||
{"Module Device", true},
|
||||
{"Processor Device", true},
|
||||
{"3.0 _SCP Extensions", true},
|
||||
|
|
|
@ -28,7 +28,7 @@ static int __init set_no_mwait(const struct dmi_system_id *id)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct dmi_system_id __initdata processor_idle_dmi_table[] = {
|
||||
static struct dmi_system_id processor_idle_dmi_table[] __initdata = {
|
||||
{
|
||||
set_no_mwait, "Extensa 5220", {
|
||||
DMI_MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"),
|
||||
|
|
|
@ -91,21 +91,17 @@ static void acpi_processor_notify(acpi_handle handle, u32 event, void *data)
|
|||
acpi_processor_ppc_has_changed(pr, 1);
|
||||
if (saved == pr->performance_platform_limit)
|
||||
break;
|
||||
acpi_bus_generate_proc_event(device, event,
|
||||
pr->performance_platform_limit);
|
||||
acpi_bus_generate_netlink_event(device->pnp.device_class,
|
||||
dev_name(&device->dev), event,
|
||||
pr->performance_platform_limit);
|
||||
break;
|
||||
case ACPI_PROCESSOR_NOTIFY_POWER:
|
||||
acpi_processor_cst_has_changed(pr);
|
||||
acpi_bus_generate_proc_event(device, event, 0);
|
||||
acpi_bus_generate_netlink_event(device->pnp.device_class,
|
||||
dev_name(&device->dev), event, 0);
|
||||
break;
|
||||
case ACPI_PROCESSOR_NOTIFY_THROTTLING:
|
||||
acpi_processor_tstate_has_changed(pr);
|
||||
acpi_bus_generate_proc_event(device, event, 0);
|
||||
acpi_bus_generate_netlink_event(device->pnp.device_class,
|
||||
dev_name(&device->dev), event, 0);
|
||||
break;
|
||||
|
|
|
@ -873,14 +873,9 @@ static void acpi_sbs_callback(void *context)
|
|||
u8 saved_charger_state = sbs->charger_present;
|
||||
u8 saved_battery_state;
|
||||
acpi_ac_get_present(sbs);
|
||||
if (sbs->charger_present != saved_charger_state) {
|
||||
#ifdef CONFIG_ACPI_PROC_EVENT
|
||||
acpi_bus_generate_proc_event4(ACPI_AC_CLASS, ACPI_AC_DIR_NAME,
|
||||
ACPI_SBS_NOTIFY_STATUS,
|
||||
sbs->charger_present);
|
||||
#endif
|
||||
if (sbs->charger_present != saved_charger_state)
|
||||
kobject_uevent(&sbs->charger.dev->kobj, KOBJ_CHANGE);
|
||||
}
|
||||
|
||||
if (sbs->manager_present) {
|
||||
for (id = 0; id < MAX_SBS_BAT; ++id) {
|
||||
if (!(sbs->batteries_supported & (1 << id)))
|
||||
|
@ -890,12 +885,6 @@ static void acpi_sbs_callback(void *context)
|
|||
acpi_battery_read(bat);
|
||||
if (saved_battery_state == bat->present)
|
||||
continue;
|
||||
#ifdef CONFIG_ACPI_PROC_EVENT
|
||||
acpi_bus_generate_proc_event4(ACPI_BATTERY_CLASS,
|
||||
bat->name,
|
||||
ACPI_SBS_NOTIFY_STATUS,
|
||||
bat->present);
|
||||
#endif
|
||||
kobject_uevent(&bat->bat.dev->kobj, KOBJ_CHANGE);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -999,6 +999,28 @@ struct bus_type acpi_bus_type = {
|
|||
.uevent = acpi_device_uevent,
|
||||
};
|
||||
|
||||
static void acpi_bus_data_handler(acpi_handle handle, void *context)
|
||||
{
|
||||
/* Intentionally empty. */
|
||||
}
|
||||
|
||||
int acpi_bus_get_device(acpi_handle handle, struct acpi_device **device)
|
||||
{
|
||||
acpi_status status;
|
||||
|
||||
if (!device)
|
||||
return -EINVAL;
|
||||
|
||||
status = acpi_get_data(handle, acpi_bus_data_handler, (void **)device);
|
||||
if (ACPI_FAILURE(status) || !*device) {
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No context for object [%p]\n",
|
||||
handle));
|
||||
return -ENODEV;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(acpi_bus_get_device);
|
||||
|
||||
int acpi_device_add(struct acpi_device *device,
|
||||
void (*release)(struct device *))
|
||||
{
|
||||
|
@ -1210,14 +1232,6 @@ acpi_bus_get_ejd(acpi_handle handle, acpi_handle *ejd)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(acpi_bus_get_ejd);
|
||||
|
||||
void acpi_bus_data_handler(acpi_handle handle, void *context)
|
||||
{
|
||||
|
||||
/* TBD */
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static int acpi_bus_extract_wakeup_device_power_package(acpi_handle handle,
|
||||
struct acpi_device_wakeup *wakeup)
|
||||
{
|
||||
|
|
|
@ -141,7 +141,7 @@ static int __init init_nvs_nosave(const struct dmi_system_id *d)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct dmi_system_id __initdata acpisleep_dmi_table[] = {
|
||||
static struct dmi_system_id acpisleep_dmi_table[] __initdata = {
|
||||
{
|
||||
.callback = init_old_suspend_ordering,
|
||||
.ident = "Abit KN9 (nForce4 variant)",
|
||||
|
|
|
@ -769,7 +769,6 @@ static int thermal_notify(struct thermal_zone_device *thermal, int trip,
|
|||
else
|
||||
return 0;
|
||||
|
||||
acpi_bus_generate_proc_event(tz->device, type, 1);
|
||||
acpi_bus_generate_netlink_event(tz->device->pnp.device_class,
|
||||
dev_name(&tz->device->dev), type, 1);
|
||||
|
||||
|
@ -980,14 +979,12 @@ static void acpi_thermal_notify(struct acpi_device *device, u32 event)
|
|||
case ACPI_THERMAL_NOTIFY_THRESHOLDS:
|
||||
acpi_thermal_trips_update(tz, ACPI_TRIPS_REFRESH_THRESHOLDS);
|
||||
acpi_thermal_check(tz);
|
||||
acpi_bus_generate_proc_event(device, event, 0);
|
||||
acpi_bus_generate_netlink_event(device->pnp.device_class,
|
||||
dev_name(&device->dev), event, 0);
|
||||
break;
|
||||
case ACPI_THERMAL_NOTIFY_DEVICES:
|
||||
acpi_thermal_trips_update(tz, ACPI_TRIPS_REFRESH_DEVICES);
|
||||
acpi_thermal_check(tz);
|
||||
acpi_bus_generate_proc_event(device, event, 0);
|
||||
acpi_bus_generate_netlink_event(device->pnp.device_class,
|
||||
dev_name(&device->dev), event, 0);
|
||||
break;
|
||||
|
|
|
@ -1577,7 +1577,6 @@ static void acpi_video_bus_notify(struct acpi_device *device, u32 event)
|
|||
switch (event) {
|
||||
case ACPI_VIDEO_NOTIFY_SWITCH: /* User requested a switch,
|
||||
* most likely via hotkey. */
|
||||
acpi_bus_generate_proc_event(device, event, 0);
|
||||
keycode = KEY_SWITCHVIDEOMODE;
|
||||
break;
|
||||
|
||||
|
@ -1585,20 +1584,16 @@ static void acpi_video_bus_notify(struct acpi_device *device, u32 event)
|
|||
* connector. */
|
||||
acpi_video_device_enumerate(video);
|
||||
acpi_video_device_rebind(video);
|
||||
acpi_bus_generate_proc_event(device, event, 0);
|
||||
keycode = KEY_SWITCHVIDEOMODE;
|
||||
break;
|
||||
|
||||
case ACPI_VIDEO_NOTIFY_CYCLE: /* Cycle Display output hotkey pressed. */
|
||||
acpi_bus_generate_proc_event(device, event, 0);
|
||||
keycode = KEY_SWITCHVIDEOMODE;
|
||||
break;
|
||||
case ACPI_VIDEO_NOTIFY_NEXT_OUTPUT: /* Next Display output hotkey pressed. */
|
||||
acpi_bus_generate_proc_event(device, event, 0);
|
||||
keycode = KEY_VIDEO_NEXT;
|
||||
break;
|
||||
case ACPI_VIDEO_NOTIFY_PREV_OUTPUT: /* previous Display output hotkey pressed. */
|
||||
acpi_bus_generate_proc_event(device, event, 0);
|
||||
keycode = KEY_VIDEO_PREV;
|
||||
break;
|
||||
|
||||
|
@ -1641,31 +1636,26 @@ static void acpi_video_device_notify(acpi_handle handle, u32 event, void *data)
|
|||
case ACPI_VIDEO_NOTIFY_CYCLE_BRIGHTNESS: /* Cycle brightness */
|
||||
if (brightness_switch_enabled)
|
||||
acpi_video_switch_brightness(video_device, event);
|
||||
acpi_bus_generate_proc_event(device, event, 0);
|
||||
keycode = KEY_BRIGHTNESS_CYCLE;
|
||||
break;
|
||||
case ACPI_VIDEO_NOTIFY_INC_BRIGHTNESS: /* Increase brightness */
|
||||
if (brightness_switch_enabled)
|
||||
acpi_video_switch_brightness(video_device, event);
|
||||
acpi_bus_generate_proc_event(device, event, 0);
|
||||
keycode = KEY_BRIGHTNESSUP;
|
||||
break;
|
||||
case ACPI_VIDEO_NOTIFY_DEC_BRIGHTNESS: /* Decrease brightness */
|
||||
if (brightness_switch_enabled)
|
||||
acpi_video_switch_brightness(video_device, event);
|
||||
acpi_bus_generate_proc_event(device, event, 0);
|
||||
keycode = KEY_BRIGHTNESSDOWN;
|
||||
break;
|
||||
case ACPI_VIDEO_NOTIFY_ZERO_BRIGHTNESS: /* zero brightness */
|
||||
if (brightness_switch_enabled)
|
||||
acpi_video_switch_brightness(video_device, event);
|
||||
acpi_bus_generate_proc_event(device, event, 0);
|
||||
keycode = KEY_BRIGHTNESS_ZERO;
|
||||
break;
|
||||
case ACPI_VIDEO_NOTIFY_DISPLAY_OFF: /* display device off */
|
||||
if (brightness_switch_enabled)
|
||||
acpi_video_switch_brightness(video_device, event);
|
||||
acpi_bus_generate_proc_event(device, event, 0);
|
||||
keycode = KEY_DISPLAY_OFF;
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -876,11 +876,6 @@ found:
|
|||
if (useinput)
|
||||
sonypi_report_input_event(event);
|
||||
|
||||
#ifdef CONFIG_ACPI
|
||||
if (sonypi_acpi_device)
|
||||
acpi_bus_generate_proc_event(sonypi_acpi_device, 1, event);
|
||||
#endif
|
||||
|
||||
kfifo_in_locked(&sonypi_device.fifo, (unsigned char *)&event,
|
||||
sizeof(event), &sonypi_device.fifo_lock);
|
||||
kill_fasync(&sonypi_device.fifo_async, SIGIO, POLL_IN);
|
||||
|
|
|
@ -270,7 +270,6 @@ static void ibm_handle_events(acpi_handle handle, u32 event, void *context)
|
|||
|
||||
if (subevent == 0x80) {
|
||||
dbg("%s: generationg bus event\n", __func__);
|
||||
acpi_bus_generate_proc_event(note->device, note->event, detail);
|
||||
acpi_bus_generate_netlink_event(note->device->pnp.device_class,
|
||||
dev_name(¬e->device->dev),
|
||||
note->event, detail);
|
||||
|
|
|
@ -1543,7 +1543,6 @@ static void asus_acpi_notify(struct acpi_device *device, u32 event)
|
|||
|
||||
/* TODO Find a better way to handle events count. */
|
||||
count = asus->event_count[event % 128]++;
|
||||
acpi_bus_generate_proc_event(asus->device, event, count);
|
||||
acpi_bus_generate_netlink_event(asus->device->pnp.device_class,
|
||||
dev_name(&asus->device->dev), event,
|
||||
count);
|
||||
|
|
|
@ -1269,7 +1269,6 @@ static void eeepc_acpi_notify(struct acpi_device *device, u32 event)
|
|||
if (event > ACPI_MAX_SYS_NOTIFY)
|
||||
return;
|
||||
count = eeepc->event_count[event % 128]++;
|
||||
acpi_bus_generate_proc_event(device, event, count);
|
||||
acpi_bus_generate_netlink_event(device->pnp.device_class,
|
||||
dev_name(&device->dev), event,
|
||||
count);
|
||||
|
|
|
@ -773,8 +773,6 @@ static void acpi_fujitsu_notify(struct acpi_device *device, u32 event)
|
|||
else
|
||||
set_lcd_level(newb);
|
||||
}
|
||||
acpi_bus_generate_proc_event(fujitsu->dev,
|
||||
ACPI_VIDEO_NOTIFY_INC_BRIGHTNESS, 0);
|
||||
keycode = KEY_BRIGHTNESSUP;
|
||||
} else if (oldb > newb) {
|
||||
if (disable_brightness_adjust != 1) {
|
||||
|
@ -783,8 +781,6 @@ static void acpi_fujitsu_notify(struct acpi_device *device, u32 event)
|
|||
else
|
||||
set_lcd_level(newb);
|
||||
}
|
||||
acpi_bus_generate_proc_event(fujitsu->dev,
|
||||
ACPI_VIDEO_NOTIFY_DEC_BRIGHTNESS, 0);
|
||||
keycode = KEY_BRIGHTNESSDOWN;
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -464,9 +464,6 @@ static void acpi_pcc_generate_keyinput(struct pcc_acpi *pcc)
|
|||
"error getting hotkey status\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
acpi_bus_generate_proc_event(pcc->device, HKEY_NOTIFY, result);
|
||||
|
||||
if (!sparse_keymap_report_event(hotk_input_dev,
|
||||
result & 0xf, result & 0x80, false))
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
|
||||
|
|
|
@ -1275,9 +1275,6 @@ static void sony_nc_notify(struct acpi_device *device, u32 event)
|
|||
ev_type = HOTKEY;
|
||||
sony_laptop_report_input_event(real_ev);
|
||||
}
|
||||
|
||||
acpi_bus_generate_proc_event(sony_nc_acpi_device, ev_type, real_ev);
|
||||
|
||||
acpi_bus_generate_netlink_event(sony_nc_acpi_device->pnp.device_class,
|
||||
dev_name(&sony_nc_acpi_device->dev), ev_type, real_ev);
|
||||
}
|
||||
|
@ -4243,7 +4240,6 @@ static irqreturn_t sony_pic_irq(int irq, void *dev_id)
|
|||
|
||||
found:
|
||||
sony_laptop_report_input_event(device_event);
|
||||
acpi_bus_generate_proc_event(dev->acpi_dev, 1, device_event);
|
||||
sonypi_compat_report_event(device_event);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
|
|
@ -2022,8 +2022,6 @@ static u32 hotkey_driver_mask; /* events needed by the driver */
|
|||
static u32 hotkey_user_mask; /* events visible to userspace */
|
||||
static u32 hotkey_acpi_mask; /* events enabled in firmware */
|
||||
|
||||
static unsigned int hotkey_report_mode;
|
||||
|
||||
static u16 *hotkey_keycode_map;
|
||||
|
||||
static struct attribute_set *hotkey_dev_attributes;
|
||||
|
@ -2282,10 +2280,6 @@ static struct tp_acpi_drv_struct ibm_hotkey_acpidriver;
|
|||
static void tpacpi_hotkey_send_key(unsigned int scancode)
|
||||
{
|
||||
tpacpi_input_send_key_masked(scancode);
|
||||
if (hotkey_report_mode < 2) {
|
||||
acpi_bus_generate_proc_event(ibm_hotkey_acpidriver.device,
|
||||
0x80, TP_HKEY_EV_HOTKEY_BASE + scancode);
|
||||
}
|
||||
}
|
||||
|
||||
static void hotkey_read_nvram(struct tp_nvram_state *n, const u32 m)
|
||||
|
@ -2882,18 +2876,6 @@ static void hotkey_tablet_mode_notify_change(void)
|
|||
"hotkey_tablet_mode");
|
||||
}
|
||||
|
||||
/* sysfs hotkey report_mode -------------------------------------------- */
|
||||
static ssize_t hotkey_report_mode_show(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
return snprintf(buf, PAGE_SIZE, "%d\n",
|
||||
(hotkey_report_mode != 0) ? hotkey_report_mode : 1);
|
||||
}
|
||||
|
||||
static struct device_attribute dev_attr_hotkey_report_mode =
|
||||
__ATTR(hotkey_report_mode, S_IRUGO, hotkey_report_mode_show, NULL);
|
||||
|
||||
/* sysfs wakeup reason (pollable) -------------------------------------- */
|
||||
static ssize_t hotkey_wakeup_reason_show(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
|
@ -2935,7 +2917,6 @@ static struct attribute *hotkey_attributes[] __initdata = {
|
|||
&dev_attr_hotkey_enable.attr,
|
||||
&dev_attr_hotkey_bios_enabled.attr,
|
||||
&dev_attr_hotkey_bios_mask.attr,
|
||||
&dev_attr_hotkey_report_mode.attr,
|
||||
&dev_attr_hotkey_wakeup_reason.attr,
|
||||
&dev_attr_hotkey_wakeup_hotunplug_complete.attr,
|
||||
&dev_attr_hotkey_mask.attr,
|
||||
|
@ -3439,11 +3420,6 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
|
|||
"initial masks: user=0x%08x, fw=0x%08x, poll=0x%08x\n",
|
||||
hotkey_user_mask, hotkey_acpi_mask, hotkey_source_mask);
|
||||
|
||||
dbg_printk(TPACPI_DBG_INIT | TPACPI_DBG_HKEY,
|
||||
"legacy ibm/hotkey event reporting over procfs %s\n",
|
||||
(hotkey_report_mode < 2) ?
|
||||
"enabled" : "disabled");
|
||||
|
||||
tpacpi_inputdev->open = &hotkey_inputdev_open;
|
||||
tpacpi_inputdev->close = &hotkey_inputdev_close;
|
||||
|
||||
|
@ -3737,13 +3713,6 @@ static void hotkey_notify(struct ibm_struct *ibm, u32 event)
|
|||
"event happened to %s\n", TPACPI_MAIL);
|
||||
}
|
||||
|
||||
/* Legacy events */
|
||||
if (!ignore_acpi_ev &&
|
||||
(send_acpi_ev || hotkey_report_mode < 2)) {
|
||||
acpi_bus_generate_proc_event(ibm->acpi->device,
|
||||
event, hkey);
|
||||
}
|
||||
|
||||
/* netlink events */
|
||||
if (!ignore_acpi_ev && send_acpi_ev) {
|
||||
acpi_bus_generate_netlink_event(
|
||||
|
@ -8840,11 +8809,6 @@ module_param(brightness_enable, uint, 0444);
|
|||
MODULE_PARM_DESC(brightness_enable,
|
||||
"Enables backlight control when 1, disables when 0");
|
||||
|
||||
module_param(hotkey_report_mode, uint, 0444);
|
||||
MODULE_PARM_DESC(hotkey_report_mode,
|
||||
"used for backwards compatibility with userspace, "
|
||||
"see documentation");
|
||||
|
||||
#ifdef CONFIG_THINKPAD_ACPI_ALSA_SUPPORT
|
||||
module_param_named(volume_mode, volume_mode, uint, 0444);
|
||||
MODULE_PARM_DESC(volume_mode,
|
||||
|
@ -8975,10 +8939,6 @@ static int __init thinkpad_acpi_module_init(void)
|
|||
|
||||
tpacpi_lifecycle = TPACPI_LIFE_INIT;
|
||||
|
||||
/* Parameter checking */
|
||||
if (hotkey_report_mode > 2)
|
||||
return -EINVAL;
|
||||
|
||||
/* Driver-level probe */
|
||||
|
||||
ret = get_thinkpad_model_data(&thinkpad_id);
|
||||
|
|
|
@ -359,7 +359,6 @@ extern void unregister_acpi_bus_notifier(struct notifier_block *nb);
|
|||
*/
|
||||
|
||||
int acpi_bus_get_device(acpi_handle handle, struct acpi_device **device);
|
||||
void acpi_bus_data_handler(acpi_handle handle, void *context);
|
||||
acpi_status acpi_bus_get_status_handle(acpi_handle handle,
|
||||
unsigned long long *sta);
|
||||
int acpi_bus_get_status(struct acpi_device *device);
|
||||
|
@ -379,15 +378,6 @@ bool acpi_bus_can_wakeup(acpi_handle handle);
|
|||
static inline bool acpi_bus_can_wakeup(acpi_handle handle) { return false; }
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ACPI_PROC_EVENT
|
||||
int acpi_bus_generate_proc_event(struct acpi_device *device, u8 type, int data);
|
||||
int acpi_bus_generate_proc_event4(const char *class, const char *bid, u8 type, int data);
|
||||
int acpi_bus_receive_event(struct acpi_bus_event *event);
|
||||
#else
|
||||
static inline int acpi_bus_generate_proc_event(struct acpi_device *device, u8 type, int data)
|
||||
{ return 0; }
|
||||
#endif
|
||||
|
||||
void acpi_scan_lock_acquire(void);
|
||||
void acpi_scan_lock_release(void);
|
||||
int acpi_scan_add_handler(struct acpi_scan_handler *handler);
|
||||
|
|
Loading…
Reference in New Issue