diff options
Diffstat (limited to 'drivers/hwmon/hdaps.c')
-rw-r--r-- | drivers/hwmon/hdaps.c | 68 |
1 files changed, 29 insertions, 39 deletions
diff --git a/drivers/hwmon/hdaps.c b/drivers/hwmon/hdaps.c index e8ef62b83d6b..bf759ea545ac 100644 --- a/drivers/hwmon/hdaps.c +++ b/drivers/hwmon/hdaps.c | |||
@@ -478,74 +478,64 @@ static struct attribute_group hdaps_attribute_group = { | |||
478 | /* Module stuff */ | 478 | /* Module stuff */ |
479 | 479 | ||
480 | /* hdaps_dmi_match - found a match. return one, short-circuiting the hunt. */ | 480 | /* hdaps_dmi_match - found a match. return one, short-circuiting the hunt. */ |
481 | static int hdaps_dmi_match(struct dmi_system_id *id) | 481 | static int __init hdaps_dmi_match(struct dmi_system_id *id) |
482 | { | 482 | { |
483 | printk(KERN_INFO "hdaps: %s detected.\n", id->ident); | 483 | printk(KERN_INFO "hdaps: %s detected.\n", id->ident); |
484 | return 1; | 484 | return 1; |
485 | } | 485 | } |
486 | 486 | ||
487 | /* hdaps_dmi_match_invert - found an inverted match. */ | 487 | /* hdaps_dmi_match_invert - found an inverted match. */ |
488 | static int hdaps_dmi_match_invert(struct dmi_system_id *id) | 488 | static int __init hdaps_dmi_match_invert(struct dmi_system_id *id) |
489 | { | 489 | { |
490 | hdaps_invert = 1; | 490 | hdaps_invert = 1; |
491 | printk(KERN_INFO "hdaps: inverting axis readings.\n"); | 491 | printk(KERN_INFO "hdaps: inverting axis readings.\n"); |
492 | return hdaps_dmi_match(id); | 492 | return hdaps_dmi_match(id); |
493 | } | 493 | } |
494 | 494 | ||
495 | #define HDAPS_DMI_MATCH_NORMAL(model) { \ | 495 | #define HDAPS_DMI_MATCH_NORMAL(vendor, model) { \ |
496 | .ident = "IBM " model, \ | 496 | .ident = vendor " " model, \ |
497 | .callback = hdaps_dmi_match, \ | 497 | .callback = hdaps_dmi_match, \ |
498 | .matches = { \ | 498 | .matches = { \ |
499 | DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), \ | 499 | DMI_MATCH(DMI_BOARD_VENDOR, vendor), \ |
500 | DMI_MATCH(DMI_PRODUCT_VERSION, model) \ | 500 | DMI_MATCH(DMI_PRODUCT_VERSION, model) \ |
501 | } \ | 501 | } \ |
502 | } | 502 | } |
503 | 503 | ||
504 | #define HDAPS_DMI_MATCH_INVERT(model) { \ | 504 | #define HDAPS_DMI_MATCH_INVERT(vendor, model) { \ |
505 | .ident = "IBM " model, \ | 505 | .ident = vendor " " model, \ |
506 | .callback = hdaps_dmi_match_invert, \ | 506 | .callback = hdaps_dmi_match_invert, \ |
507 | .matches = { \ | 507 | .matches = { \ |
508 | DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), \ | 508 | DMI_MATCH(DMI_BOARD_VENDOR, vendor), \ |
509 | DMI_MATCH(DMI_PRODUCT_VERSION, model) \ | 509 | DMI_MATCH(DMI_PRODUCT_VERSION, model) \ |
510 | } \ | 510 | } \ |
511 | } | 511 | } |
512 | 512 | ||
513 | #define HDAPS_DMI_MATCH_LENOVO(model) { \ | 513 | /* Note that HDAPS_DMI_MATCH_NORMAL("ThinkPad T42") would match |
514 | .ident = "Lenovo " model, \ | 514 | "ThinkPad T42p", so the order of the entries matters. |
515 | .callback = hdaps_dmi_match_invert, \ | 515 | If your ThinkPad is not recognized, please update to latest |
516 | .matches = { \ | 516 | BIOS. This is especially the case for some R52 ThinkPads. */ |
517 | DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), \ | 517 | static struct dmi_system_id __initdata hdaps_whitelist[] = { |
518 | DMI_MATCH(DMI_PRODUCT_VERSION, model) \ | 518 | HDAPS_DMI_MATCH_INVERT("IBM", "ThinkPad R50p"), |
519 | } \ | 519 | HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad R50"), |
520 | } | 520 | HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad R51"), |
521 | HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad R52"), | ||
522 | HDAPS_DMI_MATCH_INVERT("IBM", "ThinkPad T41p"), | ||
523 | HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad T41"), | ||
524 | HDAPS_DMI_MATCH_INVERT("IBM", "ThinkPad T42p"), | ||
525 | HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad T42"), | ||
526 | HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad T43"), | ||
527 | HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad T60"), | ||
528 | HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad X40"), | ||
529 | HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad X41"), | ||
530 | HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad X60"), | ||
531 | HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad Z60m"), | ||
532 | { .ident = NULL } | ||
533 | }; | ||
521 | 534 | ||
522 | static int __init hdaps_init(void) | 535 | static int __init hdaps_init(void) |
523 | { | 536 | { |
524 | int ret; | 537 | int ret; |
525 | 538 | ||
526 | /* Note that HDAPS_DMI_MATCH_NORMAL("ThinkPad T42") would match | ||
527 | "ThinkPad T42p", so the order of the entries matters */ | ||
528 | struct dmi_system_id hdaps_whitelist[] = { | ||
529 | HDAPS_DMI_MATCH_NORMAL("ThinkPad H"), | ||
530 | HDAPS_DMI_MATCH_INVERT("ThinkPad R50p"), | ||
531 | HDAPS_DMI_MATCH_NORMAL("ThinkPad R50"), | ||
532 | HDAPS_DMI_MATCH_NORMAL("ThinkPad R51"), | ||
533 | HDAPS_DMI_MATCH_NORMAL("ThinkPad R52"), | ||
534 | HDAPS_DMI_MATCH_NORMAL("ThinkPad H"), /* R52 (1846AQG) */ | ||
535 | HDAPS_DMI_MATCH_INVERT("ThinkPad T41p"), | ||
536 | HDAPS_DMI_MATCH_NORMAL("ThinkPad T41"), | ||
537 | HDAPS_DMI_MATCH_INVERT("ThinkPad T42p"), | ||
538 | HDAPS_DMI_MATCH_NORMAL("ThinkPad T42"), | ||
539 | HDAPS_DMI_MATCH_NORMAL("ThinkPad T43"), | ||
540 | HDAPS_DMI_MATCH_LENOVO("ThinkPad T60p"), | ||
541 | HDAPS_DMI_MATCH_LENOVO("ThinkPad T60"), | ||
542 | HDAPS_DMI_MATCH_NORMAL("ThinkPad X40"), | ||
543 | HDAPS_DMI_MATCH_NORMAL("ThinkPad X41"), | ||
544 | HDAPS_DMI_MATCH_LENOVO("ThinkPad X60"), | ||
545 | HDAPS_DMI_MATCH_NORMAL("ThinkPad Z60m"), | ||
546 | { .ident = NULL } | ||
547 | }; | ||
548 | |||
549 | if (!dmi_check_system(hdaps_whitelist)) { | 539 | if (!dmi_check_system(hdaps_whitelist)) { |
550 | printk(KERN_WARNING "hdaps: supported laptop not found!\n"); | 540 | printk(KERN_WARNING "hdaps: supported laptop not found!\n"); |
551 | ret = -ENODEV; | 541 | ret = -ENODEV; |