Commit b39d913e authored by Len Brown's avatar Len Brown Committed by Len Brown

[ACPI] support button driver unload (Luming Yu)

http://bugzilla.kernel.org/show_bug.cgi?id=2281
parent 62560d62
...@@ -108,6 +108,9 @@ static struct file_operations acpi_button_state_fops = { ...@@ -108,6 +108,9 @@ static struct file_operations acpi_button_state_fops = {
-------------------------------------------------------------------------- */ -------------------------------------------------------------------------- */
static struct proc_dir_entry *acpi_button_dir; static struct proc_dir_entry *acpi_button_dir;
struct acpi_device *fixed_pwr_button;
struct acpi_device *fixed_sleep_button;
static int acpi_button_info_seq_show(struct seq_file *seq, void *offset) static int acpi_button_info_seq_show(struct seq_file *seq, void *offset)
{ {
...@@ -527,6 +530,12 @@ acpi_button_exit (void) ...@@ -527,6 +530,12 @@ acpi_button_exit (void)
{ {
ACPI_FUNCTION_TRACE("acpi_button_exit"); ACPI_FUNCTION_TRACE("acpi_button_exit");
if(fixed_pwr_button)
acpi_button_remove(fixed_pwr_button, ACPI_BUS_TYPE_POWER_BUTTON);
if(fixed_sleep_button)
acpi_button_remove(fixed_sleep_button, ACPI_BUS_TYPE_SLEEP_BUTTON);
acpi_bus_unregister_driver(&acpi_button_driver); acpi_bus_unregister_driver(&acpi_button_driver);
remove_proc_entry(ACPI_BUTTON_CLASS, acpi_root_dir); remove_proc_entry(ACPI_BUTTON_CLASS, acpi_root_dir);
......
...@@ -15,6 +15,8 @@ ACPI_MODULE_NAME ("scan") ...@@ -15,6 +15,8 @@ ACPI_MODULE_NAME ("scan")
#define STRUCT_TO_INT(s) (*((int*)&s)) #define STRUCT_TO_INT(s) (*((int*)&s))
extern struct acpi_device *acpi_root; extern struct acpi_device *acpi_root;
extern struct acpi_device *fixed_pwr_button;
extern struct acpi_device *fixed_sleep_button;
#define ACPI_BUS_CLASS "system_bus" #define ACPI_BUS_CLASS "system_bus"
...@@ -904,6 +906,10 @@ acpi_bus_scan_fixed ( ...@@ -904,6 +906,10 @@ acpi_bus_scan_fixed (
ACPI_FUNCTION_TRACE("acpi_bus_scan_fixed"); ACPI_FUNCTION_TRACE("acpi_bus_scan_fixed");
fixed_pwr_button = NULL;
fixed_sleep_button = NULL;
if (!root) if (!root)
return_VALUE(-ENODEV); return_VALUE(-ENODEV);
...@@ -911,11 +917,11 @@ acpi_bus_scan_fixed ( ...@@ -911,11 +917,11 @@ acpi_bus_scan_fixed (
* Enumerate all fixed-feature devices. * Enumerate all fixed-feature devices.
*/ */
if (acpi_fadt.pwr_button == 0) if (acpi_fadt.pwr_button == 0)
result = acpi_bus_add(&device, acpi_root, result = acpi_bus_add(&fixed_pwr_button, acpi_root,
NULL, ACPI_BUS_TYPE_POWER_BUTTON); NULL, ACPI_BUS_TYPE_POWER_BUTTON);
if (acpi_fadt.sleep_button == 0) if (acpi_fadt.sleep_button == 0)
result = acpi_bus_add(&device, acpi_root, result = acpi_bus_add(&fixed_sleep_button, acpi_root,
NULL, ACPI_BUS_TYPE_SLEEP_BUTTON); NULL, ACPI_BUS_TYPE_SLEEP_BUTTON);
return_VALUE(result); return_VALUE(result);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment