Merge back earlier 'acpi-assorted' material

This commit is contained in:
Rafael J. Wysocki 2013-08-14 23:22:45 +02:00
commit f3ce717e60
32 changed files with 60 additions and 450 deletions

View File

@ -8,8 +8,8 @@ http://acpi4asus.sf.net/
This driver provides support for extra features of ACPI-compatible ASUS laptops. 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 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 VICTOR XP7210 for example). It makes all the extra buttons generate input
ACPI events that go through /proc/acpi/events and input events (like keyboards). events (like keyboards).
On some models adds support for changing the display brightness and output, 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 switching the LCD backlight on and off, and most importantly, allows you to
blink those fancy LEDs intended for reporting mail and wireless status. blink those fancy LEDs intended for reporting mail and wireless status.
@ -55,8 +55,8 @@ Usage
DSDT) to me. DSDT) to me.
That's all, now, all the events generated by the hotkeys of your laptop 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 should be reported via netlink events. You can check with
"acpi_listen". "acpi_genl monitor" (part of the acpica project).
Hotkeys are also reported as input keys (like keyboards) you can check Hotkeys are also reported as input keys (like keyboards) you can check
which key are supported using "xev" under X11. which key are supported using "xev" under X11.

View File

@ -12,10 +12,10 @@ Fn keys (hotkeys):
------------------ ------------------
Some models report hotkeys through the SNC or SPIC devices, such events are 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 reported both through the ACPI subsystem as acpi events and through the INPUT
subsystem. See the logs of acpid or /proc/acpi/event and subsystem. See the logs of /proc/bus/input/devices to find out what those
/proc/bus/input/devices to find out what those events are and which input events are and which input devices are created by the driver.
devices are created by the driver. Additionally, loading the driver with the Additionally, loading the driver with the debug option will report all events
debug option will report all events in the kernel log. in the kernel log.
The "scancodes" passed to the input system (that can be remapped with udev) 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 are indexes to the table "sony_laptop_input_keycode_map" in the sony-laptop.c

View File

@ -329,20 +329,6 @@ sysfs notes:
This attribute has poll()/select() support. 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: wakeup_reason:
Set to 1 if the system is waking up because the user Set to 1 if the system is waking up because the user
requested a bay ejection. Set to 2 if the system is 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: 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: Events that are never propagated by the driver:
0x2304 System is waking up from suspend to undock 0x2304 System is waking up from suspend to undock
0x2305 System is waking up from suspend to eject bay 0x2305 System is waking up from suspend to eject bay
0x2404 System is waking up from hibernation to undock 0x2404 System is waking up from hibernation to undock
0x2405 System is waking up from hibernation to eject bay 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 0x5010 Brightness level changed/control event
0x6000 KEYBOARD: Numlock key pressed 0x6000 KEYBOARD: Numlock key pressed
0x6005 KEYBOARD: Fn key pressed (TO BE VERIFIED) 0x6005 KEYBOARD: Fn key pressed (TO BE VERIFIED)
0x7000 Radio Switch may have changed state
Events that are propagated by the driver to userspace: 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 cycle, or a system shutdown. Obviously, something is very wrong if this
happens. 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: Brightness hotkey notes:

View File

@ -91,24 +91,6 @@ config ACPI_EC_DEBUGFS
Thus this option is a debug option that helps to write ACPI drivers 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. 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 config ACPI_AC
tristate "AC Adapter" tristate "AC Adapter"
depends on X86 depends on X86

View File

@ -267,7 +267,6 @@ static void acpi_ac_notify(struct acpi_device *device, u32 event)
msleep(ac_sleep_before_get_state_ms); msleep(ac_sleep_before_get_state_ms);
acpi_ac_get_state(ac); acpi_ac_get_state(ac);
acpi_bus_generate_proc_event(device, event, (u32) ac->state);
acpi_bus_generate_netlink_event(device->pnp.device_class, acpi_bus_generate_netlink_event(device->pnp.device_class,
dev_name(&device->dev), event, dev_name(&device->dev), event,
(u32) ac->state); (u32) ac->state);

View File

@ -452,7 +452,6 @@ static void acpi_pad_notify(acpi_handle handle, u32 event,
switch (event) { switch (event) {
case ACPI_PROCESSOR_AGGREGATOR_NOTIFY: case ACPI_PROCESSOR_AGGREGATOR_NOTIFY:
acpi_pad_handle_notify(handle); acpi_pad_handle_notify(handle);
acpi_bus_generate_proc_event(device, event, 0);
acpi_bus_generate_netlink_event(device->pnp.device_class, acpi_bus_generate_netlink_event(device->pnp.device_class,
dev_name(&device->dev), event, 0); dev_name(&device->dev), event, 0);
break; break;

View File

@ -52,7 +52,7 @@ int acpi_create_platform_device(struct acpi_device *adev,
struct platform_device_info pdevinfo; struct platform_device_info pdevinfo;
struct resource_list_entry *rentry; struct resource_list_entry *rentry;
struct list_head resource_list; struct list_head resource_list;
struct resource *resources; struct resource *resources = NULL;
int count; int count;
/* If the ACPI node already has a physical device attached, skip it. */ /* 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); INIT_LIST_HEAD(&resource_list);
count = acpi_dev_get_resources(adev, &resource_list, NULL, NULL); count = acpi_dev_get_resources(adev, &resource_list, NULL, NULL);
if (count <= 0) if (count < 0) {
return 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); 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)); memset(&pdevinfo, 0, sizeof(pdevinfo));
/* /*

View File

@ -1036,8 +1036,6 @@ static void acpi_battery_notify(struct acpi_device *device, u32 event)
if (event == ACPI_BATTERY_NOTIFY_INFO) if (event == ACPI_BATTERY_NOTIFY_INFO)
acpi_battery_refresh(battery); acpi_battery_refresh(battery);
acpi_battery_update(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, acpi_bus_generate_netlink_event(device->pnp.device_class,
dev_name(&device->dev), event, dev_name(&device->dev), event,
acpi_battery_present(battery)); acpi_battery_present(battery));

View File

@ -89,27 +89,6 @@ static struct dmi_system_id dsdt_dmi_table[] __initdata = {
Device Management 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, acpi_status acpi_bus_get_status_handle(acpi_handle handle,
unsigned long long *sta) 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 */ /* 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 Notification Handling
-------------------------------------------------------------------------- */ -------------------------------------------------------------------------- */
@ -715,7 +596,6 @@ static int __init acpi_bus_init(void)
{ {
int result; int result;
acpi_status status; acpi_status status;
extern acpi_status acpi_os_initialize1(void);
acpi_os_initialize1(); acpi_os_initialize1();

View File

@ -303,8 +303,6 @@ static void acpi_button_notify(struct acpi_device *device, u32 event)
pm_wakeup_event(&device->dev, 0); pm_wakeup_event(&device->dev, 0);
} }
acpi_bus_generate_proc_event(device, event, ++button->pushed);
break; break;
default: default:
ACPI_DEBUG_PRINT((ACPI_DB_INFO, ACPI_DEBUG_PRINT((ACPI_DB_INFO,

View File

@ -1055,7 +1055,7 @@ err_unregister:
* *
* This is called by acpi_walk_namespace to look for dock stations and bays. * 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) find_dock_and_bay(acpi_handle handle, u32 lvl, void *context, void **rv)
{ {
if (is_dock(handle) || is_ejectable_bay(handle)) if (is_dock(handle) || is_ejectable_bay(handle))

View File

@ -948,7 +948,7 @@ static int ec_enlarge_storm_threshold(const struct dmi_system_id *id)
return 0; 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", { ec_skip_dsdt_scan, "Compal JFL92", {
DMI_MATCH(DMI_BIOS_VENDOR, "COMPAL"), DMI_MATCH(DMI_BIOS_VENDOR, "COMPAL"),

View File

@ -21,100 +21,6 @@
#define _COMPONENT ACPI_SYSTEM_COMPONENT #define _COMPONENT ACPI_SYSTEM_COMPONENT
ACPI_MODULE_NAME("event"); 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 */ /* ACPI notifier chain */
static BLOCKING_NOTIFIER_HEAD(acpi_chain_head); 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) static int __init acpi_event_init(void)
{ {
#ifdef CONFIG_ACPI_PROC_EVENT
struct proc_dir_entry *entry;
#endif
int error = 0; int error = 0;
if (acpi_disabled) if (acpi_disabled)
@ -293,15 +196,6 @@ static int __init acpi_event_init(void)
if (error) if (error)
printk(KERN_WARNING PREFIX printk(KERN_WARNING PREFIX
"Failed to create genetlink family for ACPI event\n"); "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; return 0;
} }

View File

@ -23,6 +23,7 @@
#define PREFIX "ACPI: " #define PREFIX "ACPI: "
acpi_status acpi_os_initialize1(void);
int init_acpi_device_notify(void); int init_acpi_device_notify(void);
int acpi_scan_init(void); int acpi_scan_init(void);
#ifdef CONFIG_ACPI_PCI_SLOT #ifdef CONFIG_ACPI_PCI_SLOT

View File

@ -159,7 +159,7 @@ acpi_table_print_srat_entry(struct acpi_subtable_header *header)
* distance than the others. * distance than the others.
* Do some quick checks here and only use the SLIT if it passes. * 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 i, j;
int d = slit->locality_count; int d = slit->locality_count;

View File

@ -52,6 +52,7 @@
#include <acpi/acpi.h> #include <acpi/acpi.h>
#include <acpi/acpi_bus.h> #include <acpi/acpi_bus.h>
#include <acpi/processor.h> #include <acpi/processor.h>
#include "internal.h"
#define _COMPONENT ACPI_OS_SERVICES #define _COMPONENT ACPI_OS_SERVICES
ACPI_MODULE_NAME("osl"); ACPI_MODULE_NAME("osl");
@ -1351,8 +1352,8 @@ struct osi_setup_entry {
bool enable; bool enable;
}; };
static struct osi_setup_entry __initdata static struct osi_setup_entry
osi_setup_entries[OSI_STRING_ENTRIES_MAX] = { osi_setup_entries[OSI_STRING_ENTRIES_MAX] __initdata = {
{"Module Device", true}, {"Module Device", true},
{"Processor Device", true}, {"Processor Device", true},
{"3.0 _SCP Extensions", true}, {"3.0 _SCP Extensions", true},

View File

@ -28,7 +28,7 @@ static int __init set_no_mwait(const struct dmi_system_id *id)
return 0; 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", { set_no_mwait, "Extensa 5220", {
DMI_MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"), DMI_MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"),

View File

@ -91,21 +91,17 @@ static void acpi_processor_notify(acpi_handle handle, u32 event, void *data)
acpi_processor_ppc_has_changed(pr, 1); acpi_processor_ppc_has_changed(pr, 1);
if (saved == pr->performance_platform_limit) if (saved == pr->performance_platform_limit)
break; break;
acpi_bus_generate_proc_event(device, event,
pr->performance_platform_limit);
acpi_bus_generate_netlink_event(device->pnp.device_class, acpi_bus_generate_netlink_event(device->pnp.device_class,
dev_name(&device->dev), event, dev_name(&device->dev), event,
pr->performance_platform_limit); pr->performance_platform_limit);
break; break;
case ACPI_PROCESSOR_NOTIFY_POWER: case ACPI_PROCESSOR_NOTIFY_POWER:
acpi_processor_cst_has_changed(pr); acpi_processor_cst_has_changed(pr);
acpi_bus_generate_proc_event(device, event, 0);
acpi_bus_generate_netlink_event(device->pnp.device_class, acpi_bus_generate_netlink_event(device->pnp.device_class,
dev_name(&device->dev), event, 0); dev_name(&device->dev), event, 0);
break; break;
case ACPI_PROCESSOR_NOTIFY_THROTTLING: case ACPI_PROCESSOR_NOTIFY_THROTTLING:
acpi_processor_tstate_has_changed(pr); acpi_processor_tstate_has_changed(pr);
acpi_bus_generate_proc_event(device, event, 0);
acpi_bus_generate_netlink_event(device->pnp.device_class, acpi_bus_generate_netlink_event(device->pnp.device_class,
dev_name(&device->dev), event, 0); dev_name(&device->dev), event, 0);
break; break;

View File

@ -873,14 +873,9 @@ static void acpi_sbs_callback(void *context)
u8 saved_charger_state = sbs->charger_present; u8 saved_charger_state = sbs->charger_present;
u8 saved_battery_state; u8 saved_battery_state;
acpi_ac_get_present(sbs); acpi_ac_get_present(sbs);
if (sbs->charger_present != saved_charger_state) { 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
kobject_uevent(&sbs->charger.dev->kobj, KOBJ_CHANGE); kobject_uevent(&sbs->charger.dev->kobj, KOBJ_CHANGE);
}
if (sbs->manager_present) { if (sbs->manager_present) {
for (id = 0; id < MAX_SBS_BAT; ++id) { for (id = 0; id < MAX_SBS_BAT; ++id) {
if (!(sbs->batteries_supported & (1 << id))) if (!(sbs->batteries_supported & (1 << id)))
@ -890,12 +885,6 @@ static void acpi_sbs_callback(void *context)
acpi_battery_read(bat); acpi_battery_read(bat);
if (saved_battery_state == bat->present) if (saved_battery_state == bat->present)
continue; 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); kobject_uevent(&bat->bat.dev->kobj, KOBJ_CHANGE);
} }
} }

View File

@ -999,6 +999,28 @@ struct bus_type acpi_bus_type = {
.uevent = acpi_device_uevent, .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, int acpi_device_add(struct acpi_device *device,
void (*release)(struct 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); 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, static int acpi_bus_extract_wakeup_device_power_package(acpi_handle handle,
struct acpi_device_wakeup *wakeup) struct acpi_device_wakeup *wakeup)
{ {

View File

@ -141,7 +141,7 @@ static int __init init_nvs_nosave(const struct dmi_system_id *d)
return 0; 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, .callback = init_old_suspend_ordering,
.ident = "Abit KN9 (nForce4 variant)", .ident = "Abit KN9 (nForce4 variant)",

View File

@ -769,7 +769,6 @@ static int thermal_notify(struct thermal_zone_device *thermal, int trip,
else else
return 0; return 0;
acpi_bus_generate_proc_event(tz->device, type, 1);
acpi_bus_generate_netlink_event(tz->device->pnp.device_class, acpi_bus_generate_netlink_event(tz->device->pnp.device_class,
dev_name(&tz->device->dev), type, 1); 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: case ACPI_THERMAL_NOTIFY_THRESHOLDS:
acpi_thermal_trips_update(tz, ACPI_TRIPS_REFRESH_THRESHOLDS); acpi_thermal_trips_update(tz, ACPI_TRIPS_REFRESH_THRESHOLDS);
acpi_thermal_check(tz); acpi_thermal_check(tz);
acpi_bus_generate_proc_event(device, event, 0);
acpi_bus_generate_netlink_event(device->pnp.device_class, acpi_bus_generate_netlink_event(device->pnp.device_class,
dev_name(&device->dev), event, 0); dev_name(&device->dev), event, 0);
break; break;
case ACPI_THERMAL_NOTIFY_DEVICES: case ACPI_THERMAL_NOTIFY_DEVICES:
acpi_thermal_trips_update(tz, ACPI_TRIPS_REFRESH_DEVICES); acpi_thermal_trips_update(tz, ACPI_TRIPS_REFRESH_DEVICES);
acpi_thermal_check(tz); acpi_thermal_check(tz);
acpi_bus_generate_proc_event(device, event, 0);
acpi_bus_generate_netlink_event(device->pnp.device_class, acpi_bus_generate_netlink_event(device->pnp.device_class,
dev_name(&device->dev), event, 0); dev_name(&device->dev), event, 0);
break; break;

View File

@ -1577,7 +1577,6 @@ static void acpi_video_bus_notify(struct acpi_device *device, u32 event)
switch (event) { switch (event) {
case ACPI_VIDEO_NOTIFY_SWITCH: /* User requested a switch, case ACPI_VIDEO_NOTIFY_SWITCH: /* User requested a switch,
* most likely via hotkey. */ * most likely via hotkey. */
acpi_bus_generate_proc_event(device, event, 0);
keycode = KEY_SWITCHVIDEOMODE; keycode = KEY_SWITCHVIDEOMODE;
break; break;
@ -1585,20 +1584,16 @@ static void acpi_video_bus_notify(struct acpi_device *device, u32 event)
* connector. */ * connector. */
acpi_video_device_enumerate(video); acpi_video_device_enumerate(video);
acpi_video_device_rebind(video); acpi_video_device_rebind(video);
acpi_bus_generate_proc_event(device, event, 0);
keycode = KEY_SWITCHVIDEOMODE; keycode = KEY_SWITCHVIDEOMODE;
break; break;
case ACPI_VIDEO_NOTIFY_CYCLE: /* Cycle Display output hotkey pressed. */ case ACPI_VIDEO_NOTIFY_CYCLE: /* Cycle Display output hotkey pressed. */
acpi_bus_generate_proc_event(device, event, 0);
keycode = KEY_SWITCHVIDEOMODE; keycode = KEY_SWITCHVIDEOMODE;
break; break;
case ACPI_VIDEO_NOTIFY_NEXT_OUTPUT: /* Next Display output hotkey pressed. */ case ACPI_VIDEO_NOTIFY_NEXT_OUTPUT: /* Next Display output hotkey pressed. */
acpi_bus_generate_proc_event(device, event, 0);
keycode = KEY_VIDEO_NEXT; keycode = KEY_VIDEO_NEXT;
break; break;
case ACPI_VIDEO_NOTIFY_PREV_OUTPUT: /* previous Display output hotkey pressed. */ case ACPI_VIDEO_NOTIFY_PREV_OUTPUT: /* previous Display output hotkey pressed. */
acpi_bus_generate_proc_event(device, event, 0);
keycode = KEY_VIDEO_PREV; keycode = KEY_VIDEO_PREV;
break; 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 */ case ACPI_VIDEO_NOTIFY_CYCLE_BRIGHTNESS: /* Cycle brightness */
if (brightness_switch_enabled) if (brightness_switch_enabled)
acpi_video_switch_brightness(video_device, event); acpi_video_switch_brightness(video_device, event);
acpi_bus_generate_proc_event(device, event, 0);
keycode = KEY_BRIGHTNESS_CYCLE; keycode = KEY_BRIGHTNESS_CYCLE;
break; break;
case ACPI_VIDEO_NOTIFY_INC_BRIGHTNESS: /* Increase brightness */ case ACPI_VIDEO_NOTIFY_INC_BRIGHTNESS: /* Increase brightness */
if (brightness_switch_enabled) if (brightness_switch_enabled)
acpi_video_switch_brightness(video_device, event); acpi_video_switch_brightness(video_device, event);
acpi_bus_generate_proc_event(device, event, 0);
keycode = KEY_BRIGHTNESSUP; keycode = KEY_BRIGHTNESSUP;
break; break;
case ACPI_VIDEO_NOTIFY_DEC_BRIGHTNESS: /* Decrease brightness */ case ACPI_VIDEO_NOTIFY_DEC_BRIGHTNESS: /* Decrease brightness */
if (brightness_switch_enabled) if (brightness_switch_enabled)
acpi_video_switch_brightness(video_device, event); acpi_video_switch_brightness(video_device, event);
acpi_bus_generate_proc_event(device, event, 0);
keycode = KEY_BRIGHTNESSDOWN; keycode = KEY_BRIGHTNESSDOWN;
break; break;
case ACPI_VIDEO_NOTIFY_ZERO_BRIGHTNESS: /* zero brightness */ case ACPI_VIDEO_NOTIFY_ZERO_BRIGHTNESS: /* zero brightness */
if (brightness_switch_enabled) if (brightness_switch_enabled)
acpi_video_switch_brightness(video_device, event); acpi_video_switch_brightness(video_device, event);
acpi_bus_generate_proc_event(device, event, 0);
keycode = KEY_BRIGHTNESS_ZERO; keycode = KEY_BRIGHTNESS_ZERO;
break; break;
case ACPI_VIDEO_NOTIFY_DISPLAY_OFF: /* display device off */ case ACPI_VIDEO_NOTIFY_DISPLAY_OFF: /* display device off */
if (brightness_switch_enabled) if (brightness_switch_enabled)
acpi_video_switch_brightness(video_device, event); acpi_video_switch_brightness(video_device, event);
acpi_bus_generate_proc_event(device, event, 0);
keycode = KEY_DISPLAY_OFF; keycode = KEY_DISPLAY_OFF;
break; break;
default: default:

View File

@ -876,11 +876,6 @@ found:
if (useinput) if (useinput)
sonypi_report_input_event(event); 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, kfifo_in_locked(&sonypi_device.fifo, (unsigned char *)&event,
sizeof(event), &sonypi_device.fifo_lock); sizeof(event), &sonypi_device.fifo_lock);
kill_fasync(&sonypi_device.fifo_async, SIGIO, POLL_IN); kill_fasync(&sonypi_device.fifo_async, SIGIO, POLL_IN);

View File

@ -270,7 +270,6 @@ static void ibm_handle_events(acpi_handle handle, u32 event, void *context)
if (subevent == 0x80) { if (subevent == 0x80) {
dbg("%s: generationg bus event\n", __func__); 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, acpi_bus_generate_netlink_event(note->device->pnp.device_class,
dev_name(&note->device->dev), dev_name(&note->device->dev),
note->event, detail); note->event, detail);

View File

@ -1543,7 +1543,6 @@ static void asus_acpi_notify(struct acpi_device *device, u32 event)
/* TODO Find a better way to handle events count. */ /* TODO Find a better way to handle events count. */
count = asus->event_count[event % 128]++; 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, acpi_bus_generate_netlink_event(asus->device->pnp.device_class,
dev_name(&asus->device->dev), event, dev_name(&asus->device->dev), event,
count); count);

View File

@ -1269,7 +1269,6 @@ static void eeepc_acpi_notify(struct acpi_device *device, u32 event)
if (event > ACPI_MAX_SYS_NOTIFY) if (event > ACPI_MAX_SYS_NOTIFY)
return; return;
count = eeepc->event_count[event % 128]++; count = eeepc->event_count[event % 128]++;
acpi_bus_generate_proc_event(device, event, count);
acpi_bus_generate_netlink_event(device->pnp.device_class, acpi_bus_generate_netlink_event(device->pnp.device_class,
dev_name(&device->dev), event, dev_name(&device->dev), event,
count); count);

View File

@ -773,8 +773,6 @@ static void acpi_fujitsu_notify(struct acpi_device *device, u32 event)
else else
set_lcd_level(newb); set_lcd_level(newb);
} }
acpi_bus_generate_proc_event(fujitsu->dev,
ACPI_VIDEO_NOTIFY_INC_BRIGHTNESS, 0);
keycode = KEY_BRIGHTNESSUP; keycode = KEY_BRIGHTNESSUP;
} else if (oldb > newb) { } else if (oldb > newb) {
if (disable_brightness_adjust != 1) { if (disable_brightness_adjust != 1) {
@ -783,8 +781,6 @@ static void acpi_fujitsu_notify(struct acpi_device *device, u32 event)
else else
set_lcd_level(newb); set_lcd_level(newb);
} }
acpi_bus_generate_proc_event(fujitsu->dev,
ACPI_VIDEO_NOTIFY_DEC_BRIGHTNESS, 0);
keycode = KEY_BRIGHTNESSDOWN; keycode = KEY_BRIGHTNESSDOWN;
} }
break; break;

View File

@ -464,9 +464,6 @@ static void acpi_pcc_generate_keyinput(struct pcc_acpi *pcc)
"error getting hotkey status\n")); "error getting hotkey status\n"));
return; return;
} }
acpi_bus_generate_proc_event(pcc->device, HKEY_NOTIFY, result);
if (!sparse_keymap_report_event(hotk_input_dev, if (!sparse_keymap_report_event(hotk_input_dev,
result & 0xf, result & 0x80, false)) result & 0xf, result & 0x80, false))
ACPI_DEBUG_PRINT((ACPI_DB_ERROR, ACPI_DEBUG_PRINT((ACPI_DB_ERROR,

View File

@ -1275,9 +1275,6 @@ static void sony_nc_notify(struct acpi_device *device, u32 event)
ev_type = HOTKEY; ev_type = HOTKEY;
sony_laptop_report_input_event(real_ev); 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, acpi_bus_generate_netlink_event(sony_nc_acpi_device->pnp.device_class,
dev_name(&sony_nc_acpi_device->dev), ev_type, real_ev); 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: found:
sony_laptop_report_input_event(device_event); sony_laptop_report_input_event(device_event);
acpi_bus_generate_proc_event(dev->acpi_dev, 1, device_event);
sonypi_compat_report_event(device_event); sonypi_compat_report_event(device_event);
return IRQ_HANDLED; return IRQ_HANDLED;
} }

View File

@ -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_user_mask; /* events visible to userspace */
static u32 hotkey_acpi_mask; /* events enabled in firmware */ static u32 hotkey_acpi_mask; /* events enabled in firmware */
static unsigned int hotkey_report_mode;
static u16 *hotkey_keycode_map; static u16 *hotkey_keycode_map;
static struct attribute_set *hotkey_dev_attributes; 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) static void tpacpi_hotkey_send_key(unsigned int scancode)
{ {
tpacpi_input_send_key_masked(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) 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"); "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) -------------------------------------- */ /* sysfs wakeup reason (pollable) -------------------------------------- */
static ssize_t hotkey_wakeup_reason_show(struct device *dev, static ssize_t hotkey_wakeup_reason_show(struct device *dev,
struct device_attribute *attr, struct device_attribute *attr,
@ -2935,7 +2917,6 @@ static struct attribute *hotkey_attributes[] __initdata = {
&dev_attr_hotkey_enable.attr, &dev_attr_hotkey_enable.attr,
&dev_attr_hotkey_bios_enabled.attr, &dev_attr_hotkey_bios_enabled.attr,
&dev_attr_hotkey_bios_mask.attr, &dev_attr_hotkey_bios_mask.attr,
&dev_attr_hotkey_report_mode.attr,
&dev_attr_hotkey_wakeup_reason.attr, &dev_attr_hotkey_wakeup_reason.attr,
&dev_attr_hotkey_wakeup_hotunplug_complete.attr, &dev_attr_hotkey_wakeup_hotunplug_complete.attr,
&dev_attr_hotkey_mask.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", "initial masks: user=0x%08x, fw=0x%08x, poll=0x%08x\n",
hotkey_user_mask, hotkey_acpi_mask, hotkey_source_mask); 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->open = &hotkey_inputdev_open;
tpacpi_inputdev->close = &hotkey_inputdev_close; 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); "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 */ /* netlink events */
if (!ignore_acpi_ev && send_acpi_ev) { if (!ignore_acpi_ev && send_acpi_ev) {
acpi_bus_generate_netlink_event( acpi_bus_generate_netlink_event(
@ -8840,11 +8809,6 @@ module_param(brightness_enable, uint, 0444);
MODULE_PARM_DESC(brightness_enable, MODULE_PARM_DESC(brightness_enable,
"Enables backlight control when 1, disables when 0"); "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 #ifdef CONFIG_THINKPAD_ACPI_ALSA_SUPPORT
module_param_named(volume_mode, volume_mode, uint, 0444); module_param_named(volume_mode, volume_mode, uint, 0444);
MODULE_PARM_DESC(volume_mode, MODULE_PARM_DESC(volume_mode,
@ -8975,10 +8939,6 @@ static int __init thinkpad_acpi_module_init(void)
tpacpi_lifecycle = TPACPI_LIFE_INIT; tpacpi_lifecycle = TPACPI_LIFE_INIT;
/* Parameter checking */
if (hotkey_report_mode > 2)
return -EINVAL;
/* Driver-level probe */ /* Driver-level probe */
ret = get_thinkpad_model_data(&thinkpad_id); ret = get_thinkpad_model_data(&thinkpad_id);

View File

@ -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); 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, acpi_status acpi_bus_get_status_handle(acpi_handle handle,
unsigned long long *sta); unsigned long long *sta);
int acpi_bus_get_status(struct acpi_device *device); 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; } static inline bool acpi_bus_can_wakeup(acpi_handle handle) { return false; }
#endif #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_acquire(void);
void acpi_scan_lock_release(void); void acpi_scan_lock_release(void);
int acpi_scan_add_handler(struct acpi_scan_handler *handler); int acpi_scan_add_handler(struct acpi_scan_handler *handler);