Use the acpi_{Get,Set}Integer functions instead of rolling custom ones.

Clean up return path of each function to have a single exit point.  This
reduces diffs against the MPSAFE tree.
This commit is contained in:
Nate Lawson 2004-08-03 21:17:36 +00:00
parent 1b3f128d46
commit 8390cfe8a6
2 changed files with 64 additions and 156 deletions

View File

@ -320,18 +320,17 @@ acpi_asus_attach(device_t dev)
/* Attach LCD state, easy for most models... */
if (sc->model->lcd_get && strncmp(sc->model->name, "L3H", 3) != 0 &&
ACPI_SUCCESS(acpi_GetInteger(sc->handle, sc->model->lcd_get,
&sc->s_lcd)))
&sc->s_lcd))) {
SYSCTL_ADD_PROC(&sc->sysctl_ctx,
SYSCTL_CHILDREN(sc->sysctl_tree), OID_AUTO,
"lcd_backlight", CTLTYPE_INT | CTLFLAG_RW, sc, 0,
acpi_asus_sysctl_lcd, "I", "state of the lcd backlight");
/* ...a nightmare for the L3H */
else if (sc->model->lcd_get) {
} else if (sc->model->lcd_get) {
ACPI_BUFFER Buf;
ACPI_OBJECT Arg[2], Obj;
ACPI_OBJECT_LIST Args;
/* ...a nightmare for the L3H */
Arg[0].Type = ACPI_TYPE_INTEGER;
Arg[0].Integer.Value = 0x02;
Arg[1].Type = ACPI_TYPE_INTEGER;
@ -399,68 +398,40 @@ static void
acpi_asus_mled(device_t dev, int state)
{
struct acpi_asus_softc *sc;
ACPI_OBJECT Arg;
ACPI_OBJECT_LIST Args;
ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
/* Note that the MLED value is inverted. */
sc = device_get_softc(dev);
Arg.Type = ACPI_TYPE_INTEGER;
Arg.Integer.Value = !state; /* Inverted, yes! */
Args.Count = 1;
Args.Pointer = &Arg;
AcpiEvaluateObject(sc->handle, sc->model->mled_set, &Args, NULL);
acpi_SetInteger(sc->handle, sc->model->mled_set, !state);
}
static void
acpi_asus_tled(device_t dev, int state)
{
struct acpi_asus_softc *sc;
ACPI_OBJECT Arg;
ACPI_OBJECT_LIST Args;
ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
sc = device_get_softc(dev);
Arg.Type = ACPI_TYPE_INTEGER;
Arg.Integer.Value = state;
Args.Count = 1;
Args.Pointer = &Arg;
AcpiEvaluateObject(sc->handle, sc->model->tled_set, &Args, NULL);
acpi_SetInteger(sc->handle, sc->model->tled_set, state);
}
static void
acpi_asus_wled(device_t dev, int state)
{
struct acpi_asus_softc *sc;
ACPI_OBJECT Arg;
ACPI_OBJECT_LIST Args;
ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
sc = device_get_softc(dev);
Arg.Type = ACPI_TYPE_INTEGER;
Arg.Integer.Value = state;
Args.Count = 1;
Args.Pointer = &Arg;
AcpiEvaluateObject(sc->handle, sc->model->wled_set, &Args, NULL);
acpi_SetInteger(sc->handle, sc->model->wled_set, state);
}
static int
acpi_asus_sysctl_brn(SYSCTL_HANDLER_ARGS)
{
struct acpi_asus_softc *sc;
ACPI_OBJECT Arg;
ACPI_OBJECT_LIST Args;
int brn, err;
ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
@ -472,22 +443,18 @@ acpi_asus_sysctl_brn(SYSCTL_HANDLER_ARGS)
err = sysctl_handle_int(oidp, &brn, 0, req);
if (err != 0 || req->newptr == NULL)
return (err);
goto out;
if (brn < 0 || brn > 15)
return (EINVAL);
if (brn < 0 || brn > 15) {
err = EINVAL;
goto out;
}
/* Keep track and update */
sc->s_brn = brn;
Arg.Type = ACPI_TYPE_INTEGER;
Arg.Integer.Value = brn;
Args.Count = 1;
Args.Pointer = &Arg;
if (sc->model->brn_set)
AcpiEvaluateObject(sc->handle, sc->model->brn_set, &Args, NULL);
acpi_SetInteger(sc->handle, sc->model->brn_set, brn);
else {
brn -= sc->s_brn;
@ -495,12 +462,12 @@ acpi_asus_sysctl_brn(SYSCTL_HANDLER_ARGS)
AcpiEvaluateObject(sc->handle, (brn > 0) ?
sc->model->brn_up : sc->model->brn_dn,
NULL, NULL);
(brn > 0) ? brn-- : brn++;
}
}
return (0);
out:
return (err);
}
static int
@ -518,10 +485,12 @@ acpi_asus_sysctl_lcd(SYSCTL_HANDLER_ARGS)
err = sysctl_handle_int(oidp, &lcd, 0, req);
if (err != 0 || req->newptr == NULL)
return (err);
goto out;
if (lcd < 0 || lcd > 1)
return (EINVAL);
if (lcd < 0 || lcd > 1) {
err = EINVAL;
goto out;
}
/* Keep track and update */
sc->s_lcd = lcd;
@ -529,28 +498,17 @@ acpi_asus_sysctl_lcd(SYSCTL_HANDLER_ARGS)
/* Most models just need a lcd_set evaluated, the L3H is trickier */
if (strncmp(sc->model->name, "L3H", 3) != 0)
AcpiEvaluateObject(sc->handle, sc->model->lcd_set, NULL, NULL);
else {
ACPI_OBJECT Arg;
ACPI_OBJECT_LIST Args;
else
acpi_SetInteger(sc->handle, sc->model->lcd_set, 0x7);
Arg.Type = ACPI_TYPE_INTEGER;
Arg.Integer.Value = 0x07;
Args.Count = 1;
Args.Pointer = &Arg;
AcpiEvaluateObject(sc->handle, sc->model->lcd_set, &Args, NULL);
}
return (0);
out:
return (err);
}
static int
acpi_asus_sysctl_disp(SYSCTL_HANDLER_ARGS)
{
struct acpi_asus_softc *sc;
ACPI_OBJECT Arg;
ACPI_OBJECT_LIST Args;
int disp, err;
ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
@ -562,23 +520,19 @@ acpi_asus_sysctl_disp(SYSCTL_HANDLER_ARGS)
err = sysctl_handle_int(oidp, &disp, 0, req);
if (err != 0 || req->newptr == NULL)
return (err);
goto out;
if (disp < 0 || disp > 7)
return (EINVAL);
if (disp < 0 || disp > 7) {
err = EINVAL;
goto out;
}
/* Keep track and update */
sc->s_disp = disp;
acpi_SetInteger(sc->handle, sc->model->disp_set, disp);
Arg.Type = ACPI_TYPE_INTEGER;
Arg.Integer.Value = disp;
Args.Count = 1;
Args.Pointer = &Arg;
AcpiEvaluateObject(sc->handle, sc->model->disp_set, &Args, NULL);
return (0);
out:
return (err);
}
static void

View File

@ -320,18 +320,17 @@ acpi_asus_attach(device_t dev)
/* Attach LCD state, easy for most models... */
if (sc->model->lcd_get && strncmp(sc->model->name, "L3H", 3) != 0 &&
ACPI_SUCCESS(acpi_GetInteger(sc->handle, sc->model->lcd_get,
&sc->s_lcd)))
&sc->s_lcd))) {
SYSCTL_ADD_PROC(&sc->sysctl_ctx,
SYSCTL_CHILDREN(sc->sysctl_tree), OID_AUTO,
"lcd_backlight", CTLTYPE_INT | CTLFLAG_RW, sc, 0,
acpi_asus_sysctl_lcd, "I", "state of the lcd backlight");
/* ...a nightmare for the L3H */
else if (sc->model->lcd_get) {
} else if (sc->model->lcd_get) {
ACPI_BUFFER Buf;
ACPI_OBJECT Arg[2], Obj;
ACPI_OBJECT_LIST Args;
/* ...a nightmare for the L3H */
Arg[0].Type = ACPI_TYPE_INTEGER;
Arg[0].Integer.Value = 0x02;
Arg[1].Type = ACPI_TYPE_INTEGER;
@ -399,68 +398,40 @@ static void
acpi_asus_mled(device_t dev, int state)
{
struct acpi_asus_softc *sc;
ACPI_OBJECT Arg;
ACPI_OBJECT_LIST Args;
ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
/* Note that the MLED value is inverted. */
sc = device_get_softc(dev);
Arg.Type = ACPI_TYPE_INTEGER;
Arg.Integer.Value = !state; /* Inverted, yes! */
Args.Count = 1;
Args.Pointer = &Arg;
AcpiEvaluateObject(sc->handle, sc->model->mled_set, &Args, NULL);
acpi_SetInteger(sc->handle, sc->model->mled_set, !state);
}
static void
acpi_asus_tled(device_t dev, int state)
{
struct acpi_asus_softc *sc;
ACPI_OBJECT Arg;
ACPI_OBJECT_LIST Args;
ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
sc = device_get_softc(dev);
Arg.Type = ACPI_TYPE_INTEGER;
Arg.Integer.Value = state;
Args.Count = 1;
Args.Pointer = &Arg;
AcpiEvaluateObject(sc->handle, sc->model->tled_set, &Args, NULL);
acpi_SetInteger(sc->handle, sc->model->tled_set, state);
}
static void
acpi_asus_wled(device_t dev, int state)
{
struct acpi_asus_softc *sc;
ACPI_OBJECT Arg;
ACPI_OBJECT_LIST Args;
ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
sc = device_get_softc(dev);
Arg.Type = ACPI_TYPE_INTEGER;
Arg.Integer.Value = state;
Args.Count = 1;
Args.Pointer = &Arg;
AcpiEvaluateObject(sc->handle, sc->model->wled_set, &Args, NULL);
acpi_SetInteger(sc->handle, sc->model->wled_set, state);
}
static int
acpi_asus_sysctl_brn(SYSCTL_HANDLER_ARGS)
{
struct acpi_asus_softc *sc;
ACPI_OBJECT Arg;
ACPI_OBJECT_LIST Args;
int brn, err;
ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
@ -472,22 +443,18 @@ acpi_asus_sysctl_brn(SYSCTL_HANDLER_ARGS)
err = sysctl_handle_int(oidp, &brn, 0, req);
if (err != 0 || req->newptr == NULL)
return (err);
goto out;
if (brn < 0 || brn > 15)
return (EINVAL);
if (brn < 0 || brn > 15) {
err = EINVAL;
goto out;
}
/* Keep track and update */
sc->s_brn = brn;
Arg.Type = ACPI_TYPE_INTEGER;
Arg.Integer.Value = brn;
Args.Count = 1;
Args.Pointer = &Arg;
if (sc->model->brn_set)
AcpiEvaluateObject(sc->handle, sc->model->brn_set, &Args, NULL);
acpi_SetInteger(sc->handle, sc->model->brn_set, brn);
else {
brn -= sc->s_brn;
@ -495,12 +462,12 @@ acpi_asus_sysctl_brn(SYSCTL_HANDLER_ARGS)
AcpiEvaluateObject(sc->handle, (brn > 0) ?
sc->model->brn_up : sc->model->brn_dn,
NULL, NULL);
(brn > 0) ? brn-- : brn++;
}
}
return (0);
out:
return (err);
}
static int
@ -518,10 +485,12 @@ acpi_asus_sysctl_lcd(SYSCTL_HANDLER_ARGS)
err = sysctl_handle_int(oidp, &lcd, 0, req);
if (err != 0 || req->newptr == NULL)
return (err);
goto out;
if (lcd < 0 || lcd > 1)
return (EINVAL);
if (lcd < 0 || lcd > 1) {
err = EINVAL;
goto out;
}
/* Keep track and update */
sc->s_lcd = lcd;
@ -529,28 +498,17 @@ acpi_asus_sysctl_lcd(SYSCTL_HANDLER_ARGS)
/* Most models just need a lcd_set evaluated, the L3H is trickier */
if (strncmp(sc->model->name, "L3H", 3) != 0)
AcpiEvaluateObject(sc->handle, sc->model->lcd_set, NULL, NULL);
else {
ACPI_OBJECT Arg;
ACPI_OBJECT_LIST Args;
else
acpi_SetInteger(sc->handle, sc->model->lcd_set, 0x7);
Arg.Type = ACPI_TYPE_INTEGER;
Arg.Integer.Value = 0x07;
Args.Count = 1;
Args.Pointer = &Arg;
AcpiEvaluateObject(sc->handle, sc->model->lcd_set, &Args, NULL);
}
return (0);
out:
return (err);
}
static int
acpi_asus_sysctl_disp(SYSCTL_HANDLER_ARGS)
{
struct acpi_asus_softc *sc;
ACPI_OBJECT Arg;
ACPI_OBJECT_LIST Args;
int disp, err;
ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
@ -562,23 +520,19 @@ acpi_asus_sysctl_disp(SYSCTL_HANDLER_ARGS)
err = sysctl_handle_int(oidp, &disp, 0, req);
if (err != 0 || req->newptr == NULL)
return (err);
goto out;
if (disp < 0 || disp > 7)
return (EINVAL);
if (disp < 0 || disp > 7) {
err = EINVAL;
goto out;
}
/* Keep track and update */
sc->s_disp = disp;
acpi_SetInteger(sc->handle, sc->model->disp_set, disp);
Arg.Type = ACPI_TYPE_INTEGER;
Arg.Integer.Value = disp;
Args.Count = 1;
Args.Pointer = &Arg;
AcpiEvaluateObject(sc->handle, sc->model->disp_set, &Args, NULL);
return (0);
out:
return (err);
}
static void