diff options
author | Thomas Renninger <trenn@suse.de> | 2010-07-16 07:11:31 -0400 |
---|---|---|
committer | Matthew Garrett <mjg@redhat.com> | 2010-08-03 09:49:08 -0400 |
commit | 1195a098168fcacfef1cd80d05358e52fb366bf6 (patch) | |
tree | 8629388386fdb4fd6bc2b955f10a96b83a9790b3 /drivers/acpi/ec_sys.c | |
parent | cd89e08fa020f5a882f922e3c9e2628235ca6715 (diff) |
ACPI: Provide /sys/kernel/debug/ec/...
This patch provides the same information through debugfs, which previously was
provided through /proc/acpi/embedded_controller/*/info
This is the gpe the EC is connected to and whether the global lock
gets used.
The io ports used are added to /proc/ioports in another patch.
Beside the fact that /proc/acpi is deprecated for quite some time,
this info is not needed for applications and thus can be moved
to debugfs instead of a public interface like /sys.
Signed-off-by: Thomas Renninger <trenn@suse.de>
CC: Alexey Starikovskiy <astarikovskiy@suse.de>
CC: Len Brown <lenb@kernel.org>
CC: linux-kernel@vger.kernel.org
CC: linux-acpi@vger.kernel.org
CC: Bjorn Helgaas <bjorn.helgaas@hp.com>
CC: platform-driver-x86@vger.kernel.org
Signed-off-by: Matthew Garrett <mjg@redhat.com>
Diffstat (limited to 'drivers/acpi/ec_sys.c')
-rw-r--r-- | drivers/acpi/ec_sys.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/drivers/acpi/ec_sys.c b/drivers/acpi/ec_sys.c new file mode 100644 index 000000000000..834c21a42d67 --- /dev/null +++ b/drivers/acpi/ec_sys.c | |||
@@ -0,0 +1,57 @@ | |||
1 | #include <linux/kernel.h> | ||
2 | #include <linux/acpi.h> | ||
3 | #include <linux/debugfs.h> | ||
4 | #include "internal.h" | ||
5 | |||
6 | MODULE_AUTHOR("Thomas Renninger <trenn@suse.de>"); | ||
7 | MODULE_DESCRIPTION("ACPI EC sysfs access driver"); | ||
8 | MODULE_LICENSE("GPL"); | ||
9 | |||
10 | struct sysdev_class acpi_ec_sysdev_class = { | ||
11 | .name = "ec", | ||
12 | }; | ||
13 | |||
14 | static struct dentry *acpi_ec_debugfs_dir; | ||
15 | |||
16 | int acpi_ec_add_debugfs(struct acpi_ec *ec, unsigned int ec_device_count) | ||
17 | { | ||
18 | struct dentry *dev_dir; | ||
19 | char name[64]; | ||
20 | if (ec_device_count == 0) { | ||
21 | acpi_ec_debugfs_dir = debugfs_create_dir("ec", NULL); | ||
22 | if (!acpi_ec_debugfs_dir) | ||
23 | return -ENOMEM; | ||
24 | } | ||
25 | |||
26 | sprintf(name, "ec%u", ec_device_count); | ||
27 | dev_dir = debugfs_create_dir(name, acpi_ec_debugfs_dir); | ||
28 | if (!dev_dir) { | ||
29 | if (ec_device_count == 0) | ||
30 | debugfs_remove_recursive(acpi_ec_debugfs_dir); | ||
31 | /* TBD: Proper cleanup for multiple ECs */ | ||
32 | return -ENOMEM; | ||
33 | } | ||
34 | |||
35 | debugfs_create_x32("gpe", 0444, dev_dir, (u32 *)&first_ec->gpe); | ||
36 | debugfs_create_bool("use_global_lock", 0444, dev_dir, | ||
37 | (u32 *)&first_ec->global_lock); | ||
38 | return 0; | ||
39 | } | ||
40 | |||
41 | static int __init acpi_ec_sys_init(void) | ||
42 | { | ||
43 | int err = 0; | ||
44 | if (first_ec) | ||
45 | err = acpi_ec_add_debugfs(first_ec, 0); | ||
46 | else | ||
47 | err = -ENODEV; | ||
48 | return err; | ||
49 | } | ||
50 | |||
51 | static void __exit acpi_ec_sys_exit(void) | ||
52 | { | ||
53 | debugfs_remove_recursive(acpi_ec_debugfs_dir); | ||
54 | } | ||
55 | |||
56 | module_init(acpi_ec_sys_init); | ||
57 | module_exit(acpi_ec_sys_exit); | ||