|
@@ -40,8 +40,6 @@
|
|
|
#include <linux/init.h>
|
|
|
#include <linux/types.h>
|
|
|
#include <linux/slab.h>
|
|
|
-#include <linux/proc_fs.h>
|
|
|
-#include <linux/seq_file.h>
|
|
|
#include <acpi/acpi_bus.h>
|
|
|
#include <acpi/acpi_drivers.h>
|
|
|
#include "sleep.h"
|
|
@@ -64,7 +62,6 @@ module_param_named(power_nocheck, acpi_power_nocheck, bool, 000);
|
|
|
static int acpi_power_add(struct acpi_device *device);
|
|
|
static int acpi_power_remove(struct acpi_device *device, int type);
|
|
|
static int acpi_power_resume(struct acpi_device *device);
|
|
|
-static int acpi_power_open_fs(struct inode *inode, struct file *file);
|
|
|
|
|
|
static const struct acpi_device_id power_device_ids[] = {
|
|
|
{ACPI_POWER_HID, 0},
|
|
@@ -99,14 +96,6 @@ struct acpi_power_resource {
|
|
|
|
|
|
static struct list_head acpi_power_resource_list;
|
|
|
|
|
|
-static const struct file_operations acpi_power_fops = {
|
|
|
- .owner = THIS_MODULE,
|
|
|
- .open = acpi_power_open_fs,
|
|
|
- .read = seq_read,
|
|
|
- .llseek = seq_lseek,
|
|
|
- .release = single_release,
|
|
|
-};
|
|
|
-
|
|
|
/* --------------------------------------------------------------------------
|
|
|
Power Resource Management
|
|
|
-------------------------------------------------------------------------- */
|
|
@@ -541,102 +530,6 @@ int acpi_power_transition(struct acpi_device *device, int state)
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
-/* --------------------------------------------------------------------------
|
|
|
- FS Interface (/proc)
|
|
|
- -------------------------------------------------------------------------- */
|
|
|
-
|
|
|
-static struct proc_dir_entry *acpi_power_dir;
|
|
|
-
|
|
|
-static int acpi_power_seq_show(struct seq_file *seq, void *offset)
|
|
|
-{
|
|
|
- int count = 0;
|
|
|
- int result = 0, state;
|
|
|
- struct acpi_power_resource *resource = NULL;
|
|
|
- struct list_head *node, *next;
|
|
|
- struct acpi_power_reference *ref;
|
|
|
-
|
|
|
-
|
|
|
- resource = seq->private;
|
|
|
-
|
|
|
- if (!resource)
|
|
|
- goto end;
|
|
|
-
|
|
|
- result = acpi_power_get_state(resource->device->handle, &state);
|
|
|
- if (result)
|
|
|
- goto end;
|
|
|
-
|
|
|
- seq_puts(seq, "state: ");
|
|
|
- switch (state) {
|
|
|
- case ACPI_POWER_RESOURCE_STATE_ON:
|
|
|
- seq_puts(seq, "on\n");
|
|
|
- break;
|
|
|
- case ACPI_POWER_RESOURCE_STATE_OFF:
|
|
|
- seq_puts(seq, "off\n");
|
|
|
- break;
|
|
|
- default:
|
|
|
- seq_puts(seq, "unknown\n");
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- mutex_lock(&resource->resource_lock);
|
|
|
- list_for_each_safe(node, next, &resource->reference) {
|
|
|
- ref = container_of(node, struct acpi_power_reference, node);
|
|
|
- count++;
|
|
|
- }
|
|
|
- mutex_unlock(&resource->resource_lock);
|
|
|
-
|
|
|
- seq_printf(seq, "system level: S%d\n"
|
|
|
- "order: %d\n"
|
|
|
- "reference count: %d\n",
|
|
|
- resource->system_level,
|
|
|
- resource->order, count);
|
|
|
-
|
|
|
- end:
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-static int acpi_power_open_fs(struct inode *inode, struct file *file)
|
|
|
-{
|
|
|
- return single_open(file, acpi_power_seq_show, PDE(inode)->data);
|
|
|
-}
|
|
|
-
|
|
|
-static int acpi_power_add_fs(struct acpi_device *device)
|
|
|
-{
|
|
|
- struct proc_dir_entry *entry = NULL;
|
|
|
-
|
|
|
-
|
|
|
- if (!device)
|
|
|
- return -EINVAL;
|
|
|
-
|
|
|
- if (!acpi_device_dir(device)) {
|
|
|
- acpi_device_dir(device) = proc_mkdir(acpi_device_bid(device),
|
|
|
- acpi_power_dir);
|
|
|
- if (!acpi_device_dir(device))
|
|
|
- return -ENODEV;
|
|
|
- }
|
|
|
-
|
|
|
- /* 'status' [R] */
|
|
|
- entry = proc_create_data(ACPI_POWER_FILE_STATUS,
|
|
|
- S_IRUGO, acpi_device_dir(device),
|
|
|
- &acpi_power_fops, acpi_driver_data(device));
|
|
|
- if (!entry)
|
|
|
- return -EIO;
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-static int acpi_power_remove_fs(struct acpi_device *device)
|
|
|
-{
|
|
|
-
|
|
|
- if (acpi_device_dir(device)) {
|
|
|
- remove_proc_entry(ACPI_POWER_FILE_STATUS,
|
|
|
- acpi_device_dir(device));
|
|
|
- remove_proc_entry(acpi_device_bid(device), acpi_power_dir);
|
|
|
- acpi_device_dir(device) = NULL;
|
|
|
- }
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
/* --------------------------------------------------------------------------
|
|
|
Driver Interface
|
|
|
-------------------------------------------------------------------------- */
|
|
@@ -690,10 +583,6 @@ static int acpi_power_add(struct acpi_device *device)
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- result = acpi_power_add_fs(device);
|
|
|
- if (result)
|
|
|
- goto end;
|
|
|
-
|
|
|
printk(KERN_INFO PREFIX "%s [%s] (%s)\n", acpi_device_name(device),
|
|
|
acpi_device_bid(device), state ? "on" : "off");
|
|
|
|
|
@@ -715,8 +604,6 @@ static int acpi_power_remove(struct acpi_device *device, int type)
|
|
|
|
|
|
resource = acpi_driver_data(device);
|
|
|
|
|
|
- acpi_power_remove_fs(device);
|
|
|
-
|
|
|
mutex_lock(&resource->resource_lock);
|
|
|
list_for_each_safe(node, next, &resource->reference) {
|
|
|
struct acpi_power_reference *ref = container_of(node, struct acpi_power_reference, node);
|
|
@@ -760,19 +647,6 @@ static int acpi_power_resume(struct acpi_device *device)
|
|
|
|
|
|
int __init acpi_power_init(void)
|
|
|
{
|
|
|
- int result = 0;
|
|
|
-
|
|
|
INIT_LIST_HEAD(&acpi_power_resource_list);
|
|
|
-
|
|
|
- acpi_power_dir = proc_mkdir(ACPI_POWER_CLASS, acpi_root_dir);
|
|
|
- if (!acpi_power_dir)
|
|
|
- return -ENODEV;
|
|
|
-
|
|
|
- result = acpi_bus_register_driver(&acpi_power_driver);
|
|
|
- if (result < 0) {
|
|
|
- remove_proc_entry(ACPI_POWER_CLASS, acpi_root_dir);
|
|
|
- return -ENODEV;
|
|
|
- }
|
|
|
-
|
|
|
- return 0;
|
|
|
+ return acpi_bus_register_driver(&acpi_power_driver);
|
|
|
}
|