>Number: 166382
>Category: kern
>Synopsis: [patch] snd_hda(4) is in a bad state after suspend/resume cycle
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Sun Mar 25 02:30:10 UTC 2012
>Closed-Date:
>Last-Modified:
>Originator: Brandon Gooch
>Release: 10.0-CURRENT
>Organization:
>Environment:
FreeBSD m6500.local 10.0-CURRENT FreeBSD 10.0-CURRENT #0 r233252: Tue Mar 20
19:36:33 CDT 2012 [email protected]:/usr/obj/usr/src/sys/DELL_M6500 amd64
>Description:
After an ACPI suspend/resume cycle, the snd_hda(4) driver may or may not play
back sound. Adding a callout_stop(9) and callout_drain(9) for the poll callback
in the suspend path allows the driver to reinit properly on resume.
Also, the (headphone) jack polling callback doesn't fire. The patch
unconditionally calls callout_reset(9) for the jack poll callback, forcing the
driver to reinit properly.
I'll bet that mav@ will have a few thoughts about this "patch"...
>How-To-Repeat:
Load snd_hda(4), or compile support for the device into the kernel. ACPI
suspend, then resume the system. The driver will be in a bad state (fixable by
reboot or kldunload/kldload-ing the kernel module).
>Fix:
Index: hdac.c
===================================================================
--- hdac.c (revision 233252)
+++ hdac.c (working copy)
@@ -1558,9 +1558,11 @@
HDA_BOOTHVERBOSE(
device_printf(dev, "Reset controller...\n");
);
+ callout_stop(&sc->poll_callout);
hdac_reset(sc, 0);
hdac_unlock(sc);
taskqueue_drain(taskqueue_thread, &sc->unsolq_task);
+ callout_drain(&sc->poll_callout);
HDA_BOOTHVERBOSE(
device_printf(dev, "Suspend done\n");
);
Index: hdaa.c
===================================================================
--- hdaa.c (revision 233252)
+++ hdaa.c (working copy)
@@ -646,10 +646,8 @@
continue;
hdaa_eld_handler(w);
}
- if (poll) {
- callout_reset(&devinfo->poll_jack, 1,
- hdaa_jack_poll_callback, devinfo);
- }
+ callout_reset(&devinfo->poll_jack, 1,
+ hdaa_jack_poll_callback, devinfo);
}
static void
>Release-Note:
>Audit-Trail:
>Unformatted:
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "[email protected]"