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 = {
-------------------------------------------------------------------------- */
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)
{
......@@ -527,6 +530,12 @@ acpi_button_exit (void)
{
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);
remove_proc_entry(ACPI_BUTTON_CLASS, acpi_root_dir);
......
......@@ -15,6 +15,8 @@ ACPI_MODULE_NAME ("scan")
#define STRUCT_TO_INT(s) (*((int*)&s))
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"
......@@ -904,6 +906,10 @@ acpi_bus_scan_fixed (
ACPI_FUNCTION_TRACE("acpi_bus_scan_fixed");
fixed_pwr_button = NULL;
fixed_sleep_button = NULL;
if (!root)
return_VALUE(-ENODEV);
......@@ -911,11 +917,11 @@ acpi_bus_scan_fixed (
* Enumerate all fixed-feature devices.
*/
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);
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);
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