diff options
-rw-r--r-- | drivers/hwmon/Kconfig | 9 | ||||
-rw-r--r-- | drivers/hwmon/hdaps.c | 21 |
2 files changed, 13 insertions, 17 deletions
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig index 7e72e922b41c..db358cfa7cbf 100644 --- a/drivers/hwmon/Kconfig +++ b/drivers/hwmon/Kconfig | |||
@@ -418,12 +418,11 @@ config SENSORS_HDAPS | |||
418 | help | 418 | help |
419 | This driver provides support for the IBM Hard Drive Active Protection | 419 | This driver provides support for the IBM Hard Drive Active Protection |
420 | System (hdaps), which provides an accelerometer and other misc. data. | 420 | System (hdaps), which provides an accelerometer and other misc. data. |
421 | Supported laptops include the IBM ThinkPad T41, T42, T43, and R51. | 421 | ThinkPads starting with the R50, T41, and X40 are supported. The |
422 | The accelerometer data is readable via sysfs. | 422 | accelerometer data is readable via sysfs. |
423 | 423 | ||
424 | This driver also provides an input class device, allowing the | 424 | This driver also provides an absolute input class device, allowing |
425 | laptop to act as a pinball machine-esque mouse. This is off by | 425 | the laptop to act as a pinball machine-esque joystick. |
426 | default but enabled via sysfs or the module parameter "mousedev". | ||
427 | 426 | ||
428 | Say Y here if you have an applicable laptop and want to experience | 427 | Say Y here if you have an applicable laptop and want to experience |
429 | the awesome power of hdaps. | 428 | the awesome power of hdaps. |
diff --git a/drivers/hwmon/hdaps.c b/drivers/hwmon/hdaps.c index 4c56411f3993..7f0107613827 100644 --- a/drivers/hwmon/hdaps.c +++ b/drivers/hwmon/hdaps.c | |||
@@ -4,9 +4,9 @@ | |||
4 | * Copyright (C) 2005 Robert Love <rml@novell.com> | 4 | * Copyright (C) 2005 Robert Love <rml@novell.com> |
5 | * Copyright (C) 2005 Jesper Juhl <jesper.juhl@gmail.com> | 5 | * Copyright (C) 2005 Jesper Juhl <jesper.juhl@gmail.com> |
6 | * | 6 | * |
7 | * The HardDisk Active Protection System (hdaps) is present in the IBM ThinkPad | 7 | * The HardDisk Active Protection System (hdaps) is present in IBM ThinkPads |
8 | * T41, T42, T43, R50, R50p, R51, and X40, at least. It provides a basic | 8 | * starting with the R40, T41, and X40. It provides a basic two-axis |
9 | * two-axis accelerometer and other data, such as the device's temperature. | 9 | * accelerometer and other data, such as the device's temperature. |
10 | * | 10 | * |
11 | * This driver is based on the document by Mark A. Smith available at | 11 | * This driver is based on the document by Mark A. Smith available at |
12 | * http://www.almaden.ibm.com/cs/people/marksmith/tpaps.html and a lot of trial | 12 | * http://www.almaden.ibm.com/cs/people/marksmith/tpaps.html and a lot of trial |
@@ -487,24 +487,19 @@ static struct attribute_group hdaps_attribute_group = { | |||
487 | 487 | ||
488 | /* Module stuff */ | 488 | /* Module stuff */ |
489 | 489 | ||
490 | /* | 490 | /* hdaps_dmi_match - found a match. return one, short-circuiting the hunt. */ |
491 | * XXX: We should be able to return nonzero and halt the detection process. | ||
492 | * But there is a bug in dmi_check_system() where a nonzero return from the | ||
493 | * first match will result in a return of failure from dmi_check_system(). | ||
494 | * I fixed this; the patch is 2.6-git. Once in a released tree, we can make | ||
495 | * hdaps_dmi_match_invert() return hdaps_dmi_match(), which in turn returns 1. | ||
496 | */ | ||
497 | static int hdaps_dmi_match(struct dmi_system_id *id) | 491 | static int hdaps_dmi_match(struct dmi_system_id *id) |
498 | { | 492 | { |
499 | printk(KERN_INFO "hdaps: %s detected.\n", id->ident); | 493 | printk(KERN_INFO "hdaps: %s detected.\n", id->ident); |
500 | return 0; | 494 | return 1; |
501 | } | 495 | } |
502 | 496 | ||
497 | /* hdaps_dmi_match_invert - found an inverted match. */ | ||
503 | static int hdaps_dmi_match_invert(struct dmi_system_id *id) | 498 | static int hdaps_dmi_match_invert(struct dmi_system_id *id) |
504 | { | 499 | { |
505 | hdaps_invert = 1; | 500 | hdaps_invert = 1; |
506 | printk(KERN_INFO "hdaps: inverting axis readings.\n"); | 501 | printk(KERN_INFO "hdaps: inverting axis readings.\n"); |
507 | return 0; | 502 | return hdaps_dmi_match(id); |
508 | } | 503 | } |
509 | 504 | ||
510 | #define HDAPS_DMI_MATCH_NORMAL(model) { \ | 505 | #define HDAPS_DMI_MATCH_NORMAL(model) { \ |
@@ -534,6 +529,7 @@ static int __init hdaps_init(void) | |||
534 | HDAPS_DMI_MATCH_INVERT("ThinkPad R50p"), | 529 | HDAPS_DMI_MATCH_INVERT("ThinkPad R50p"), |
535 | HDAPS_DMI_MATCH_NORMAL("ThinkPad R50"), | 530 | HDAPS_DMI_MATCH_NORMAL("ThinkPad R50"), |
536 | HDAPS_DMI_MATCH_NORMAL("ThinkPad R51"), | 531 | HDAPS_DMI_MATCH_NORMAL("ThinkPad R51"), |
532 | HDAPS_DMI_MATCH_NORMAL("ThinkPad R52"), | ||
537 | HDAPS_DMI_MATCH_INVERT("ThinkPad T41p"), | 533 | HDAPS_DMI_MATCH_INVERT("ThinkPad T41p"), |
538 | HDAPS_DMI_MATCH_NORMAL("ThinkPad T41"), | 534 | HDAPS_DMI_MATCH_NORMAL("ThinkPad T41"), |
539 | HDAPS_DMI_MATCH_INVERT("ThinkPad T42p"), | 535 | HDAPS_DMI_MATCH_INVERT("ThinkPad T42p"), |
@@ -541,6 +537,7 @@ static int __init hdaps_init(void) | |||
541 | HDAPS_DMI_MATCH_NORMAL("ThinkPad T43"), | 537 | HDAPS_DMI_MATCH_NORMAL("ThinkPad T43"), |
542 | HDAPS_DMI_MATCH_NORMAL("ThinkPad X40"), | 538 | HDAPS_DMI_MATCH_NORMAL("ThinkPad X40"), |
543 | HDAPS_DMI_MATCH_NORMAL("ThinkPad X41 Tablet"), | 539 | HDAPS_DMI_MATCH_NORMAL("ThinkPad X41 Tablet"), |
540 | HDAPS_DMI_MATCH_NORMAL("ThinkPad X41"), | ||
544 | { .ident = NULL } | 541 | { .ident = NULL } |
545 | }; | 542 | }; |
546 | 543 | ||