aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCorentin Chary <corentincj@iksaif.net>2009-06-25 07:25:41 -0400
committerLen Brown <len.brown@intel.com>2009-06-26 00:23:41 -0400
commitdbfa3ba90dfe353a56e107cff5bce9fb7976f06f (patch)
tree224ffb0b8cf4507208e6f54953256c0c031bf06a
parentf36509e7248631671d02f48d1a88f56cdeb54ed8 (diff)
eeepc-laptop: get the right value for CMSG
CMSG is an ACPI method used to find features available on an Eee PC. But some features are never repported, even if present. If the getter of a feature is present, this patch will set the corresponding bit in cmsg. Signed-off-by: Corentin Chary <corentincj@iksaif.net> Signed-off-by: Len Brown <len.brown@intel.com>
-rw-r--r--drivers/platform/x86/eeepc-laptop.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/platform/x86/eeepc-laptop.c b/drivers/platform/x86/eeepc-laptop.c
index 19cc9ae7db5a..f5d8473ea66f 100644
--- a/drivers/platform/x86/eeepc-laptop.c
+++ b/drivers/platform/x86/eeepc-laptop.c
@@ -553,6 +553,28 @@ static int eeepc_setkeycode(struct input_dev *dev, int scancode, int keycode)
553 return -EINVAL; 553 return -EINVAL;
554} 554}
555 555
556static void cmsg_quirk(int cm, const char *name)
557{
558 int dummy;
559
560 /* Some BIOSes do not report cm although it is avaliable.
561 Check if cm_getv[cm] works and, if yes, assume cm should be set. */
562 if (!(ehotk->cm_supported & (1 << cm))
563 && !read_acpi_int(ehotk->handle, cm_getv[cm], &dummy)) {
564 pr_info("%s (%x) not reported by BIOS,"
565 " enabling anyway\n", name, 1 << cm);
566 ehotk->cm_supported |= 1 << cm;
567 }
568}
569
570static void cmsg_quirks(void)
571{
572 cmsg_quirk(CM_ASL_LID, "LID");
573 cmsg_quirk(CM_ASL_TYPE, "TYPE");
574 cmsg_quirk(CM_ASL_PANELPOWER, "PANELPOWER");
575 cmsg_quirk(CM_ASL_TPD, "TPD");
576}
577
556static int eeepc_hotk_check(void) 578static int eeepc_hotk_check(void)
557{ 579{
558 const struct key_entry *key; 580 const struct key_entry *key;
@@ -576,6 +598,7 @@ static int eeepc_hotk_check(void)
576 pr_err("Get control methods supported failed\n"); 598 pr_err("Get control methods supported failed\n");
577 return -ENODEV; 599 return -ENODEV;
578 } else { 600 } else {
601 cmsg_quirks();
579 pr_info("Get control methods supported: 0x%x\n", 602 pr_info("Get control methods supported: 0x%x\n",
580 ehotk->cm_supported); 603 ehotk->cm_supported);
581 } 604 }