Module Name:    src
Committed By:   riastradh
Date:           Sun Jul  6 15:35:42 UTC 2014

Modified Files:
        src/sys/dev/acpi: acpi_ec.c

Log Message:
Register a null power handler if acpiec fails to attach.

On one of my machines, there's no _GPE method, so
acpiec_parse_gpe_package fails, and the only function acpiec(4)
serves is to inhibit suspend/resume.

XXX We should really put the power handlers in the cfattach so that
it's not necessary to register a null power handler in every error
branch of every device's attach routine...


To generate a diff of this commit:
cvs rdiff -u -r1.72 -r1.73 src/sys/dev/acpi/acpi_ec.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/acpi/acpi_ec.c
diff -u src/sys/dev/acpi/acpi_ec.c:1.72 src/sys/dev/acpi/acpi_ec.c:1.73
--- src/sys/dev/acpi/acpi_ec.c:1.72	Wed Oct 16 17:31:01 2013
+++ src/sys/dev/acpi/acpi_ec.c	Sun Jul  6 15:35:42 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: acpi_ec.c,v 1.72 2013/10/16 17:31:01 christos Exp $	*/
+/*	$NetBSD: acpi_ec.c,v 1.73 2014/07/06 15:35:42 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2007 Joerg Sonnenberger <[email protected]>.
@@ -59,7 +59,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi_ec.c,v 1.72 2013/10/16 17:31:01 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi_ec.c,v 1.73 2014/07/06 15:35:42 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/callout.h>
@@ -265,38 +265,40 @@ acpiec_attach(device_t parent, device_t 
 	if (ec_singleton != NULL) {
 		aprint_naive(": using %s\n", device_xname(ec_singleton));
 		aprint_normal(": using %s\n", device_xname(ec_singleton));
-		if (!pmf_device_register(self, NULL, NULL))
-			aprint_error_dev(self, "couldn't establish power handler\n");
-		return;
+		goto fail0;
 	}
 
 	if (!acpiec_parse_gpe_package(self, aa->aa_node->ad_handle,
 				      &gpe_handle, &gpebit))
-		return;
+		goto fail0;
 
 	rv = acpi_resource_parse(self, aa->aa_node->ad_handle, "_CRS",
 	    &ec_res, &acpi_resource_parse_ops_default);
 	if (rv != AE_OK) {
 		aprint_error_dev(self, "resource parsing failed: %s\n",
 		    AcpiFormatException(rv));
-		return;
+		goto fail0;
 	}
 
 	if ((io0 = acpi_res_io(&ec_res, 0)) == NULL) {
 		aprint_error_dev(self, "no data register resource\n");
-		goto free_res;
+		goto fail1;
 	}
 	if ((io1 = acpi_res_io(&ec_res, 1)) == NULL) {
 		aprint_error_dev(self, "no CSR register resource\n");
-		goto free_res;
+		goto fail1;
 	}
 
 	acpiec_common_attach(parent, self, aa->aa_node->ad_handle,
 	    aa->aa_iot, io1->ar_base, aa->aa_iot, io0->ar_base,
 	    gpe_handle, gpebit);
 
-free_res:
 	acpi_resource_cleanup(&ec_res);
+	return;
+
+fail1:	acpi_resource_cleanup(&ec_res);
+fail0:	if (!pmf_device_register(self, NULL, NULL))
+		aprint_error_dev(self, "couldn't establish power handler\n");
 }
 
 static void
@@ -395,6 +397,8 @@ post_csr_map:
 	bus_space_unmap(sc->sc_csr_st, sc->sc_csr_sh, 1);
 post_data_map:
 	bus_space_unmap(sc->sc_data_st, sc->sc_data_sh, 1);
+	if (!pmf_device_register(self, NULL, NULL))
+		aprint_error_dev(self, "couldn't establish power handler\n");
 }
 
 static bool

Reply via email to