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...
This commit is contained in:
parent
8d909506c6
commit
12a0c4d516
|
@ -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 <joerg@NetBSD.org>.
|
||||
|
@ -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 self, void *aux)
|
|||
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
|
||||
|
|
Loading…
Reference in New Issue