Loading Documentation/thinkpad-acpi.txt +40 −2 Original line number Diff line number Diff line Loading @@ -101,11 +101,39 @@ follow all sysfs guidelines and correctly process all errors (the sysfs interface makes extensive use of errors). File descriptors and open / close operations to the sysfs inodes must also be properly implemented. Driver version -- /proc/acpi/ibm/driver --------------------------------------- The version of thinkpad-acpi's sysfs interface is exported by the driver as a driver attribute (see below). Sysfs driver attributes are on the driver's sysfs attribute space, for 2.6.20 this is /sys/bus/platform/drivers/thinkpad-acpi/. Sysfs device attributes are on the driver's sysfs attribute space, for 2.6.20 this is /sys/devices/platform/thinkpad-acpi/. Driver version -------------- procfs: /proc/acpi/ibm/driver sysfs driver attribute: version The driver name and version. No commands can be written to this file. Sysfs interface version ----------------------- sysfs driver attribute: interface_version Version of the thinkpad-acpi sysfs interface, as an unsigned long (output in hex format: 0xAAAABBCC), where: AAAA - major revision BB - minor revision CC - bugfix revision The sysfs interface version changelog for the driver can be found at the end of this document. Changes to the sysfs interface done by the kernel subsystems are not documented here, nor are they tracked by this attribute. Hot keys -- /proc/acpi/ibm/hotkey --------------------------------- Loading Loading @@ -745,9 +773,19 @@ to enable more than one output class, just add their values. There is also a kernel build option to enable more debugging information, which may be necessary to debug driver problems. The level of debugging information output by the driver can be changed at runtime through sysfs, using the driver attribute debug_level. The attribute takes the same bitmask as the debug module parameter above. Force loading of module ----------------------- If thinkpad-acpi refuses to detect your ThinkPad, you can try to specify the module parameter force_load=1. Regardless of whether this works or not, please contact ibm-acpi-devel@lists.sourceforge.net with a report. Sysfs interface changelog: 0x000100: Initial sysfs support, as a single platform driver and device. drivers/misc/thinkpad_acpi.c +90 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ */ #define IBM_VERSION "0.14" #define TPACPI_SYSFS_VERSION 0x000100 /* * Changelog: Loading Loading @@ -493,6 +494,87 @@ static struct platform_driver tpacpi_pdriver = { }; /************************************************************************* * thinkpad-acpi driver attributes */ /* interface_version --------------------------------------------------- */ static ssize_t tpacpi_driver_interface_version_show( struct device_driver *drv, char *buf) { return snprintf(buf, PAGE_SIZE, "0x%08x\n", TPACPI_SYSFS_VERSION); } static DRIVER_ATTR(interface_version, S_IRUGO, tpacpi_driver_interface_version_show, NULL); /* debug_level --------------------------------------------------------- */ static ssize_t tpacpi_driver_debug_show(struct device_driver *drv, char *buf) { return snprintf(buf, PAGE_SIZE, "0x%04x\n", dbg_level); } static ssize_t tpacpi_driver_debug_store(struct device_driver *drv, const char *buf, size_t count) { unsigned long t; char *endp; t = simple_strtoul(buf, &endp, 0); while (*endp && isspace(*endp)) endp++; if (*endp) return -EINVAL; dbg_level = t; return count; } static DRIVER_ATTR(debug_level, S_IWUSR | S_IRUGO, tpacpi_driver_debug_show, tpacpi_driver_debug_store); /* version ------------------------------------------------------------- */ static ssize_t tpacpi_driver_version_show(struct device_driver *drv, char *buf) { return snprintf(buf, PAGE_SIZE, "%s v%s\n", IBM_DESC, IBM_VERSION); } static DRIVER_ATTR(version, S_IRUGO, tpacpi_driver_version_show, NULL); /* --------------------------------------------------------------------- */ static struct driver_attribute* tpacpi_driver_attributes[] = { &driver_attr_debug_level, &driver_attr_version, &driver_attr_interface_version, }; static int __init tpacpi_create_driver_attributes(struct device_driver *drv) { int i, res; i = 0; res = 0; while (!res && i < ARRAY_SIZE(tpacpi_driver_attributes)) { res = driver_create_file(drv, tpacpi_driver_attributes[i]); i++; } return res; } static void tpacpi_remove_driver_attributes(struct device_driver *drv) { int i; for(i = 0; i < ARRAY_SIZE(tpacpi_driver_attributes); i++) driver_remove_file(drv, tpacpi_driver_attributes[i]); } /**************************************************************************** **************************************************************************** * Loading Loading @@ -3268,6 +3350,13 @@ static int __init thinkpad_acpi_module_init(void) thinkpad_acpi_module_exit(); return ret; } ret = tpacpi_create_driver_attributes(&tpacpi_pdriver.driver); if (ret) { printk(IBM_ERR "unable to create sysfs driver attributes\n"); thinkpad_acpi_module_exit(); return ret; } /* Device initialization */ tpacpi_pdev = platform_device_register_simple(IBM_DRVR_NAME, -1, Loading Loading @@ -3318,6 +3407,7 @@ static void thinkpad_acpi_module_exit(void) if (tpacpi_pdev) platform_device_unregister(tpacpi_pdev); tpacpi_remove_driver_attributes(&tpacpi_pdriver.driver); platform_driver_unregister(&tpacpi_pdriver); if (proc_dir) Loading drivers/misc/thinkpad_acpi.h +3 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ #include <linux/list.h> #include <linux/proc_fs.h> #include <linux/sysfs.h> #include <linux/backlight.h> #include <linux/fb.h> #include <linux/platform_device.h> Loading Loading @@ -137,6 +138,8 @@ static char *next_cmd(char **cmds); static struct platform_device *tpacpi_pdev; static struct class_device *tpacpi_hwmon; static struct platform_driver tpacpi_pdriver; static int tpacpi_create_driver_attributes(struct device_driver *drv); static void tpacpi_remove_driver_attributes(struct device_driver *drv); /* Module */ static int experimental; Loading Loading
Documentation/thinkpad-acpi.txt +40 −2 Original line number Diff line number Diff line Loading @@ -101,11 +101,39 @@ follow all sysfs guidelines and correctly process all errors (the sysfs interface makes extensive use of errors). File descriptors and open / close operations to the sysfs inodes must also be properly implemented. Driver version -- /proc/acpi/ibm/driver --------------------------------------- The version of thinkpad-acpi's sysfs interface is exported by the driver as a driver attribute (see below). Sysfs driver attributes are on the driver's sysfs attribute space, for 2.6.20 this is /sys/bus/platform/drivers/thinkpad-acpi/. Sysfs device attributes are on the driver's sysfs attribute space, for 2.6.20 this is /sys/devices/platform/thinkpad-acpi/. Driver version -------------- procfs: /proc/acpi/ibm/driver sysfs driver attribute: version The driver name and version. No commands can be written to this file. Sysfs interface version ----------------------- sysfs driver attribute: interface_version Version of the thinkpad-acpi sysfs interface, as an unsigned long (output in hex format: 0xAAAABBCC), where: AAAA - major revision BB - minor revision CC - bugfix revision The sysfs interface version changelog for the driver can be found at the end of this document. Changes to the sysfs interface done by the kernel subsystems are not documented here, nor are they tracked by this attribute. Hot keys -- /proc/acpi/ibm/hotkey --------------------------------- Loading Loading @@ -745,9 +773,19 @@ to enable more than one output class, just add their values. There is also a kernel build option to enable more debugging information, which may be necessary to debug driver problems. The level of debugging information output by the driver can be changed at runtime through sysfs, using the driver attribute debug_level. The attribute takes the same bitmask as the debug module parameter above. Force loading of module ----------------------- If thinkpad-acpi refuses to detect your ThinkPad, you can try to specify the module parameter force_load=1. Regardless of whether this works or not, please contact ibm-acpi-devel@lists.sourceforge.net with a report. Sysfs interface changelog: 0x000100: Initial sysfs support, as a single platform driver and device.
drivers/misc/thinkpad_acpi.c +90 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ */ #define IBM_VERSION "0.14" #define TPACPI_SYSFS_VERSION 0x000100 /* * Changelog: Loading Loading @@ -493,6 +494,87 @@ static struct platform_driver tpacpi_pdriver = { }; /************************************************************************* * thinkpad-acpi driver attributes */ /* interface_version --------------------------------------------------- */ static ssize_t tpacpi_driver_interface_version_show( struct device_driver *drv, char *buf) { return snprintf(buf, PAGE_SIZE, "0x%08x\n", TPACPI_SYSFS_VERSION); } static DRIVER_ATTR(interface_version, S_IRUGO, tpacpi_driver_interface_version_show, NULL); /* debug_level --------------------------------------------------------- */ static ssize_t tpacpi_driver_debug_show(struct device_driver *drv, char *buf) { return snprintf(buf, PAGE_SIZE, "0x%04x\n", dbg_level); } static ssize_t tpacpi_driver_debug_store(struct device_driver *drv, const char *buf, size_t count) { unsigned long t; char *endp; t = simple_strtoul(buf, &endp, 0); while (*endp && isspace(*endp)) endp++; if (*endp) return -EINVAL; dbg_level = t; return count; } static DRIVER_ATTR(debug_level, S_IWUSR | S_IRUGO, tpacpi_driver_debug_show, tpacpi_driver_debug_store); /* version ------------------------------------------------------------- */ static ssize_t tpacpi_driver_version_show(struct device_driver *drv, char *buf) { return snprintf(buf, PAGE_SIZE, "%s v%s\n", IBM_DESC, IBM_VERSION); } static DRIVER_ATTR(version, S_IRUGO, tpacpi_driver_version_show, NULL); /* --------------------------------------------------------------------- */ static struct driver_attribute* tpacpi_driver_attributes[] = { &driver_attr_debug_level, &driver_attr_version, &driver_attr_interface_version, }; static int __init tpacpi_create_driver_attributes(struct device_driver *drv) { int i, res; i = 0; res = 0; while (!res && i < ARRAY_SIZE(tpacpi_driver_attributes)) { res = driver_create_file(drv, tpacpi_driver_attributes[i]); i++; } return res; } static void tpacpi_remove_driver_attributes(struct device_driver *drv) { int i; for(i = 0; i < ARRAY_SIZE(tpacpi_driver_attributes); i++) driver_remove_file(drv, tpacpi_driver_attributes[i]); } /**************************************************************************** **************************************************************************** * Loading Loading @@ -3268,6 +3350,13 @@ static int __init thinkpad_acpi_module_init(void) thinkpad_acpi_module_exit(); return ret; } ret = tpacpi_create_driver_attributes(&tpacpi_pdriver.driver); if (ret) { printk(IBM_ERR "unable to create sysfs driver attributes\n"); thinkpad_acpi_module_exit(); return ret; } /* Device initialization */ tpacpi_pdev = platform_device_register_simple(IBM_DRVR_NAME, -1, Loading Loading @@ -3318,6 +3407,7 @@ static void thinkpad_acpi_module_exit(void) if (tpacpi_pdev) platform_device_unregister(tpacpi_pdev); tpacpi_remove_driver_attributes(&tpacpi_pdriver.driver); platform_driver_unregister(&tpacpi_pdriver); if (proc_dir) Loading
drivers/misc/thinkpad_acpi.h +3 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ #include <linux/list.h> #include <linux/proc_fs.h> #include <linux/sysfs.h> #include <linux/backlight.h> #include <linux/fb.h> #include <linux/platform_device.h> Loading Loading @@ -137,6 +138,8 @@ static char *next_cmd(char **cmds); static struct platform_device *tpacpi_pdev; static struct class_device *tpacpi_hwmon; static struct platform_driver tpacpi_pdriver; static int tpacpi_create_driver_attributes(struct device_driver *drv); static void tpacpi_remove_driver_attributes(struct device_driver *drv); /* Module */ static int experimental; Loading