[ACPI] generic Hot Key support
See Documentation/acpi-hotkey.txt Use cmdline "acpi_specific_hotkey" to enable legacy platform specific drivers. http://bugzilla.kernel.org/show_bug.cgi?id=3887 Signed-off-by: Luming Yu <luming.yu@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
parent
d58da59045
commit
fb9802fa59
9 changed files with 1094 additions and 1 deletions
35
Documentation/acpi-hotkey.txt
Normal file
35
Documentation/acpi-hotkey.txt
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
driver/acpi/hotkey.c implement:
|
||||||
|
1. /proc/acpi/hotkey/event_config
|
||||||
|
(event based hotkey or event config interface):
|
||||||
|
a. add a event based hotkey(event) :
|
||||||
|
echo "0:bus::action:method:num:num" > event_config
|
||||||
|
|
||||||
|
b. delete a event based hotkey(event):
|
||||||
|
echo "1:::::num:num" > event_config
|
||||||
|
|
||||||
|
c. modify a event based hotkey(event):
|
||||||
|
echo "2:bus::action:method:num:num" > event_config
|
||||||
|
|
||||||
|
2. /proc/acpi/hotkey/poll_config
|
||||||
|
(polling based hotkey or event config interface):
|
||||||
|
a.add a polling based hotkey(event) :
|
||||||
|
echo "0:bus:method:action:method:num" > poll_config
|
||||||
|
this adding command will create a proc file
|
||||||
|
/proc/acpi/hotkey/method, which is used to get
|
||||||
|
result of polling.
|
||||||
|
|
||||||
|
b.delete a polling based hotkey(event):
|
||||||
|
echo "1:::::num" > event_config
|
||||||
|
|
||||||
|
c.modify a polling based hotkey(event):
|
||||||
|
echo "2:bus:method:action:method:num" > poll_config
|
||||||
|
|
||||||
|
3./proc/acpi/hotkey/action
|
||||||
|
(interface to call aml method associated with a
|
||||||
|
specific hotkey(event))
|
||||||
|
echo "event_num:event_type:event_argument" >
|
||||||
|
/proc/acpi/hotkey/action.
|
||||||
|
The result of the execution of this aml method is
|
||||||
|
attached to /proc/acpi/hotkey/poll_method, which is dnyamically
|
||||||
|
created. Please use command "cat /proc/acpi/hotkey/polling_method"
|
||||||
|
to retrieve it.
|
|
@ -123,6 +123,15 @@ config ACPI_VIDEO
|
||||||
Note that this is an ref. implementation only. It may or may not work
|
Note that this is an ref. implementation only. It may or may not work
|
||||||
for your integrated video device.
|
for your integrated video device.
|
||||||
|
|
||||||
|
config ACPI_HOTKEY
|
||||||
|
tristate "Generic Hotkey"
|
||||||
|
depends on ACPI_INTERPRETER
|
||||||
|
depends on EXPERIMENTAL
|
||||||
|
depends on !IA64_SGI_SN
|
||||||
|
default m
|
||||||
|
help
|
||||||
|
ACPI generic hotkey
|
||||||
|
|
||||||
config ACPI_FAN
|
config ACPI_FAN
|
||||||
tristate "Fan"
|
tristate "Fan"
|
||||||
depends on !IA64_SGI_SN
|
depends on !IA64_SGI_SN
|
||||||
|
|
|
@ -42,7 +42,8 @@ obj-$(CONFIG_ACPI_BATTERY) += battery.o
|
||||||
obj-$(CONFIG_ACPI_BUTTON) += button.o
|
obj-$(CONFIG_ACPI_BUTTON) += button.o
|
||||||
obj-$(CONFIG_ACPI_EC) += ec.o
|
obj-$(CONFIG_ACPI_EC) += ec.o
|
||||||
obj-$(CONFIG_ACPI_FAN) += fan.o
|
obj-$(CONFIG_ACPI_FAN) += fan.o
|
||||||
obj-$(CONFIG_ACPI_VIDEO) += video.o
|
obj-$(CONFIG_ACPI_VIDEO) += video.o
|
||||||
|
obj-$(CONFIG_ACPI_HOTKEY) += hotkey.o
|
||||||
obj-$(CONFIG_ACPI_PCI) += pci_root.o pci_link.o pci_irq.o pci_bind.o
|
obj-$(CONFIG_ACPI_PCI) += pci_root.o pci_link.o pci_irq.o pci_bind.o
|
||||||
obj-$(CONFIG_ACPI_POWER) += power.o
|
obj-$(CONFIG_ACPI_POWER) += power.o
|
||||||
obj-$(CONFIG_ACPI_PROCESSOR) += processor.o
|
obj-$(CONFIG_ACPI_PROCESSOR) += processor.o
|
||||||
|
|
|
@ -1204,6 +1204,10 @@ static int __init asus_acpi_init(void)
|
||||||
if (acpi_disabled)
|
if (acpi_disabled)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
|
if (!acpi_specific_hotkey_enabled){
|
||||||
|
printk(KERN_ERR "Using generic hotkey driver\n");
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
asus_proc_dir = proc_mkdir(PROC_ASUS, acpi_root_dir);
|
asus_proc_dir = proc_mkdir(PROC_ASUS, acpi_root_dir);
|
||||||
if (!asus_proc_dir) {
|
if (!asus_proc_dir) {
|
||||||
printk(KERN_ERR "Asus ACPI: Unable to create /proc entry\n");
|
printk(KERN_ERR "Asus ACPI: Unable to create /proc entry\n");
|
||||||
|
|
1018
drivers/acpi/hotkey.c
Normal file
1018
drivers/acpi/hotkey.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1185,6 +1185,10 @@ static int __init acpi_ibm_init(void)
|
||||||
if (acpi_disabled)
|
if (acpi_disabled)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
|
if (!acpi_specific_hotkey_enabled){
|
||||||
|
printk(IBM_ERR "Using generic hotkey driver\n");
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
/* these handles are required */
|
/* these handles are required */
|
||||||
if (IBM_HANDLE_INIT(ec, 1) < 0 ||
|
if (IBM_HANDLE_INIT(ec, 1) < 0 ||
|
||||||
IBM_HANDLE_INIT(hkey, 1) < 0 ||
|
IBM_HANDLE_INIT(hkey, 1) < 0 ||
|
||||||
|
|
|
@ -71,6 +71,9 @@ EXPORT_SYMBOL(acpi_in_debugger);
|
||||||
extern char line_buf[80];
|
extern char line_buf[80];
|
||||||
#endif /*ENABLE_DEBUGGER*/
|
#endif /*ENABLE_DEBUGGER*/
|
||||||
|
|
||||||
|
int acpi_specific_hotkey_enabled;
|
||||||
|
EXPORT_SYMBOL(acpi_specific_hotkey_enabled);
|
||||||
|
|
||||||
static unsigned int acpi_irq_irq;
|
static unsigned int acpi_irq_irq;
|
||||||
static acpi_osd_handler acpi_irq_handler;
|
static acpi_osd_handler acpi_irq_handler;
|
||||||
static void *acpi_irq_context;
|
static void *acpi_irq_context;
|
||||||
|
@ -1152,6 +1155,15 @@ acpi_wake_gpes_always_on_setup(char *str)
|
||||||
|
|
||||||
__setup("acpi_wake_gpes_always_on", acpi_wake_gpes_always_on_setup);
|
__setup("acpi_wake_gpes_always_on", acpi_wake_gpes_always_on_setup);
|
||||||
|
|
||||||
|
int __init
|
||||||
|
acpi_hotkey_setup(char *str)
|
||||||
|
{
|
||||||
|
acpi_specific_hotkey_enabled = TRUE;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
__setup("acpi_specific_hotkey", acpi_hotkey_setup);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* max_cstate is defined in the base kernel so modules can
|
* max_cstate is defined in the base kernel so modules can
|
||||||
* change it w/o depending on the state of the processor module.
|
* change it w/o depending on the state of the processor module.
|
||||||
|
|
|
@ -529,6 +529,11 @@ toshiba_acpi_init(void)
|
||||||
|
|
||||||
if (acpi_disabled)
|
if (acpi_disabled)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
|
if (!acpi_specific_hotkey_enabled){
|
||||||
|
printk(MY_INFO "Using generic hotkey driver\n");
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
/* simple device detection: look for HCI method */
|
/* simple device detection: look for HCI method */
|
||||||
if (is_valid_acpi_path(METHOD_HCI_1))
|
if (is_valid_acpi_path(METHOD_HCI_1))
|
||||||
method_hci = METHOD_HCI_1;
|
method_hci = METHOD_HCI_1;
|
||||||
|
|
|
@ -108,5 +108,10 @@ int acpi_ec_ecdt_probe (void);
|
||||||
|
|
||||||
int acpi_processor_set_thermal_limit(acpi_handle handle, int type);
|
int acpi_processor_set_thermal_limit(acpi_handle handle, int type);
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------
|
||||||
|
Hot Keys
|
||||||
|
-------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
extern int acpi_specific_hotkey_enabled;
|
||||||
|
|
||||||
#endif /*__ACPI_DRIVERS_H__*/
|
#endif /*__ACPI_DRIVERS_H__*/
|
||||||
|
|
Loading…
Reference in a new issue