Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dbfa3ba9 authored by Corentin Chary's avatar Corentin Chary Committed by Len Brown
Browse files

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: default avatarCorentin Chary <corentincj@iksaif.net>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent f36509e7
Loading
Loading
Loading
Loading
+23 −0
Original line number Original line Diff line number Diff line
@@ -553,6 +553,28 @@ static int eeepc_setkeycode(struct input_dev *dev, int scancode, int keycode)
	return -EINVAL;
	return -EINVAL;
}
}


static void cmsg_quirk(int cm, const char *name)
{
	int dummy;

	/* Some BIOSes do not report cm although it is avaliable.
	   Check if cm_getv[cm] works and, if yes, assume cm should be set. */
	if (!(ehotk->cm_supported & (1 << cm))
	    && !read_acpi_int(ehotk->handle, cm_getv[cm], &dummy)) {
		pr_info("%s (%x) not reported by BIOS,"
			" enabling anyway\n", name, 1 << cm);
		ehotk->cm_supported |= 1 << cm;
	}
}

static void cmsg_quirks(void)
{
	cmsg_quirk(CM_ASL_LID, "LID");
	cmsg_quirk(CM_ASL_TYPE, "TYPE");
	cmsg_quirk(CM_ASL_PANELPOWER, "PANELPOWER");
	cmsg_quirk(CM_ASL_TPD, "TPD");
}

static int eeepc_hotk_check(void)
static int eeepc_hotk_check(void)
{
{
	const struct key_entry *key;
	const struct key_entry *key;
@@ -576,6 +598,7 @@ static int eeepc_hotk_check(void)
			pr_err("Get control methods supported failed\n");
			pr_err("Get control methods supported failed\n");
			return -ENODEV;
			return -ENODEV;
		} else {
		} else {
			cmsg_quirks();
			pr_info("Get control methods supported: 0x%x\n",
			pr_info("Get control methods supported: 0x%x\n",
				ehotk->cm_supported);
				ehotk->cm_supported);
		}
		}