# HG changeset patch
# User cegger@powermacg5.local
# Date 1259435372 -3600
common acpi utility routines
Add acpi_eval_set_integer().

diff -r 52e37440596e -r 714ff46748cf sys/dev/acpi/acpi.c
--- a/sys/dev/acpi/acpi.c
+++ b/sys/dev/acpi/acpi.c
@@ -1171,6 +1171,24 @@ acpi_eval_integer(ACPI_HANDLE handle, co
 	return rv;
 }
 
+ACPI_STATUS
+acpi_eval_set_integer(ACPI_HANDLE handle, const char *path, ACPI_INTEGER arg)
+{
+	ACPI_OBJECT param_arg;
+	ACPI_OBJECT_LIST param_args;
+
+	if (handle == NULL)
+		handle = ACPI_ROOT_OBJECT;
+
+	param_arg.Type = ACPI_TYPE_INTEGER;
+	param_arg.Integer.Value = arg;
+
+	param_args.Count = 1;
+	param_args.Pointer = &param_arg;
+
+	return AcpiEvaluateObject(handle, path, &param_args, NULL);
+}
+
 /*
  * acpi_eval_string:
  *
diff -r 52e37440596e -r 714ff46748cf sys/dev/acpi/acpi_lid.c
--- a/sys/dev/acpi/acpi_lid.c
+++ b/sys/dev/acpi/acpi_lid.c
@@ -155,17 +155,9 @@ acpilid_wake_event(device_t dv, bool ena
 	struct acpilid_softc *sc = device_private(dv);
 
 	ACPI_STATUS rv;
-        ACPI_OBJECT_LIST ArgList;
-        ACPI_OBJECT Arg;
 
-        ArgList.Count = 1;
-	ArgList.Pointer = &Arg;
-
-	Arg.Type = ACPI_TYPE_INTEGER;
-	Arg.Integer.Value = enable ? 1 : 0;
-
-	rv = AcpiEvaluateObject(sc->sc_node->ad_handle, "_PSW",
-	    &ArgList, NULL);
+	rv = acpi_eval_set_integer(sc->sc_node->ad_handle, "_PSW",
+	    enable ? 1 : 0);
 	if (ACPI_FAILURE(rv) && rv != AE_NOT_FOUND)
 		aprint_error_dev(dv,
 		    "unable to evaluate _PSW handler: %s\n",
diff -r 52e37440596e -r 714ff46748cf sys/dev/acpi/acpivar.h
--- a/sys/dev/acpi/acpivar.h
+++ b/sys/dev/acpi/acpivar.h
@@ -267,6 +267,8 @@ void		acpi_set_wake_gpe(ACPI_HANDLE);
 void		acpi_clear_wake_gpe(ACPI_HANDLE);
 
 ACPI_STATUS	acpi_eval_integer(ACPI_HANDLE, const char *, ACPI_INTEGER *);
+ACPI_STATUS	acpi_eval_set_integer(ACPI_HANDLE handle, const char *path,
+		    ACPI_INTEGER arg);
 ACPI_STATUS	acpi_eval_string(ACPI_HANDLE, const char *, char **);
 ACPI_STATUS	acpi_eval_struct(ACPI_HANDLE, const char *, ACPI_BUFFER *);
 
diff -r 52e37440596e -r 714ff46748cf sys/dev/acpi/thinkpad_acpi.c
--- a/sys/dev/acpi/thinkpad_acpi.c
+++ b/sys/dev/acpi/thinkpad_acpi.c
@@ -419,9 +419,7 @@ thinkpad_mask_init(thinkpad_softc_t *sc,
 	}
 
 	/* Enable hotkey events */
-	params.Count = 1;
-	param[0].Integer.Value = 1;
-	rv = AcpiEvaluateObject(sc->sc_node->ad_handle, "MHKC", &params, NULL);
+	rv = acpi_eval_set_integer(sc->sc_node->ad_handle, "MHKC", 1);
 	if (ACPI_FAILURE(rv)) {
 		aprint_error_dev(sc->sc_dev, "couldn't enable hotkeys: %s\n",
 		    AcpiFormatException(rv));
@@ -429,8 +427,7 @@ thinkpad_mask_init(thinkpad_softc_t *sc,
 	}
 
 	/* Claim ownership of brightness control */
-	param[0].Integer.Value = 0;
-	(void)AcpiEvaluateObject(sc->sc_node->ad_handle, "PWMS", &params, NULL);
+	(void)acpi_eval_set_integer(sc->sc_node->ad_handle, "PWMS", 0);
 
 	return AE_OK;
 }
@@ -601,18 +598,12 @@ thinkpad_brightness_down(device_t self)
 static void
 thinkpad_cmos(thinkpad_softc_t *sc, uint8_t cmd)
 {
-	ACPI_OBJECT param;
-	ACPI_OBJECT_LIST params;
 	ACPI_STATUS rv;
 
 	if (sc->sc_cmoshdl_valid == false)
 		return;
 	
-	params.Count = 1;
-	params.Pointer = &param;
-	param.Type = ACPI_TYPE_INTEGER;
-	param.Integer.Value = cmd;
-	rv = AcpiEvaluateObject(sc->sc_cmoshdl, NULL, &params, NULL);
+	rv = acpi_eval_set_integer(sc->sc_cmoshdl, NULL, cmd);
 	if (ACPI_FAILURE(rv))
 		aprint_error_dev(sc->sc_dev, "couldn't evalute CMOS: %s\n",
 		    AcpiFormatException(rv));
diff -r 52e37440596e -r 714ff46748cf sys/dev/acpi/wmi_acpi.c
--- a/sys/dev/acpi/wmi_acpi.c
+++ b/sys/dev/acpi/wmi_acpi.c
@@ -541,8 +541,6 @@ static ACPI_STATUS
 acpi_wmi_enable(const ACPI_HANDLE hdl, const char * const oid,
     const bool data, const bool flag)
 {
-	ACPI_OBJECT_LIST arg;
-	ACPI_OBJECT obj;
 	char path[5];
 	const char *str;
 
@@ -551,13 +549,7 @@ acpi_wmi_enable(const ACPI_HANDLE hdl, c
 	(void)strlcpy(path, str, sizeof(path));
 	(void)strlcat(path, oid, sizeof(path));
 
-	obj.Type = ACPI_TYPE_INTEGER;
-	obj.Integer.Value = (flag != false) ? 0x01 : 0x00;
-
-	arg.Count = 0x01;
-	arg.Pointer = &obj;
-
-	return AcpiEvaluateObject(hdl, path, &arg, NULL);
+	return acpi_eval_set_integer(hdl, path, (flag != false) ? 0x01 : 0x00);
 }
 /*
  * Makes a WMI data block query (WQxx). The corresponding control