aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorHenrique de Moraes Holschuh <hmh@hmh.eng.br>2007-04-24 10:48:13 -0400
committerLen Brown <len.brown@intel.com>2007-04-25 02:00:27 -0400
commit176750d68801bfa4a88d1cf54174aa0347d7e5d8 (patch)
treecb8cb70fcce9e6d7f2d9365635b2ec2856336ad2 /drivers
parent54ae15014c306b3d7ad32c996fea9a5ac8560b60 (diff)
ACPI: thinkpad-acpi: driver sysfs conversion
Add the sysfs attributes for the platform driver. Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/misc/thinkpad_acpi.c90
-rw-r--r--drivers/misc/thinkpad_acpi.h3
2 files changed, 93 insertions, 0 deletions
diff --git a/drivers/misc/thinkpad_acpi.c b/drivers/misc/thinkpad_acpi.c
index e47eaf72763d..a31d00d570cb 100644
--- a/drivers/misc/thinkpad_acpi.c
+++ b/drivers/misc/thinkpad_acpi.c
@@ -22,6 +22,7 @@
22 */ 22 */
23 23
24#define IBM_VERSION "0.14" 24#define IBM_VERSION "0.14"
25#define TPACPI_SYSFS_VERSION 0x000100
25 26
26/* 27/*
27 * Changelog: 28 * Changelog:
@@ -493,6 +494,87 @@ static struct platform_driver tpacpi_pdriver = {
493}; 494};
494 495
495 496
497/*************************************************************************
498 * thinkpad-acpi driver attributes
499 */
500
501/* interface_version --------------------------------------------------- */
502static ssize_t tpacpi_driver_interface_version_show(
503 struct device_driver *drv,
504 char *buf)
505{
506 return snprintf(buf, PAGE_SIZE, "0x%08x\n", TPACPI_SYSFS_VERSION);
507}
508
509static DRIVER_ATTR(interface_version, S_IRUGO,
510 tpacpi_driver_interface_version_show, NULL);
511
512/* debug_level --------------------------------------------------------- */
513static ssize_t tpacpi_driver_debug_show(struct device_driver *drv,
514 char *buf)
515{
516 return snprintf(buf, PAGE_SIZE, "0x%04x\n", dbg_level);
517}
518
519static ssize_t tpacpi_driver_debug_store(struct device_driver *drv,
520 const char *buf, size_t count)
521{
522 unsigned long t;
523 char *endp;
524
525 t = simple_strtoul(buf, &endp, 0);
526 while (*endp && isspace(*endp))
527 endp++;
528 if (*endp)
529 return -EINVAL;
530
531 dbg_level = t;
532
533 return count;
534}
535
536static DRIVER_ATTR(debug_level, S_IWUSR | S_IRUGO,
537 tpacpi_driver_debug_show, tpacpi_driver_debug_store);
538
539/* version ------------------------------------------------------------- */
540static ssize_t tpacpi_driver_version_show(struct device_driver *drv,
541 char *buf)
542{
543 return snprintf(buf, PAGE_SIZE, "%s v%s\n", IBM_DESC, IBM_VERSION);
544}
545
546static DRIVER_ATTR(version, S_IRUGO,
547 tpacpi_driver_version_show, NULL);
548
549/* --------------------------------------------------------------------- */
550
551static struct driver_attribute* tpacpi_driver_attributes[] = {
552 &driver_attr_debug_level, &driver_attr_version,
553 &driver_attr_interface_version,
554};
555
556static int __init tpacpi_create_driver_attributes(struct device_driver *drv)
557{
558 int i, res;
559
560 i = 0;
561 res = 0;
562 while (!res && i < ARRAY_SIZE(tpacpi_driver_attributes)) {
563 res = driver_create_file(drv, tpacpi_driver_attributes[i]);
564 i++;
565 }
566
567 return res;
568}
569
570static void tpacpi_remove_driver_attributes(struct device_driver *drv)
571{
572 int i;
573
574 for(i = 0; i < ARRAY_SIZE(tpacpi_driver_attributes); i++)
575 driver_remove_file(drv, tpacpi_driver_attributes[i]);
576}
577
496/**************************************************************************** 578/****************************************************************************
497 **************************************************************************** 579 ****************************************************************************
498 * 580 *
@@ -3268,6 +3350,13 @@ static int __init thinkpad_acpi_module_init(void)
3268 thinkpad_acpi_module_exit(); 3350 thinkpad_acpi_module_exit();
3269 return ret; 3351 return ret;
3270 } 3352 }
3353 ret = tpacpi_create_driver_attributes(&tpacpi_pdriver.driver);
3354 if (ret) {
3355 printk(IBM_ERR "unable to create sysfs driver attributes\n");
3356 thinkpad_acpi_module_exit();
3357 return ret;
3358 }
3359
3271 3360
3272 /* Device initialization */ 3361 /* Device initialization */
3273 tpacpi_pdev = platform_device_register_simple(IBM_DRVR_NAME, -1, 3362 tpacpi_pdev = platform_device_register_simple(IBM_DRVR_NAME, -1,
@@ -3318,6 +3407,7 @@ static void thinkpad_acpi_module_exit(void)
3318 if (tpacpi_pdev) 3407 if (tpacpi_pdev)
3319 platform_device_unregister(tpacpi_pdev); 3408 platform_device_unregister(tpacpi_pdev);
3320 3409
3410 tpacpi_remove_driver_attributes(&tpacpi_pdriver.driver);
3321 platform_driver_unregister(&tpacpi_pdriver); 3411 platform_driver_unregister(&tpacpi_pdriver);
3322 3412
3323 if (proc_dir) 3413 if (proc_dir)
diff --git a/drivers/misc/thinkpad_acpi.h b/drivers/misc/thinkpad_acpi.h
index fea580999e94..37860582956f 100644
--- a/drivers/misc/thinkpad_acpi.h
+++ b/drivers/misc/thinkpad_acpi.h
@@ -32,6 +32,7 @@
32#include <linux/list.h> 32#include <linux/list.h>
33 33
34#include <linux/proc_fs.h> 34#include <linux/proc_fs.h>
35#include <linux/sysfs.h>
35#include <linux/backlight.h> 36#include <linux/backlight.h>
36#include <linux/fb.h> 37#include <linux/fb.h>
37#include <linux/platform_device.h> 38#include <linux/platform_device.h>
@@ -137,6 +138,8 @@ static char *next_cmd(char **cmds);
137static struct platform_device *tpacpi_pdev; 138static struct platform_device *tpacpi_pdev;
138static struct class_device *tpacpi_hwmon; 139static struct class_device *tpacpi_hwmon;
139static struct platform_driver tpacpi_pdriver; 140static struct platform_driver tpacpi_pdriver;
141static int tpacpi_create_driver_attributes(struct device_driver *drv);
142static void tpacpi_remove_driver_attributes(struct device_driver *drv);
140 143
141/* Module */ 144/* Module */
142static int experimental; 145static int experimental;