diff options
author | Thomas Renninger <trenn@suse.de> | 2010-07-16 13:11:31 +0200 |
---|---|---|
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) | |
download | blackbird-op-linux-1195a098168fcacfef1cd80d05358e52fb366bf6.tar.gz blackbird-op-linux-1195a098168fcacfef1cd80d05358e52fb366bf6.zip |
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 @@ +#include <linux/kernel.h> +#include <linux/acpi.h> +#include <linux/debugfs.h> +#include "internal.h" + +MODULE_AUTHOR("Thomas Renninger <trenn@suse.de>"); +MODULE_DESCRIPTION("ACPI EC sysfs access driver"); +MODULE_LICENSE("GPL"); + +struct sysdev_class acpi_ec_sysdev_class = { + .name = "ec", +}; + +static struct dentry *acpi_ec_debugfs_dir; + +int acpi_ec_add_debugfs(struct acpi_ec *ec, unsigned int ec_device_count) +{ + struct dentry *dev_dir; + char name[64]; + if (ec_device_count == 0) { + acpi_ec_debugfs_dir = debugfs_create_dir("ec", NULL); + if (!acpi_ec_debugfs_dir) + return -ENOMEM; + } + + sprintf(name, "ec%u", ec_device_count); + dev_dir = debugfs_create_dir(name, acpi_ec_debugfs_dir); + if (!dev_dir) { + if (ec_device_count == 0) + debugfs_remove_recursive(acpi_ec_debugfs_dir); + /* TBD: Proper cleanup for multiple ECs */ + return -ENOMEM; + } + + debugfs_create_x32("gpe", 0444, dev_dir, (u32 *)&first_ec->gpe); + debugfs_create_bool("use_global_lock", 0444, dev_dir, + (u32 *)&first_ec->global_lock); + return 0; +} + +static int __init acpi_ec_sys_init(void) +{ + int err = 0; + if (first_ec) + err = acpi_ec_add_debugfs(first_ec, 0); + else + err = -ENODEV; + return err; +} + +static void __exit acpi_ec_sys_exit(void) +{ + debugfs_remove_recursive(acpi_ec_debugfs_dir); +} + +module_init(acpi_ec_sys_init); +module_exit(acpi_ec_sys_exit); |