Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/acpi Cleanup:
details: https://anonhg.NetBSD.org/src/rev/00e6bd95c5a5
branches: trunk
changeset: 752503:00e6bd95c5a5
user: jruoho <jruoho%NetBSD.org@localhost>
date: Sun Feb 28 09:23:30 2010 +0000
description:
Cleanup:
* Semantics.
* Remove ACPI_LID_DEBUG.
* Reduce the amount of error reporting.
* As the status of the lid (open/closed) is known upon suspend, move the
state variable to the softc, and avoid one object evaluation this way.
diffstat:
sys/dev/acpi/acpi_lid.c | 83 +++++++++++++++++-------------------------------
1 files changed, 29 insertions(+), 54 deletions(-)
diffs (171 lines):
diff -r cc224742509c -r 00e6bd95c5a5 sys/dev/acpi/acpi_lid.c
--- a/sys/dev/acpi/acpi_lid.c Sun Feb 28 07:10:40 2010 +0000
+++ b/sys/dev/acpi/acpi_lid.c Sun Feb 28 09:23:30 2010 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi_lid.c,v 1.33 2010/02/24 22:37:56 dyoung Exp $ */
+/* $NetBSD: acpi_lid.c,v 1.34 2010/02/28 09:23:30 jruoho Exp $ */
/*
* Copyright 2001, 2003 Wasabi Systems, Inc.
@@ -40,7 +40,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi_lid.c,v 1.33 2010/02/24 22:37:56 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi_lid.c,v 1.34 2010/02/28 09:23:30 jruoho Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -52,12 +52,13 @@
#include <dev/sysmon/sysmonvar.h>
-#define _COMPONENT ACPI_LID_COMPONENT
-ACPI_MODULE_NAME ("acpi_lid")
+#define _COMPONENT ACPI_LID_COMPONENT
+ACPI_MODULE_NAME ("acpi_lid")
struct acpilid_softc {
- struct acpi_devnode *sc_node; /* our ACPI devnode */
- struct sysmon_pswitch sc_smpsw; /* our sysmon glue */
+ struct acpi_devnode *sc_node;
+ struct sysmon_pswitch sc_smpsw;
+ uint64_t sc_status;
};
static const char * const lid_hid[] = {
@@ -68,16 +69,14 @@
static int acpilid_match(device_t, cfdata_t, void *);
static void acpilid_attach(device_t, device_t, void *);
static int acpilid_detach(device_t, int);
+static void acpilid_status_changed(void *);
+static void acpilid_notify_handler(ACPI_HANDLE, UINT32, void *);
+static void acpilid_wake_event(device_t, bool);
+static bool acpilid_suspend(device_t, const pmf_qual_t *);
CFATTACH_DECL_NEW(acpilid, sizeof(struct acpilid_softc),
acpilid_match, acpilid_attach, acpilid_detach, NULL);
-static void acpilid_status_changed(void *);
-static void acpilid_notify_handler(ACPI_HANDLE, UINT32, void *);
-
-static void acpilid_wake_event(device_t, bool);
-static bool acpilid_suspend(device_t, const pmf_qual_t *);
-
/*
* acpilid_match:
*
@@ -113,22 +112,15 @@
sc->sc_smpsw.smpsw_name = device_xname(self);
sc->sc_smpsw.smpsw_type = PSWITCH_TYPE_LID;
- if (sysmon_pswitch_register(&sc->sc_smpsw) != 0) {
- aprint_error_dev(self, "unable to register with sysmon\n");
- return;
- }
+
+ (void)sysmon_pswitch_register(&sc->sc_smpsw);
+ (void)pmf_device_register(self, acpilid_suspend, NULL);
rv = AcpiInstallNotifyHandler(sc->sc_node->ad_handle,
ACPI_DEVICE_NOTIFY, acpilid_notify_handler, self);
- if (ACPI_FAILURE(rv)) {
- aprint_error_dev(self,
- "unable to register DEVICE NOTIFY handler: %s\n",
- AcpiFormatException(rv));
- return;
- }
- if (!pmf_device_register(self, acpilid_suspend, NULL))
- aprint_error_dev(self, "couldn't establish power handler\n");
+ if (ACPI_FAILURE(rv))
+ aprint_error_dev(self, "failed to register notify handler\n");
}
static int
@@ -139,12 +131,9 @@
rv = AcpiRemoveNotifyHandler(sc->sc_node->ad_handle,
ACPI_DEVICE_NOTIFY, acpilid_notify_handler);
- if (ACPI_FAILURE(rv)) {
- aprint_error_dev(self,
- "unable to deregister DEVICE NOTIFY handler: %s\n",
- AcpiFormatException(rv));
+
+ if (ACPI_FAILURE(rv))
return EBUSY;
- }
pmf_device_deregister(self);
sysmon_pswitch_unregister(&sc->sc_smpsw);
@@ -201,15 +190,16 @@
static void
acpilid_status_changed(void *arg)
{
- struct acpilid_softc *sc = arg;
- ACPI_INTEGER status;
+ device_t dv = arg;
+ struct acpilid_softc *sc = device_private(dv);
ACPI_STATUS rv;
- rv = acpi_eval_integer(sc->sc_node->ad_handle, "_LID", &status);
+ rv = acpi_eval_integer(sc->sc_node->ad_handle, "_LID", &sc->sc_status);
+
if (ACPI_FAILURE(rv))
return;
- sysmon_pswitch_event(&sc->sc_smpsw, status == 0 ?
+ sysmon_pswitch_event(&sc->sc_smpsw, (sc->sc_status == 0) ?
PSWITCH_EVENT_PRESSED : PSWITCH_EVENT_RELEASED);
}
@@ -219,29 +209,19 @@
* Callback from ACPI interrupt handler to notify us of an event.
*/
static void
-acpilid_notify_handler(ACPI_HANDLE handle, UINT32 notify, void *context)
+acpilid_notify_handler(ACPI_HANDLE handle, uint32_t notify, void *context)
{
+ static const int handler = OSL_NOTIFY_HANDLER;
device_t dv = context;
- struct acpilid_softc *sc = device_private(dv);
- ACPI_STATUS rv;
switch (notify) {
+
case ACPI_NOTIFY_LidStatusChanged:
-#ifdef ACPI_LID_DEBUG
- printf("%s: received LidStatusChanged message\n",
- device_xname(dv));
-#endif
- rv = AcpiOsExecute(OSL_NOTIFY_HANDLER,
- acpilid_status_changed, sc);
- if (ACPI_FAILURE(rv))
- aprint_error_dev(dv,
- "WARNING: unable to queue lid change "
- "callback: %s\n", AcpiFormatException(rv));
+ (void)AcpiOsExecute(handler, acpilid_status_changed, dv);
break;
default:
- aprint_debug_dev(dv,
- "received unknown notify message: 0x%x\n", notify);
+ aprint_error_dev(dv, "unknown notify 0x%02X\n", notify);
}
}
@@ -249,13 +229,8 @@
acpilid_suspend(device_t dv, const pmf_qual_t *qual)
{
struct acpilid_softc *sc = device_private(dv);
- ACPI_INTEGER status;
- ACPI_STATUS rv;
- rv = acpi_eval_integer(sc->sc_node->ad_handle, "_LID", &status);
- if (ACPI_FAILURE(rv))
- return true;
+ acpilid_wake_event(dv, sc->sc_status == 0);
- acpilid_wake_event(dv, status == 0);
return true;
}
Home |
Main Index |
Thread Index |
Old Index