Module Name: src Committed By: khorben Date: Tue Jan 31 00:58:15 UTC 2017
Modified Files: src/sys/dev/pci: hdaudio_pci.c Log Message: Always allow hdaudio(4) to suspend Sometimes hdaudio(4) can fail to attach, but the device remains in the tree. Even though the PMF registration is performed, it is explicitly de-registered in the code path for errors - therefore preventing suspending later. This patch makes sure PMF registration is performed accordingly upon errors as well. No objection on tech-kern@. Tested on a Lenovo ThinkPad T440s (amd64). XXX pull-up to netbsd-7 To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/dev/pci/hdaudio_pci.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/pci/hdaudio_pci.c diff -u src/sys/dev/pci/hdaudio_pci.c:1.5 src/sys/dev/pci/hdaudio_pci.c:1.6 --- src/sys/dev/pci/hdaudio_pci.c:1.5 Fri Dec 16 11:34:52 2016 +++ src/sys/dev/pci/hdaudio_pci.c Tue Jan 31 00:58:15 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: hdaudio_pci.c,v 1.5 2016/12/16 11:34:52 nonaka Exp $ */ +/* $NetBSD: hdaudio_pci.c,v 1.6 2017/01/31 00:58:15 khorben Exp $ */ /* * Copyright (c) 2009 Precedence Technologies Ltd <supp...@precedence.co.uk> @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: hdaudio_pci.c,v 1.5 2016/12/16 11:34:52 nonaka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: hdaudio_pci.c,v 1.6 2017/01/31 00:58:15 khorben Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -157,9 +157,6 @@ hdaudio_pci_attach(device_t parent, devi } aprint_normal_dev(self, "interrupting at %s\n", intrstr); - if (!pmf_device_register(self, NULL, hdaudio_pci_resume)) - aprint_error_dev(self, "couldn't establish power handler\n"); - hdaudio_pci_reinit(sc); /* Attach bus-independent HD audio layer */ @@ -176,8 +173,12 @@ hdaudio_pci_attach(device_t parent, devi csr &= ~(PCI_COMMAND_MASTER_ENABLE | PCI_COMMAND_BACKTOBACK_ENABLE); pci_conf_write(sc->sc_pc, sc->sc_tag, PCI_COMMAND_STATUS_REG, csr); - pmf_device_deregister(self); + + if (!pmf_device_register(self, NULL, NULL)) + aprint_error_dev(self, "couldn't establish power handler\n"); } + else if (!pmf_device_register(self, NULL, hdaudio_pci_resume)) + aprint_error_dev(self, "couldn't establish power handler\n"); } static int